diff --git a/jastadd-mquat-base/.gitignore b/jastadd-mquat-base/.gitignore index cebd2f80655a5da0c591d1dc9c2999f354871b9b..86705c02f96d1438953c264f7c5dcd3451905a69 100644 --- a/jastadd-mquat-base/.gitignore +++ b/jastadd-mquat-base/.gitignore @@ -7,3 +7,7 @@ coverage /bin/ /build/ /out/ + +# files created by Main +model-serialized.txt +solution-serialized.txt diff --git a/jastadd-mquat-base/src/main/java/de/tudresden/inf/st/mquat/Main.java b/jastadd-mquat-base/src/main/java/de/tudresden/inf/st/mquat/Main.java index 049adef0e744a6f2b55660efdc46862ea616953d..8749c301cbc28bb78b25d677658a053ece6fe190 100644 --- a/jastadd-mquat-base/src/main/java/de/tudresden/inf/st/mquat/Main.java +++ b/jastadd-mquat-base/src/main/java/de/tudresden/inf/st/mquat/Main.java @@ -2,16 +2,14 @@ package de.tudresden.inf.st.mquat; import beaver.Parser; import de.tudresden.inf.st.mquat.deserializer.ASTNodeDeserializer; -import de.tudresden.inf.st.mquat.generator.*; +import de.tudresden.inf.st.mquat.generator.ScenarioDescription; +import de.tudresden.inf.st.mquat.generator.ScenarioGenerator; import de.tudresden.inf.st.mquat.jastadd.model.*; import de.tudresden.inf.st.mquat.jastadd.parser.MquatParser; import de.tudresden.inf.st.mquat.jastadd.scanner.MquatScanner; -import de.tudresden.inf.st.mquat.serializer.ASTNodeSerializer; import de.tudresden.inf.st.mquat.serializer.JsonSerializer; -import org.apache.logging.log4j.Level; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.core.config.Configurator; import java.io.*; import java.net.URL; @@ -19,7 +17,6 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.StandardOpenOption; -import java.util.Map; import java.util.Optional; import java.util.Scanner; @@ -30,7 +27,7 @@ import java.util.Scanner; @SuppressWarnings("unused") public class Main { - public static final ScenarioDescription SCENARIO_DESCRIPTION = new ScenarioDescription(2, 2, 0, 0, 0, 2, 2, 1.5, 2, 2, 0); + private static final ScenarioDescription SCENARIO_DESCRIPTION = new ScenarioDescription(2, 2, 0, 0, 0, 2, 2, 1.5, 2, 2, 0); private static File getAbsoluteFileForLoading(String fileName) throws FileNotFoundException { URL expUrl = Main.class.getClassLoader().getResource(fileName); @@ -97,7 +94,7 @@ public class Main { // required for the DrAST debugger public static Object DrAST_root_node; - public static Optional<Root> loadModel(String fileName) { + private static Optional<Root> loadModel(String fileName) { try { Root root = load(fileName); // required for the DrAST debugger @@ -110,6 +107,21 @@ public class Main { return Optional.empty(); } + private static Optional<Solution> loadSolution(String fileName, Root model) { + try { + File file = getAbsoluteFileForLoading(fileName); + FileReader reader = new FileReader(file); + MquatScanner scanner = new MquatScanner(reader); + MquatParser parser = new MquatParser(); + Solution result = (Solution) parser.parse(scanner, MquatParser.AltGoals.solution); + parser.resolveSolutionReferencesWith(model); + return Optional.of(result); + } catch (IOException | Parser.Exception e) { + e.printStackTrace(); + } + return Optional.empty(); + } + private static void checkParsedModel(Root parsedModel, File originalFile, MquatWriteSettings settings) throws IOException, InterruptedException { if (parsedModel == null) { @@ -140,14 +152,27 @@ public class Main { return generatedModel; } - public static void main(String[] args) throws Exception { + public static void main(String[] args) { Logger logger = LogManager.getLogger(Main.class); logger.info("Starting base.Main"); - String fileName = args.length > 0 ? args[0] : "model-handmade.txt"; + String modelFileName = args.length > 0 ? args[0] : "model-handmade.txt"; + String solutionFileName = args.length > 0 ? args[0] : "solution-handmade.txt"; // Configurator.setRootLevel(Level.TRACE); - Optional<Root> parsedModel = loadModel(fileName); - parsedModel.ifPresent(model -> JsonSerializer.write(model, "model-serialized.txt")); + Optional<Root> parsedModel = loadModel(modelFileName); + Root model; + if (parsedModel.isPresent()) { + model = parsedModel.get(); + } else { + logger.error("Model was not parsed correctly!"); + return; + } + JsonSerializer.write(model, "model-serialized.txt"); + Optional<Solution> parsedSolution = loadSolution(solutionFileName, model); + if (parsedSolution.isPresent()) { + Solution solution = parsedSolution.get(); + JsonSerializer.write(solution, "solution-serialized.txt"); + } // Root model = generateNewModel(new MquatWriteSettings(" "), false); // JsonSerializer.write(model, "model-serialized.txt"); diff --git a/jastadd-mquat-base/src/main/java/de/tudresden/inf/st/mquat/serializer/JsonSerializer.java b/jastadd-mquat-base/src/main/java/de/tudresden/inf/st/mquat/serializer/JsonSerializer.java index 1a6e35af6d3f9ec7fe2656de9b36c9462f3f1696..e000a614b804953834158d3a2e7a112ba0f1cc68 100644 --- a/jastadd-mquat-base/src/main/java/de/tudresden/inf/st/mquat/serializer/JsonSerializer.java +++ b/jastadd-mquat-base/src/main/java/de/tudresden/inf/st/mquat/serializer/JsonSerializer.java @@ -3,10 +3,7 @@ package de.tudresden.inf.st.mquat.serializer; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.databind.module.SimpleModule; -import de.tudresden.inf.st.mquat.jastadd.model.ASTNode; -import de.tudresden.inf.st.mquat.jastadd.model.List; -import de.tudresden.inf.st.mquat.jastadd.model.Opt; -import de.tudresden.inf.st.mquat.jastadd.model.Root; +import de.tudresden.inf.st.mquat.jastadd.model.*; import java.io.File; import java.io.IOException; @@ -14,6 +11,14 @@ import java.io.IOException; public class JsonSerializer { public static void write(Root r, String fileName) { + writeAstNode(r, fileName); + } + + public static void write(Solution s, String fileName) { + writeAstNode(s, fileName); + } + + private static void writeAstNode(ASTNode a, String fileName) { ObjectMapper mapper = new ObjectMapper(); mapper.enable(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS); mapper.enable(SerializationFeature.INDENT_OUTPUT); @@ -25,10 +30,9 @@ public class JsonSerializer { mapper.registerModule(module); try { - mapper.writeValue(new File(fileName), r); + mapper.writeValue(new File(fileName), a); } catch (IOException e) { e.printStackTrace(); } - } } diff --git a/jastadd-mquat-base/src/main/resources/solution-handmade.txt b/jastadd-mquat-base/src/main/resources/solution-handmade.txt new file mode 100644 index 0000000000000000000000000000000000000000..a50770faca7fcbd6cbfb0194cec315d644e24485 --- /dev/null +++ b/jastadd-mquat-base/src/main/resources/solution-handmade.txt @@ -0,0 +1,26 @@ +solution { + request0 -> implementation_0i1 { + compute_resource_0 -> resource0 { + cpu_0 -> cpu0_0 + ram_1 -> ram0 + disk_1 -> disk0 + network_1 -> network0 + } + the_component_0c0 -> implementation_0c0i0 { + compute_resource_0 -> resource1 { + cpu_0 -> cpu1_0 + ram_1 -> ram1 + disk_1 -> disk1 + network_1 -> network1 + } + } + the_component_0c1 -> implementation_0c1i0 { + compute_resource_0 -> resource2 { + cpu_0 -> cpu2_0 + ram_1 -> ram2 + disk_1 -> disk2 + network_1 -> network2 + } + } + } +}