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 extends IElementParameter> 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();
+
}