]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/source/repository/MapModuleSourceRepository.java
(refs #7374) Created CommandSessionWithModules
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / source / repository / MapModuleSourceRepository.java
index 939010d40bc9392db981081bfbdb52496344fcf2..61a1d2c958526db87ef442d0155bafe1bbf6a602 100644 (file)
@@ -1,9 +1,11 @@
 package org.simantics.scl.compiler.source.repository;
 
 package org.simantics.scl.compiler.source.repository;
 
+import java.util.ArrayList;
 import java.util.Collection;
 
 import org.simantics.scl.compiler.module.Module;
 import org.simantics.scl.compiler.module.repository.UpdateListener;
 import java.util.Collection;
 
 import org.simantics.scl.compiler.module.Module;
 import org.simantics.scl.compiler.module.repository.UpdateListener;
+import org.simantics.scl.compiler.module.repository.UpdateListener.Observable;
 import org.simantics.scl.compiler.source.ModuleSource;
 import org.simantics.scl.compiler.source.PrecompiledModuleSource;
 
 import org.simantics.scl.compiler.source.ModuleSource;
 import org.simantics.scl.compiler.source.PrecompiledModuleSource;
 
@@ -21,6 +23,8 @@ public class MapModuleSourceRepository implements ModuleSourceRepository {
     THashMap<String, ModuleSource> modules = new THashMap<String, ModuleSource>();
     THashMap<String, String> documentations = new THashMap<String, String>();
     
     THashMap<String, ModuleSource> modules = new THashMap<String, ModuleSource>();
     THashMap<String, String> documentations = new THashMap<String, String>();
     
+    THashMap<String, ArrayList<UpdateListener>> listeners = new THashMap<String, ArrayList<UpdateListener>>(); 
+    
     public MapModuleSourceRepository() {
     }
     
     public MapModuleSourceRepository() {
     }
     
@@ -36,6 +40,12 @@ public class MapModuleSourceRepository implements ModuleSourceRepository {
     
     public void addModuleDescriptor(ModuleSource descriptor) {
         modules.put(descriptor.getModuleName(), descriptor);
     
     public void addModuleDescriptor(ModuleSource descriptor) {
         modules.put(descriptor.getModuleName(), descriptor);
+        synchronized (listeners) {
+            ArrayList<UpdateListener> list = listeners.get(descriptor.getModuleName());
+            if(list != null)
+                for(UpdateListener listener : list.toArray(new UpdateListener[list.size()]))
+                    listener.notifyAboutUpdate();
+        }
     }
     
     public void addModule(Module module) {
     }
     
     public void addModule(Module module) {
@@ -49,6 +59,29 @@ public class MapModuleSourceRepository implements ModuleSourceRepository {
     @Override
     public ModuleSource getModuleSource(String moduleName,
             UpdateListener listener) {
     @Override
     public ModuleSource getModuleSource(String moduleName,
             UpdateListener listener) {
+        if(listener != null) {
+            synchronized(listeners) {
+                ArrayList<UpdateListener> list = listeners.get(moduleName);
+                if(list == null) {
+                    list = new ArrayList<UpdateListener>(2);
+                    listeners.put(moduleName, list);
+                }
+                list.add(listener);
+            }
+            listener.addObservable(new Observable() {
+                @Override
+                public void removeListener(UpdateListener listener) {
+                    synchronized(listeners) {
+                        ArrayList<UpdateListener> list = listeners.get(moduleName);
+                        if(list != null) {
+                            list.remove(listener);
+                            if(list.isEmpty())
+                                listeners.remove(moduleName);
+                        }
+                    }
+                }
+            });
+        }
         return modules.get(moduleName);
     }
 
         return modules.get(moduleName);
     }