diff --git a/org.fortiss.af3.exploration.alg/.classpath b/org.fortiss.af3.exploration.alg/.classpath index 371de5fdd2cc52c7db498a6697c11891bcf95a0d..66cc3ddb464545835549991678de7414dc1c5204 100644 --- a/org.fortiss.af3.exploration.alg/.classpath +++ b/org.fortiss.af3.exploration.alg/.classpath @@ -21,9 +21,9 @@ <classpathentry exported="true" kind="lib" path="lib/apfloat.jar"/> <classpathentry exported="true" kind="lib" path="lib/jgrapht-ext-0.9.0.jar"/> <classpathentry exported="true" kind="lib" path="lib/jgraphx-2.0.0.1.jar"/> - <classpathentry kind="lib" path="lib/guice-assistedinject-4.2.0.jar" sourcepath="lib/guice-assistedinject-4.2.0-sources.jar"/> - <classpathentry kind="lib" path="lib/guice-4.2.0.jar" sourcepath="lib/guice-4.2.0-sources.jar"/> - <classpathentry kind="lib" path="lib/guice-multibindings-4.2.0.jar" sourcepath="lib/guice-multibindings-4.2.0-sources.jar"/> + <classpathentry exported="true" kind="lib" path="lib/guice-4.2.1-SNAPSHOT.jar" sourcepath="lib/guice-4.2.1-SNAPSHOT-sources.jar"/> + <classpathentry exported="true" kind="lib" path="lib/guice-assistedinject-4.2.1-SNAPSHOT.jar" sourcepath="lib/guice-assistedinject-4.2.1-SNAPSHOT-sources.jar"/> + <classpathentry exported="true" kind="lib" path="lib/guice-multibindings-4.2.1-SNAPSHOT.jar" sourcepath="lib/guice-multibindings-4.2.1-SNAPSHOT-sources.jar"/> <classpathentry kind="lib" path="lib/jcommon-1.0.23.jar"/> <classpathentry kind="lib" path="lib/jfreechart-1.0.19.jar" sourcepath="lib/jfreechart-1.0.19-src.jar"/> <classpathentry kind="output" path="build"/> diff --git a/org.fortiss.af3.exploration.alg/META-INF/MANIFEST.MF b/org.fortiss.af3.exploration.alg/META-INF/MANIFEST.MF index b0eb425520f99345e88d2d590e7b93a40b8eabaf..bf4241218532bf6436ef087e58a7a89d96f6e67b 100644 --- a/org.fortiss.af3.exploration.alg/META-INF/MANIFEST.MF +++ b/org.fortiss.af3.exploration.alg/META-INF/MANIFEST.MF @@ -9,9 +9,9 @@ Bundle-ClassPath: ., lib/apfloat.jar, lib/jgrapht-ext-0.9.0.jar, lib/jgraphx-2.0.0.1.jar, - lib/guice-assistedinject-4.2.0.jar, - lib/guice-4.2.0.jar, - lib/guice-multibindings-4.2.0.jar, + lib/guice-4.2.1-SNAPSHOT.jar, + lib/guice-assistedinject-4.2.1-SNAPSHOT.jar, + lib/guice-multibindings-4.2.1-SNAPSHOT.jar, lib/commons-collections4-4.1.jar, lib/opt4j-optimizers-SNAPSHOT-20161110.jar, lib/guava-25.1-jre.jar, diff --git a/org.fortiss.af3.exploration.alg/build.properties b/org.fortiss.af3.exploration.alg/build.properties index 60e7d0cdc7a6fc47e05cb5ac131590a589772395..b8f44e865f6d3cd8e5394fd1a266fd6929cc59c8 100644 --- a/org.fortiss.af3.exploration.alg/build.properties +++ b/org.fortiss.af3.exploration.alg/build.properties @@ -1,27 +1,27 @@ -# (c) 2017 fortiss GmbH - -bin.includes = .,\ - META-INF/,\ - plugin.xml,\ - plugin.properties,\ - lib/aopalliance-1.0.jar,\ - lib/apfloat.jar,\ - lib/jgrapht-core-0.9.0.jar,\ - lib/licenses/,\ - lib/opt4j-core-SNAPSHOT-20180714.jar,\ - lib/opt4j-operators-SNAPSHOT-20180714.jar,\ - lib/opt4j-satdecoding-3.1.3.jar,\ - lib/opt4j-viewer-3.1.3.jar,\ - lib/jgrapht-ext-0.9.0.jar,\ - lib/jgraphx-2.0.0.1.jar,\ - lib/guice-assistedinject-4.2.0.jar,\ - lib/guice-4.2.0.jar,\ - lib/guice-multibindings-4.2.0.jar,\ - lib/commons-collections4-4.1.jar,\ - lib/opt4j-optimizers-SNAPSHOT-20161110.jar,\ - lib/guava-25.1-jre.jar,\ - lib/jfreechart-1.0.19.jar,\ - lib/jcommon-1.0.23.jar -source.. = src/, \ - generated-src -output.. = build/ +# (c) 2017 fortiss GmbH + +bin.includes = .,\ + META-INF/,\ + plugin.xml,\ + plugin.properties,\ + lib/aopalliance-1.0.jar,\ + lib/apfloat.jar,\ + lib/jgrapht-core-0.9.0.jar,\ + lib/licenses/,\ + lib/opt4j-core-SNAPSHOT-20180714.jar,\ + lib/opt4j-operators-SNAPSHOT-20180714.jar,\ + lib/opt4j-satdecoding-3.1.3.jar,\ + lib/opt4j-viewer-3.1.3.jar,\ + lib/jgrapht-ext-0.9.0.jar,\ + lib/jgraphx-2.0.0.1.jar,\ + lib/guice-4.2.1-SNAPSHOT.jar,\ + lib/guice-assistedinject-4.2.1-SNAPSHOT.jar,\ + lib/guice-multibindings-4.2.1-SNAPSHOT.jar,\ + lib/commons-collections4-4.1.jar,\ + lib/opt4j-optimizers-SNAPSHOT-20161110.jar,\ + lib/guava-25.1-jre.jar,\ + lib/jfreechart-1.0.19.jar,\ + lib/jcommon-1.0.23.jar +source.. = src/, \ + generated-src +output.. = build/ diff --git a/org.fortiss.af3.exploration.alg/lib/guice-4.2.0.jar b/org.fortiss.af3.exploration.alg/lib/guice-4.2.0.jar deleted file mode 100644 index b71d669886ace13a7e146a06636f5c5179527a21..0000000000000000000000000000000000000000 Binary files a/org.fortiss.af3.exploration.alg/lib/guice-4.2.0.jar and /dev/null differ diff --git a/org.fortiss.af3.exploration.alg/lib/guice-4.2.0-sources.jar b/org.fortiss.af3.exploration.alg/lib/guice-4.2.1-SNAPSHOT-sources.jar similarity index 88% rename from org.fortiss.af3.exploration.alg/lib/guice-4.2.0-sources.jar rename to org.fortiss.af3.exploration.alg/lib/guice-4.2.1-SNAPSHOT-sources.jar index a65645519e6adc1bd6693c6420e17f02dd3744f3..9e91db90ed622464b81440158e6eadb74432d974 100644 Binary files a/org.fortiss.af3.exploration.alg/lib/guice-4.2.0-sources.jar and b/org.fortiss.af3.exploration.alg/lib/guice-4.2.1-SNAPSHOT-sources.jar differ diff --git a/org.fortiss.af3.exploration.alg/lib/guice-4.2.1-SNAPSHOT.jar b/org.fortiss.af3.exploration.alg/lib/guice-4.2.1-SNAPSHOT.jar new file mode 100644 index 0000000000000000000000000000000000000000..434b8c2b3717b72ac61c34f07588aa98ea0928e7 Binary files /dev/null and b/org.fortiss.af3.exploration.alg/lib/guice-4.2.1-SNAPSHOT.jar differ diff --git a/org.fortiss.af3.exploration.alg/lib/guice-assistedinject-4.2.0.jar b/org.fortiss.af3.exploration.alg/lib/guice-assistedinject-4.2.0.jar deleted file mode 100644 index 604fe0f55f3738bc006ffc6f784a0c821e2d7df4..0000000000000000000000000000000000000000 Binary files a/org.fortiss.af3.exploration.alg/lib/guice-assistedinject-4.2.0.jar and /dev/null differ diff --git a/org.fortiss.af3.exploration.alg/lib/guice-assistedinject-4.2.0-sources.jar b/org.fortiss.af3.exploration.alg/lib/guice-assistedinject-4.2.1-SNAPSHOT-sources.jar similarity index 81% rename from org.fortiss.af3.exploration.alg/lib/guice-assistedinject-4.2.0-sources.jar rename to org.fortiss.af3.exploration.alg/lib/guice-assistedinject-4.2.1-SNAPSHOT-sources.jar index 661022c21170a7dda4349718f93abc55a52c652c..22dc34ae573e8470234cd3bc0e5671dde912fa77 100644 Binary files a/org.fortiss.af3.exploration.alg/lib/guice-assistedinject-4.2.0-sources.jar and b/org.fortiss.af3.exploration.alg/lib/guice-assistedinject-4.2.1-SNAPSHOT-sources.jar differ diff --git a/org.fortiss.af3.exploration.alg/lib/guice-assistedinject-4.2.1-SNAPSHOT.jar b/org.fortiss.af3.exploration.alg/lib/guice-assistedinject-4.2.1-SNAPSHOT.jar new file mode 100644 index 0000000000000000000000000000000000000000..22529e2d39504e5f554a9d37f77bb10abe3ed40e Binary files /dev/null and b/org.fortiss.af3.exploration.alg/lib/guice-assistedinject-4.2.1-SNAPSHOT.jar differ diff --git a/org.fortiss.af3.exploration.alg/lib/guice-multibindings-4.2.0-sources.jar b/org.fortiss.af3.exploration.alg/lib/guice-multibindings-4.2.0-sources.jar deleted file mode 100644 index cde8d9203c9155ac2e5a052d4302d8194f1cca38..0000000000000000000000000000000000000000 Binary files a/org.fortiss.af3.exploration.alg/lib/guice-multibindings-4.2.0-sources.jar and /dev/null differ diff --git a/org.fortiss.af3.exploration.alg/lib/guice-multibindings-4.2.0.jar b/org.fortiss.af3.exploration.alg/lib/guice-multibindings-4.2.1-SNAPSHOT-sources.jar similarity index 69% rename from org.fortiss.af3.exploration.alg/lib/guice-multibindings-4.2.0.jar rename to org.fortiss.af3.exploration.alg/lib/guice-multibindings-4.2.1-SNAPSHOT-sources.jar index f856348967e7eb0a82cdf8beb00bcf3fab7d0b60..b982f511c509cc0972fd65d7afc35a6c8abac342 100644 Binary files a/org.fortiss.af3.exploration.alg/lib/guice-multibindings-4.2.0.jar and b/org.fortiss.af3.exploration.alg/lib/guice-multibindings-4.2.1-SNAPSHOT-sources.jar differ diff --git a/org.fortiss.af3.exploration.alg/lib/guice-multibindings-4.2.1-SNAPSHOT.jar b/org.fortiss.af3.exploration.alg/lib/guice-multibindings-4.2.1-SNAPSHOT.jar new file mode 100644 index 0000000000000000000000000000000000000000..d67166e5ca164a274ccd2e053560a7df32efc8cf Binary files /dev/null and b/org.fortiss.af3.exploration.alg/lib/guice-multibindings-4.2.1-SNAPSHOT.jar differ diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/.ratings index a18c43f873d9ac53ee84a65785938d2efa252f51..ddcee2b01b83d601f4011a244a2e302e65d6f244 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/.ratings +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/.ratings @@ -1,6 +1,6 @@ CompositeExplorationSolution.java db9dadb94e6696cddaf12f0c5238fecfc4348afc RED -DSEFactory.java b2eda5cf4b3fb41f0247751116276c3f7a3fd33c RED -Explorer.java be3ff1506a4aa34861de98e0a7e56743630f5afe RED +DSEFactory.java e8fa834b94a01ca7117d96c152f221d1952fdcc8 RED +Explorer.java eb33cc2a910233fb3d9d2d5ff0249938d7e0ce89 RED ImplicitExplorationTargetFactory.java 25c3c668ed268843f8af7e37eb03370ed513b482 RED SolutionQuantification.java 19cd7caa721bbca3112af7825c7fb20a96a4a799 RED TaskMappingFactory.java 13f4e8104769a1592050ebb6e23d6fbcf864d1d2 RED diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/DSEFactory.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/DSEFactory.java index b2eda5cf4b3fb41f0247751116276c3f7a3fd33c..e8fa834b94a01ca7117d96c152f221d1952fdcc8 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/DSEFactory.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/DSEFactory.java @@ -16,14 +16,12 @@ package org.fortiss.af3.exploration.alg.dse; import java.util.ArrayList; -import java.util.Collection; import java.util.List; import javax.activation.UnsupportedDataTypeException; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.create.ArchitectureExplorationCreator; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.create.partitionmapping.PartitionMappingCreator; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.create.platform.PlatformCommunicationGraphCreator; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.create.safetyfunctionarch.SafetyFunctionArchCreator; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.create.taskmapping.AbstractTaskMappingCreator; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.create.taskmapping.TaskMappingCreator; @@ -45,11 +43,7 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.partitionmappin import org.fortiss.af3.exploration.alg.dse.evaluator.ArchitectureEvaluator; import org.fortiss.af3.exploration.alg.dse.sysmodel.FailSilentExecModelFactory; import org.fortiss.af3.exploration.alg.dse.sysmodel.FaultDetectionVotingExecModelFactory; -import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IExecutionUnitAdapter; -import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IGatewayUnitAdapter; -import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IMemoryUnitAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITaskAdapter; -import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITransmissionUnitAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; import org.fortiss.af3.exploration.moea.model.DseSpecification; import org.fortiss.af3.exploration.moea.model.feature.SafetyExploration; @@ -140,8 +134,8 @@ public class DSEFactory { */ @SuppressWarnings("unchecked") private <C, T extends SafetyFunctionArchEncoding> void createSafetyFunctionArchProblem( - DseProcessProblemModule archExpProblemModule, - DecoderDependencyGraph execDepGraph) throws Exception { + DseProcessProblemModule archExpProblemModule, DecoderDependencyGraph execDepGraph) + throws Exception { // These suppress warnings are required since type erasure in Java does not allow to pass // XY<Z>.class. SafetyFunctionArchCreator sfCreator = new SafetyFunctionArchCreator(); @@ -166,9 +160,8 @@ public class DSEFactory { * @throws CycleFoundException * if a cyclic dependency is discovered when registering the problem. */ - private void createPartitionMappingProblem( - DseProcessProblemModule archExpProblemModule, DseSpecification dse, - DecoderDependencyGraph execDepGraph) throws CycleFoundException { + private void createPartitionMappingProblem(DseProcessProblemModule archExpProblemModule, + DseSpecification dse, DecoderDependencyGraph execDepGraph) throws CycleFoundException { Class<PartitionMappingEncoding> pmEnodingClass = PartitionMappingEncoding.class; PartitionMappingCreator pmCreator = new PartitionMappingCreator(); @@ -184,25 +177,25 @@ public class DSEFactory { */ @SuppressWarnings("unchecked") private void createPlatformCommunicationGraphProblem( - DseProcessProblemModule archExpProblemModule, - DecoderDependencyGraph execDepGraph) throws CycleFoundException { + DseProcessProblemModule archExpProblemModule, DecoderDependencyGraph execDepGraph) + throws CycleFoundException { Class<PlatformCommunicationGraphEncoding> pmEnodingClass = PlatformCommunicationGraphEncoding.class; - PlatformCommunicationGraphCreator pmCreator = - new PlatformCommunicationGraphCreator(execDepGraph, - (Collection<IExecutionUnitAdapter<?>>)(Collection<?>)systemModelAdapter - .getDeploymentTargets(), - (Collection<IMemoryUnitAdapter<?>>)(Collection<?>)systemModelAdapter - .getMemoryUnits(), - (Collection<IGatewayUnitAdapter<?>>)(Collection<?>)systemModelAdapter - .getGatewayUnits(), - (Collection<ITransmissionUnitAdapter<?>>)(Collection<?>)systemModelAdapter - .getTransmissionUnits(), systemModelAdapter.getResouceConnections()); + // PlatformCommunicationGraphCreator pmCreator = + // new PlatformCommunicationGraphCreator(execDepGraph, + // (Collection<IExecutionUnitAdapter<?>>)(Collection<?>)systemModelAdapter + // .getDeploymentTargets(), + // (Collection<IMemoryUnitAdapter<?>>)(Collection<?>)systemModelAdapter + // .getMemoryUnits(), + // (Collection<IGatewayUnitAdapter<?>>)(Collection<?>)systemModelAdapter + // .getGatewayUnits(), + // (Collection<ITransmissionUnitAdapter<?>>)(Collection<?>)systemModelAdapter + // .getTransmissionUnits(), systemModelAdapter.getResouceConnections()); @SuppressWarnings("rawtypes") List<ComposableDecoder> pmDecoders = new ArrayList<>(); PartitionMappingDecoderGraph pmgDecoder = new PartitionMappingDecoderGraph(); - execDepGraph.addCreatedEncoding(pmCreator.getCreatedEncodingType()); - archExpProblemModule.registerSubProblem(pmEnodingClass, pmCreator, pmDecoders); + // execDepGraph.addCreatedEncoding(pmCreator.getCreatedEncodingType()); + // archExpProblemModule.registerSubProblem(pmEnodingClass, pmCreator, pmDecoders); } /** @@ -226,8 +219,8 @@ public class DSEFactory { @SuppressWarnings("unchecked") private <S extends InstantiatedTaskMappingEntry, T extends InstantiatedTaskMappingEncoding<S>> void createAbstractTaskMappingProblem(TaskMappingFactory<S, T> tmFactory, - DseProcessProblemModule archExpProblemModule, - DseSpecification dse, DecoderDependencyGraph execDepGraph) throws Exception { + DseProcessProblemModule archExpProblemModule, DseSpecification dse, + DecoderDependencyGraph execDepGraph) throws Exception { Class<AbstractTaskMappingEncoding> tmEnodingClass = AbstractTaskMappingEncoding.class; AbstractTaskMappingCreator tmCreator = tmFactory.createAbstractTaskMappingCreator(execDepGraph); @@ -260,8 +253,8 @@ public class DSEFactory { @SuppressWarnings("unchecked") private <S extends InstantiatedTaskMappingEntry, T extends InstantiatedTaskMappingEncoding<S>> void createTaskMappingInstantiationProblem(TaskMappingFactory<S, T> tmFactory, - DseProcessProblemModule archExpProblemModule, - DseSpecification dse, DecoderDependencyGraph execDepGraph) throws Exception { + DseProcessProblemModule archExpProblemModule, DseSpecification dse, + DecoderDependencyGraph execDepGraph) throws Exception { // These suppress warnings are required since type erasure in Java does not allow to pass // XY<Z>.class. @SuppressWarnings("rawtypes") TaskMappingCreator tmCreator = diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/Explorer.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/Explorer.java index be3ff1506a4aa34861de98e0a7e56743630f5afe..eb33cc2a910233fb3d9d2d5ff0249938d7e0ce89 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/Explorer.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/Explorer.java @@ -29,6 +29,8 @@ import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.emf.ecore.EObject; import org.fortiss.af3.exploration.alg.dse.backend.IExplorerBackend; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.Opt4JExplorerBackend; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode.DecodingInterceptModule; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode.DecodingPluginInterceptor; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; import org.fortiss.af3.exploration.alg.service.IExplorationConstraintTransformationService; @@ -232,7 +234,9 @@ public class Explorer { SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter, Set<Class<? extends Phenotype>> requestedSolutions, IProgressMonitor progressMonitor) throws Exception { - Injector dseInjector = Guice.createInjector(systemModelAdapter); + Injector dseInjector = + Guice.createInjector(systemModelAdapter, new DecodingInterceptModule( + new DecodingPluginInterceptor())); if(dse.getOptimizer() instanceof EAOptimizer) { return new Opt4JExplorerBackend(dse, expSpec, targetAssocMap, dseInjector, diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/.ratings index f98c91472303287a8f446561c8e27c4bfd4c714d..7f892fee50b10732b08e188d7dba7e91d466b9b0 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/.ratings +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/.ratings @@ -1,5 +1,5 @@ Opt4JDseTask.java b5cb9e664e7a8fc2b5157bcdcaca740c2fa85336 YELLOW Opt4JDseTaskProvider.java ff2bbc6da2b21bd0bc64c3fa77dc8fa9939d10af RED Opt4JExplorationSolutionSet.java 8578ee9c438bc3327a64172e996306a89606c782 RED -Opt4JExplorerBackend.java cddd1dc5ff5833b7e23cca7328682d88ee782677 RED +Opt4JExplorerBackend.java a2b73a1640a16e551641b4514d1b35bdae41ffc5 RED Opt4JSingleExplorationSolution.java 41ce92d11b2e7a6a8c39bffa990c691160c36c8d RED diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/Opt4JExplorerBackend.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/Opt4JExplorerBackend.java index cddd1dc5ff5833b7e23cca7328682d88ee782677..a2b73a1640a16e551641b4514d1b35bdae41ffc5 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/Opt4JExplorerBackend.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/Opt4JExplorerBackend.java @@ -218,6 +218,7 @@ public class Opt4JExplorerBackend extends ExplorerBackendBase<EAOptimizer> { // Define a completer module that "controls" the execution of the decode and the evaluation // phases. It also allows to parallelize the execution of these phases. IndividualCompleterModule comp = new IndividualCompleterModule(); + if(opt4JParameters.isParallelExecution()) { comp.setType(IndividualCompleterModule.Type.PARALLEL); comp.setThreads(Runtime.getRuntime().availableProcessors()); @@ -265,6 +266,8 @@ public class Opt4JExplorerBackend extends ExplorerBackendBase<EAOptimizer> { dse.getFeatures()); Collection<DecoderModule<?>> enabledDecoders = newHashSet(); enabledFeatures.forEach(f -> enabledDecoders.addAll(f.getDecoders())); + // Note: The interceptor is not used: It is only activated if a Phenotype instance is + // requested from the decoders. GuiceDecoder guiceDecoder = new GuiceDecoder(resultTypes, enabledDecoders); buildCheckedDecodingInjector(guiceDecoder); } diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/partitionmapping/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/partitionmapping/.ratings index 66bdddf50ec5e12fbce9a42e6a1e6b88c397ccf1..107c3eeb71fb8ec661658f505e5a443c7e73717a 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/partitionmapping/.ratings +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/partitionmapping/.ratings @@ -1 +1 @@ -PartitionMappingCreator.java 087de657669392f17b1bd3c84de4fb794d2f4da5 RED +PartitionMappingCreator.java 5234835b1e94f2226e33bf04c2705598ad166858 RED diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/partitionmapping/PartitionMappingCreator.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/partitionmapping/PartitionMappingCreator.java index 087de657669392f17b1bd3c84de4fb794d2f4da5..5234835b1e94f2226e33bf04c2705598ad166858 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/partitionmapping/PartitionMappingCreator.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/partitionmapping/PartitionMappingCreator.java @@ -17,6 +17,7 @@ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.create.partitionmappin import java.util.Collection; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.Partition; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.PartitionMappingEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.PartitionMappingEncoding.CREATE_STARTEGY; import org.fortiss.af3.exploration.alg.dse.module.CreatorModule; @@ -34,28 +35,23 @@ import com.google.inject.Provides; */ public class PartitionMappingCreator extends CreatorModule<PartitionMappingEncoding> { - // /** Constructor. */ - // public PartitionMappingCreator(Collection<IExecutionUnitAdapter<?>> execUnits, int numTasks) - // { - // this.execUnits = execUnits; - // this.numTasks = numTasks; - // } - - /** {@inheritDoc} */ + /** + * Creates an initial {@link PartitionMappingEncoding} using strategies using the minimal, + * maximal, or a random number of created {@link Partition}s w.r.t. the number of + * {@link ITaskAdapter}s + */ @Provides public PartitionMappingEncoding create(Collection<IExecutionUnitAdapter<?>> execUnits, Collection<ITaskAdapter<?>> tasks) { int numTasks = tasks.size(); // "Probability distribution" for the strategy selection: |1|numTasks - 2|1| ==> numTasks int strategySelIdx = RandomExploration.getInstance().nextInt(numTasks); - switch(strategySelIdx) { - case 0: - return new PartitionMappingEncoding(execUnits, numTasks, CREATE_STARTEGY.MIN_SET); - case 24: - return new PartitionMappingEncoding(execUnits, numTasks, CREATE_STARTEGY.MAX_SET); - default: - return new PartitionMappingEncoding(execUnits, numTasks, CREATE_STARTEGY.RANDOM_SET); + if(strategySelIdx == 0) { + return new PartitionMappingEncoding(execUnits, numTasks, CREATE_STARTEGY.MIN_SET); + } else if(strategySelIdx == numTasks) { + return new PartitionMappingEncoding(execUnits, numTasks, CREATE_STARTEGY.MAX_SET); } + return new PartitionMappingEncoding(execUnits, numTasks, CREATE_STARTEGY.RANDOM_SET); } /** {@inheritDoc} */ diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/platform/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/platform/.ratings index 0076d06e09699b98f7fe84119620420d1dbe5a3f..1b2e21eebe90c736e775aacb603e8e0beab0160d 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/platform/.ratings +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/platform/.ratings @@ -1 +1 @@ -PlatformCommunicationGraphCreator.java 54301f92ded2065b76a45ad27aeb6a8dcbac01fb RED +PlatformCommunicationGraphCreator.java 2a6d6c22f178f4323f60396e71b53c1c748a7610 RED diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/platform/PlatformCommunicationGraphCreator.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/platform/PlatformCommunicationGraphCreator.java index 54301f92ded2065b76a45ad27aeb6a8dcbac01fb..2a6d6c22f178f4323f60396e71b53c1c748a7610 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/platform/PlatformCommunicationGraphCreator.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/platform/PlatformCommunicationGraphCreator.java @@ -18,11 +18,7 @@ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.create.platform; import java.util.Collection; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.platform.PlatformCommunicationGraphEncoding; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.create.ComposableCreatorBase; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.genotype.FlatGenotypeMap; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.graph.DecoderDependencyGraph; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.FlatPhenotypeMap; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype; +import org.fortiss.af3.exploration.alg.dse.module.CreatorModule; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IExecutionUnitAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IGatewayUnitAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IMemoryUnitAdapter; @@ -30,48 +26,28 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IResourceAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IResourceConnectionAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IResourceConnectionAdapter.ConnectionType; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITransmissionUnitAdapter; -import org.fortiss.af3.exploration.alg.service.IExplorationEncoding; import org.jgrapht.DirectedGraph; import org.jgrapht.Graphs; import org.jgrapht.graph.DefaultDirectedGraph; import org.jgrapht.graph.DefaultEdge; +import com.google.inject.Provides; + /** * * @author diewald */ -public class PlatformCommunicationGraphCreator - extends ComposableCreatorBase<PlatformCommunicationGraphEncoding> { - /** Execution Units present in the input models. */ - private Collection<IExecutionUnitAdapter<?>> execUnits; - /** Memories present in the input models. */ - private Collection<IMemoryUnitAdapter<?>> memoryUnits; - /** Gateways present in the input models. */ - private Collection<IGatewayUnitAdapter<?>> gatewayUnits; - /** Transmission Units present in the input models. */ - private Collection<ITransmissionUnitAdapter<?>> transmissionUnits; - /** Connections between resources present in the input models. */ - private Collection<IResourceConnectionAdapter> resourceConnections; +public class PlatformCommunicationGraphCreator extends + CreatorModule<PlatformCommunicationGraphEncoding> { - /** Constructor. */ - public PlatformCommunicationGraphCreator(DecoderDependencyGraph depGraph, + /** Creates a {@link PlatformCommunicationGraphEncoding} from the input model. */ + @Provides + public PlatformCommunicationGraphEncoding create( Collection<IExecutionUnitAdapter<?>> execUnits, Collection<IMemoryUnitAdapter<?>> memoryUnits, Collection<IGatewayUnitAdapter<?>> gatewayUnits, Collection<ITransmissionUnitAdapter<?>> transmissionUnits, Collection<IResourceConnectionAdapter> resourceConnections) { - super(depGraph); - this.execUnits = execUnits; - this.memoryUnits = memoryUnits; - this.gatewayUnits = gatewayUnits; - this.transmissionUnits = transmissionUnits; - this.resourceConnections = resourceConnections; - } - - /** {@inheritDoc} */ - @Override - public PlatformCommunicationGraphEncoding createComposable(FlatGenotypeMap createdGenotypes, - FlatPhenotypeMap<Phenotype> decodedPhenotypes) { DirectedGraph<IResourceAdapter<?>, DefaultEdge> tempPlatformCommGraph = new DefaultDirectedGraph<IResourceAdapter<?>, DefaultEdge>(DefaultEdge.class); DirectedGraph<IResourceAdapter<?>, DefaultEdge> platformGraph = @@ -91,12 +67,10 @@ public class PlatformCommunicationGraphCreator // If the current resource is a child of a {@link TransmissionUnit} (like a NoC // router), respect the direction of connections such that complex networks are // correctly reflected. - if(connection - .getConnectionType(currentReceiverResource) == ConnectionType.OUTGOING) { + if(connection.getConnectionType(currentReceiverResource) == ConnectionType.OUTGOING) { Graphs.addEdgeWithVertices(platformGraph, connection.getSourceResource(), currentReceiverResource); - } else if(connection - .getConnectionType(currentReceiverResource) == ConnectionType.INCOMING) { + } else if(connection.getConnectionType(currentReceiverResource) == ConnectionType.INCOMING) { Graphs.addEdgeWithVertices(platformGraph, currentReceiverResource, connection.getSourceResource()); } else { @@ -116,7 +90,8 @@ public class PlatformCommunicationGraphCreator /** {@inheritDoc} */ @Override - public Class<? extends IExplorationEncoding> getCreatedEncodingType() { - return PlatformCommunicationGraphEncoding.class; + public PlatformCommunicationGraphEncoding create() { + // TODO Auto-generated method stub + return null; } } diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/platform/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/platform/.ratings index 3fab49e2b949464825decea21a2b7739839d17ec..94e29e7ac7c9bafd8bac6eb6cf8a3066da5756e3 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/platform/.ratings +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/platform/.ratings @@ -1 +1 @@ -PlatformCommunicationGraphEncoding.java f0361039e0d012f0de4f4f29982cb271039dcf1a RED +PlatformCommunicationGraphEncoding.java 492515975564dbffbb1a797a2f51d2c2ad8e3c05 RED diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/platform/PlatformCommunicationGraphEncoding.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/platform/PlatformCommunicationGraphEncoding.java index f0361039e0d012f0de4f4f29982cb271039dcf1a..492515975564dbffbb1a797a2f51d2c2ad8e3c05 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/platform/PlatformCommunicationGraphEncoding.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/platform/PlatformCommunicationGraphEncoding.java @@ -15,7 +15,6 @@ +--------------------------------------------------------------------------*/ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.platform; -import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.genotype.ComposableGenotype; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.PhenotypeBase; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IResourceAdapter; @@ -24,6 +23,7 @@ import org.fortiss.af3.exploration.alg.graph.display.JGraphTVisualizer; import org.fortiss.af3.exploration.alg.service.IExplorationEncoding; import org.jgrapht.DirectedGraph; import org.jgrapht.graph.DefaultEdge; +import org.opt4j.core.Genotype; /** * Abstracts the communication network present in a platform system meta-model to a flat graph. This @@ -34,7 +34,7 @@ import org.jgrapht.graph.DefaultEdge; * @author diewald */ public class PlatformCommunicationGraphEncoding extends PhenotypeBase implements - IExplorationEncoding, ComposableGenotype, Cloneable { + IExplorationEncoding, Genotype, Cloneable { /** The graph representing the communication structure of a platform. */ protected DirectedGraph<IResourceAdapter<?>, DefaultEdge> platformGraph; @@ -76,12 +76,6 @@ public class PlatformCommunicationGraphEncoding extends PhenotypeBase implements return new PlatformCommunicationGraphEncoding(platformGraph); } - /** {@inheritDoc} */ - @Override - public Class<? extends ComposableGenotype> getGTypeToRegister() { - return PlatformCommunicationGraphEncoding.class; - } - /** {@inheritDoc} */ @Override public Class<? extends Phenotype> getPTypeToRegister() { diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/.ratings index db66ca2fedaecb7d43f0e3f7c2f522d1e35529ad..baebb4aa6685e26b5ec4c53cd379540070272b24 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/.ratings +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/.ratings @@ -2,8 +2,11 @@ ComposableDecoder.java 0ef247e0e8424968cd8dab8317df0e504c5018d4 RED ComposableDecoderBase.java 7c47b41e609b6911128efa469c2dd65122276bcc RED CompositeDecoder.java 68864146cbd7b0d1444d4157cf88023deb4a21ea RED CompositeDecoderBase.java cc878483ec3dcf3afd60509579c7c17a3433893c RED +DecodingInterceptModule.java 5268f6418e703245ce16b264ccc19efbb36ae9ee RED +DecodingPluginInterceptor.java f7e7f9c96507c6a5b8f659993784ac5bfe491579 RED Genotyped.java c74c870c570597bdb373308fa339ccf2c8e88942 YELLOW -GuiceDecoder.java ed4e3e79d95a7f0ab7f0dfdbf602a06af930c432 RED +GuiceDecoder.java 87c4cc8d429719977dfa4608c67179d2360cbfba RED PhenotypeDecoder.java 042d35c9bcba9a2cddc5e82ca5abe6f52438d1c3 RED +PluginDecoder.java 5982d51cd73da4057e4d3b2ca1d04bfe3ff36855 YELLOW ThreadScope.java f3a2b90fdbf0b2aabde4112c94623da5c262952b RED ThreadScoped.java a8335b0831586ea6ced17a5e7adf2952b72957d9 RED diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/DecodingInterceptModule.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/DecodingInterceptModule.java new file mode 100644 index 0000000000000000000000000000000000000000..5268f6418e703245ce16b264ccc19efbb36ae9ee --- /dev/null +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/DecodingInterceptModule.java @@ -0,0 +1,57 @@ +/*-------------------------------------------------------------------------+ +| Copyright 2018 fortiss GmbH | +| | +| Licensed under the Apache License, Version 2.0 (the "License"); | +| you may not use this file except in compliance with the License. | +| You may obtain a copy of the License at | +| | +| http://www.apache.org/licenses/LICENSE-2.0 | +| | +| Unless required by applicable law or agreed to in writing, software | +| distributed under the License is distributed on an "AS IS" BASIS, | +| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | +| See the License for the specific language governing permissions and | +| limitations under the License. | ++--------------------------------------------------------------------------*/ +package org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode; + +import org.aopalliance.intercept.MethodInterceptor; +import org.fortiss.af3.exploration.alg.dse.module.DecoderModule; + +import com.google.inject.AbstractModule; +import com.google.inject.Injector; +import com.google.inject.Module; +import com.google.inject.Provides; +import com.google.inject.matcher.Matchers; + +/** + * {@link Module} that defines the method interceptors of {@link DecoderModule}s. This module must + * be installed at the {@link Injector} that creates the concrete {@link DecoderModule}s. Otherwise, + * the injection is not known at construction time of the {@link DecoderModule}s and thus method + * interception is not operational. + * + * @author diewald + */ +public class DecodingInterceptModule extends AbstractModule { + + /** Reference to the {@link DecodingPluginInterceptor} handling the method interceptions. */ + private DecodingPluginInterceptor decodingPluginInterceptor; + + /** Constructor. The given {@link DecodingPluginInterceptor} is installed with the binder. */ + public DecodingInterceptModule(DecodingPluginInterceptor decodingPluginInterceptor) { + this.decodingPluginInterceptor = decodingPluginInterceptor; + } + + /** Returns the {@link MethodInterceptor} handling Plugin-capable {@link DecoderModule}s. */ + @Provides + public DecodingPluginInterceptor get() { + return decodingPluginInterceptor; + } + + /** {@inheritDoc} */ + @Override + public void configure() { + bindInterceptor(Matchers.subclassesOf(DecoderModule.class), + Matchers.annotatedWith(PluginDecoder.class), decodingPluginInterceptor); + } +} diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/DecodingPluginInterceptor.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/DecodingPluginInterceptor.java new file mode 100644 index 0000000000000000000000000000000000000000..f7e7f9c96507c6a5b8f659993784ac5bfe491579 --- /dev/null +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/DecodingPluginInterceptor.java @@ -0,0 +1,103 @@ +/*-------------------------------------------------------------------------+ +| Copyright 2018 fortiss GmbH | +| | +| Licensed under the Apache License, Version 2.0 (the "License"); | +| you may not use this file except in compliance with the License. | +| You may obtain a copy of the License at | +| | +| http://www.apache.org/licenses/LICENSE-2.0 | +| | +| Unless required by applicable law or agreed to in writing, software | +| distributed under the License is distributed on an "AS IS" BASIS, | +| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | +| See the License for the specific language governing permissions and | +| limitations under the License. | ++--------------------------------------------------------------------------*/ +package org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode; + +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.List; + +import org.aopalliance.intercept.MethodInterceptor; +import org.aopalliance.intercept.MethodInvocation; +import org.fortiss.af3.exploration.alg.dse.module.DecoderModule; + +import com.google.inject.Binding; +import com.google.inject.Injector; +import com.google.inject.Provider; +import com.google.inject.TypeLiteral; +import com.google.inject.spi.ElementSource; + +/** + * This {@link MethodInterceptor} is intended to be used with {@link DecoderModule}s where multiple + * ones "produce" the same {@link PhenotypeDecoder}. + * It intercepts the decode method call (defined by an annotation) and launches all sub- + * {@link DecoderModule}s before executing its own decoding. Sub-{@link DecoderModule}s are not + * allowed to interfere with each other. + * + * @author diewald + */ +public class DecodingPluginInterceptor implements MethodInterceptor { + + /** + * Reference to the {@link Injector} used to execute the decoding. Required to find all + * {@link DecoderModule}s that produce the same type. + */ + protected Injector decodingInjector; + + /** Sets the {@link Injector} used in the {@link DecodingInterceptModule} phase. */ + public void setDecodingInjector(Injector decodingInjector) { + this.decodingInjector = decodingInjector; + } + + /** {@inheritDoc} */ + @Override + public Object invoke(MethodInvocation invocation) throws Throwable { + Class<?> returnType = invocation.getMethod().getReturnType(); + @SuppressWarnings("unchecked") List<Binding<?>> subDecoderBindings = + (List<Binding<?>>)(List<?>)decodingInjector.findBindingsByType(TypeLiteral + .get(returnType)); + + for(Binding<?> decodeBinding : subDecoderBindings) { + Provider<?> provider = decodeBinding.getProvider(); + ElementSource source = (ElementSource)decodeBinding.getSource(); + Object declaringSource = source.getDeclaringSource(); + if(!(declaringSource instanceof Method)) { + // TODO: Proper error message, modify the exception to take the phenotype instead of + // the genotype. + System.out.println("Wrong"); + } + Method declaringMethod = (Method)declaringSource; + if(!overrides(invocation.getMethod(), declaringMethod)) { + provider.get(); + } + System.out.println("Hi"); + } + + return invocation.proceed(); + } + + /** + * Returns true if {@code override} overrides {@code base}, assumes that the signatures match. + * Taken from Google Guice. + */ + private static boolean overrides(Method override, Method base) { + // First, check the inheritance hierarchy, then compare the method modifiers and signatures. + if(!base.getDeclaringClass().isAssignableFrom(override.getDeclaringClass())) { + return false; + } + + // See JLS section 8.4.8.1 + int modifiers = base.getModifiers(); + if(Modifier.isPublic(modifiers) || Modifier.isProtected(modifiers)) { + return true; + } + if(Modifier.isPrivate(modifiers)) { + return false; + } + // b must be package-private + return override.getDeclaringClass().getPackage() + .equals(base.getDeclaringClass().getPackage()); + } +} diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/GuiceDecoder.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/GuiceDecoder.java index ed4e3e79d95a7f0ab7f0dfdbf602a06af930c432..87c4cc8d429719977dfa4608c67179d2360cbfba 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/GuiceDecoder.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/GuiceDecoder.java @@ -20,7 +20,10 @@ import static org.fortiss.tooling.common.util.LambdaUtils.getFirst; import java.util.Collection; import java.util.Set; +import org.aopalliance.intercept.MethodInterceptor; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.Opt4JDseTaskProvider; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.PartitionMappingEncoding; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.platform.PlatformCommunicationGraphEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.safetyfunctionarch.SafetyFunctionArchEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.FailSilentTaskMappingEncoding; @@ -37,7 +40,6 @@ import com.google.inject.AbstractModule; import com.google.inject.Inject; import com.google.inject.Injector; import com.google.inject.Provides; -import com.google.inject.name.Named; /** * {@link Decoder} that handles dependencies between {@link Decoder}s, {@link Genotype}s, and @@ -57,13 +59,19 @@ public class GuiceDecoder extends AbstractModule implements Decoder<Genotype, Ph /** Set of {@link CreatorModule}s provided by the enabled exploration features. */ private Collection<DecoderModule<?>> enabledDecoders; - /** {@link Opt4JTask} provider used to obtain the opt4j injector. */ + /** {@link Opt4JTask} provider used to obtain the opt4j {@link Injector}. */ @Inject protected Opt4JDseTaskProvider opt4JProvider; /** Child {@link Injector} for the dependency management of the decode phase. */ protected Injector decodingInjector; + /** + * Holds the {@link MethodInterceptor} that is executed when a decode method capable of + * launching sub-decoders is hit. + */ + protected DecodingPluginInterceptor decodingInterceptor; + /** Reference to the input {@link Genotype}. */ // @ThreadScoped protected ThreadLocal<CompositeGenotype<Class<? extends Genotype>, ? extends Genotype>> genotype = @@ -95,9 +103,13 @@ public class GuiceDecoder extends AbstractModule implements Decoder<Genotype, Ph } this.genotype .set((CompositeGenotype<Class<? extends Genotype>, ? extends Genotype>)genotype); - // TODO(AD): See configure(): We need a service machenism and user configuration to select + // TODO(AD): See configure(): We need a service mechanism and user configuration to select // the desired set of activated decoders. decodingInjector = opt4JProvider.get().get().createChildInjector(this); + DecodingPluginInterceptor interceptor = + decodingInjector.getInstance(DecodingPluginInterceptor.class); + interceptor.setDecodingInjector(decodingInjector); + // FIXME: Hack to get the correct instance: Is multiprovisioning supported by Guice? Class<? extends Phenotype> resultType = getFirst(resultTypes).get(); decodingInjector.getInstance(resultType); @@ -121,6 +133,7 @@ public class GuiceDecoder extends AbstractModule implements Decoder<Genotype, Ph @Override protected void configure() { // bindScope(ThreadScoped.class, new ThreadScope()); + install(this); for(DecoderModule<?> module : enabledDecoders) { install(module); @@ -143,12 +156,26 @@ public class GuiceDecoder extends AbstractModule implements Decoder<Genotype, Ph return getGenotype(SafetyFunctionArchEncoding.class); } + /** Returns the {@link PartitionMappingEncoding} from the {@link CompositeGenotype}. */ + @Provides + @Genotyped + public PartitionMappingEncoding getPMEnc() { + return getGenotype(PartitionMappingEncoding.class); + } + + /** Returns the {@link PlatformCommunicationGraphEncoding} from the {@link CompositeGenotype}. */ + @Provides + @Genotyped + public PlatformCommunicationGraphEncoding getPCGEnc() { + return getGenotype(PlatformCommunicationGraphEncoding.class); + } + /** * Returns the {@link AbstractTaskMappingEncoding} sub-{@link Genotype} passed to this decoder. * (Testing!!!) */ @Provides - @Named("Genotyped") + @Genotyped public AbstractTaskMappingEncoding getATMEnc() { return getGenotype(AbstractTaskMappingEncoding.class); } @@ -157,9 +184,8 @@ public class GuiceDecoder extends AbstractModule implements Decoder<Genotype, Ph * Returns the {@link FailSilentTaskMappingEncoding} sub-{@link Genotype} passed to this * decoder. (Testing!!!) */ - /** */ @Provides - @Named("Genotyped") + @Genotyped public FailSilentTaskMappingEncoding getITMEnc() { return getGenotype(FailSilentTaskMappingEncoding.class); } diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/PluginDecoder.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/PluginDecoder.java new file mode 100644 index 0000000000000000000000000000000000000000..5982d51cd73da4057e4d3b2ca1d04bfe3ff36855 --- /dev/null +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/PluginDecoder.java @@ -0,0 +1,36 @@ +/*-------------------------------------------------------------------------+ +| Copyright 2018 fortiss GmbH | +| | +| Licensed under the Apache License, Version 2.0 (the "License"); | +| you may not use this file except in compliance with the License. | +| You may obtain a copy of the License at | +| | +| http://www.apache.org/licenses/LICENSE-2.0 | +| | +| Unless required by applicable law or agreed to in writing, software | +| distributed under the License is distributed on an "AS IS" BASIS, | +| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | +| See the License for the specific language governing permissions and | +| limitations under the License. | ++--------------------------------------------------------------------------*/ +package org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype; +import org.fortiss.af3.exploration.alg.dse.module.DecoderModule; + +/** + * Denotes a "primary" {@link DecoderModule} that has the capability to launch sub- + * {@link DecoderModule}s that return the same {@link Phenotype}. + * + * @author diewald + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.METHOD) +public @interface PluginDecoder { + // Just an annotation... +} diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/exception/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/exception/.ratings index afc426e4c2d40e2f1935f6d87a36a4383ecc6412..c6441792994aa5995cf0fce4b148b2d9844bfdf7 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/exception/.ratings +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/exception/.ratings @@ -1,4 +1,4 @@ DecodingException.java 40bb717fbcdfbceabbc0b7610d6c5bb85ec78cc1 YELLOW -DecodingRuntimeException.java b464b624cd1b387210206c53e63c4b367705bde7 YELLOW +DecodingRuntimeException.java 8d7371f307c947c6e65b6dab45ec64b86c89ff47 YELLOW DependencyException.java b5ebab9ef715091cfe6d998c0acc70658a8e5536 RED MissingDependencyException.java 474cd48820802b026a7109abb2ae56a2ab8eb7b3 RED diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/exception/DecodingRuntimeException.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/exception/DecodingRuntimeException.java index b464b624cd1b387210206c53e63c4b367705bde7..8d7371f307c947c6e65b6dab45ec64b86c89ff47 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/exception/DecodingRuntimeException.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/exception/DecodingRuntimeException.java @@ -16,6 +16,7 @@ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.exception; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode.ComposableDecoder; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype; import org.fortiss.af3.exploration.alg.exception.ExplorationRuntimeException; import org.opt4j.core.Genotype; import org.opt4j.core.problem.Decoder; @@ -26,6 +27,19 @@ import org.opt4j.core.problem.Decoder; * @author diewald */ public class DecodingRuntimeException extends ExplorationRuntimeException { + /** Constructor specialized for decoding errors. */ + public DecodingRuntimeException(Phenotype phenotype, Decoder<?, ?> decoder) { + super("Decoding Error: The Decoder " + decoder.getClass().getSimpleName() + + " failed to create the phenotype " + phenotype.getClass().getSimpleName() + "."); + } + + /** Constructor specialized for decoding errors. Takes an additional message. */ + public DecodingRuntimeException(Phenotype phenotype, Decoder<?, ?> decoder, String msg) { + super("Decoding Error: The Decoder " + decoder.getClass().getSimpleName() + + " failed to create the phenotype " + phenotype.getClass().getSimpleName() + ". " + + msg); + } + /** Constructor specialized for decoding errors. */ public DecodingRuntimeException(Genotype genotype, Decoder<?, ?> decoder) { super("Decoding Error: Could not decode " + genotype + " using the decoder " + decoder + diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/copy/platform/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/copy/platform/.ratings index d64fb46b18a29f41ffeff4e72d451a5907ad2abd..de2d270e636e07f634bfb507fd2a66ec10c16d72 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/copy/platform/.ratings +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/copy/platform/.ratings @@ -1,2 +1,2 @@ CopyPlatformCommunicationGraph.java 940b8a0b104f8ee9809c53fa8d364cd3c892854d RED -CopyPlatformCommunicationGraphModule.java ff27643cf25d732fd46106847a544d5a0bc4a39e RED +CopyPlatformCommunicationGraphModule.java daec92401c363c42f28e19c32d53627b4869e6c3 RED diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/copy/platform/CopyPlatformCommunicationGraphModule.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/copy/platform/CopyPlatformCommunicationGraphModule.java index ff27643cf25d732fd46106847a544d5a0bc4a39e..daec92401c363c42f28e19c32d53627b4869e6c3 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/copy/platform/CopyPlatformCommunicationGraphModule.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/copy/platform/CopyPlatformCommunicationGraphModule.java @@ -28,5 +28,4 @@ public class CopyPlatformCommunicationGraphModule extends CopyModule { protected void config() { addOperator(CopyPlatformCommunicationGraph.class); } - } diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/.ratings index 2219771a712bf1c6483769e4016ad115ad5d7fd3..fac6809477d9df10290b6ddaf9e1c9bb2a848e33 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/.ratings +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/.ratings @@ -1,7 +1,7 @@ ArchitectureDecoder.java d067dc995e0895860d98d717647c0f7b061f5908 RED DseProblemModuleBase.java bfe6dadc48386308ccbf40dbb0da18f74e43a986 RED -DseProcessProblemModule.java c7f76c9926e6d49c058fe550ac8d0b31bd6b4d30 RED +DseProcessProblemModule.java b61c20547b1a7eb904f511e9a978374f8e908628 RED EvaluatorWrapper.java 3747e5b78b1dcef8e1595c1ae9354e8ef2738e79 RED ExplorationGoalPriorityMultiEvaluator.java 1f6d2aa6ece8acdf4f57face0439f3429ab87329 RED ProblemModuleBase.java 460f7a8a07435eb13634caa9072e425bdf20e399 RED -StrictTTDecoder.java d55ece0076bec24d74fd18dae3e33aaa9d2ac854 RED +StrictTTDecoder.java 3155f514cdf8f341e17e4d188fcb6ec6956e705c RED diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/DseProcessProblemModule.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/DseProcessProblemModule.java index c7f76c9926e6d49c058fe550ac8d0b31bd6b4d30..b61c20547b1a7eb904f511e9a978374f8e908628 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/DseProcessProblemModule.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/DseProcessProblemModule.java @@ -22,8 +22,14 @@ import static org.fortiss.af3.exploration.alg.util.ExplorationAlgUtils.rethrow; import java.util.Collection; import java.util.Set; +import org.aopalliance.intercept.MethodInterceptor; import org.fortiss.af3.exploration.alg.dse.DSEFactory; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.ArchitectureExplorationEncoding; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.PartitionMappingEncoding; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.platform.PlatformCommunicationGraphEncoding; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.safetyfunctionarch.SafetyFunctionArchEncoding; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEncoding; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.FailSilentTaskMappingEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.create.GuiceCreator; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode.GuiceDecoder; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.graph.GenotypeFinder; @@ -40,6 +46,7 @@ import org.opt4j.core.problem.Creator; import org.opt4j.core.problem.Decoder; import org.opt4j.core.problem.Evaluator; +import com.google.common.collect.Sets; import com.google.inject.Injector; /** @@ -95,11 +102,10 @@ public class DseProcessProblemModule // bindProblem(dseFactory.createArchitectureExplorationCreator(), // dseFactory.createArchitectureDecoder(execDepGraph), archEvaluator); - GuiceDecoder guiceDecoder = new GuiceDecoder(requestedSolutions, enabledDecoders); - + GuiceDecoder guiceDecoder = createGuiceDecoder(enabledDecoders); Set<Class<? extends Genotype>> requiredGenotypes = findRequiredGenotypes(guiceDecoder); - bindProblem(new GuiceCreator(requiredGenotypes, enabledCreators), new GuiceDecoder( - requestedSolutions, enabledDecoders), archEvaluator); + bindProblem(new GuiceCreator(requiredGenotypes, enabledCreators), guiceDecoder, + archEvaluator); // Create/Bind the subproblems of the architectural exploration problem. try { @@ -118,6 +124,24 @@ public class DseProcessProblemModule } } + /** + * Creates a {@link GuiceDecoder}, prepares all {@link DecoderModule}s, and defines the + * {@link MethodInterceptor} for plugin-type {@link DecoderModule}s. + * + * @param enabledDecoders + * Set of {@link DecoderModule}s configure for this DSE execution. + * @return The created/configured {@link GuiceDecoder}. + */ + private GuiceDecoder createGuiceDecoder(Collection<DecoderModule<?>> enabledDecoders) { + Collection<DecoderModule<?>> injectedDecoders = Sets.newHashSet(); + for(DecoderModule<?> decoderModule : enabledDecoders) { + DecoderModule<?> currInjectedDecoderModule = + dseInjector.getInstance(decoderModule.getClass()); + injectedDecoders.add(currInjectedDecoderModule); + } + return new GuiceDecoder(requestedSolutions, injectedDecoders); + } + /** * Returns the collection of {@link Genotype}s that are required as inputs to decoders to obtain * the requested {@link Phenotype}. diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/StrictTTDecoder.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/StrictTTDecoder.java index d55ece0076bec24d74fd18dae3e33aaa9d2ac854..3155f514cdf8f341e17e4d188fcb6ec6956e705c 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/StrictTTDecoder.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/StrictTTDecoder.java @@ -24,6 +24,7 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.in import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.FailSilentTaskMappingEntry; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEntry; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode.Genotyped; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.solution.StrictTTSchedule; import org.fortiss.af3.exploration.alg.dse.module.DecoderModule; import org.fortiss.af3.exploration.alg.dse.sysmodel.FailSilentExecModelFactory; @@ -31,6 +32,7 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.sched.comm.TDMABusScheduler; import org.fortiss.af3.exploration.alg.dse.sysmodel.sched.proc.EDFSchedulerBase; import org.opt4j.core.Genotype; +import com.google.inject.Inject; import com.google.inject.Provides; /** @@ -51,6 +53,7 @@ public class StrictTTDecoder<S extends InstantiatedTaskMappingEntry, T extends I * run. */ @SuppressWarnings("unchecked") + @Inject public StrictTTDecoder() { // FIXME: HACK to create the FailSilentTaskMappingFactory. Support for FaultDetection will // be added again after switching to DI mechanisms completely. @@ -60,16 +63,35 @@ public class StrictTTDecoder<S extends InstantiatedTaskMappingEntry, T extends I simpleBusScheduler = new TDMABusScheduler<S, T>(); } + /** + * Performs the actual decoding triggered by calling + * {@link #decode(FailSilentTaskMappingEncoding, MessageEncoding, InstantiatedAcyclicTaskGraphEncoding, PlatformCommunicationGraphEncoding, PartitionMappingEncoding)} + * . This method is used since Guice doesn't allow bindings to undefined generics. + */ + // FIXME: Dirty casts: Remove the generics? @Provides - public StrictTTSchedule<FailSilentTaskMappingEntry, FailSilentTaskMappingEncoding> decode( - FailSilentTaskMappingEncoding itmEnc, + public StrictTTSchedule decode(FailSilentTaskMappingEncoding itmEnc, MessageEncoding<FailSilentTaskMappingEntry, FailSilentTaskMappingEncoding> msgEnc, InstantiatedAcyclicTaskGraphEncoding<FailSilentTaskMappingEntry> acycItgEnc, - PlatformCommunicationGraphEncoding pcgEncoding, PartitionMappingEncoding partEnc) { - return decode(itmEnc, msgEnc, acycItgEnc, pcgEncoding, partEnc); + PlatformCommunicationGraphEncoding pcgEncoding, + @Genotyped PartitionMappingEncoding partEnc) { + // TODO: Externalize the validation such that the encoding is not required to be passed to + // the constructor (is there for validation purposes) + StrictTTSchedule<S, T> schedule = new StrictTTSchedule<S, T>((T)itmEnc); + simpleEDFScheduler.schedule((InstantiatedAcyclicTaskGraphEncoding<S>)acycItgEnc, partEnc, + (T)itmEnc, schedule); + assert (schedule.validateSchedule(true)); + + // TODO: Find out why the message scheduler does not require the task graph. Actually, it + // should require it... + simpleBusScheduler.schedule(schedule, msgEnc.getPeriodicMessages(), + (InstantiatedAcyclicTaskGraphEncoding<S>)acycItgEnc, pcgEncoding); + assert (schedule.validateSchedule(true)); + + return schedule; } - public StrictTTSchedule<S, T> decode(T itmEnc, MessageEncoding<S, T> msgEnc, + public StrictTTSchedule<S, T> decodeInternal(T itmEnc, MessageEncoding<S, T> msgEnc, InstantiatedAcyclicTaskGraphEncoding<S> acycItgEnc, PlatformCommunicationGraphEncoding pcgEncoding, PartitionMappingEncoding partEnc) { // TODO: Externalize the validation such that the encoding is not required to be passed to diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/comm/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/comm/.ratings index 96d2ad9c606a2e76a3c187d3a2aa49af55d5fa47..33b62ab420e194020a721bab3f527ebf62b0b0c4 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/comm/.ratings +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/comm/.ratings @@ -1 +1 @@ -MessageDecoder.java 5faf743c30edc661d4f9c4b39483c34a5148a8a9 RED +MessageDecoder.java 50fab8c29ccec8a4f9d5149ecc2ee59c562737f5 RED diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/comm/MessageDecoder.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/comm/MessageDecoder.java index 5faf743c30edc661d4f9c4b39483c34a5148a8a9..50fab8c29ccec8a4f9d5149ecc2ee59c562737f5 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/comm/MessageDecoder.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/comm/MessageDecoder.java @@ -22,6 +22,7 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.comm.MessageEn import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.Partition; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.platform.PlatformCommunicationGraphEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.AbstractTaskGraphEncoding; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.TaskGraphEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEntry; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.FailSilentTaskMappingEncoding; @@ -30,6 +31,7 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.in import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode.ComposableDecoder; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.exception.DecodingException; import org.fortiss.af3.exploration.alg.dse.module.DecoderModule; +import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IExecutionUnitAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IResourceAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITaskAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.comm.Message; @@ -67,14 +69,38 @@ public class MessageDecoder<S extends TaskMappingEntry<ITaskAdapter<?>, Partitio messageRouter = new MessageRouter(); } + /** + * Produces a {@link MessageEncoding} that contains the multicast messages that are required to + * exchange signals between {@link IExecutionUnitAdapter}s. For each signal that is exchanged + * between two tasks or more (only one sender) that are located on different + * {@link IExecutionUnitAdapter}s, a {@link Message} is generated. + * + * @param tmEnc + * {@link TaskMappingEncoding} defining the "location" of {@link ITaskAdapter}s. + * @param pcgEnc + * Graph of the platform defining potential routes for {@link Message}s. + * @param atgEnc + * {@link TaskGraphEncoding} containing the signals exchanged between + * {@link ITaskAdapter}s. + * @return {@link MessageEncoding} that contains the multicast messages that are required to + * exchange signals between {@link IExecutionUnitAdapter}s + * @throws DecodingException + */ + @SuppressWarnings("unchecked") @Provides public MessageEncoding<FailSilentTaskMappingEntry, FailSilentTaskMappingEncoding> decode( FailSilentTaskMappingEncoding tmEnc, PlatformCommunicationGraphEncoding pcgEnc, AbstractTaskGraphEncoding atgEnc) throws DecodingException { - return decode(tmEnc, pcgEnc, atgEnc); + return (MessageEncoding<FailSilentTaskMappingEntry, FailSilentTaskMappingEncoding>)decodeInternal( + (T)tmEnc, pcgEnc, atgEnc); } - public MessageEncoding<S, T> decode(T tmEnc, PlatformCommunicationGraphEncoding pcgEnc, + /** + * Performs the actual decoding triggered by calling + * {@link #decode(FailSilentTaskMappingEncoding, PlatformCommunicationGraphEncoding, AbstractTaskGraphEncoding)} + * . This method is used since Guice doesn't allow bindings to undefined generics. + */ + public MessageEncoding<S, T> decodeInternal(T tmEnc, PlatformCommunicationGraphEncoding pcgEnc, AbstractTaskGraphEncoding atgEnc) throws DecodingException { Collection<Message> generatedMessages = messageGenerator.generateMessages(tmEnc, atgEnc); Map<Message, DirectedGraph<IResourceAdapter<?>, DefaultEdge>> messageRouteMap = diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatetaskgraph/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatetaskgraph/.ratings index 71055902a70cd2d2ef0b8db007fb54b0aaaca701..5d5d4374cdf0b15236672155b06b30e19b69c8e6 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatetaskgraph/.ratings +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatetaskgraph/.ratings @@ -1,2 +1,2 @@ -InstantiatedTaskMappingDecoder.java 4738a0c2a31312add96f9ee9425be841038885d9 RED +InstantiatedTaskMappingDecoder.java 8e4e3abe4d231a6afe561e7823b8264899a3226a RED InstantiatedTaskMappingDecoderAcyclic.java 5a6462fcf57680abe11163e5838aea4c84e03b88 RED diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatetaskgraph/InstantiatedTaskMappingDecoder.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatetaskgraph/InstantiatedTaskMappingDecoder.java index 4738a0c2a31312add96f9ee9425be841038885d9..8e4e3abe4d231a6afe561e7823b8264899a3226a 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatetaskgraph/InstantiatedTaskMappingDecoder.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatetaskgraph/InstantiatedTaskMappingDecoder.java @@ -25,6 +25,8 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.safetyfunction import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.safetyfunctionarch.SafetyFunctionArchEntry; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.AbstractTaskGraphEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.InstantiatedTaskGraphEncoding; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.TaskGraphEncoding; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.FailSilentTaskMappingEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.FailSilentTaskMappingEntry; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEncoding; @@ -50,16 +52,38 @@ import com.google.inject.Provides; public class InstantiatedTaskMappingDecoder<T extends InstantiatedTaskMappingEntry> extends DecoderModule<InstantiatedTaskGraphEncoding<T>> { + /** + * Decodes a {@link FailSilentTaskMappingEncoding} into an {@link InstantiatedTaskGraphEncoding} + * that is a {@link TaskGraphEncoding} which contains only {@link ITaskAdapter}s backed by an + * implementation. + * + * @param itmEnc + * {@link TaskMappingEncoding} with {@link ITaskAdapter}s backed by an + * implementation. + * @param atgEnc + * {@link TaskGraphEncoding} with potentially "abstract" {@link ITaskAdapter}s. + * @param sfEnc + * @return {@link TaskGraphEncoding} which contains only {@link ITaskAdapter}s backed by an + * implementation + * @throws DecodingException + */ + @SuppressWarnings("unchecked") @Provides public InstantiatedTaskGraphEncoding<FailSilentTaskMappingEntry> decode( FailSilentTaskMappingEncoding itmEnc, AbstractTaskGraphEncoding atgEnc, SafetyFunctionArchEncoding sfEnc) throws DecodingException { - return decode(itmEnc, atgEnc, sfEnc); + return (InstantiatedTaskGraphEncoding<FailSilentTaskMappingEntry>)decodeInternal( + (InstantiatedTaskMappingEncoding<T>)itmEnc, atgEnc, sfEnc); } - public InstantiatedTaskGraphEncoding<T> decode(InstantiatedTaskMappingEncoding<T> itmEnc, - AbstractTaskGraphEncoding atgEnc, SafetyFunctionArchEncoding sfEnc) - throws DecodingException { + /** + * Performs the actual decoding triggered by calling + * {@link #decode(FailSilentTaskMappingEncoding, AbstractTaskGraphEncoding, SafetyFunctionArchEncoding)} + * . This method is used since Guice doesn't allow bindings to undefined generics. + */ + public InstantiatedTaskGraphEncoding<T> decodeInternal( + InstantiatedTaskMappingEncoding<T> itmEnc, AbstractTaskGraphEncoding atgEnc, + SafetyFunctionArchEncoding sfEnc) throws DecodingException { Collection<TaskGraph> tgColl = atgEnc.getTaskGraphs(); TaskGraphInstantiator<TaskGraph> tgInstatiator = new TaskGraphInstantiator<>(tgColl, itmEnc); diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/partitionmapping/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/partitionmapping/.ratings index cf38bc17c2e296902320ab33e46af896cf44f537..fd7bbb4f5f8abc330dfa0f3ba01286e89bc5288e 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/partitionmapping/.ratings +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/partitionmapping/.ratings @@ -1 +1 @@ -PartitionMappingDecoderGraph.java 7e1578be1cd243b11994085d599310ba669ba263 RED +PartitionMappingDecoderGraph.java dd454f451bcd1de4cda93dfd82f6f0400c9a19ca RED diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/partitionmapping/PartitionMappingDecoderGraph.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/partitionmapping/PartitionMappingDecoderGraph.java index 7e1578be1cd243b11994085d599310ba669ba263..dd454f451bcd1de4cda93dfd82f6f0400c9a19ca 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/partitionmapping/PartitionMappingDecoderGraph.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/partitionmapping/PartitionMappingDecoderGraph.java @@ -21,6 +21,7 @@ import java.util.Collection; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.Partition; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.PartitionMappingEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.platform.PlatformCommunicationGraphEncoding; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode.Genotyped; import org.fortiss.af3.exploration.alg.dse.module.DecoderModule; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ICommunicationResourceAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IResourceAdapter; @@ -28,7 +29,6 @@ import org.fortiss.tooling.common.util.LambdaUtils; import org.jgrapht.Graphs; import org.jgrapht.graph.DefaultEdge; import org.opt4j.core.Genotype; -import org.opt4j.core.genotype.CompositeGenotype; import com.google.inject.Provides; @@ -41,15 +41,10 @@ import com.google.inject.Provides; // TODO: DecodeUpdate: We may consider moving the decode method to the creator. public class PartitionMappingDecoderGraph extends DecoderModule<PlatformCommunicationGraphEncoding> { - @Provides - PartitionMappingEncoding getPmEnc( - CompositeGenotype<Class<? extends Genotype>, ? extends Genotype> compGene) { - return compGene.get(PartitionMappingEncoding.class); - } - @Provides public PlatformCommunicationGraphEncoding decodeComposable( - PlatformCommunicationGraphEncoding pcmEnc, PartitionMappingEncoding pmEnc) { + @Genotyped PlatformCommunicationGraphEncoding pcmEnc, + @Genotyped PartitionMappingEncoding pmEnc) { for(IResourceAdapter<?> execUnit : pcmEnc.getActualGraph().vertexSet()) { for(IResourceAdapter<?> partition : pmEnc.getRequesters(execUnit)) { pcmEnc.getActualGraph().addVertex(partition); diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/.ratings index 8ad342ed64a92c2185c612d9f7800dd71012757b..836dcad87cf93b348568499185e1ef092f4d0e19 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/.ratings +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/.ratings @@ -1,3 +1,3 @@ SFGraphDecoder.java 0b42b83465213eb13ae59765f6bf53c1c8bd3b66 RED SFMappingConstraintDecoder.java 01e8f450a78ffff9572a7f203b3699cff507e99f RED -SFMappingDecoder.java 689365b0718847258decd9f20f3cca5b0ff3c6e3 RED +SFMappingDecoder.java 31a49d3d9bb3fb878c1af24d3da595a662f82512 RED diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFMappingDecoder.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFMappingDecoder.java index 689365b0718847258decd9f20f3cca5b0ff3c6e3..31a49d3d9bb3fb878c1af24d3da595a662f82512 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFMappingDecoder.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFMappingDecoder.java @@ -29,6 +29,7 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.safetyfunction import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.safetyfunctionarch.SafetyFunctionArchEntry; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEntry; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode.Genotyped; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.exception.DecodingException; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.decode.ConstraintGenerationDecoder; import org.fortiss.af3.exploration.alg.dse.module.DecoderModule; @@ -48,13 +49,6 @@ import com.google.inject.name.Named; public class SFMappingDecoder<C> extends DecoderModule<AbstractTaskMappingEncoding> implements ConstraintGenerationDecoder { - /** {@inheritDoc} */ - @Override - protected void configure() { - // TODO: Check whether overriding is a reasonable approach to interchange decoders. - // Modules.override(AbstractTaskMappingIdentityDecoder()). - } - /** {@inheritDoc} */ @Override public AbstractTaskMappingEncoding decode(Genotype genotype) { @@ -76,8 +70,9 @@ public class SFMappingDecoder<C> extends DecoderModule<AbstractTaskMappingEncodi * if the creation of some mapping entry fails. */ @Provides + @Named("SFMappingDecoder") public AbstractTaskMappingEncoding decode(SafetyFunctionArchEncoding sfaEnc, - @Named("Genotyped") AbstractTaskMappingEncoding atmEnc) throws DecodingException { + @Genotyped AbstractTaskMappingEncoding atmEnc) throws DecodingException { // TODO: replace with a dynamic mechanism for the retrieval of deployable components. for(SafetyFunctionArchEntry sFAEntry : sfaEnc.getAllEntries()) { @@ -85,10 +80,10 @@ public class SFMappingDecoder<C> extends DecoderModule<AbstractTaskMappingEncodi int channelNumber = sFAEntry.getNumChannels(); // TODO: Encapsulate in the encoding / adapter --> Raw cast. - Collection<ITaskAdapter<?>> sfComps = + @SuppressWarnings("unchecked") Collection<ITaskAdapter<?>> sfComps = (Collection<ITaskAdapter<?>>)(Collection<?>)sFAEntry.getSafetyFunctionAdapter() .getRealizingComponents(); - Collection<ITaskAdapter<?>> diagComps = + @SuppressWarnings("unchecked") Collection<ITaskAdapter<?>> diagComps = (Collection<ITaskAdapter<?>>)(Collection<?>)sFAEntry.getSafetyFunctionAdapter() .getDiagnosticComponents(); ITaskAdapter<?> outComponent = sFAEntry.getSafetyFunctionAdapter().getOutputComponent(); diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/.ratings index 8ba618a6fbf94673f7728db83453674bb8844b21..dd544c5cc594e83035dd71b3914c7daa432e9874 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/.ratings +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/.ratings @@ -1,2 +1,2 @@ -AbstractTaskMappingIdentityDecoder.java 88806dc773c1f8c5fdc899b119bd99d06087e835 RED +AbstractTaskMappingIdentityDecoder.java 83ca90087f0cfef31466b9a6486730e408599b54 YELLOW TaskMappingDecoderBase.java 38993e58fbb58bb577827079cacf04d487670713 RED diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/AbstractTaskMappingIdentityDecoder.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/AbstractTaskMappingIdentityDecoder.java index 88806dc773c1f8c5fdc899b119bd99d06087e835..83ca90087f0cfef31466b9a6486730e408599b54 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/AbstractTaskMappingIdentityDecoder.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/AbstractTaskMappingIdentityDecoder.java @@ -19,10 +19,13 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmappi import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEntry; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode.ComposableDecoder; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode.Genotyped; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode.PluginDecoder; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype; import org.opt4j.core.Genotype; import com.google.inject.Provides; +import com.google.inject.Singleton; /** * Provides a {@link AbstractTaskMappingEncoding} to the set of {@link Phenotype} types. @@ -33,13 +36,18 @@ import com.google.inject.Provides; // TODO: We actually need an additional AbstractTaskMappingDecoder, as this one is not an identity // decoder anymore. We'd need a clearer concept when to use which operators anyways (Dependent on // the selected features of the DSE). +@Singleton public class AbstractTaskMappingIdentityDecoder extends TaskMappingDecoderBase<AbstractTaskMappingEntry, AbstractTaskMappingEncoding> { - // FIXME: Update the mapping. --> Provides + /** + * Decodes/Updates the given {@link AbstractTaskMappingEncoding} with the number of additional + * resources of an update {@link PartitionMappingEncoding}. + */ @Provides - public AbstractTaskMappingEncoding decode(AbstractTaskMappingEncoding atmEnc, - PartitionMappingEncoding partEnc) { + @PluginDecoder + public AbstractTaskMappingEncoding decode(@Genotyped AbstractTaskMappingEncoding atmEnc, + @Genotyped PartitionMappingEncoding partEnc) { return alignWithResourceModifications(atmEnc, partEnc); } diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/.ratings index 68dd117fb9ff9d15bf0b66dc12da9ab766263cb0..121356adfe767ba0c01bc1ff107dc579288d1100 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/.ratings +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/.ratings @@ -1,3 +1,3 @@ -FailSilentAbstractTaskMappingDecoder.java 4ef8ebd557e31ad61fa0e90df06434c98e121452 RED +FailSilentAbstractTaskMappingDecoder.java 04081bd9e41ae6ecfb6c308165574bd6f273f87c RED FaultDetectionVotingAbstractTaskMappingDecoder.java fe6777288a89b1ca3e5eaf842653fbc768016a08 RED TaskInstanceResourceAlignmentDecoder.java 8567290ebc74927263f5265f44d7acdcbf99797f RED diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/FailSilentAbstractTaskMappingDecoder.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/FailSilentAbstractTaskMappingDecoder.java index 4ef8ebd557e31ad61fa0e90df06434c98e121452..04081bd9e41ae6ecfb6c308165574bd6f273f87c 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/FailSilentAbstractTaskMappingDecoder.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/FailSilentAbstractTaskMappingDecoder.java @@ -24,12 +24,12 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.ab import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEntry; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.FailSilentTaskMappingEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.FailSilentTaskMappingEntry; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode.Genotyped; import org.fortiss.af3.exploration.alg.dse.module.DecoderModule; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITaskAdapter; import org.opt4j.core.Genotype; import com.google.inject.Provides; -import com.google.inject.name.Named; /** * Decoder for instantiating an {@link AbstractTaskMappingEncoding} to a @@ -56,7 +56,7 @@ public class FailSilentAbstractTaskMappingDecoder extends */ @Provides public FailSilentTaskMappingEncoding decode(AbstractTaskMappingEncoding atmEnc, - @Named("Genotyped") FailSilentTaskMappingEncoding fstmEnc) { + @Genotyped FailSilentTaskMappingEncoding fstmEnc) { fstmEnc.replaceConstraints(atmEnc.getConstraints()); for(ITaskAdapter<?> comp : atmEnc.getRequesters()) { diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/.ratings index 8b4bf19dab38a0a0769bccb46907eb533cd2c3ad..32fe2421a9d7f05d15e2c80d0d5c4de05093993e 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/.ratings +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/.ratings @@ -1,17 +1,17 @@ -ICommunicationResourceAdapter.java 05fba6a2c158545f28393eb4c845b2ace86eb99d RED -IComponentAdapter.java 2dfb64428d4edc278e6b5f7c3f21e44d07196917 RED -IExecutionUnitAdapter.java a73348f4bff9a9c8f4a3f0e60177490e2e228388 RED -IGatewayUnitAdapter.java dcf6aa0afcb20d3035b3034e2183c5dfc867e9b9 RED -ILogicalArchitectureAdapter.java 2dea1c829c1542ffa788b669ae979854ae7e8480 RED -IMemoryUnitAdapter.java c4093302720e21dec978479051184c842f1061d4 RED -IModelElementAdapter.java a7620a897eb9ebfdcaf869ebb25e112d900b5622 RED -IPlatformArchitectureAdapter.java 399d3cdff468c5ac95ca4cf6f17caabdeb2fef16 RED -IRequestAdapter.java d9298837caf9e15971471aae0bb567e416e82a41 RED -IResourceAdapter.java 4d41218b96f25daedad66098250baf622a3f89b3 RED -IResourceConnectionAdapter.java 67d0a7f54de3e3fe21532fc33f6b853eb844b993 RED -ISafetyFunctionAdapter.java 6a16258729ba9dff91c35285d18bc06cc99a713a RED -ISignalAdapter.java 2bdb578564cf1d3351c99811c9090e2e9bd70715 RED -ITaskAdapter.java 0f8c8699bb48e609211713aef6a7e1e82a00c963 RED -ITransmissionUnitAdapter.java 217aca158641261dc8035805f341fe4c4c527a36 RED -InternalComponentParameters.java cd5eea4ddf104c4cb3c4521d3256566812876027 RED -SystemModelAdapter.java 2927e62f6642b78e9caf6bb61f8b0d39f93f7e87 RED +ICommunicationResourceAdapter.java 05fba6a2c158545f28393eb4c845b2ace86eb99d RED +IComponentAdapter.java 2dfb64428d4edc278e6b5f7c3f21e44d07196917 RED +IExecutionUnitAdapter.java a73348f4bff9a9c8f4a3f0e60177490e2e228388 RED +IGatewayUnitAdapter.java dcf6aa0afcb20d3035b3034e2183c5dfc867e9b9 RED +ILogicalArchitectureAdapter.java 2dea1c829c1542ffa788b669ae979854ae7e8480 RED +IMemoryUnitAdapter.java c4093302720e21dec978479051184c842f1061d4 RED +IModelElementAdapter.java a7620a897eb9ebfdcaf869ebb25e112d900b5622 RED +IPlatformArchitectureAdapter.java 399d3cdff468c5ac95ca4cf6f17caabdeb2fef16 RED +IRequestAdapter.java d9298837caf9e15971471aae0bb567e416e82a41 RED +IResourceAdapter.java 4d41218b96f25daedad66098250baf622a3f89b3 RED +IResourceConnectionAdapter.java 67d0a7f54de3e3fe21532fc33f6b853eb844b993 RED +ISafetyFunctionAdapter.java 6a16258729ba9dff91c35285d18bc06cc99a713a RED +ISignalAdapter.java 2bdb578564cf1d3351c99811c9090e2e9bd70715 RED +ITaskAdapter.java 0f8c8699bb48e609211713aef6a7e1e82a00c963 RED +ITransmissionUnitAdapter.java 217aca158641261dc8035805f341fe4c4c527a36 RED +InternalComponentParameters.java cd5eea4ddf104c4cb3c4521d3256566812876027 RED +SystemModelAdapter.java 9811b12c26aa21dff3cd0e6e2b99b777153ccaf1 RED diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/SystemModelAdapter.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/SystemModelAdapter.java index 2927e62f6642b78e9caf6bb61f8b0d39f93f7e87..9811b12c26aa21dff3cd0e6e2b99b777153ccaf1 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/SystemModelAdapter.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/SystemModelAdapter.java @@ -500,21 +500,24 @@ public class SystemModelAdapter<C, E, SO, SI, G, TR, M> extends AbstractModule { } /** Returns the {@link IMemoryUnitAdapter} present in the target platform. */ + @SuppressWarnings("unchecked") @Provides - public Collection<IMemoryUnitAdapter<M>> getMemoryUnits() { - return memoryUnits; + public Collection<IMemoryUnitAdapter<?>> getMemoryUnits() { + return (Collection<IMemoryUnitAdapter<?>>)(Collection<?>)memoryUnits; } /** Returns the gateway units present in the platform. */ + @SuppressWarnings("unchecked") @Provides - public Collection<IGatewayUnitAdapter<G>> getGatewayUnits() { - return gatewayUnits; + public Collection<IGatewayUnitAdapter<?>> getGatewayUnits() { + return (Collection<IGatewayUnitAdapter<?>>)(Collection<?>)gatewayUnits; } /** Returns the systems TDMA arbitrated transmission unit */ + @SuppressWarnings("unchecked") @Provides - public Collection<ITransmissionUnitAdapter<TR>> getTransmissionUnits() { - return transmissionUnits; + public Collection<ITransmissionUnitAdapter<?>> getTransmissionUnits() { + return (Collection<ITransmissionUnitAdapter<?>>)(Collection<?>)transmissionUnits; } /** Returns all the {@link IResourceAdapter}s present in the platform. */ @@ -531,6 +534,12 @@ public class SystemModelAdapter<C, E, SO, SI, G, TR, M> extends AbstractModule { return virtualResourceToHardwareResourceMap.get(virtualResource); } + /** Returns the present connections between platform resources. */ + @Provides + public Collection<IResourceConnectionAdapter> getResouceConnections() { + return platformConnections; + } + /** * Returns the {@link ISafetyFunctionAdapter}s constructed from the safety functions that are * present in the input models. @@ -807,9 +816,4 @@ public class SystemModelAdapter<C, E, SO, SI, G, TR, M> extends AbstractModule { public Class<? extends IPlatformResource> getFaultContainmentRegion() { return faultContainmentRegion; } - - /** Returns the present connections between platform resources. */ - public Collection<IResourceConnectionAdapter> getResouceConnections() { - return platformConnections; - } } diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/feature/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/feature/.ratings index a32aa1c150ba06dd1fdba0d8b1b4ef4af90cba05..6871291acdfaa97697adae42c40ed0e6d09e5884 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/feature/.ratings +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/feature/.ratings @@ -1,7 +1,7 @@ DesignDiversityExploration.java 7769f449def9cc3cb147da5e1991074bc2669c8a RED ExplorationFeature.java 9e077fed7f0485f1ccaa2b5b4d0407161ec787ca YELLOW IExplorationFeature.java f0057888990fb5c35e7e97c5d74b7f22d09eabe9 YELLOW -PartitionArchitectureExploration.java 61ea586e3acade91d3c9cc0d37a349e0bb26b3af YELLOW +PartitionArchitectureExploration.java fb35b60297bcaacb7c6677e5febef99d6c2a9615 RED SafetyArchitectureExploration.java 89a5c8c5e42c8c55857699ba7d2503e6342cd401 RED TTScheduleExploration.java 9d7e6b4eea4030881006fa85f0be4cb584383b09 RED TaskMappingExploration.java a548b4757ad6560c3ae640f956910f83fd77b1e1 RED diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/feature/PartitionArchitectureExploration.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/feature/PartitionArchitectureExploration.java index 61ea586e3acade91d3c9cc0d37a349e0bb26b3af..fb35b60297bcaacb7c6677e5febef99d6c2a9615 100644 --- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/feature/PartitionArchitectureExploration.java +++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/feature/PartitionArchitectureExploration.java @@ -16,9 +16,11 @@ package org.fortiss.af3.exploration.alg.feature; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.create.partitionmapping.PartitionMappingCreator; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.create.platform.PlatformCommunicationGraphCreator; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.PartitionMappingEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.platform.PlatformCommunicationGraphEncoding; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.operator.mutate.partitionmapping.PartitionMappingModule; +import org.fortiss.af3.exploration.alg.dse.backend.opt4j.operator.mutate.platform.NopPlatformCommGraphMutateModule; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.partitionmapping.PartitionMappingDecoderGraph; /** @@ -33,6 +35,8 @@ public class PartitionArchitectureExploration extends ExplorationFeature { addVariable(PartitionMappingEncoding.class, new PartitionMappingCreator(), new PartitionMappingModule()); + addVariable(PlatformCommunicationGraphEncoding.class, + new PlatformCommunicationGraphCreator(), new NopPlatformCommGraphMutateModule()); addProblem(PlatformCommunicationGraphEncoding.class, new PartitionMappingDecoderGraph()); } }