]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/util/RuntimeEnvironmentRequest.java
Automatically import also SCLMain modules of dependent index roots
[simantics/platform.git] / bundles / org.simantics.db.layer0 / src / org / simantics / db / layer0 / util / RuntimeEnvironmentRequest.java
index 6fbe36854ad99bd8934bd843a094be4742496e7e..17fbf1e7c8cb562a41bfc387b5b46b4478d48e36 100644 (file)
@@ -1,22 +1,6 @@
 package org.simantics.db.layer0.util;
 
-import java.util.HashMap;
-import java.util.Map;
-
-import org.simantics.db.ReadGraph;
 import org.simantics.db.Resource;
-import org.simantics.db.common.request.ParametrizedPrimitiveRead;
-import org.simantics.db.common.request.UnaryRead;
-import org.simantics.db.exception.DatabaseException;
-import org.simantics.db.layer0.internal.SimanticsInternal;
-import org.simantics.db.procedure.Listener;
-import org.simantics.db.request.Read;
-import org.simantics.scl.compiler.environment.specification.EnvironmentSpecification;
-import org.simantics.scl.compiler.module.repository.ImportFailureException;
-import org.simantics.scl.compiler.module.repository.UpdateListener;
-import org.simantics.scl.compiler.runtime.RuntimeEnvironment;
-import org.simantics.scl.osgi.SCLOsgi;
-import org.simantics.scl.runtime.SCLContext;
 
 /**
  * Finds the runtime environment of a model or other index root.
@@ -24,139 +8,11 @@ import org.simantics.scl.runtime.SCLContext;
  * @author Hannu Niemistö
  * @author Antti Villberg
  */
-public class RuntimeEnvironmentRequest extends UnaryRead<Resource, RuntimeEnvironment> {
+@Deprecated
+public class RuntimeEnvironmentRequest extends org.simantics.db.common.request.RuntimeEnvironmentRequest {
 
     public RuntimeEnvironmentRequest(Resource parameter) {
         super(parameter);
     }
-    
-    protected void fillEnvironmentSpecification(EnvironmentSpecification environmentSpecification) {
-    }
-
-    static class UpdateListenerImpl implements UpdateListener {
-               
-       final EnvironmentSpecification environmentSpecification;
-       final Listener<RuntimeEnvironment> callback;
-       
-       UpdateListenerImpl(EnvironmentSpecification environmentSpecification, Listener<RuntimeEnvironment> callback) {
-               this.environmentSpecification = environmentSpecification;
-               this.callback = callback;
-       }
-
-        @Override
-        public void notifyAboutUpdate() {
-               if(callback.isDisposed()) {
-                       return;
-               }
-               getRuntimeEnvironment(environmentSpecification, callback, this);
-        }
-
-       final public static void getRuntimeEnvironment(EnvironmentSpecification environmentSpecification, Listener<RuntimeEnvironment> callback, UpdateListenerImpl listener) {
-
-                       try {
-                               
-                       SCLContext context = SCLContext.getCurrent();
-                       
-                       RuntimeEnvironment env;
-                       Object graph = context.get("graph");
-                       if(graph == null)
-                    try {
-                        env = SimanticsInternal.getSession().syncRequest(new Read<RuntimeEnvironment>() {
-                            @Override
-                            public RuntimeEnvironment perform(ReadGraph graph) throws DatabaseException {
-                               
-                                SCLContext sclContext = SCLContext.getCurrent();
-                               Object oldGraph = sclContext.get("graph");
-                                try {
-                                       sclContext.put("graph", graph);
-                                    return SCLOsgi.MODULE_REPOSITORY.createRuntimeEnvironment(
-                                            environmentSpecification,
-                                            callback.getClass().getClassLoader(), listener);
-                                } catch (ImportFailureException e) {
-                                    throw new DatabaseException(e);
-                                } catch (Throwable t) {
-                                    throw new DatabaseException(t);
-                                } finally {
-                                    sclContext.put("graph", oldGraph);
-                                }
-                            }
-                        });
-                    } catch (DatabaseException e) {
-                        callback.exception(e);
-                        return;
-                    }
-                else 
-                           env = SCLOsgi.MODULE_REPOSITORY.createRuntimeEnvironment(
-                                   environmentSpecification,
-                                   callback.getClass().getClassLoader(), listener);
-                       callback.execute(env);
-                       } catch (ImportFailureException e) {
-                               callback.exception(new DatabaseException(e));
-                       }
-
-       }
-        
-    };     
-
-    // This is needed to prevent garbage collection from collecting UpdateListenerImpls
-    // -ModuleRepository only makes a weak reference to the listener
-    final static Map<String, UpdateListenerImpl> map = new HashMap<String, UpdateListenerImpl>(); 
-    
-    @Override
-    public RuntimeEnvironment perform(ReadGraph graph)
-            throws DatabaseException {
-        final EnvironmentSpecification environmentSpecification = EnvironmentSpecification.of(
-                "Builtin", "",
-                "Prelude", "",
-                "Simantics/All", "");
-        fillEnvironmentSpecification(environmentSpecification);
-        Resource mainModule = Layer0Utils.getPossibleChild(graph, parameter, "SCLMain");
-        String mainModuleUri;
-        if(mainModule != null) {
-            mainModuleUri = graph.getURI(mainModule);
-            environmentSpecification.importModule(mainModuleUri, "");
-        }
-        else
-            mainModuleUri = graph.getURI(parameter) + "/#"; // Add something dummy to the model uri that cannot be in a real URI
-        
-            return graph.syncRequest(new ParametrizedPrimitiveRead<String, RuntimeEnvironment>(mainModuleUri) {
-               
-               @Override
-               public void register(ReadGraph graph, Listener<RuntimeEnvironment> procedure) {
-
-                       SCLContext context = SCLContext.getCurrent();
-                       Object oldGraph = context.put("graph", graph);
-                       try {
-
-                               if(procedure.isDisposed()) {
-                                       UpdateListenerImpl.getRuntimeEnvironment(environmentSpecification, procedure, null);
-                               } else {
-                                       UpdateListenerImpl impl = new UpdateListenerImpl(environmentSpecification, procedure);
-                                       impl.notifyAboutUpdate();
-                                               map.put(parameter, impl);
-                               }
-
-                       } finally {
-                               context.put("graph", oldGraph);
-                       }
-
-               }
-                
-                @Override
-                public void unregistered() {
-                       map.remove(parameter);
-                }
-                
-            });
-    }
-    
-    @Override
-    public int hashCode() {
-        return 31*getClass().hashCode() + super.hashCode();
-    }
-
-    public static void flush() {
-        map.clear();
-    }
 
 }