From e70a571dfd82252a15db31c19c0976445df189fc Mon Sep 17 00:00:00 2001 From: Maximilian Kratz Date: Wed, 29 Oct 2025 14:42:14 +0100 Subject: [PATCH] Adds MdVNE example with GIPS sorting enabled --- .../gipsl/examples/mdvne/ExampleMdVNE.java | 3 +- .../examples/mdvne/ExampleMdVNESorted.java | 51 +++++++++++++++++++ 2 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 org.emoflon.gips.gipsl.examples.mdvne/src/org/emoflon/gips/gipsl/examples/mdvne/ExampleMdVNESorted.java diff --git a/org.emoflon.gips.gipsl.examples.mdvne/src/org/emoflon/gips/gipsl/examples/mdvne/ExampleMdVNE.java b/org.emoflon.gips.gipsl.examples.mdvne/src/org/emoflon/gips/gipsl/examples/mdvne/ExampleMdVNE.java index 1f2925ba..c731037f 100644 --- a/org.emoflon.gips.gipsl.examples.mdvne/src/org/emoflon/gips/gipsl/examples/mdvne/ExampleMdVNE.java +++ b/org.emoflon.gips.gipsl.examples.mdvne/src/org/emoflon/gips/gipsl/examples/mdvne/ExampleMdVNE.java @@ -1,12 +1,13 @@ package org.emoflon.gips.gipsl.examples.mdvne; -import gips.examples.dependencies.GipsExamplesLogger; import java.io.IOException; import org.eclipse.emf.common.util.URI; import org.emoflon.gips.core.milp.SolverOutput; import org.emoflon.gips.gipsl.examples.mdvne.api.gips.MdvneGipsAPI; +import gips.examples.dependencies.GipsExamplesLogger; + public class ExampleMdVNE extends GipsExamplesLogger { public static void main(final String[] args) { diff --git a/org.emoflon.gips.gipsl.examples.mdvne/src/org/emoflon/gips/gipsl/examples/mdvne/ExampleMdVNESorted.java b/org.emoflon.gips.gipsl.examples.mdvne/src/org/emoflon/gips/gipsl/examples/mdvne/ExampleMdVNESorted.java new file mode 100644 index 00000000..9d4e5019 --- /dev/null +++ b/org.emoflon.gips.gipsl.examples.mdvne/src/org/emoflon/gips/gipsl/examples/mdvne/ExampleMdVNESorted.java @@ -0,0 +1,51 @@ +package org.emoflon.gips.gipsl.examples.mdvne; + +import gips.examples.dependencies.GipsExamplesLogger; +import java.io.IOException; + +import org.eclipse.emf.common.util.URI; +import org.emoflon.gips.core.gt.PatternMatch2MappingSorterByURI; +import org.emoflon.gips.core.milp.ConstraintSorterByName; +import org.emoflon.gips.core.milp.SolverOutput; +import org.emoflon.gips.gipsl.examples.mdvne.api.gips.MdvneGipsAPI; + +public class ExampleMdVNESorted extends GipsExamplesLogger { + + public static void main(final String[] args) { + // Create new MdVNE Gips API and load a model + final MdvneGipsAPI api = new MdvneGipsAPI(); + api.init(URI.createFileURI("./resources/example-models/model-in.xmi")); + api.getTracer().enableTracing(true); + api.getEclipseIntegrationConfig().setSolutionValuesSynchronizationEnabled(true); + + api.getSolverConfig().setEnableLpOutput(true); + api.getSolverConfig().setLpPath("output.lp"); + + api.setMatchSorter(new PatternMatch2MappingSorterByURI()); + api.setConstraintSorter(new ConstraintSorterByName()); + + // Build the ILP problem (including updates) + api.buildProblem(true); + final SolverOutput output = api.solveProblem(); + logger.info("Solver status: " + output.status()); + logger.info("Objective value: " + output.objectiveValue()); + + api.getSrv2srv().applyNonZeroMappings(); + api.getSw2node().applyNonZeroMappings(); + api.getL2p().applyNonZeroMappings(); + api.getL2s().applyNonZeroMappings(); + api.getNet2net().applyNonZeroMappings(); + + try { + api.saveResult("./resources/example-models/model-out.xmi"); + } catch (final IOException e) { + e.printStackTrace(); + } + + api.terminate(); + + logger.info("GIPS run finished."); + System.exit(0); + } + +}