Skip to content

Commit

Permalink
Create Java Merge example (#38)
Browse files Browse the repository at this point in the history
* Add Java Merge Sample

* update

* Update

* Update
  • Loading branch information
rswoffor authored and GitHub Enterprise committed Aug 16, 2019
1 parent 0692a78 commit 04e7625
Show file tree
Hide file tree
Showing 10 changed files with 204 additions and 1 deletion.
1 change: 1 addition & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
*.gmli zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
*.menu zos-working-tree-encoding=ibm-1047 wgit-encoding=utf-8
*.py zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
*.java zos-working-tree-encoding=ibm-1047 git-encoding=utf-8

# binary files
*.png binary
Expand Down
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
Build/.classpath
Build/.project
Build/.settings/**

**/bin/
7 changes: 7 additions & 0 deletions Automation/Merge/JavaMerge/.classpath
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
<classpathentry kind="src" path="src"/>
<classpathentry kind="src" path="/com.ibm.zoautil"/>
<classpathentry kind="output" path="bin"/>
</classpath>
17 changes: 17 additions & 0 deletions Automation/Merge/JavaMerge/.project
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>JavaMerge</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>
11 changes: 11 additions & 0 deletions Automation/Merge/JavaMerge/.settings/org.eclipse.jdt.core.prefs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=1.8
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.source=1.8
10 changes: 10 additions & 0 deletions Automation/Merge/JavaMerge/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
## Java/Groovy Merge Sample

This is a sample to demonstrate how to use the Z Open Automation Utilities Java API to merge two datasets.

The sample creates two datasets to merge, a command dataset, and a merge dataset that contains the output from the sort command.
MVSCmd is then used to call the sort command to sort and merge the two datasets together.

One must modify the setenv.sh file with the appropriate values for your installation of Java and your installation of Z Open Automation Utilities before running this sample.

Run `merge.sh -h` for information about program parameters.
27 changes: 27 additions & 0 deletions Automation/Merge/JavaMerge/merge.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
#!/bin/sh
#*******************************************************************************
# Licensed Materials - Property of IBM
# (c) Copyright IBM Corporation 2019. All Rights Reserved.
#
# Note to U.S. Government Users Restricted Rights:
# Use, duplication or disclosure restricted by GSA ADP Schedule
# Contract with IBM Corp.
#*******************************************************************************

scriptDir=$(dirname $0)
. ${scriptDir}/setenv.sh

cd ${scriptDir}/src

# Compile the sample
${JAVA_HOME}/bin/javac com/ibm/merge/Merge.java
rc=$?
if [ rc -gt 0 ]; then
echo "Compile failed for Merge.java, rc=$rc"
echo "Check environment settings in setenv.sh"
exit $rc
fi

# Run the sample
CMD="${JAVA_HOME}/bin/java com.ibm.merge.Merge $@"
$CMD
18 changes: 18 additions & 0 deletions Automation/Merge/JavaMerge/setenv.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#!/bin/sh
#*******************************************************************************
# Licensed Materials - Property of IBM
# (c) Copyright IBM Corporation 2019. All Rights Reserved.
#
# Note to U.S. Government Users Restricted Rights:
# Use, duplication or disclosure restricted by GSA ADP Schedule
# Contract with IBM Corp.
#*******************************************************************************
#
# Set up the environment
# NOTE: Before running this script, you need to have modified this file to match your z/OS system
#
export ZOAUTIL_DIR=/usr/lpp/IBM/zoa
export PATH=${ZOAUTIL_DIR}/bin:$PATH
export JAVA_HOME=/usr/lpp/java/J8.0_64 # Root directory for Java 64-bit
export CLASSPATH=${ZOAUTIL_DIR}/lib/*:.
export LIBPATH=${ZOAUTIL_DIR}/lib
92 changes: 92 additions & 0 deletions Automation/Merge/JavaMerge/src/com/ibm/merge/Merge.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
package com.ibm.merge;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import com.ibm.zoautil.DatasetOptions;
import com.ibm.zoautil.DatasetType;
import com.ibm.zoautil.Datasets;
import com.ibm.zoautil.MVSCmd;
import com.ibm.zoautil.RecordFormat;
import com.ibm.zoautil.types.DDStatement;

public class Merge
{

public static void main(String[] args) throws IOException
{
String hlq = "BUILDER";
String mlq = "DFSORT";

// Check parameters
if ( args.length >= 1 )
{
if ( args[0].equals( "-?" ) || args[0].equals( "-h" ) )
{
System.out.println( "Run ZOAU Merge Java API example" );
System.out.println( "\tjava com.ibm.merge.Merge <hlq or -?> <mlq>" );
System.out.println( "\t\thlq - High level qualifier for datasets. Defaults to BUILDER." );
System.out.println( "\t\tmlq - Mid level data set qualifier for datasets. Defaults to DFSORT." );
System.exit( 0 );
}
else
{
hlq = args[0].toUpperCase();
}
}
if ( args.length >= 2 )
{
mlq = args[1].toUpperCase();
}

String dsPrefix = hlq + "." + mlq;
System.out.println( "dataset prefix: " + dsPrefix );

String dsMaster = dsPrefix + ".master";
String dsNew = dsPrefix + ".new";
String dsCmd = dsPrefix + ".cmd";
String dsMerge = dsPrefix + ".merge";

// Options to create a fixed block 80 sequential data set
// maxRC of 8 ignores an error if the dataset already exists
DatasetOptions createDSOptions = new DatasetOptions().type( DatasetType.SEQ ).recordFormat( RecordFormat.FB ).lrecl( 80 ).maxRC( 8 );

// Create Master dataset
Datasets.create( dsMaster, createDSOptions );
Datasets.write( dsMaster, "Charles Field 278 323 6045" ); // write
Datasets.write( dsMaster, "David George 397 132 6025", true ); // append
Datasets.write( dsMaster, "William Young 178 333 5045", true ); // append

// Create New dataset
Datasets.create( dsNew, createDSOptions );
Datasets.write( dsNew, "Emma Hill 149 589 5045" ); // write
Datasets.write( dsNew, "Sharon Miller 153 232 6045", true ); // append
Datasets.write( dsNew, "Steve Green 748 111 6025", true ); // append

// Create Cmd dataset
Datasets.create( dsCmd, createDSOptions );
Datasets.write( dsCmd, " MERGE FORMAT=CH,FIELDS=(1,9,A)" ); // write

// Create Merge dataset
Datasets.create( dsMerge, createDSOptions );

// Create DD Statements for sort
List<DDStatement> ddStatements = new ArrayList<DDStatement>();
ddStatements.add( new DDStatement().ddName( "sortin01" ).dataset( dsMaster ) );
ddStatements.add( new DDStatement().ddName( "sortin02" ).dataset( dsNew ) );
ddStatements.add( new DDStatement().ddName( "sysin" ).dataset( dsCmd ) );
ddStatements.add( new DDStatement().ddName( "sortout" ).dataset( dsMerge ) );
ddStatements.add( new DDStatement().ddName( "sysout" ).dataset( "*" ) );

// Sort
int rc = MVSCmd.execute( "sort", "MSGPRT=CRITICAL,LIST", ddStatements );
System.out.println( "MVSCmd rc: " + rc );
if ( rc == 0 )
{
String results = Datasets.read( dsMerge );
System.out.println( "Merged dataset contents:\n" + results );
}
}

}
20 changes: 20 additions & 0 deletions Automation/Merge/JavaMerge/src/log4j.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
###############################################################################
# Licensed Materials - Property of IBM
# (c) Copyright IBM Corporation 2019. All Rights Reserved.
#
# Note to U.S. Government Users Restricted Rights:
# Use, duplication or disclosure restricted by GSA ADP Schedule
# Contract with IBM Corp.
###############################################################################

# Default logging is for WARN and higher
log4j.rootLogger=WARN,stdout

# stdout Appender
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%p\t%d{ISO8601}\t%r\t%c\t[%t]\t%m%n

# Uncomment to enable tracing for ZOAU Java interface
#log4j.logger.com.ibm.zoautil=INFO

0 comments on commit 04e7625

Please sign in to comment.