Author: scabanovich
Date: 2007-08-23 12:29:47 -0400 (Thu, 23 Aug 2007)
New Revision: 3299
Added:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamPackageUtil.java
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/core/ISeamElement.java
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/core/ISeamPackage.java
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/core/ISeamProject.java
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/core/ISeamScope.java
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/core/event/ISeamValueList.java
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/AbstractContextVariable.java
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/AbstractSeamDeclaration.java
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/BijectedAttribute.java
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamAnnotatedFactory.java
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamComponentDeclaration.java
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamComponentMethod.java
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamJavaComponentDeclaration.java
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamJavaContextVariable.java
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamObject.java
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamPackage.java
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamProject.java
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamPropertiesDeclaration.java
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamProperty.java
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamScope.java
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamValueList.java
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamValueMap.java
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamValueMapEntry.java
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamValueString.java
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamXmlComponentDeclaration.java
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamXmlFactory.java
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/scanner/lib/ClassPath.java
Log:
JBIDE-820
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/core/ISeamElement.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/core/ISeamElement.java 2007-08-23
15:36:38 UTC (rev 3298)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/core/ISeamElement.java 2007-08-23
16:29:47 UTC (rev 3299)
@@ -19,7 +19,7 @@
*
* @author Viacheslav Kabanovich
*/
-public interface ISeamElement {
+public interface ISeamElement extends Cloneable {
/**
* Returns seam project that contains this object.
@@ -45,6 +45,6 @@
*/
public IResource getResource();
- public ISeamElement copy();
+// public ISeamElement copy();
}
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/core/ISeamPackage.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/core/ISeamPackage.java 2007-08-23
15:36:38 UTC (rev 3298)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/core/ISeamPackage.java 2007-08-23
16:29:47 UTC (rev 3299)
@@ -10,7 +10,7 @@
******************************************************************************/
package org.jboss.tools.seam.core;
-import java.util.Collection;
+import java.util.Map;
import java.util.Set;
/**
@@ -24,6 +24,6 @@
public Set<ISeamComponent> getComponents();
- public Collection<ISeamPackage> getPackages();
+ public Map<String,ISeamPackage> getPackages();
}
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/core/ISeamProject.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/core/ISeamProject.java 2007-08-23
15:36:38 UTC (rev 3298)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/core/ISeamProject.java 2007-08-23
16:29:47 UTC (rev 3299)
@@ -40,12 +40,18 @@
public ISeamScope getScope(ScopeType scopeType);
/**
- * Returns packages
+ * Returns root packages
* @return
*/
public Collection<ISeamPackage> getPackages();
/**
+ *
+ * @return collection of all packages
+ */
+ public Collection<ISeamPackage> getAllPackages();
+
+ /**
* Finds package object in this project for component.
* @param c
* @return
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/core/ISeamScope.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/core/ISeamScope.java 2007-08-23
15:36:38 UTC (rev 3298)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/core/ISeamScope.java 2007-08-23
16:29:47 UTC (rev 3299)
@@ -32,12 +32,18 @@
/**
*
- * @return collection of all packages
+ * @return collection of root packages
*/
public Collection<ISeamPackage> getPackages();
/**
*
+ * @return collection of all packages
+ */
+ public Collection<ISeamPackage> getAllPackages();
+
+ /**
+ *
* @param c
* @return
*/
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/core/event/ISeamValueList.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/core/event/ISeamValueList.java 2007-08-23
15:36:38 UTC (rev 3298)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/core/event/ISeamValueList.java 2007-08-23
16:29:47 UTC (rev 3299)
@@ -20,6 +20,6 @@
*
* @return values of seam list property
*/
- public List<ISeamValueString> getValues();
+ public List<ISeamValueString> getValues();
}
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/AbstractContextVariable.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/AbstractContextVariable.java 2007-08-23
15:36:38 UTC (rev 3298)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/AbstractContextVariable.java 2007-08-23
16:29:47 UTC (rev 3299)
@@ -75,10 +75,9 @@
setScopeAsString(value == null ? null : value.getValue());
}
- public void copyTo(SeamObject copy) {
- super.copyTo(copy);
- AbstractContextVariable f = (AbstractContextVariable)copy;
- f.scope = scope;
- f.scopeType = scopeType;
+ public AbstractContextVariable clone() throws CloneNotSupportedException {
+ AbstractContextVariable c = (AbstractContextVariable)super.clone();
+ return c;
}
+
}
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/AbstractSeamDeclaration.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/AbstractSeamDeclaration.java 2007-08-23
15:36:38 UTC (rev 3298)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/AbstractSeamDeclaration.java 2007-08-23
16:29:47 UTC (rev 3299)
@@ -79,10 +79,11 @@
return s1 == null ? s2 == null : s1.equals(s2);
}
- public void copyTo(SeamObject copy) {
- super.copyTo(copy);
- AbstractSeamDeclaration d = (AbstractSeamDeclaration)copy;
- d.name = name;
- d.attributes.putAll(attributes);
+ public AbstractSeamDeclaration clone() throws CloneNotSupportedException {
+ AbstractSeamDeclaration c = (AbstractSeamDeclaration)super.clone();
+ c.attributes = new HashMap<String, IValueInfo>();
+ c.attributes.putAll(attributes);
+ return c;
}
+
}
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/BijectedAttribute.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/BijectedAttribute.java 2007-08-23
15:36:38 UTC (rev 3298)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/BijectedAttribute.java 2007-08-23
16:29:47 UTC (rev 3299)
@@ -72,12 +72,9 @@
}
- public void copyTo(SeamObject copy) {
- super.copyTo(copy);
- if(copy instanceof BijectedAttribute) {
- BijectedAttribute sf = (BijectedAttribute)copy;
- sf.types = types;
- }
+ public BijectedAttribute clone() throws CloneNotSupportedException {
+ BijectedAttribute c = (BijectedAttribute)super.clone();
+ return c;
}
}
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamAnnotatedFactory.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamAnnotatedFactory.java 2007-08-23
15:36:38 UTC (rev 3298)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamAnnotatedFactory.java 2007-08-23
16:29:47 UTC (rev 3299)
@@ -73,12 +73,11 @@
this.parentDeclaration = parentDeclaration;
}
- public void copyTo(SeamObject copy) {
- super.copyTo(copy);
- SeamAnnotatedFactory f = (SeamAnnotatedFactory)copy;
- f.autoCreate = autoCreate;
+ public SeamAnnotatedFactory clone() throws CloneNotSupportedException {
+ SeamAnnotatedFactory c = (SeamAnnotatedFactory)super.clone();
//we need not new copy here but reference!
- f.parentDeclaration = parentDeclaration == null ? null :
(SeamJavaComponentDeclaration)parentDeclaration.copy();
+ c.parentDeclaration = parentDeclaration == null ? null :
(SeamJavaComponentDeclaration)doClone(parentDeclaration);
+ return c;
}
}
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamComponentDeclaration.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamComponentDeclaration.java 2007-08-23
15:36:38 UTC (rev 3298)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamComponentDeclaration.java 2007-08-23
16:29:47 UTC (rev 3299)
@@ -61,4 +61,9 @@
return null;
}
+ public SeamComponentDeclaration clone() throws CloneNotSupportedException {
+ SeamComponentDeclaration c = (SeamComponentDeclaration)super.clone();
+ return c;
+ }
+
}
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamComponentMethod.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamComponentMethod.java 2007-08-23
15:36:38 UTC (rev 3298)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamComponentMethod.java 2007-08-23
16:29:47 UTC (rev 3299)
@@ -100,11 +100,11 @@
}
- public void copyTo(SeamObject copy) {
- super.copyTo(copy);
- SeamComponentMethod m = (SeamComponentMethod)copy;
- m.types.addAll(types);
- m.javaSource = javaSource;
+ public SeamComponentMethod clone() throws CloneNotSupportedException {
+ SeamComponentMethod c = (SeamComponentMethod)super.clone();
+ c.types = new HashSet<SeamComponentMethodType>();
+ c.types.addAll(types);
+ return c;
}
}
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamJavaComponentDeclaration.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamJavaComponentDeclaration.java 2007-08-23
15:36:38 UTC (rev 3298)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamJavaComponentDeclaration.java 2007-08-23
16:29:47 UTC (rev 3299)
@@ -395,26 +395,25 @@
}
}
- public void copyTo(SeamObject copy) {
- super.copyTo(copy);
- SeamJavaComponentDeclaration d = (SeamJavaComponentDeclaration)copy;
- d.className = className;
- d.scopeType = scopeType;
+ public SeamJavaComponentDeclaration clone() throws CloneNotSupportedException {
+ SeamJavaComponentDeclaration c = (SeamJavaComponentDeclaration)super.clone();
if(types != null) {
- d.types = new HashMap<BeanType, IValueInfo>();
- d.types.putAll(types);
+ c.types = new HashMap<BeanType, IValueInfo>();
+ c.types.putAll(types);
}
- d.precedence = precedence;
- d.type = type;
+ c.bijectedAttributes = new HashSet<IBijectedAttribute>();
for (IBijectedAttribute a : bijectedAttributes) {
- d.addBijectedAttribute((IBijectedAttribute)a.copy());
+ c.addBijectedAttribute((IBijectedAttribute)doClone(a));
}
+ c.componentMethods = new HashSet<ISeamComponentMethod>();
for (ISeamComponentMethod m : componentMethods) {
- d.addMethod((ISeamComponentMethod)m.copy());
+ c.addMethod((ISeamComponentMethod)doClone(m));
}
+ c.roles = new HashSet<IRole>();
for (IRole r : roles) {
- d.addRole((IRole)r.copy());
+ c.addRole((IRole)doClone(r));
}
+ return c;
}
}
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamJavaContextVariable.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamJavaContextVariable.java 2007-08-23
15:36:38 UTC (rev 3298)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamJavaContextVariable.java 2007-08-23
16:29:47 UTC (rev 3299)
@@ -68,12 +68,9 @@
return changes;
}
- public void copyTo(SeamObject copy) {
- super.copyTo(copy);
- if(copy instanceof SeamJavaContextVariable) {
- SeamJavaContextVariable sf = (SeamJavaContextVariable)copy;
- sf.javaSource = javaSource;
- }
+ public SeamJavaContextVariable clone() throws CloneNotSupportedException {
+ SeamJavaContextVariable c = (SeamJavaContextVariable)super.clone();
+ return c;
}
}
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamObject.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamObject.java 2007-08-23
15:36:38 UTC (rev 3298)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamObject.java 2007-08-23
16:29:47 UTC (rev 3299)
@@ -10,7 +10,6 @@
******************************************************************************/
package org.jboss.tools.seam.internal.core;
-import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.resources.IResource;
@@ -103,6 +102,7 @@
}
protected void adopt(ISeamElement child) {
+ if(child.getSeamProject() != null && child.getSeamProject() !=
getSeamProject()) return;
((SeamObject)child).setParent(this);
}
@@ -126,24 +126,18 @@
return null;
}
- public final SeamObject copy() {
- SeamObject result = null;
- try {
- result = (SeamObject)this.getClass().newInstance();
- copyTo(result);
- } catch (InstantiationException e1) {
-
- } catch (IllegalAccessException e2) {
-
- }
- return result;
- }
-
- public void copyTo(SeamObject copy) {
- copy.source = source;
- copy.id = id;
- copy.resource = resource;
+ public SeamObject clone() throws CloneNotSupportedException {
+ SeamObject c = (SeamObject)super.clone();
+ c.parent = null;
//do not copy parent
+ return c;
}
+ protected static ISeamElement doClone(ISeamElement object) throws
CloneNotSupportedException {
+ if(!(object instanceof SeamObject)) {
+ throw new CloneNotSupportedException("Only instance of SeamObject can be cloned:
" + object);
+ }
+ return ((SeamObject)object).clone();
+ }
+
}
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamPackage.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamPackage.java 2007-08-23
15:36:38 UTC (rev 3298)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamPackage.java 2007-08-23
16:29:47 UTC (rev 3299)
@@ -45,8 +45,8 @@
setId(name);
}
- public Collection<ISeamPackage> getPackages() {
- return packages.values();
+ public Map<String,ISeamPackage> getPackages() {
+ return packages;
}
public String getQualifiedName() {
Added:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamPackageUtil.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamPackageUtil.java
(rev 0)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamPackageUtil.java 2007-08-23
16:29:47 UTC (rev 3299)
@@ -0,0 +1,119 @@
+package org.jboss.tools.seam.internal.core;
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.jboss.tools.seam.core.ISeamComponent;
+import org.jboss.tools.seam.core.ISeamElement;
+import org.jboss.tools.seam.core.ISeamPackage;
+import org.jboss.tools.seam.core.event.Change;
+
+public class SeamPackageUtil {
+
+ public static List<Change> revalidatePackages(ISeamElement parent,
Map<String,SeamComponent> allComponents, Collection<ISeamComponent>
components, Map<String,ISeamPackage> packages) {
+ List<Change> changes = null;
+ changes = checkPackages(allComponents, packages, changes);
+ changes = fillPackages(parent, packages, components, changes);
+ changes = cleanPackages(parent, packages, changes);
+ return changes;
+ }
+
+ static List<Change> checkPackages(Map<String,SeamComponent> allComponents,
Map<String,ISeamPackage> packages, List<Change> changes) {
+ for (ISeamPackage p : packages.values()) {
+ Iterator<ISeamComponent> cs = p.getComponents().iterator();
+ while(cs.hasNext()) {
+ ISeamComponent c = cs.next();
+ String pkg = getPackageName(c);
+ if(allComponents.get(c.getName()) == null || !p.getQualifiedName().equals(pkg)) {
+ cs.remove();
+ changes = Change.addChange(changes, new Change(p, null, c, null));
+ }
+ }
+ changes = checkPackages(allComponents, p.getPackages(), changes);
+ }
+ return changes;
+ }
+
+ static List<Change> fillPackages(ISeamElement parent,
Map<String,ISeamPackage> packages, Collection<ISeamComponent> components,
List<Change> changes) {
+ for (ISeamComponent c : components) {
+ String pkg = getPackageName(c);
+ ISeamPackage p = findOrCreatePackage(parent, packages, pkg);
+ if(p.getComponents().contains(c)) continue;
+ p.getComponents().add(c);
+ changes = Change.addChange(changes, new Change(p, null, null, c));
+ }
+ return changes;
+ }
+
+ static List<Change> cleanPackages(ISeamElement parent,
Map<String,ISeamPackage> packages, List<Change> changes) {
+ Iterator<String> ps = packages.keySet().iterator();
+ while(ps.hasNext()) {
+ ISeamPackage p = packages.get(ps.next());
+ changes = cleanPackages(p, p.getPackages(), changes);
+ if(p.getComponents().size() == 0 && p.getPackages().size() == 0) {
+ ps.remove();
+ changes = Change.addChange(changes, new Change(parent, null, p, null));
+ }
+ }
+ return changes;
+ }
+
+ static String getPackageName(ISeamComponent c) {
+ // Package name can be based
+ // 1) on qualified java class name,
+ // then it is java package name
+ // 2) on seam component name,
+ // then name is processed by analogy with java,
+ // and package name is its part until the last dot.
+
+ // Presently, only second approach is implemented,
+ // in future an option can be added, that
+ // will allow user to customize view by selecting
+ // the 'kind' of packages.
+ String cls = c.getName();
+ //c.getClassName();
+ if(cls == null || cls.length() == 0) {
+ return "(unspecified)";
+ } else if(cls.startsWith("${") || cls.startsWith("#{")) {
+ return "(specified with EL)";
+ } else {
+ int d = cls.lastIndexOf('.');
+ return (d < 0) ? "(default package)" : cls.substring(0, d);
+ }
+ }
+
+ static ISeamPackage findPackage(ISeamElement parent, Map<String, ISeamPackage>
packages, String qualifiedName) {
+ return findOrCreatePackage(parent, packages, qualifiedName, false);
+ }
+
+ static ISeamPackage findOrCreatePackage(ISeamElement parent, Map<String,
ISeamPackage> packages, String qualifiedName) {
+ return findOrCreatePackage(parent, packages, qualifiedName, true);
+ }
+
+ static ISeamPackage findOrCreatePackage(ISeamElement parent, Map<String,
ISeamPackage> packages, String qualifiedName, boolean create) {
+ int i = qualifiedName.indexOf('.');
+ String firstName = i < 0 ? qualifiedName : qualifiedName.substring(0, i);
+ String tail = i < 0 ? null : qualifiedName.substring(i + 1);
+
+ ISeamPackage p = packages.get(firstName);
+ if(p == null) {
+ if(!create) return null;
+ SeamPackage pi = new SeamPackage(firstName);
+ pi.setParent(parent);
+ pi.setSourcePath(parent.getSourcePath());
+ p = pi;
+ packages.put(firstName, pi);
+ }
+ return (tail != null) ? findOrCreatePackage(p, p.getPackages(), tail) : p;
+ }
+
+ public static void collectAllPackages(Map<String, ISeamPackage> packages,
Collection<ISeamPackage> list) {
+ for (ISeamPackage p : packages.values()) {
+ if(p.getComponents().size() > 0) list.add(p);
+ collectAllPackages(p.getPackages(), list);
+ }
+ }
+
+}
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamProject.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamProject.java 2007-08-23
15:36:38 UTC (rev 3298)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamProject.java 2007-08-23
16:29:47 UTC (rev 3299)
@@ -122,10 +122,16 @@
public Collection<ISeamPackage> getPackages() {
return packages.values();
}
-
+
+ public Collection<ISeamPackage> getAllPackages() {
+ List<ISeamPackage> list = new ArrayList<ISeamPackage>();
+ SeamPackageUtil.collectAllPackages(packages, list);
+ return list;
+ }
+
public ISeamPackage getPackage(ISeamComponent c) {
- String pkg = getPackageName(c);
- return packages.get(pkg);
+ String pkg = SeamPackageUtil.getPackageName(c);
+ return SeamPackageUtil.findPackage(this, packages, pkg);
}
public ISeamProject getSeamProject() {
@@ -147,7 +153,12 @@
if(!p.isStorageResolved) {
p.resolve();
} else {
- Map<IPath,LoadedDeclarations> map = p.getAllDeclarations();
+ Map<IPath,LoadedDeclarations> map = null;
+ try {
+ map = p.getAllDeclarations();
+ } catch (CloneNotSupportedException e) {
+ SeamCorePlugin.getPluginLog().logError(e);
+ }
for (IPath source : map.keySet()) {
LoadedDeclarations ds = map.get(source);
registerComponents(ds, source);
@@ -355,7 +366,7 @@
List<Change> addedComponents = null;
for (int i = 0; i < components.length; i++) {
SeamComponentDeclaration loaded = (SeamComponentDeclaration)components[i];
- loaded.setParent(this);
+ adopt(loaded);
SeamComponentDeclaration current =
(SeamComponentDeclaration)currentComponents.remove(loaded.getId());
loaded.setSourcePath(source);
@@ -451,10 +462,14 @@
factoryDeclarationsRemoved(currentFactories);
- registerComponentsInDependentProjects(ds, source);
+ try {
+ registerComponentsInDependentProjects(ds, source);
+ } catch (CloneNotSupportedException e) {
+ SeamCorePlugin.getPluginLog().logError(e);
+ }
}
- public void registerComponentsInDependentProjects(LoadedDeclarations ds, IPath source)
{
+ public void registerComponentsInDependentProjects(LoadedDeclarations ds, IPath source)
throws CloneNotSupportedException {
if(usedBy.size() == 0) return;
if(source.toString().endsWith(".jar")) return;
@@ -462,10 +477,11 @@
p.resolve();
LoadedDeclarations ds1 = new LoadedDeclarations();
for (SeamComponentDeclaration d: ds.getComponents()) {
- ds1.getComponents().add((SeamComponentDeclaration)d.copy());
+ ds1.getComponents().add(d.clone());
}
for (ISeamFactory f : ds.getFactories()) {
- ds1.getFactories().add((ISeamFactory)f.copy());
+ SeamObject copy = ((SeamObject)f).clone();
+ ds1.getFactories().add((ISeamFactory)copy);
}
p.registerComponents(ds1, source);
}
@@ -914,73 +930,11 @@
}
void revalidatePackages() {
- List<Change> changes = null;
- for (ISeamPackage p : packages.values()) {
- Iterator<ISeamComponent> cs = p.getComponents().iterator();
- while(cs.hasNext()) {
- ISeamComponent c = cs.next();
- String pkg = getPackageName(c);
- if(allComponents.get(c.getName()) == null || !p.getName().equals(pkg)) {
- cs.remove();
- changes = Change.addChange(changes, new Change(p, null, c, null));
- }
- }
- }
- for (ISeamComponent c : getComponents()) {
- String pkg = getPackageName(c);
- ISeamPackage p = findOrCreatePackage(this, packages, pkg);
- if(p.getComponents().contains(c)) continue;
- p.getComponents().add(c);
- changes = Change.addChange(changes, new Change(p, null, null, c));
- }
- Iterator<String> ps = packages.keySet().iterator();
- while(ps.hasNext()) {
- ISeamPackage p = packages.get(ps.next());
- if(p.getComponents().size() == 0) {
- ps.remove();
- changes = Change.addChange(changes, new Change(this, null, p, null));
- }
- }
+ List<Change> changes = SeamPackageUtil.revalidatePackages(this, allComponents,
getComponents(), packages);
fireChanges(changes);
}
- static String getPackageName(ISeamComponent c) {
- // Package name can be based
- // 1) on qualified java class name,
- // then it is java package name
- // 2) on seam component name,
- // then name is processed by analogy with java,
- // and package name is its part until the last dot.
-
- // Presently, only second approach is implemented,
- // in future an option can be added, that
- // will allow user to customize view by selecting
- // the 'kind' of packages.
- String cls = c.getName();
- //c.getClassName();
- if(cls == null || cls.length() == 0) {
- return "(unspecified)";
- } else if(cls.startsWith("${") || cls.startsWith("#{")) {
- return "(specified with EL)";
- } else {
- int d = cls.lastIndexOf('.');
- return (d < 0) ? "(default package)" : cls.substring(0, d);
- }
- }
-
- static ISeamPackage findOrCreatePackage(ISeamElement parent, Map<String,
ISeamPackage> packages, String name) {
- ISeamPackage p = packages.get(name);
- if(p == null) {
- SeamPackage pi = new SeamPackage(name);
- pi.setParent(parent);
- pi.setSourcePath(parent.getSourcePath());
- p = pi;
- packages.put(name, pi);
- }
- return p;
- }
-
- Map<IPath, LoadedDeclarations> getAllDeclarations() {
+ Map<IPath, LoadedDeclarations> getAllDeclarations() throws
CloneNotSupportedException {
Map<IPath, LoadedDeclarations> map = new HashMap<IPath,
LoadedDeclarations>();
for (ISeamComponent c : allComponents.values()) {
for (ISeamComponentDeclaration d : c.getAllDeclarations()) {
@@ -991,7 +945,7 @@
ds = new LoadedDeclarations();
map.put(p, ds);
}
- ds.getComponents().add((SeamComponentDeclaration)d.copy());
+ ds.getComponents().add(((SeamComponentDeclaration)d).clone());
}
}
for (ISeamFactory f : allFactories) {
@@ -1002,7 +956,7 @@
ds = new LoadedDeclarations();
map.put(p, ds);
}
- ds.getFactories().add((ISeamFactory)f.copy());
+ ds.getFactories().add((ISeamFactory)((SeamObject)f).clone());
}
return map;
}
@@ -1049,4 +1003,4 @@
}
}
-}
\ No newline at end of file
+}
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamPropertiesDeclaration.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamPropertiesDeclaration.java 2007-08-23
15:36:38 UTC (rev 3298)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamPropertiesDeclaration.java 2007-08-23
16:29:47 UTC (rev 3299)
@@ -123,13 +123,14 @@
}
}
- public void copyTo(SeamObject copy) {
- super.copyTo(copy);
- SeamPropertiesDeclaration d = (SeamPropertiesDeclaration)copy;
+ public SeamPropertiesDeclaration clone() throws CloneNotSupportedException {
+ SeamPropertiesDeclaration c = (SeamPropertiesDeclaration)super.clone();
+ c.properties = new HashMap<String, ISeamProperty>();
for (String name : properties.keySet()) {
- ISeamProperty p = (ISeamProperty)properties.get(name).copy();
- d.addProperty(p);
+ ISeamProperty p = (ISeamProperty)doClone(properties.get(name));
+ c.addProperty(p);
}
+ return c;
}
}
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamProperty.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamProperty.java 2007-08-23
15:36:38 UTC (rev 3298)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamProperty.java 2007-08-23
16:29:47 UTC (rev 3299)
@@ -80,10 +80,10 @@
return s1 == null ? s2 == null : s1.equals(s2);
}
- public void copyTo(SeamObject copy) {
- super.copyTo(copy);
- SeamProperty p = (SeamProperty)copy;
- p.value = value == null ? null : (ISeamValue)value.copy();
+ public SeamProperty clone() throws CloneNotSupportedException {
+ SeamProperty c = (SeamProperty)super.clone();
+ c.value = value == null ? null : (ISeamValue)doClone(value);
+ return c;
}
}
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamScope.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamScope.java 2007-08-23
15:36:38 UTC (rev 3298)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamScope.java 2007-08-23
16:29:47 UTC (rev 3299)
@@ -14,7 +14,6 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
-import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -26,6 +25,7 @@
public class SeamScope extends SeamObject implements ISeamScope {
//Contains all components for that scope.
+ private Map<String,SeamComponent> componentMap = new HashMap<String,
SeamComponent>();
private List<ISeamComponent> components = new ArrayList<ISeamComponent>();
private ScopeType scopeType = null;
@@ -45,17 +45,25 @@
return packages.values();
}
+ public Collection<ISeamPackage> getAllPackages() {
+ List<ISeamPackage> list = new ArrayList<ISeamPackage>();
+ SeamPackageUtil.collectAllPackages(packages, list);
+ return list;
+ }
+
public ISeamPackage getPackage(ISeamComponent c) {
- String pkg = SeamProject.getPackageName(c);
- return packages.get(pkg);
+ String pkg = SeamPackageUtil.getPackageName(c);
+ return SeamPackageUtil.findPackage(this, packages, pkg);
}
- public void addComponent(ISeamComponent component) {
- components.add(component);
+ public void addComponent(SeamComponent component) {
+ components.add(component);
+ componentMap.put(component.getName(), component);
}
public void removeComponent(ISeamComponent component) {
components.remove(component);
+ componentMap.remove(component.getName());
}
public ScopeType getType() {
@@ -63,33 +71,7 @@
}
void revalidatePackages() {
- List<Change> changes = null;
- for (ISeamPackage p : packages.values()) {
- Iterator<ISeamComponent> cs = p.getComponents().iterator();
- while(cs.hasNext()) {
- ISeamComponent c = cs.next();
- String pkg = SeamProject.getPackageName(c);
- if(!components.contains(c) || !p.getName().equals(pkg)) {
- cs.remove();
- changes = Change.addChange(changes, new Change(p, null, c, null));
- }
- }
- }
- for (ISeamComponent c : getComponents()) {
- String pkg = SeamProject.getPackageName(c);
- ISeamPackage p = SeamProject.findOrCreatePackage(this, packages, pkg);
- if(p.getComponents().contains(c)) continue;
- p.getComponents().add(c);
- changes = Change.addChange(changes, new Change(p, null, null, c));
- }
- Iterator<String> ps = packages.keySet().iterator();
- while(ps.hasNext()) {
- ISeamPackage p = packages.get(ps.next());
- if(p.getComponents().size() == 0) {
- ps.remove();
- changes = Change.addChange(changes, new Change(this, null, p, null));
- }
- }
+ List<Change> changes = SeamPackageUtil.revalidatePackages(this, componentMap,
getComponents(), packages);
((SeamProject)getSeamProject()).fireChanges(changes);
}
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamValueList.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamValueList.java 2007-08-23
15:36:38 UTC (rev 3298)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamValueList.java 2007-08-23
16:29:47 UTC (rev 3299)
@@ -50,12 +50,13 @@
return changes;
}
- public void copyTo(SeamObject copy) {
- super.copyTo(copy);
- SeamValueList vl = (SeamValueList)copy;
+ public SeamValueList clone() throws CloneNotSupportedException {
+ SeamValueList c = (SeamValueList)super.clone();
+ c.values = new ArrayList<ISeamValueString>();
for (ISeamValueString v : values) {
- vl.addValue((SeamValueString)v.copy());
+ c.addValue((SeamValueString)doClone(v));
}
+ return c;
}
}
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamValueMap.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamValueMap.java 2007-08-23
15:36:38 UTC (rev 3298)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamValueMap.java 2007-08-23
16:29:47 UTC (rev 3299)
@@ -50,12 +50,13 @@
return changes;
}
- public void copyTo(SeamObject copy) {
- super.copyTo(copy);
- SeamValueMap vl = (SeamValueMap)copy;
+ public SeamValueMap clone() throws CloneNotSupportedException {
+ SeamValueMap c = (SeamValueMap)super.clone();
+ c.entries = new ArrayList<ISeamValueMapEntry>();
for (ISeamValueMapEntry v : entries) {
- vl.addEntry((SeamValueMapEntry)v.copy());
+ c.addEntry((SeamValueMapEntry)doClone(v));
}
+ return c;
}
}
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamValueMapEntry.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamValueMapEntry.java 2007-08-23
15:36:38 UTC (rev 3298)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamValueMapEntry.java 2007-08-23
16:29:47 UTC (rev 3299)
@@ -65,11 +65,11 @@
return changes;
}
- public void copyTo(SeamObject copy) {
- super.copyTo(copy);
- SeamValueMapEntry vl = (SeamValueMapEntry)copy;
- vl.key = key == null ? null : (SeamValueString)key.copy();
- vl.value = value == null ? null : (SeamValueString)value.copy();
+ public SeamValueMapEntry clone() throws CloneNotSupportedException {
+ SeamValueMapEntry c = (SeamValueMapEntry)super.clone();
+ c.key = key == null ? null : key.clone();
+ c.value = value == null ? null : value.clone();
+ return c;
}
}
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamValueString.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamValueString.java 2007-08-23
15:36:38 UTC (rev 3298)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamValueString.java 2007-08-23
16:29:47 UTC (rev 3299)
@@ -46,11 +46,9 @@
return changes;
}
- public void copyTo(SeamObject copy) {
- super.copyTo(copy);
- SeamValueString vl = (SeamValueString)copy;
- vl.value = value;
- vl.currentValue = currentValue;
+ public SeamValueString clone() throws CloneNotSupportedException {
+ SeamValueString c = (SeamValueString)super.clone();
+ return c;
}
}
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamXmlComponentDeclaration.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamXmlComponentDeclaration.java 2007-08-23
15:36:38 UTC (rev 3298)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamXmlComponentDeclaration.java 2007-08-23
16:29:47 UTC (rev 3299)
@@ -161,14 +161,9 @@
return changes;
}
- public void copyTo(SeamObject copy) {
- super.copyTo(copy);
- SeamXmlComponentDeclaration d = (SeamXmlComponentDeclaration)copy;
- d.className = className;
- d.autoCreate = autoCreate;
- d.installed = installed;
- d.jndiName = jndiName;
- d.precedence = precedence;
- d.scope = scope;
+ public SeamXmlComponentDeclaration clone() throws CloneNotSupportedException {
+ SeamXmlComponentDeclaration c = (SeamXmlComponentDeclaration)super.clone();
+ return c;
}
+
}
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamXmlFactory.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamXmlFactory.java 2007-08-23
15:36:38 UTC (rev 3298)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamXmlFactory.java 2007-08-23
16:29:47 UTC (rev 3299)
@@ -65,11 +65,9 @@
return changes;
}
- public void copyTo(SeamObject copy) {
- super.copyTo(copy);
- SeamXmlFactory xf = (SeamXmlFactory)copy;
- xf.value = value;
- xf.method = method;
+ public SeamXmlFactory clone() throws CloneNotSupportedException {
+ SeamXmlFactory c = (SeamXmlFactory)super.clone();
+ return c;
}
}
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/scanner/lib/ClassPath.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/scanner/lib/ClassPath.java 2007-08-23
15:36:38 UTC (rev 3298)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/scanner/lib/ClassPath.java 2007-08-23
16:29:47 UTC (rev 3299)
@@ -199,7 +199,7 @@
removable.removeAll(ps);
ps.removeAll(set);
for (SeamProject p : ps) {
-// project.addSeamProject(p);
+ project.addSeamProject(p);
}
for (SeamProject p : removable) {
project.removeSeamProject(p);