From 34404d03bc70647b55daf0d4378410629d548578 Mon Sep 17 00:00:00 2001 From: "S.John" Date: Thu, 1 Mar 2018 16:14:36 +0100 Subject: [PATCH 1/2] added schema location to output files --- .../src/uk/ac/kcl/ui/output/MDEOResultsOutput.xtend | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/plugins/uk.ac.kcl.mdeoptimise.ui/src/uk/ac/kcl/ui/output/MDEOResultsOutput.xtend b/src/plugins/uk.ac.kcl.mdeoptimise.ui/src/uk/ac/kcl/ui/output/MDEOResultsOutput.xtend index ada9e66af..36e6ea65c 100644 --- a/src/plugins/uk.ac.kcl.mdeoptimise.ui/src/uk/ac/kcl/ui/output/MDEOResultsOutput.xtend +++ b/src/plugins/uk.ac.kcl.mdeoptimise.ui/src/uk/ac/kcl/ui/output/MDEOResultsOutput.xtend @@ -18,6 +18,8 @@ import java.util.TimeZone import java.util.HashMap import com.google.common.io.Files import java.nio.charset.Charset +import org.eclipse.emf.ecore.xmi.XMIResource +import java.util.Map class MDEOResultsOutput { @@ -148,7 +150,12 @@ class MDEOResultsOutput { resource.contents.clear } resource.contents.add(model) - resource.save(Collections.EMPTY_MAP) + + // Keep schema location in output models + val Map options = new HashMap(); + options.put(XMIResource.OPTION_SCHEMA_LOCATION, Boolean.TRUE); + + resource.save(options) } private def storeSolutionData(PrintWriter infoWriter, String modelPath, MoeaOptimisationSolution solution){ From 1cc6f34652c719114c10d9c9c66d4eb1a3790574 Mon Sep 17 00:00:00 2001 From: "S.John" Date: Wed, 14 Mar 2018 14:05:38 +0100 Subject: [PATCH 2/2] added copy of meta model to experiments folder; before result is saved, URI of referenced package is changed to point to copy of meta model --- .../ac/kcl/ui/output/MDEOResultsOutput.xtend | 56 ++++++++++++------- 1 file changed, 36 insertions(+), 20 deletions(-) diff --git a/src/plugins/uk.ac.kcl.mdeoptimise.ui/src/uk/ac/kcl/ui/output/MDEOResultsOutput.xtend b/src/plugins/uk.ac.kcl.mdeoptimise.ui/src/uk/ac/kcl/ui/output/MDEOResultsOutput.xtend index 36e6ea65c..595f1f948 100644 --- a/src/plugins/uk.ac.kcl.mdeoptimise.ui/src/uk/ac/kcl/ui/output/MDEOResultsOutput.xtend +++ b/src/plugins/uk.ac.kcl.mdeoptimise.ui/src/uk/ac/kcl/ui/output/MDEOResultsOutput.xtend @@ -1,25 +1,24 @@ package uk.ac.kcl.ui.output +import com.google.common.io.Files +import java.io.File +import java.io.PrintWriter +import java.nio.charset.Charset +import java.text.SimpleDateFormat import java.util.Date -import java.util.List +import java.util.HashMap import java.util.LinkedList +import java.util.List +import java.util.Map +import java.util.TimeZone +import org.eclipse.core.runtime.IPath +import org.eclipse.emf.common.util.URI +import org.eclipse.emf.ecore.EObject import org.eclipse.emf.ecore.resource.ResourceSet -import uk.ac.kcl.mdeoptimise.Optimisation import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl -import org.eclipse.emf.ecore.EObject -import java.util.Collections -import java.text.SimpleDateFormat -import uk.ac.kcl.optimisation.moea.MoeaOptimisationSolution -import java.io.PrintWriter -import java.io.File -import org.eclipse.emf.common.util.URI -import org.eclipse.core.runtime.IPath -import java.util.TimeZone -import java.util.HashMap -import com.google.common.io.Files -import java.nio.charset.Charset import org.eclipse.emf.ecore.xmi.XMIResource -import java.util.Map +import uk.ac.kcl.mdeoptimise.Optimisation +import uk.ac.kcl.optimisation.moea.MoeaOptimisationSolution class MDEOResultsOutput { @@ -44,7 +43,7 @@ class MDEOResultsOutput { batches.add(batch); } - def String outputBatchSummary(MDEOBatch batch, IPath outcomePath) { + def String outputBatchSummary(MDEOBatch batch, IPath outcomePath, IPath metaModelOutputPath) { var batchOutputPath = outcomePath.append(String.format("batch-%s/", batch.id)) var batchInfoPath = batchOutputPath.append("outcome.txt") @@ -71,7 +70,7 @@ class MDEOResultsOutput { val solution = batch.solutions.get(i); val modelPath = batchOutputPath + String.format("%08X", solution.model.hashCode) + ".xmi" - solution.model.writeModel(modelPath) + solution.model.writeModel(modelPath, metaModelOutputPath.toPortableString) storeSolutionData(batchWriter, modelPath, solution) } @@ -132,25 +131,42 @@ class MDEOResultsOutput { } } + def IPath copyMetaModel(IPath outcomePath){ + val metaModelInputPath = projectRoot.append(moptConfiguration.basepath.location).append(moptConfiguration.metamodel.location) + val metaModelOutputPath = outcomePath.append(metaModelInputPath.lastSegment) + + if (!metaModelInputPath.empty) { + val outputFile = metaModelOutputPath.toFile + Files.createParentDirs(outputFile) + Files.copy(metaModelInputPath.toFile, outputFile) + } + return metaModelOutputPath + } + def void saveOutcome(){ val experimentDate = new SimpleDateFormat("yyMMdd-HHmmss").format(experimentStartTime); val outcomePath = projectRoot.append(String.format("mdeo-results/experiment-%s/", experimentDate)); + + val metaModelOutputPath = copyMetaModel(outcomePath) val batchesOutput = new StringBuilder(); - batches.forEach[ batch | batchesOutput.append(outputBatchSummary(batch, outcomePath))] + batches.forEach[ batch | batchesOutput.append(outputBatchSummary(batch, outcomePath, metaModelOutputPath))] outputExperimentSummary(batches, outcomePath, moptFile, batchesOutput) } - def writeModel(EObject model, String path) { - val resource = resourceSet.createResource(URI.createFileURI(path)) + def writeModel(EObject model, String path, String metaModelPath) { + val resource = resourceSet.createResource(URI.createFileURI(new File(path).absolutePath)) if (resource.loaded) { resource.contents.clear } resource.contents.add(model) + // Change URI of model package to reference the meta model copied to output location + model.eClass.EPackage.eResource.URI = URI.createFileURI(metaModelPath) + // Keep schema location in output models val Map options = new HashMap(); options.put(XMIResource.OPTION_SCHEMA_LOCATION, Boolean.TRUE);