X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.scl.compiler%2Fsrc%2Forg%2Fsimantics%2Fscl%2Fcompiler%2Fsource%2Frepository%2FMapModuleSourceRepository.java;h=61a1d2c958526db87ef442d0155bafe1bbf6a602;hb=50663fb80e93a3fed06d6527477729ad868f465a;hp=9872451c311e904cb72aec9bd34bad833184a240;hpb=9a175feb652b2b7bba7afa540831b9076be3c10e;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/source/repository/MapModuleSourceRepository.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/source/repository/MapModuleSourceRepository.java index 9872451c3..61a1d2c95 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/source/repository/MapModuleSourceRepository.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/source/repository/MapModuleSourceRepository.java @@ -1,7 +1,11 @@ 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 org.simantics.scl.compiler.module.repository.UpdateListener.Observable; import org.simantics.scl.compiler.source.ModuleSource; import org.simantics.scl.compiler.source.PrecompiledModuleSource; @@ -19,6 +23,8 @@ public class MapModuleSourceRepository implements ModuleSourceRepository { THashMap modules = new THashMap(); THashMap documentations = new THashMap(); + THashMap> listeners = new THashMap>(); + public MapModuleSourceRepository() { } @@ -34,6 +40,12 @@ public class MapModuleSourceRepository implements ModuleSourceRepository { public void addModuleDescriptor(ModuleSource descriptor) { modules.put(descriptor.getModuleName(), descriptor); + synchronized (listeners) { + ArrayList list = listeners.get(descriptor.getModuleName()); + if(list != null) + for(UpdateListener listener : list.toArray(new UpdateListener[list.size()])) + listener.notifyAboutUpdate(); + } } public void addModule(Module module) { @@ -47,9 +59,37 @@ public class MapModuleSourceRepository implements ModuleSourceRepository { @Override public ModuleSource getModuleSource(String moduleName, UpdateListener listener) { + if(listener != null) { + synchronized(listeners) { + ArrayList list = listeners.get(moduleName); + if(list == null) { + list = new ArrayList(2); + listeners.put(moduleName, list); + } + list.add(listener); + } + listener.addObservable(new Observable() { + @Override + public void removeListener(UpdateListener listener) { + synchronized(listeners) { + ArrayList list = listeners.get(moduleName); + if(list != null) { + list.remove(listener); + if(list.isEmpty()) + listeners.remove(moduleName); + } + } + } + }); + } return modules.get(moduleName); } + @Override + public Collection getModuleNames() { + return modules.keySet(); + } + @Override public void forAllModules(TObjectProcedure procedure) { modules.forEachKey(procedure); @@ -61,16 +101,7 @@ public class MapModuleSourceRepository implements ModuleSourceRepository { } @Override - public void forAllDocumentations(TObjectProcedure procedure) { - for(String documentationName : documentations.keySet()) - procedure.execute(documentationName); - } - - @Override - public void checkUpdates() { - } - - @Override - public void clear() { + public Collection getDocumentationNames() { + return documentations.keySet(); } }