diff --git a/src/data/java/de/tudresden/inf/st/pnml/base/util/FileUtils.java b/src/data/java/de/tudresden/inf/st/pnml/base/util/FileUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..3c066b9449d4b8f552e5964d275f1ac765c49c1a --- /dev/null +++ b/src/data/java/de/tudresden/inf/st/pnml/base/util/FileUtils.java @@ -0,0 +1,49 @@ +package de.tudresden.inf.st.pnml.base.util; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.URL; +import java.nio.file.Files; +import java.nio.file.Path; + +public class FileUtils { + + public static File resolveTemplate(String path) { + // Get the ClassLoader + ClassLoader classLoader = FileUtils.class.getClassLoader(); + + // Get the URL to the resource + URL resourceURL = classLoader.getResource(path); + + if (resourceURL != null) { + try { + // If the resource is inside the JAR (URL starts with "jar:file:") + if (resourceURL.getProtocol().equals("jar")) { + // If the resource is inside the JAR, copy it to a temporary file + InputStream inputStream = resourceURL.openStream(); + Path tempFile = Files.createTempFile("template_", ".pnml"); + try (OutputStream outputStream = Files.newOutputStream(tempFile)) { + byte[] buffer = new byte[1024]; + int length; + while ((length = inputStream.read(buffer)) > 0) { + outputStream.write(buffer, 0, length); + } + } + return tempFile.toFile(); // Return the temporary File + + } else { + // If the resource is not inside a JAR, it is a regular file on the filesystem + return new File(resourceURL.getFile()); // Return File for IDE usage + } + } catch (IOException e) { + System.out.println("Error reading resource: " + e.getMessage()); + return null; + } + } else { + System.out.println("Resource not found"); + return null; + } + } +} diff --git a/src/main/jastadd/base/parsing/PnmlParser.jadd b/src/main/jastadd/base/parsing/PnmlParser.jadd index affd86fc44ca8e7d311f7600dbdabfaac9a6138e..b122f7f9f88f805564dac705a372933fbee44573 100644 --- a/src/main/jastadd/base/parsing/PnmlParser.jadd +++ b/src/main/jastadd/base/parsing/PnmlParser.jadd @@ -1,4 +1,5 @@ import de.tudresden.inf.st.pnml.jastadd.model.PetriNet; +import de.tudresden.inf.st.pnml.base.util.FileUtils; import fr.lip6.move.pnml.framework.hlapi.HLAPIRootClass; import fr.lip6.move.pnml.framework.utils.ModelRepository; import fr.lip6.move.pnml.framework.utils.PNMLUtils; @@ -32,20 +33,21 @@ aspect PnmlParser { return tempFile; } - public static List<PetriNet> parsePnml(String path, boolean useTemp) { - Path file = null; + public static List<PetriNet> parsePnml(String path, boolean isExternal) { - if(useTemp){ - file = toTempPath(path); - } else { - file = Paths.get(path); - } + File file = null; + + if(isExternal){ + file = Paths.get(path).toFile(); + } else { + file = FileUtils.resolveTemplate(path); + } HLAPIRootClass document = null; try { - document = PNMLUtils.importPnmlDocument(file.toFile(), false); + document = PNMLUtils.importPnmlDocument(file, false); //logger.info(document.toPNML()); } catch (ImportException | InvalidIDException e) {