[177198] Filter invalid module types
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleFactory.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleFactory.java
index afb0a59..59ce708 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleFactory.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleFactory.java
@@ -12,7 +12,6 @@
import java.util.ArrayList;
import java.util.List;
-import java.util.Set;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IConfigurationElement;
@@ -28,7 +27,7 @@
public class ModuleFactory implements IOrdered {
private IConfigurationElement element;
public ModuleFactoryDelegate delegate;
- private Set moduleTypes;
+ private List moduleTypes;
/**
* ModuleFactory constructor comment.
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleType.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleType.java
index 98c675a..89b14de 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleType.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleType.java
@@ -131,7 +131,12 @@
}
public int hashCode() {
- return id.hashCode() + version.hashCode();
+ int hash = 17;
+ if (id != null)
+ hash += id.hashCode();
+ if (version != null)
+ hash += version.hashCode();
+ return hash;
}
public boolean equals(Object obj) {
@@ -142,15 +147,23 @@
return false;
ModuleType mt = (ModuleType) obj;
- if (id != null && mt.id != null && !id.equals(mt.id))
+ if (!matches(id, mt.id))
return false;
- if (version != null && mt.version != null && !version.equals(mt.version))
+ if (!matches(version, mt.version))
return false;
return true;
}
+ private static boolean matches(String a, String b) {
+ if (a == null || b == null || "*".equals(a) || "*".equals(b) || a.startsWith(b) || b.startsWith(a)
+ || (a.endsWith(".*") && b.startsWith(a.substring(0, a.length() - 1)))
+ || (b.endsWith(".*") && a.startsWith(b.substring(0, b.length() - 1))))
+ return true;
+ return false;
+ }
+
public String toString() {
return "ModuleType[" + id + ", " + version + "]";
}
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/RuntimeType.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/RuntimeType.java
index 7afc05d..fa32434 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/RuntimeType.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/RuntimeType.java
@@ -10,7 +10,7 @@
*******************************************************************************/
package org.eclipse.wst.server.core.internal;
-import java.util.Set;
+import java.util.List;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
@@ -22,7 +22,7 @@
*/
public class RuntimeType implements IRuntimeType {
private IConfigurationElement element;
- private Set moduleTypes;
+ private List moduleTypes;
public RuntimeType(IConfigurationElement element) {
super();
@@ -94,7 +94,7 @@
return null;
}
}
-
+
/**
* Return the supported module types.
*
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerPlugin.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerPlugin.java
index 86578e8..74cc9ab 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerPlugin.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerPlugin.java
@@ -347,10 +347,10 @@
return s;
}
- protected static Set getModuleTypes(IConfigurationElement[] elements) {
- Set set = new HashSet();
+ protected static List getModuleTypes(IConfigurationElement[] elements) {
+ List list = new ArrayList();
if (elements == null)
- return set;
+ return list;
int size = elements.length;
for (int i = 0; i < size; i++) {
@@ -360,10 +360,10 @@
int sizeV = versions.length;
for (int j = 0; j < sizeT; j++) {
for (int k = 0; k < sizeV; k++)
- set.add(ModuleType.getModuleType(types[j], versions[k]));
+ list.add(ModuleType.getModuleType(types[j], versions[k]));
}
}
- return set;
+ return list;
}
public static String generateId() {