| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- package ua.ansymo.hintco
- import java.io.File
- import java.io.FileWriter
- import org.apache.commons.cli.CommandLine
- import org.apache.commons.cli.DefaultParser
- import org.apache.commons.cli.HelpFormatter
- import org.apache.commons.cli.Option
- import org.apache.commons.cli.Options
- import org.apache.commons.cli.ParseException
- import org.eclipse.core.runtime.Assert
- import org.eclipse.equinox.app.IApplication
- import org.eclipse.equinox.app.IApplicationContext
- import org.intocps.fmi.jnifmuapi.Factory
- import ua.ansymo.hintco.RootCandidateScenario
- class Main implements IApplication {
-
- def static showHelp(Options options)
- {
- val formatter = new HelpFormatter();
- formatter.printHelp("app", options);
- }
-
- def static void main(String[] args) {
- val helpOpt = Option.builder("h").longOpt("help").desc("Show this description").build();
- val scenarioOpt = Option.builder("s").longOpt("scenario").desc("Path to scenario file").hasArg().numberOfArgs(1).argName("path").build();
- val contractOpt = Option.builder("c").longOpt("contract").desc("Path to contracts file").hasArg().numberOfArgs(1).argName("path").build();
- val genDefAdaptations = Option.builder("d").longOpt("default").desc("Generate default adaptations").build();
- val genTrace = Option.builder("t").longOpt("trace").desc("Generate debug trace.").hasArg().numberOfArgs(1).build();
- val outDirOpt = Option.builder("o").longOpt("output").desc("Path to output directory").hasArg().numberOfArgs(1).argName("path").build();
- val nVarsOpt = Option.builder("n").longOpt("variants").desc("Number of variants to run").hasArg().numberOfArgs(1).argName("int").build();
-
- val options = new Options()
- options.addOption(helpOpt)
- options.addOption(scenarioOpt)
- options.addOption(contractOpt)
- options.addOption(genDefAdaptations)
- options.addOption(genTrace)
- options.addOption(outDirOpt)
- options.addOption(nVarsOpt)
-
- val parser = new DefaultParser();
- var CommandLine cmd;
- try
- {
- cmd = parser.parse(options, args);
- } catch (ParseException e)
- {
- System.err.println("Parsing failed. Reason: " + e.getMessage());
- showHelp(options);
- return
- }
-
- if(cmd.hasOption(helpOpt.getOpt()))
- {
- showHelp(options);
- return
- }
-
- if (cmd.hasOption(genTrace.getOpt())) {
- System.setProperty("org.slf4j.simpleLogger.defaultLogLevel", "debug")
- val logFile = getOptString(genTrace, cmd, null);
- if (logFile === null){
- System.setProperty("org.slf4j.simpleLogger.logFile", "trace.log")
- } else {
- System.setProperty("org.slf4j.simpleLogger.logFile", logFile)
- }
- }
-
- run_diagnostics()
-
- val scenarioFile = getString(scenarioOpt, cmd);
- var outDir = getOptString(outDirOpt, cmd, "output");
-
- val loader = new ModelStorage()
-
-
- val src = loader.loadCandidates(scenarioFile)
-
- val spaceGenerator = new CandidateSpaceGenerator()
- val hintsPath = getOptString(contractOpt, cmd, null);
-
- if (cmd.hasOption(genDefAdaptations.getOpt())){
- spaceGenerator.createDefaultCandidateSpace(src)
- } else if (hintsPath !== null) {
- val hints = loader.loadContractSet(hintsPath)
- spaceGenerator.createCandidateSpace(hints, src)
- }
-
- val runner = new AdaptiveCosimRunner(new OutputProcessor(outDir), new FmuLoader, false)
- val generator = new CandidatesGenerator(new ConstraintChecker,new VariantValidator, new VariantProcessor(runner))
-
- generator.createVariantTree(src)
- generator.processAdaptations(src)
-
- if (cmd.hasOption(nVarsOpt.getOpt())){
- val nVars = Integer.parseInt(cmd.getOptionValue(nVarsOpt.getOpt()))
- generator.generateVariants(src, nVars)
- } else {
- generator.generateVariants(src)
- }
-
- runner.close()
- }
-
- override start(IApplicationContext context) throws Exception {
- val args = context.getArguments().get("application.args") as String[]
-
- main(args)
-
- return IApplication.EXIT_OK
- }
-
- def private static String getString(Option opt, CommandLine cmd)
- {
- if (cmd.hasOption(opt.getOpt()))
- {
- return cmd.getOptionValue(opt.getOpt());
- } else
- {
- throw new IllegalArgumentException("Missing option --" + opt.getLongOpt())
- }
- }
-
- def private static String getOptString(Option opt, CommandLine cmd, String d)
- {
- if (cmd.hasOption(opt.getOpt()))
- {
- return cmd.getOptionValue(opt.getOpt())
- } else
- {
- return d
- }
- }
-
- def static run_diagnostics(){
- val ms = new ModelStorage()
- val f = new FileWriter("storage_test.xmi")
- f.write('''
- <?xml version="1.0" encoding="ASCII"?>
- <hintco:HintConfiguration xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:hintco="ua.ansymo.hintco">
- <candidates identifier="c1"/>
- </hintco:HintConfiguration>
- ''')
- f.close
-
- val candidates = ms.loadCandidates("storage_test.xmi")
-
- Assert.isTrue(candidates.eAllContents.filter(RootCandidateScenario).head.identifier == "c1")
-
- Factory.checkApi()
-
- Assert.isTrue(new File("storage_test.xmi").delete())
- }
-
- override stop() {}
-
- }
|