diff --git a/build.gradle b/build.gradle index 2592345920de6fe207c172efaf8aa9569b1212ab..950173187dc1a7f0f6a8fcc9094fbd1d750afa95 100644 --- a/build.gradle +++ b/build.gradle @@ -7,7 +7,7 @@ buildscript { } group 'de.tudresden.inf.st' -version '0.3' +version '0.4' apply plugin: 'java' apply plugin: 'java-library' @@ -44,9 +44,6 @@ configurations { } dependencies { - -// implementation project(':pnml-relast-base') - implementation group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: "${jackson_version}" implementation group: 'net.sf.beaver', name: 'beaver-rt', version: '0.9.11' implementation group: 'org.slf4j', name: 'slf4j-api', version: '1.7.30' @@ -67,7 +64,7 @@ dependencies { // https://mvnrepository.com/artifact/xalan/xalan implementation group: 'xalan', name: 'xalan', version: '2.7.2' - compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.0' + implementation group: 'org.apache.commons', name: 'commons-lang3', version: '3.0' implementation group: 'org.apache.commons', name: 'commons-collections4', version: '4.4' jastadd2 "org.jastadd:jastadd:2.3.4" @@ -96,8 +93,31 @@ jar { duplicatesStrategy = DuplicatesStrategy.EXCLUDE - archiveBaseName = 'pnml-splitter' + archiveBaseName = 'pnml-relast-splitter' + +} + +task fatJar(type: Jar) { + group = "build" + archiveAppendix = "fatjar" + + // Include the compiled output and runtime dependencies + from sourceSets.main.output + from sourceSets.main.allSource + from { + configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } + } + + // Ensure the correct Main-Class is specified + manifest { + attributes "Main-Class": "de.tudresden.inf.st.pnml.splitter.Main" + } + + // Exclude unnecessary files + exclude 'META-INF/*.RSA', 'META-INF/*.SF', 'META-INF/*.DSA' + duplicatesStrategy = DuplicatesStrategy.EXCLUDE + archiveBaseName = 'pnml-relast-splitter' } // Generated files diff --git a/src/main/java/de/tudresden/inf/st/pnml/splitter/Main.java b/src/main/java/de/tudresden/inf/st/pnml/splitter/Main.java index de39f4d618097a7393b58cddc0f3404205112710..10677260fc1eacb927572fa8632270ccbee56feb 100644 --- a/src/main/java/de/tudresden/inf/st/pnml/splitter/Main.java +++ b/src/main/java/de/tudresden/inf/st/pnml/splitter/Main.java @@ -8,22 +8,48 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; public class Main { private static final Logger logger = LoggerFactory.getLogger(Main.class); - public static void main(String[] args) { + // Utility to extract argument value by flag + private static String getArgumentValue(String[] args, String flag, String defaultValue) { + for (int i = 0; i < args.length; i++) { + if (args[i].equals(flag) && i + 1 < args.length) { + return args[i + 1]; + } + } + return defaultValue; + } + + // Print help/usage instructions + private static void printUsage() { + System.out.println("Options:"); + System.out.println(" --pnml <path> Path to the PNML file (required)"); + System.out.println(" --help Show this help message and exit"); + } - String inputPath = (args.length > 0) ? args[0] : null; + public static void main(String[] args) { - if (inputPath == null) { - logger.error("No model found on given input path."); + if (args.length == 0 || Arrays.asList(args).contains("--help")) { + printUsage(); return; } - List<PetriNet> petriNets = PnmlParser.parsePnml(inputPath); + // String configPath = getArgumentValue(args, "--config", null); + String pnmlPath = getArgumentValue(args, "--pnml", null); + + // Validate required arguments + if (pnmlPath == null) { + System.err.println("Error: --pnml <path> is required."); + printUsage(); + System.exit(1); + } + + List<PetriNet> petriNets = PnmlParser.parsePnml(pnmlPath, true); List<List<PetriNet>> disconnectedPetriNets = new ArrayList<>(); GlobalToLocalNetsPostProcessor processor = new GlobalToLocalNetsPostProcessor(); diff --git a/src/main/java/de/tudresden/inf/st/pnml/splitter/postprocessing/GlobalToLocalNetsPostProcessor.java b/src/main/java/de/tudresden/inf/st/pnml/splitter/postprocessing/GlobalToLocalNetsPostProcessor.java index b78d9af64ef2845adeb1dec281f0fcfe11bafc07..47387c7ed37b81a50737a71ad10160763a296a0c 100644 --- a/src/main/java/de/tudresden/inf/st/pnml/splitter/postprocessing/GlobalToLocalNetsPostProcessor.java +++ b/src/main/java/de/tudresden/inf/st/pnml/splitter/postprocessing/GlobalToLocalNetsPostProcessor.java @@ -61,7 +61,7 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> { // filter deep copy elements by location for (String location : locations) { - List<PetriNet> reParsedPetriNets = PnmlParser.parsePnml(serializedNetPath); + List<PetriNet> reParsedPetriNets = PnmlParser.parsePnml(serializedNetPath, true); for (PetriNet pn : reParsedPetriNets) { PetriNet separatedNet = createdSeparatedNetByNode(pn, location); separatedNet.setId(separatedNet.getType() + "-" + netSuffix);