diff --git a/src/main/config/config.json b/src/main/config/config.json deleted file mode 100644 index 6bc93220fc1e4577175aa767af47da075c56fd89..0000000000000000000000000000000000000000 --- a/src/main/config/config.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "tina" : "-R -s 1 -c 0 -t 0 -b 0 -m 0 -v -NET", - "pathto" : "", - "sift" : "", - "struct" : "" -} \ No newline at end of file diff --git a/src/main/config/siftConfig.json b/src/main/config/siftConfig.json new file mode 100644 index 0000000000000000000000000000000000000000..0c0152dc9bf97bb11a1cb2e3928db94792344aee --- /dev/null +++ b/src/main/config/siftConfig.json @@ -0,0 +1,6 @@ +{ + "tina" : "", + "pathto" : "", + "sift" : "-R -k -stats", + "struct" : "" +} \ No newline at end of file diff --git a/src/main/config/tinaConfig.json b/src/main/config/tinaConfig.json new file mode 100644 index 0000000000000000000000000000000000000000..0acc74b999c755bcbc8261296c37fb6cf27e6339 --- /dev/null +++ b/src/main/config/tinaConfig.json @@ -0,0 +1,6 @@ +{ + "tina" : "-R -s 1 -c 0 -t 0 -b 0 -m 0 -v -NET -stats", + "pathto" : "", + "sift" : "", + "struct" : "" +} \ No newline at end of file diff --git a/src/main/java/de/tudresden/inf/st/pnml/flatter/Main.java b/src/main/java/de/tudresden/inf/st/pnml/flatter/Main.java index 656246e38e66f5a56ca3527a12203902e7309cdd..102281525e088336bcfb968fa9bc2e7880caa3f3 100644 --- a/src/main/java/de/tudresden/inf/st/pnml/flatter/Main.java +++ b/src/main/java/de/tudresden/inf/st/pnml/flatter/Main.java @@ -1,6 +1,8 @@ package de.tudresden.inf.st.pnml.flatter; import de.tudresden.inf.st.pnml.flatter.config.ConfigReader; +import de.tudresden.inf.st.pnml.flatter.tina.KtzioProxy; +import de.tudresden.inf.st.pnml.flatter.tina.SiftProxy; import de.tudresden.inf.st.pnml.flatter.tina.TinaProxy; import de.tudresden.inf.st.pnml.flatter.transform.ChannelFlatter; import de.tudresden.inf.st.pnml.flatter.transform.ReferenceFlatter; @@ -20,32 +22,35 @@ public class Main { private static final Logger logger = LoggerFactory.getLogger(Main.class); - public static void main(String[] args) throws IOException, InvalidIDException { + public static void main(String[] args) throws IOException, InvalidIDException, InterruptedException { String configPath = (args.length > 1) ? args[1] : null; - String pnmlPath = (args.length > 0) ? args[0] : null; + /* String pnmlPath = (args.length > 0) ? args[0] : null; if (pnmlPath == null || configPath == null) { System.out.println("No model found on given input path."); return; - } + }*/ // parse the global not flatted petri net // String pnmlPath = "../pnml-relast-nets/src/main/resources/topicTestNets/structureTestNets/topic-structure-correct.pnml"; - // String pnmlPath = "../pnml-relast-nets/src/main/resources/useCaseNets/RoboticUseCase-TopLayer.pnml"; + String pnmlPath = "../pnml-relast-nets/src/main/resources/useCaseNets/RoboticUseCase-TopLayer-Left.pnml"; + // String pnmlPath = "../pnml-relast-nets/src/main/resources/useCaseNets/TopicEvaluation/RoboticUseCase-TopLayer-TopicScale-NoSignals.pnml"; // String pnmlPath = "../pnml-relast-nets/src/main/resources/useCaseNets/RoboticUseCase-AllLayers.pnml"; - // String pnmlPath = "../pnml-relast-nets/src/main/resources/serviceTestNets/structureTestNets/service-structure-correct.pnml"; - configPath = "src/main/config/config.json"; + // String pnmlPath = "../pnml-relast-nets/src/main/resources/useCaseNets/TopicEvaluation/PublisherScale/RoboticUseCase-TopLayer-PublisherScale-6.pnml"; + // String pnmlPath = "../pnml-relast-nets/src/main/resources/serviceTestNets/structureTestNets/service-structure-correct.pnml";*/ + configPath = "src/main/config/siftConfig.json"; PetriNet petriNet = PnmlParser.parsePnml(pnmlPath).get(0); // read config for analyzer from file ConfigReader cr = new ConfigReader(configPath); String[] tinaConfig = cr.getTinaConfigParams(); + String[] siftConfig = cr.getSiftConfigParams(); // make sure that we have a valid marking System.out.println("[FLATTER] Checking marking."); - for(Place p : petriNet.allPlaces()){ - if(p.getInitialMarking() == null){ + for (Place p : petriNet.allPlaces()) { + if (p.getInitialMarking() == null) { System.out.println("[FLATTER] Found NULL-marking. Falling back to 0 ..."); PTMarking marking = new PTMarking(); marking.setText(0); @@ -92,20 +97,32 @@ public class Main { ndrioProxy.includeInhibitorArcs(petriNet, ndrioTargetPath, inhibitorTargetPath); // insert into tina - System.out.println("[FLATTER] Inserting into tina."); - TinaProxy tinaProxy = new TinaProxy(); - String tinaTargetPath = homeDirectory + "/temp/tina/" + "tina-result-" + exportId + ".txt"; - tinaProxy.analyzePetriNet(inhibitorTargetPath, tinaTargetPath, tinaConfig); - - // insert into pathto - // TODO v2 + if(tinaConfig.length > 1){ + System.out.println("[FLATTER] Inserting into tina."); + TinaProxy tinaProxy = new TinaProxy(); + String tinaTargetPath = homeDirectory + "/temp/tina/" + "tina-result-" + exportId + ".txt"; + tinaProxy.analyzePetriNet(inhibitorTargetPath, tinaTargetPath, tinaConfig); + } // insert into sift - // TODO in v2 + if(siftConfig.length > 1){ + System.out.println("[FLATTER] Inserting into sift."); + SiftProxy siftProxy = new SiftProxy(); + String siftTargetPath = homeDirectory + "/temp/sift/" + "sift-result-" + exportId + ".ktz"; + siftProxy.analyzePetriNet(inhibitorTargetPath, siftTargetPath, siftConfig); + + System.out.println("[FLATTER] Converting with ktzio."); + KtzioProxy ktzioProxy = new KtzioProxy(); + String ktzioPath = homeDirectory + "/temp/sift/" + "sift-result-converted-" + exportId + ".txt"; + ktzioProxy.convertBinaryToText(siftTargetPath, ktzioPath); + } // insert into struct // TODO in v2 + // insert into pathto + // TODO in v2 + // combine results and generate report in html/md/xml/json? format // TODO for v2 @@ -120,7 +137,7 @@ public class Main { System.out.println("Place " + p.asOutputSignalPlace().getId() + " -- " + p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet()); if (p.getInitialMarking() != null) { System.out.println("--- Marking: " + p.getInitialMarking().getText()); - }else { + } else { System.out.println("--- Marking: NULL"); } } @@ -138,19 +155,19 @@ public class Main { if (t.asInputSignalTransition().getStaticTransitionInformation().isServiceTransitionInformation()) { System.out.println("--- Transition: " + t.getId() + " subnet: " + t.asInputSignalTransition().getStaticTransitionInformation().getSubNet() + " service: " + t.asInputSignalTransition().getStaticTransitionInformation().asServiceTransitionInformation().getServiceName() + " ---------"); - } else if(t.asInputSignalTransition().getStaticTransitionInformation().isTopicTransitionInformation()){ + } else if (t.asInputSignalTransition().getStaticTransitionInformation().isTopicTransitionInformation()) { System.out.println("--- Transition: " + t.getId() + " subnet: " + t.asInputSignalTransition().getStaticTransitionInformation().getSubNet() + " topic: " + t.asInputSignalTransition().getStaticTransitionInformation().asTopicTransitionInformation().getTopic() + " ---------"); - }else{ + } else { System.out.println("--- Transition: " + t.getId() + " subnet: " + t.asInputSignalTransition().getStaticTransitionInformation().getSubNet() + " --- name: " + t.getName().getText()); } - // for(Arc a : t.getInArcs()){ - // System.out.println("incomming arc: " + a.getId()); - // } - // if(t.asInputSignalTransition().getInputSignalClause() != null && t.asInputSignalTransition().getInputSignalClause().getNumChild() > 0){ - // System.out.println("------ Clause: " + t.asInputSignalTransition().getInputSignalClause().printExp()); - // } + // for(Arc a : t.getInArcs()){ + // System.out.println("incomming arc: " + a.getId()); + // } + // if(t.asInputSignalTransition().getInputSignalClause() != null && t.asInputSignalTransition().getInputSignalClause().getNumChild() > 0){ + // System.out.println("------ Clause: " + t.asInputSignalTransition().getInputSignalClause().printExp()); + // } for (Place p : t.asInputSignalTransition().incomingPlaces()) { @@ -165,13 +182,13 @@ public class Main { System.out.println("----------------- REF PLACES -----------------"); - for (RefPlace rp : petriNet.allRefPlaces()){ + for (RefPlace rp : petriNet.allRefPlaces()) { System.out.println("--- RefPlace: " + rp.getId()); } System.out.println("----------------- REF TRANSITIONS -----------------"); - for (RefTransition rt : petriNet.allRefTransitions()){ + for (RefTransition rt : petriNet.allRefTransitions()) { System.out.println("--- RefTransition: " + rt.getId()); } @@ -181,8 +198,8 @@ public class Main { System.out.println("Arc: " + a.getId()); System.out.println("Arc: " + a.getId() + " -- source: " + a.getSource().getId() + " -- target: " + a.getTarget().getId()); - if(a.getNumToolspecific() > 0){ - // System.out.println("--- toolspecifics: " + a.getToolspecific(0).getFormattedXMLBuffer()); + if (a.getNumToolspecific() > 0) { + // System.out.println("--- toolspecifics: " + a.getToolspecific(0).getFormattedXMLBuffer()); } } @@ -206,12 +223,12 @@ public class Main { } } - // System.out.println("--------------- TOOL SPECIFIC ---------------"); + // System.out.println("--------------- TOOL SPECIFIC ---------------"); for (Transition t : petriNet.allTransitions()) { InputSignalTransition ist = t.asInputSignalTransition(); - if(ist != null && ist.getNumToolspecific() > 0) { - // System.out.println("ToolSpecific: (" + ist.getName().getText() + ") " + ist.getToolspecific(0).getFormattedXMLBuffer().toString()); + if (ist != null && ist.getNumToolspecific() > 0) { + // System.out.println("ToolSpecific: (" + ist.getName().getText() + ") " + ist.getToolspecific(0).getFormattedXMLBuffer().toString()); } } } diff --git a/src/main/java/de/tudresden/inf/st/pnml/flatter/tina/AbstractTinaProxy.java b/src/main/java/de/tudresden/inf/st/pnml/flatter/tina/AbstractTinaProxy.java index 508cf15b8604e6438f96f3d4b2a97cf9130f9ca6..6af55f980c5f96277e18fc6b94dc2a78f408807a 100644 --- a/src/main/java/de/tudresden/inf/st/pnml/flatter/tina/AbstractTinaProxy.java +++ b/src/main/java/de/tudresden/inf/st/pnml/flatter/tina/AbstractTinaProxy.java @@ -3,6 +3,11 @@ package de.tudresden.inf.st.pnml.flatter.tina; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.io.BufferedReader; +import java.io.FileWriter; +import java.io.IOException; +import java.io.InputStreamReader; + public abstract class AbstractTinaProxy { protected static final Logger logger = LoggerFactory.getLogger(AbstractTinaProxy.class); @@ -10,4 +15,28 @@ public abstract class AbstractTinaProxy { protected boolean isWindows = System.getProperty("os.name").toLowerCase().startsWith("windows"); protected String homeDirectory = System.getProperty("user.dir"); + protected void executeAndRead(ProcessBuilder tinaProcessBuilder, FileWriter fileWriter) { + + try { + Process process = tinaProcessBuilder.start(); + BufferedReader reader = new BufferedReader( + new InputStreamReader(process.getInputStream())); + + String line; + while ((line = reader.readLine()) != null) { + fileWriter.write(line + "\n"); + } + + fileWriter.close(); + + int exitVal = process.waitFor(); + if (exitVal == 0) { + System.exit(0); + } + + } catch (IOException | InterruptedException e) { + e.printStackTrace(); + } + } + } diff --git a/src/main/java/de/tudresden/inf/st/pnml/flatter/tina/KtzioProxy.java b/src/main/java/de/tudresden/inf/st/pnml/flatter/tina/KtzioProxy.java new file mode 100644 index 0000000000000000000000000000000000000000..678690033da517cda9ecd1694bbfbde221de8eae --- /dev/null +++ b/src/main/java/de/tudresden/inf/st/pnml/flatter/tina/KtzioProxy.java @@ -0,0 +1,41 @@ +package de.tudresden.inf.st.pnml.flatter.tina; + +import java.io.*; +import java.util.ArrayList; +import java.util.List; + +public class KtzioProxy extends AbstractTinaProxy { + + public void convertBinaryToText(String inputPath, String outputPath) throws IOException, InterruptedException { + + ProcessBuilder ktzioProcessBuilder = new ProcessBuilder(); + + if (!isWindows) { + + File file = new File(outputPath); + if (!file.exists()) { + file.getParentFile().mkdirs(); + } + + List<String> commandParts = new ArrayList<>(); + if (homeDirectory.contains("pnml-relast-flatter")) { + + commandParts.add(homeDirectory + "/libs/tina-3.7.0/bin/ktzio"); + } else { + + commandParts.add(homeDirectory + "/pnml-relast-flatter/libs/tina-3.7.0/bin/ktzio"); + } + + commandParts.add("-KTZ"); + commandParts.add("-txt"); + commandParts.add(inputPath); + commandParts.add(outputPath); + + ktzioProcessBuilder.command(commandParts); + ktzioProcessBuilder.start(); + } else { + logger.error("Windows is currently not supported. Exiting ..."); + return; + } + } +} diff --git a/src/main/java/de/tudresden/inf/st/pnml/flatter/tina/SiftProxy.java b/src/main/java/de/tudresden/inf/st/pnml/flatter/tina/SiftProxy.java new file mode 100644 index 0000000000000000000000000000000000000000..a57980ec88d2b86cb29008ee10f261fecb282332 --- /dev/null +++ b/src/main/java/de/tudresden/inf/st/pnml/flatter/tina/SiftProxy.java @@ -0,0 +1,40 @@ +package de.tudresden.inf.st.pnml.flatter.tina; + +import java.io.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class SiftProxy extends AbstractTinaProxy { + + public void analyzePetriNet(String inputPath, String outputPath, String[] config) throws IOException, InterruptedException { + + ProcessBuilder siftProcessBuilder = new ProcessBuilder(); + + if (!isWindows) { + + File file = new File(outputPath); + if (!file.exists()) { + file.getParentFile().mkdirs(); + } + + List<String> commandParts = new ArrayList<>(); + if (homeDirectory.contains("pnml-relast-flatter")) { + + commandParts.add(homeDirectory + "/libs/tina-3.7.0/bin/sift"); + } else { + + commandParts.add(homeDirectory + "/pnml-relast-flatter/libs/tina-3.7.0/bin/sift"); + } + commandParts.addAll(Arrays.asList(config)); + commandParts.add(inputPath); + commandParts.add(outputPath); + + siftProcessBuilder.command(commandParts); + siftProcessBuilder.start(); + } else { + logger.error("Windows is currently not supported. Exiting ..."); + return; + } + } +} diff --git a/src/main/java/de/tudresden/inf/st/pnml/flatter/tina/TinaProxy.java b/src/main/java/de/tudresden/inf/st/pnml/flatter/tina/TinaProxy.java index 42f407fa9fa1e28b028dadd68e07623055624f83..e15fd6abe666ed56219ad61e459deb9330c59864 100644 --- a/src/main/java/de/tudresden/inf/st/pnml/flatter/tina/TinaProxy.java +++ b/src/main/java/de/tudresden/inf/st/pnml/flatter/tina/TinaProxy.java @@ -9,12 +9,7 @@ public class TinaProxy extends AbstractTinaProxy{ public void analyzePetriNet(String inputPath, String outputPath, String[] config) throws IOException { - boolean isWindows = System.getProperty("os.name") - .toLowerCase().startsWith("windows"); - - String homeDirectory = System.getProperty("user.dir"); ProcessBuilder tinaProcessBuilder = new ProcessBuilder(); - // String fileName = "temp/tina/tina-result-" + UUID.randomUUID().toString() + ".txt"; File file = new File(outputPath); if (!file.exists()) { @@ -42,26 +37,6 @@ public class TinaProxy extends AbstractTinaProxy{ return; } - try { - - Process process = tinaProcessBuilder.start(); - BufferedReader reader = new BufferedReader( - new InputStreamReader(process.getInputStream())); - - String line; - while ((line = reader.readLine()) != null) { - fileWriter.write(line + "\n"); - } - - fileWriter.close(); - - int exitVal = process.waitFor(); - if (exitVal == 0) { - System.exit(0); - } - - } catch (IOException | InterruptedException e) { - e.printStackTrace(); - } + executeAndRead(tinaProcessBuilder, fileWriter); } }