diff --git a/main/plugins/org.talend.designer.codegen/src/main/java/org/talend/designer/codegen/components/model/ComponentsFactory.java b/main/plugins/org.talend.designer.codegen/src/main/java/org/talend/designer/codegen/components/model/ComponentsFactory.java index 5978b30193b..5aa2d1882e1 100644 --- a/main/plugins/org.talend.designer.codegen/src/main/java/org/talend/designer/codegen/components/model/ComponentsFactory.java +++ b/main/plugins/org.talend.designer.codegen/src/main/java/org/talend/designer/codegen/components/model/ComponentsFactory.java @@ -18,6 +18,7 @@ import java.net.URL; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; +import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; @@ -483,12 +484,10 @@ public class ComponentsFactory implements IComponentsFactory { * @see org.talend.core.model.components.IComponentsFactory#getComponents() */ @Override + @Deprecated public Set getComponents() { - wait4InitialiseFinish(); - if (componentList == null) { - init(false); - } - return componentList; + // just return cache components + return ComponentsMemoryCacheMgr.getInstance().getComponents(); } @Override @@ -498,12 +497,12 @@ public class ComponentsFactory implements IComponentsFactory { @Override public Collection readComponents() { - Set components = getComponents(); - Collection readComponents = null; - synchronized (components) { - readComponents = Arrays.asList(components.toArray(new IComponent[0])); + wait4InitialiseFinish(); + if (componentList == null) { + init(false); } - return readComponents; + Set components = ComponentsMemoryCacheMgr.getInstance().getComponents(); + return Collections.unmodifiableCollection(components); } @Override @@ -691,4 +690,24 @@ public class ComponentsFactory implements IComponentsFactory { } + public void removeComponents(Collection comps) { + ComponentsMemoryCacheMgr.getInstance().removeComponents(comps); + } + + public void addComponents(Collection comps) { + ComponentsMemoryCacheMgr.getInstance().addComponents(comps); + } + + public void clearComponents() { + ComponentsMemoryCacheMgr.getInstance().clearComponents(); + } + + public void addComponent(IComponent comp) { + ComponentsMemoryCacheMgr.getInstance().addComponent(comp); + } + + public boolean containComponent(IComponent comp) { + return ComponentsMemoryCacheMgr.getInstance().containComponent(comp); + } + } diff --git a/main/plugins/org.talend.designer.codegen/src/main/java/org/talend/designer/codegen/components/model/ComponentsMemoryCacheMgr.java b/main/plugins/org.talend.designer.codegen/src/main/java/org/talend/designer/codegen/components/model/ComponentsMemoryCacheMgr.java index f244448fa2a..7b91633443c 100644 --- a/main/plugins/org.talend.designer.codegen/src/main/java/org/talend/designer/codegen/components/model/ComponentsMemoryCacheMgr.java +++ b/main/plugins/org.talend.designer.codegen/src/main/java/org/talend/designer/codegen/components/model/ComponentsMemoryCacheMgr.java @@ -14,6 +14,7 @@ package org.talend.designer.codegen.components.model; import java.io.IOException; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.Iterator; @@ -100,6 +101,42 @@ public class ComponentsMemoryCacheMgr { } } + public void addComponents(Collection comps) { + componentList.addAll(comps); + for (IComponent comp : comps) { + if (comp instanceof EmfComponent) { + int owner = ((EmfComponent) comp).getComponentInfo().getOwner(); + if ((owner & EmfComponent.OWNER_CUSTOM) > 0) { + customComponentList.add(comp); + } + if ((owner & EmfComponent.OWNER_USER) > 0) { + userComponentList.add(comp); + } + } + } + } + + public void removeComponents(Collection comps) { + componentList.removeAll(comps); + for (IComponent comp : comps) { + if (comp instanceof EmfComponent) { + int owner = ((EmfComponent) comp).getComponentInfo().getOwner(); + if ((owner & EmfComponent.OWNER_CUSTOM) > 0) { + customComponentList.remove(comp); + } + if ((owner & EmfComponent.OWNER_USER) > 0) { + userComponentList.remove(comp); + } + } + } + } + + public void clearComponents() { + componentList.clear(); + customComponentList.clear(); + userComponentList.clear(); + } + public void addUserComponent(IComponent comp) { componentList.add(comp); userComponentList.add(comp);