package org.simantics.db.layer0.util;
import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
import org.simantics.db.ReadGraph;
import org.simantics.db.Resource;
import org.simantics.db.common.request.BinaryRead;
import org.simantics.db.common.request.ObjectsWithType;
import org.simantics.db.common.request.ParametrizedPrimitiveRead;
+import org.simantics.db.common.utils.CommonDBUtils;
import org.simantics.db.exception.DatabaseException;
import org.simantics.db.layer0.internal.SimanticsInternal;
import org.simantics.db.procedure.Listener;
*
* @author Hannu Niemistö
* @author Antti Villberg
+ *
+ * Difference between this class and {@code RuntimeEnvironmentRequest} is an additional parameter
+ * that is typically some component type. All modules under this resource are added to the environment
+ * in addition to the SCLMain of the root resource.
*/
public class RuntimeEnvironmentRequest2 extends BinaryRead<Resource, Resource, RuntimeEnvironment> {
- public RuntimeEnvironmentRequest2(Resource parameter, Resource parameter2) {
- super(parameter, parameter2);
+ public RuntimeEnvironmentRequest2(Resource componentType, Resource indexRoot) {
+ super(componentType, indexRoot);
}
-
+
protected void fillEnvironmentSpecification(EnvironmentSpecification environmentSpecification) {
}
}
};
- final public static void getRuntimeEnvironment(EnvironmentSpecification environmentSpecification, Listener<RuntimeEnvironment> callback, UpdateListenerImpl listener) {
+ public static void getRuntimeEnvironment(EnvironmentSpecification environmentSpecification, Listener<RuntimeEnvironment> callback, UpdateListenerImpl listener) {
try {
fillEnvironmentSpecification(environmentSpecification);
Layer0 L0 = Layer0.getInstance(graph);
- Collection<Resource> sclModules = graph.syncRequest(new ObjectsWithType(parameter, L0.ConsistsOf, L0.SCLModule));
- for (Resource sclModule : sclModules)
- environmentSpecification.importModule(graph.getURI(sclModule), "");
+ if (parameter != null) {
+ Collection<Resource> sclModules = graph.syncRequest(new ObjectsWithType(parameter, L0.ConsistsOf, L0.SCLModule));
+ for (Resource sclModule : sclModules) {
+ environmentSpecification.importModule(graph.getURI(sclModule), "");
+ }
+ } else {
+ // `parameter` is optional and can be null for e.g. procedural user components
+ }
- Resource mainModule = Layer0Utils.getPossibleChild(graph, parameter2, "SCLMain");
- if(mainModule != null)
+ Resource mainModule = CommonDBUtils.getPossibleChild(graph, parameter2, "SCLMain");
+ if(mainModule != null) {
environmentSpecification.importModule(graph.getURI(mainModule), "");
+ for(Resource l : graph.getObjects(parameter2, L0.IsLinkedTo)) {
+ mainModule = CommonDBUtils.getPossibleChild(graph, l, "SCLMain");
+ if(mainModule != null)
+ environmentSpecification.importModule(graph.getURI(mainModule), "");
+ }
+ }
return graph.syncRequest(new ParametrizedPrimitiveRead<EnvironmentSpecification, RuntimeEnvironment>(environmentSpecification) {
+
UpdateListenerImpl sclListener;
+
@Override
public void register(ReadGraph graph, Listener<RuntimeEnvironment> procedure) {
return 31*getClass().hashCode() + super.hashCode();
}
-}
\ No newline at end of file
+}