X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.district.network%2Fsrc%2Forg%2Fsimantics%2Fdistrict%2Fnetwork%2Fvisualisations%2Ftriggers%2FVisualisationTriggersContributions.java;fp=org.simantics.district.network%2Fsrc%2Forg%2Fsimantics%2Fdistrict%2Fnetwork%2Fvisualisations%2Ftriggers%2FVisualisationTriggersContributions.java;h=8120a973cee2d929c816997508b63d2b10de1ab3;hb=f02327382306d1af51ca66a3af2ed642a6c41986;hp=0000000000000000000000000000000000000000;hpb=d49d81b82aa555ef0909eebd6d9c393e4e6de8aa;p=simantics%2Fdistrict.git diff --git a/org.simantics.district.network/src/org/simantics/district/network/visualisations/triggers/VisualisationTriggersContributions.java b/org.simantics.district.network/src/org/simantics/district/network/visualisations/triggers/VisualisationTriggersContributions.java new file mode 100644 index 00000000..8120a973 --- /dev/null +++ b/org.simantics.district.network/src/org/simantics/district/network/visualisations/triggers/VisualisationTriggersContributions.java @@ -0,0 +1,73 @@ +package org.simantics.district.network.visualisations.triggers; + +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.simantics.NameLabelUtil; +import org.simantics.Simantics; +import org.simantics.db.ReadGraph; +import org.simantics.db.Resource; +import org.simantics.db.common.NamedResource; +import org.simantics.db.common.request.ObjectsWithSupertype; +import org.simantics.db.exception.DatabaseException; +import org.simantics.db.layer0.util.Layer0Utils; +import org.simantics.layer0.Layer0; +import org.simantics.scl.compiler.top.ValueNotFound; +import org.simantics.scl.osgi.SCLOsgi; +import org.simantics.scl.runtime.SCLContext; +import org.simantics.scl.runtime.tuple.Tuple0; +import org.simantics.structural.stubs.StructuralResource2; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class VisualisationTriggersContributions { + + private static final Logger LOGGER = LoggerFactory.getLogger(VisualisationTriggersContributions.class); + private static final String VISUALISATIONS_TRIGGERS_MODULE = "VisualisationTriggers"; + private static final String VISUALISATION_TRIGGER_CONTRIBUTION = "visualisationTriggers"; + + public static Map> visualisationTriggers(ReadGraph graph) throws DatabaseException { + List sharedOntologies = Simantics.applySCL("Simantics/SharedOntologies", "getSharedOntologies", graph, Tuple0.INSTANCE); + + Map> results = new HashMap<>(); + Layer0 L0 = Layer0.getInstance(graph); + + Object oldGraph = SCLContext.getCurrent().get("graph"); + try { + SCLContext.getCurrent().put("graph", graph); + for (Resource sharedOntology : sharedOntologies) { + + Collection userComponents = graph.syncRequest(new ObjectsWithSupertype(sharedOntology, Layer0.getInstance(graph).ConsistsOf, StructuralResource2.getInstance(graph).Component)); + + for (Resource userComponent : userComponents) { + NamedResource moduleType = new NamedResource(NameLabelUtil.modalName(graph, userComponent), userComponent); + List visualisationTriggerContributions = visualisationTriggerContribution(graph, moduleType); + if (visualisationTriggerContributions != null) + results.put(moduleType.getName(), visualisationTriggerContributions); + } + } + } finally { + SCLContext.getCurrent().put("graph", oldGraph); + } + return results; + } + + private static List visualisationTriggerContribution(ReadGraph graph, NamedResource moduleType) throws DatabaseException { + Layer0 L0 = Layer0.getInstance(graph); + Resource sclModule = Layer0Utils.getPossibleChild(graph, moduleType.getResource(), L0.SCLModule, VISUALISATIONS_TRIGGERS_MODULE); + if (sclModule != null) { + String moduleURI = graph.getURI(sclModule); + try { + List result = (List) SCLOsgi.MODULE_REPOSITORY.getValue(moduleURI, VISUALISATION_TRIGGER_CONTRIBUTION); + return result; + } catch (ValueNotFound e) { + LOGGER.error("Could not find contributions for module {} and expression {}", moduleURI, VISUALISATION_TRIGGER_CONTRIBUTION, e); + } + } + return null; + } + +} +