diff --git a/org.talend.core.runtime/src/main/java/org/talend/core/model/general/ModuleNeeded.java b/org.talend.core.runtime/src/main/java/org/talend/core/model/general/ModuleNeeded.java index a3f097446b..5dcf1addb6 100644 --- a/org.talend.core.runtime/src/main/java/org/talend/core/model/general/ModuleNeeded.java +++ b/org.talend.core.runtime/src/main/java/org/talend/core/model/general/ModuleNeeded.java @@ -77,7 +77,7 @@ public class ModuleNeeded { public ModuleNeeded(String context, String moduleName, String informationMsg, boolean required) { super(); this.context = context; - this.moduleName = moduleName; + setModuleName(moduleName); this.informationMsg = informationMsg; this.required = required; } @@ -86,7 +86,7 @@ public class ModuleNeeded { String requiredIf) { super(); this.context = context; - this.moduleName = moduleName; + setModuleName(moduleName); this.informationMsg = informationMsg; this.required = required; this.installURL = installURL; @@ -172,15 +172,16 @@ public class ModuleNeeded { } public String getModuleName() { - if (moduleName != null) { - return moduleName.replaceAll(QUOTATION_MARK, "").replaceAll(SINGLE_QUOTE, //$NON-NLS-1$ - ""); //$NON-NLS-1$ - } return this.moduleName; } public void setModuleName(String moduleName) { - this.moduleName = moduleName; + if (moduleName != null) { + this.moduleName = moduleName.replaceAll(QUOTATION_MARK, "").replaceAll(SINGLE_QUOTE, //$NON-NLS-1$ + ""); //$NON-NLS-1$ + } else { + this.moduleName = moduleName; + } } public boolean isRequired() { diff --git a/org.talend.core/src/main/java/org/talend/core/model/process/Element.java b/org.talend.core/src/main/java/org/talend/core/model/process/Element.java index 63195a7058..44f6cdb196 100644 --- a/org.talend.core/src/main/java/org/talend/core/model/process/Element.java +++ b/org.talend.core/src/main/java/org/talend/core/model/process/Element.java @@ -17,9 +17,15 @@ import java.beans.PropertyChangeSupport; import java.io.IOException; import java.io.ObjectInputStream; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.StringTokenizer; +import org.talend.commons.utils.data.list.IListenableListListener; +import org.talend.commons.utils.data.list.ListenableList; +import org.talend.commons.utils.data.list.ListenableListEvent; + /** * Abstract base class of elements in the model. All elements in the diagram must extends this class
* @@ -31,11 +37,50 @@ public abstract class Element implements Cloneable, IElement { public static final int ALPHA_VALUE = 50; - private List listParam = new ArrayList(); + private ListenableList listParam = new ListenableList( + new ArrayList()); // property change listeners protected PropertyChangeSupport listeners = new PropertyChangeSupport(this); + private Map mapNameToParam = new HashMap(); + + private IListenableListListener listenableListener = new IListenableListListener() { + + public void handleEvent(ListenableListEvent event) { + switch (event.type) { + case ADDED: + for (Object o : event.addedObjects) { + if (o instanceof IElementParameter) { + IElementParameter param = (IElementParameter) o; + mapNameToParam.put(param.getName(), param); + } + } + break; + case REMOVED: + for (Object o : event.removedObjects) { + if (o instanceof IElementParameter) { + IElementParameter param = (IElementParameter) o; + mapNameToParam.remove(param.getName()); + } + } + break; + case CLEARED: + mapNameToParam.clear(); + break; + } + } + + }; + + /** + * DOC nrousseau Element constructor comment. + */ + public Element() { + super(); + listParam.addPostOperationListener(listenableListener); + } + public void addPropertyChangeListener(PropertyChangeListener listener) { listeners.addPropertyChangeListener(listener); } @@ -134,9 +179,9 @@ public abstract class Element implements Cloneable, IElement { return fullListParam; } - @SuppressWarnings("unchecked")//$NON-NLS-1$ public void setElementParameters(List parameters) { - this.listParam = (List) parameters; + this.listParam.clear(); + this.listParam.addAll(parameters); } public IElementParameter getElementParameter(String name) { @@ -156,6 +201,12 @@ public abstract class Element implements Cloneable, IElement { } private IElementParameter findElementParameter(String name, String paramName) { + if (mapNameToParam.containsKey(name)) { + IElementParameter param = mapNameToParam.get(name); + if (param != null) { + return param; + } + } if (name != null && name.contains(":")) { // look for the parent first, then will retrieve the children //$NON-NLS-1$ StringTokenizer token = new StringTokenizer(name, ":"); //$NON-NLS-1$ @@ -167,31 +218,6 @@ public abstract class Element implements Cloneable, IElement { return parent.getChildParameters().get(childId); } } - } else { - for (IElementParameter elementParam : listParam) { - if (elementParam.getName().equals(name)) { - return elementParam; - } - } - } - - // if not found, look for the name if it's the name of a children - // this code is added only for compatibility and will be executed only one time - // to initialize the child. - // The parameters name are unique, so we just take the first one. - for (IElementParameter elementParam : listParam) { - for (String key : elementParam.getChildParameters().keySet()) { - IElementParameter param = elementParam.getChildParameters().get(key); - if (paramName == null || paramName.equals("")) { //$NON-NLS-1$ - if (param.getName().equals(name)) { - return param; - } - } else { - if (param.getName().equals(name) && (elementParam.getName().equals(paramName))) { - return param; - } - } - } } return null; } @@ -232,4 +258,5 @@ public abstract class Element implements Cloneable, IElement { } public abstract String getElementName(); + }