[jboss-cvs] jbosside/core/plugins/org.jboss.ide.eclipse.packages.core/src/main/org/jboss/ide/eclipse/packages/core/model/internal ...
Marshall Culpepper
mculpepper at jboss.com
Wed Nov 8 14:54:41 EST 2006
User: mculpepper
Date: 06/11/08 14:54:41
Modified: core/plugins/org.jboss.ide.eclipse.packages.core/src/main/org/jboss/ide/eclipse/packages/core/model/internal
PackagesModel.java PackageNodeImpl.java
PackageFolderImpl.java PackageFileSetImpl.java
PackageImpl.java
Log:
made a ton of bug fixes, re-modeled the working copy API to actually make sense (thanks rob!).. we're approaching a working implementation
Revision Changes Path
1.2 +22 -58 jbosside/core/plugins/org.jboss.ide.eclipse.packages.core/src/main/org/jboss/ide/eclipse/packages/core/model/internal/PackagesModel.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: PackagesModel.java
===================================================================
RCS file: /cvsroot/jboss/jbosside/core/plugins/org.jboss.ide.eclipse.packages.core/src/main/org/jboss/ide/eclipse/packages/core/model/internal/PackagesModel.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- PackagesModel.java 6 Nov 2006 21:35:28 -0000 1.1
+++ PackagesModel.java 8 Nov 2006 19:54:41 -0000 1.2
@@ -42,10 +42,9 @@
import org.eclipse.core.runtime.NullProgressMonitor;
import org.jboss.ide.eclipse.core.util.ProjectUtil;
import org.jboss.ide.eclipse.packages.core.model.IPackage;
-import org.jboss.ide.eclipse.packages.core.model.IPackageFileSetWorkingCopy;
-import org.jboss.ide.eclipse.packages.core.model.IPackageFolderWorkingCopy;
+import org.jboss.ide.eclipse.packages.core.model.IPackageFileSet;
+import org.jboss.ide.eclipse.packages.core.model.IPackageFolder;
import org.jboss.ide.eclipse.packages.core.model.IPackageNode;
-import org.jboss.ide.eclipse.packages.core.model.IPackageWorkingCopy;
import org.jboss.ide.eclipse.packages.core.model.IPackagesBuildListener;
import org.jboss.ide.eclipse.packages.core.model.IPackagesModelListener;
import org.jboss.ide.eclipse.packages.core.model.internal.xb.XMLBinding;
@@ -67,7 +66,6 @@
private Hashtable xbPackages;
private ArrayList buildListeners;
private ArrayList modelListeners;
- private Hashtable deferredEvents;
private PackagesModel ()
{
@@ -76,7 +74,6 @@
xbPackages = new Hashtable();
buildListeners = new ArrayList();
modelListeners = new ArrayList();
- deferredEvents = new Hashtable();
}
public static PackagesModel instance ()
@@ -109,20 +106,20 @@
}
}
- public IPackageWorkingCopy createPackage(IProject project)
+ public IPackage createPackage(IProject project)
{
Assert.isNotNull(project);
return new PackageImpl(project, new XbPackage());
}
- public IPackageFolderWorkingCopy createPackageFolder(IProject project) {
+ public IPackageFolder createPackageFolder(IProject project) {
Assert.isNotNull(project);
return new PackageFolderImpl(project, new XbFolder());
}
- public IPackageFileSetWorkingCopy createPackageFileSet(IProject project) {
+ public IPackageFileSet createPackageFileSet(IProject project) {
Assert.isNotNull(project);
return new PackageFileSetImpl(project, new XbFileSet());
@@ -145,6 +142,9 @@
XbPackages packages = getXbPackages(pkg.getProject());
packages.removeChild(packageImpl.getNodeDelegate());
}
+
+ saveModel(pkg.getProject());
+ fireNodeRemoved(pkg);
}
public XbPackages getXbPackages(IProject project)
@@ -235,33 +235,9 @@
return scanner;
}
- protected void saveAndRegister (PackageNodeImpl node, PackageNodeImpl original)
- {
- XbPackageNode parent = null;
-
- if (original != null)
- {
- unregisterPackageNode(original, original.getNodeDelegate());
-
- parent = original.getNodeDelegate().getParent();
-
- if (parent != null)
- parent.removeChild(original.getNodeDelegate());
-
- if (original.getNodeType() == IPackageNode.TYPE_PACKAGE)
+ protected void saveAndRegister (PackageNodeImpl node)
{
- IPackage pkg = (IPackage) original;
- removePackage(pkg);
- }
-
- original = null;
- }
-
- if (parent != null)
- {
- parent.addChild(node.getNodeDelegate());
- }
- else if (node.getNodeType() == IPackageNode.TYPE_PACKAGE)
+ if (node.getNodeType() == IPackageNode.TYPE_PACKAGE)
{
XbPackages packages = getXbPackages(node.getProject());
if (packages == null) {
@@ -275,19 +251,10 @@
}
}
+ if (!isPackageNodeRegistered(node))
registerPackageNode(node, node.getNodeDelegate());
saveModel(node.getProject());
-
- if (deferredEvents.containsKey(node))
- {
- ArrayList events = (ArrayList) deferredEvents.get(node);
- for (Iterator iter = events.iterator(); iter.hasNext(); )
- {
- Runnable runnable = (Runnable) iter.next();
- runnable.run();
- }
- }
}
protected void saveModel (IProject project)
@@ -354,7 +321,7 @@
protected void fireNodeAdded (final IPackageNode added)
{
- fireEventMaybeDeferred(added, new Runnable() {
+ fireEventUnlessWorkingCopy(added, new Runnable() {
public void run() {
for (Iterator iter = modelListeners.iterator(); iter.hasNext(); )
{
@@ -367,7 +334,7 @@
protected void fireNodeRemoved (final IPackageNode removed)
{
- fireEventMaybeDeferred(removed, new Runnable() {
+ fireEventUnlessWorkingCopy(removed, new Runnable() {
public void run() {
for (Iterator iter = modelListeners.iterator(); iter.hasNext(); )
{
@@ -380,7 +347,7 @@
protected void fireNodeChanged (final IPackageNode changed)
{
- fireEventMaybeDeferred(changed, new Runnable() {
+ fireEventUnlessWorkingCopy(changed, new Runnable() {
public void run() {
for (Iterator iter = modelListeners.iterator(); iter.hasNext(); )
{
@@ -391,23 +358,20 @@
});
}
- protected void fireEventMaybeDeferred (IPackageNode source, Runnable runnable)
+ protected void fireEventUnlessWorkingCopy (IPackageNode source, Runnable runnable)
{
PackageNodeImpl nodeImpl = (PackageNodeImpl) source;
- if (nodeImpl.isWorkingCopy())
- {
- if (!deferredEvents.containsKey(source))
+ if (!nodeImpl.isWorkingCopy())
{
- deferredEvents.put(source, new ArrayList());
- }
-
- ((ArrayList)deferredEvents.get(source)).add(runnable);
- }
- else {
runnable.run();
}
}
+ public boolean isPackageNodeRegistered (IPackageNode node)
+ {
+ return modelBridge.containsKey(node);
+ }
+
protected void registerPackageNode(PackageNodeImpl nodeImpl, XbPackageNode node)
{
if (!modelBridge.containsKey(nodeImpl))
1.2 +13 -27 jbosside/core/plugins/org.jboss.ide.eclipse.packages.core/src/main/org/jboss/ide/eclipse/packages/core/model/internal/PackageNodeImpl.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: PackageNodeImpl.java
===================================================================
RCS file: /cvsroot/jboss/jbosside/core/plugins/org.jboss.ide.eclipse.packages.core/src/main/org/jboss/ide/eclipse/packages/core/model/internal/PackageNodeImpl.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- PackageNodeImpl.java 6 Nov 2006 21:35:28 -0000 1.1
+++ PackageNodeImpl.java 8 Nov 2006 19:54:41 -0000 1.2
@@ -42,6 +42,7 @@
protected XbPackageNodeWithProperties nodeDelegate;
protected IProject project;
protected ArrayList childrenToRegister, childrenToUnregister;
+ protected boolean hasWorkingCopy;
protected static int nodeTypeToIntType (Class type)
{
@@ -70,6 +71,7 @@
this.project = project;
childrenToRegister = new ArrayList();
childrenToUnregister = new ArrayList();
+ hasWorkingCopy = false;
}
public PackageNodeImpl ()
@@ -134,7 +136,6 @@
public void setProperty(String property, String value) {
getProperties().setProperty(property, value);
- PackagesModel.instance().fireNodeChanged(this);
}
public Properties getProperties() {
@@ -169,11 +170,14 @@
}
public void addChild(IPackageNode node) {
+ Assert.isNotNull(node);
+
PackageNodeImpl impl = (PackageNodeImpl) node;
nodeDelegate.addChild(impl.nodeDelegate);
- childrenToRegister.add(node);
- save();
+
+ PackagesModel.instance().saveModel(node.getProject());
+ PackagesModel.instance().fireNodeAdded(node);
}
public void removeChild(IPackageNode node) {
@@ -185,30 +189,8 @@
nodeDelegate.removeChild(impl.nodeDelegate);
}
- if (childrenToRegister.contains(node))
- {
- childrenToRegister.remove(node);
- }
- else {
- childrenToUnregister.add(node);
- }
- save();
- }
-
- protected void saveChildren ()
- {
- for (Iterator iter = childrenToRegister.iterator(); iter.hasNext(); )
- {
- PackageNodeImpl node = (PackageNodeImpl) iter.next();
- PackagesModel.instance().registerPackageNode(node, node.getNodeDelegate());
- }
- for (Iterator iter = childrenToUnregister.iterator(); iter.hasNext(); )
- {
- PackageNodeImpl node = (PackageNodeImpl) iter.next();
- PackagesModel.instance().unregisterPackageNode(node, node.getNodeDelegate());
- }
- childrenToRegister.clear();
- childrenToUnregister.clear();
+ PackagesModel.instance().saveModel(node.getProject());
+ PackagesModel.instance().fireNodeRemoved(node);
}
public Object getAdapter(Class adapter) {
@@ -223,4 +205,8 @@
{
return getOriginal() != null;
}
+
+ protected void finalize() throws Throwable {
+ if (getOriginal() != null) ((PackageNodeImpl)getOriginal()).hasWorkingCopy = false;
+ }
}
1.2 +18 -5 jbosside/core/plugins/org.jboss.ide.eclipse.packages.core/src/main/org/jboss/ide/eclipse/packages/core/model/internal/PackageFolderImpl.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: PackageFolderImpl.java
===================================================================
RCS file: /cvsroot/jboss/jbosside/core/plugins/org.jboss.ide.eclipse.packages.core/src/main/org/jboss/ide/eclipse/packages/core/model/internal/PackageFolderImpl.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- PackageFolderImpl.java 6 Nov 2006 21:35:28 -0000 1.1
+++ PackageFolderImpl.java 8 Nov 2006 19:54:41 -0000 1.2
@@ -36,7 +36,7 @@
* A PackageFolderImpl.
*
* @author <a href="marshall at jboss.org">Marshall Culpepper</a>
- * @version $Revision: 1.1 $
+ * @version $Revision: 1.2 $
*/
public class PackageFolderImpl extends PackageNodeImpl implements
IPackageFolder, IPackageFolderWorkingCopy {
@@ -93,7 +93,6 @@
public void setName(String name) {
folderDelegate.setName(name);
- PackagesModel.instance().fireNodeChanged(this);
}
public IPackageNodeWorkingCopy createWorkingCopy() {
@@ -103,18 +102,27 @@
public IPackageFolderWorkingCopy createFolderWorkingCopy() {
PackageFolderImpl copy = new PackageFolderImpl(project, new XbFolder(folderDelegate));
copy.original = this;
+ hasWorkingCopy = true;
+
return copy;
}
+ public boolean hasWorkingCopy() {
+ return hasWorkingCopy;
+ }
+
public IPackageNode save() {
return saveFolder();
}
public IPackageFolder saveFolder() {
- PackagesModel.instance().saveAndRegister(this, original);
- saveChildren();
- original = null;
- return this;
+ PackageFolderImpl originalImpl = (PackageFolderImpl) original;
+ originalImpl.getFolderDelegate().copyFrom(folderDelegate);
+
+ PackagesModel.instance().saveAndRegister(original);
+ PackagesModel.instance().fireNodeChanged(original);
+ original.hasWorkingCopy = false;
+ return original;
}
public IPackageNode getOriginal() {
@@ -146,6 +154,11 @@
return new Path(path);
}
+ protected XbFolder getFolderDelegate ()
+ {
+ return folderDelegate;
+ }
+
public String toString() {
return "folder[" + getName() + "]";
}
1.2 +16 -14 jbosside/core/plugins/org.jboss.ide.eclipse.packages.core/src/main/org/jboss/ide/eclipse/packages/core/model/internal/PackageFileSetImpl.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: PackageFileSetImpl.java
===================================================================
RCS file: /cvsroot/jboss/jbosside/core/plugins/org.jboss.ide.eclipse.packages.core/src/main/org/jboss/ide/eclipse/packages/core/model/internal/PackageFileSetImpl.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- PackageFileSetImpl.java 6 Nov 2006 21:35:28 -0000 1.1
+++ PackageFileSetImpl.java 8 Nov 2006 19:54:41 -0000 1.2
@@ -40,7 +40,7 @@
* A PackageFileSetImpl.
*
* @author <a href="marshall at jboss.org">Marshall Culpepper</a>
- * @version $Revision: 1.1 $
+ * @version $Revision: 1.2 $
*/
public class PackageFileSetImpl extends PackageNodeImpl implements
IPackageFileSet, IPackageFileSetWorkingCopy {
@@ -206,12 +206,10 @@
public void setExcludesPattern(String excludes) {
filesetDelegate.setExcludes(excludes);
- PackagesModel.instance().fireNodeChanged(this);
}
public void setIncludesPattern(String includes) {
filesetDelegate.setIncludes(includes);
- PackagesModel.instance().fireNodeChanged(this);
}
public void setSingleFile(IFile file, String destinationFilename) {
@@ -223,8 +221,6 @@
if (destinationFilename != null) {
filesetDelegate.setToFile(destinationFilename);
}
-
- PackagesModel.instance().fireNodeChanged(this);
}
public void setSingleFile(IPath path, String destinationFilename) {
@@ -239,13 +235,10 @@
filesetDelegate.setToFile(destinationFilename);
}
}
-
- PackagesModel.instance().fireNodeChanged(this);
}
public void setInWorkspace(boolean isInWorkspace) {
filesetDelegate.setInWorkspace(isInWorkspace);
- PackagesModel.instance().fireNodeChanged(this);
}
public void setSingleFile(IFile file) {
@@ -261,7 +254,6 @@
filesetDelegate.setDir(container.getProjectRelativePath().toString());
filesetDelegate.setInWorkspace(true);
- PackagesModel.instance().fireNodeChanged(this);
}
public void setSourceFolder (IPath path) {
@@ -269,14 +261,12 @@
filesetDelegate.setDir(path.toString());
filesetDelegate.setInWorkspace(false);
- PackagesModel.instance().fireNodeChanged(this);
}
public void setSourceProject(IProject project) {
Assert.isNotNull(project);
filesetDelegate.setProject(project.getName());
- PackagesModel.instance().fireNodeChanged(this);
}
public IPackageNodeWorkingCopy createWorkingCopy() {
@@ -286,18 +276,26 @@
public IPackageFileSetWorkingCopy createFileSetWorkingCopy() {
PackageFileSetImpl copy = new PackageFileSetImpl(project, new XbFileSet(filesetDelegate));
copy.original = this;
+ hasWorkingCopy = true;
return copy;
}
+ public boolean hasWorkingCopy() {
+ return hasWorkingCopy;
+ }
+
public IPackageNode save() {
return saveFileSet();
}
public IPackageFileSet saveFileSet() {
- PackagesModel.instance().saveAndRegister(this, original);
- saveChildren();
- original = null;
- return this;
+ PackageFileSetImpl originalImpl = (PackageFileSetImpl) original;
+ originalImpl.getFileSetDelegate().copyFrom(filesetDelegate);
+
+ PackagesModel.instance().saveAndRegister(original);
+ PackagesModel.instance().fireNodeChanged(original);
+ original.hasWorkingCopy = false;
+ return original;
}
public IPackageNode getOriginal() {
@@ -308,6 +306,10 @@
return original;
}
+ protected XbFileSet getFileSetDelegate () {
+ return filesetDelegate;
+ }
+
public String toString() {
String includes = filesetDelegate.getIncludes();
if (includes == null) includes = "";
1.2 +18 -10 jbosside/core/plugins/org.jboss.ide.eclipse.packages.core/src/main/org/jboss/ide/eclipse/packages/core/model/internal/PackageImpl.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: PackageImpl.java
===================================================================
RCS file: /cvsroot/jboss/jbosside/core/plugins/org.jboss.ide.eclipse.packages.core/src/main/org/jboss/ide/eclipse/packages/core/model/internal/PackageImpl.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- PackageImpl.java 6 Nov 2006 21:35:28 -0000 1.1
+++ PackageImpl.java 8 Nov 2006 19:54:41 -0000 1.2
@@ -44,7 +44,7 @@
* A Package.
*
* @author <a href="marshall at jboss.org">Marshall Culpepper</a>
- * @version $Revision: 1.1 $
+ * @version $Revision: 1.2 $
*/
public class PackageImpl extends PackageNodeImpl implements IPackage, IPackageWorkingCopy {
@@ -56,6 +56,7 @@
super(project, delegate);
this.packageDelegate = delegate;
+ this.hasWorkingCopy = false;
}
public int getNodeType() {
@@ -159,18 +160,26 @@
public IPackageWorkingCopy createPackageWorkingCopy() {
PackageImpl copy = new PackageImpl(project, new XbPackage(packageDelegate));
copy.original = this;
+ hasWorkingCopy = true;
return copy;
}
+ public boolean hasWorkingCopy() {
+ return hasWorkingCopy;
+ }
+
public IPackageNode save() {
return savePackage();
}
public IPackage savePackage() {
- PackagesModel.instance().saveAndRegister(this, original);
- saveChildren();
- original = null;
- return this;
+ PackageImpl originalImpl = (PackageImpl) original;
+ originalImpl.getPackageDelegate().copyFrom(packageDelegate);
+
+ PackagesModel.instance().saveAndRegister(original);
+ PackagesModel.instance().fireNodeChanged(original);
+ original.hasWorkingCopy = false;
+ return original;
}
public void addFileSet(IPackageFileSet fileset) {
@@ -188,7 +197,6 @@
public void setDestinationFolder(IPath path) {
packageDelegate.setInWorkspace(false);
packageDelegate.setToDir(path.toString());
- PackagesModel.instance().fireNodeChanged(this);
}
public void setDestinationContainer(IContainer container) {
@@ -196,28 +204,23 @@
if (!container.equals(getProject()))
{
packageDelegate.setToDir(container.getFullPath().toString());
- PackagesModel.instance().fireNodeChanged(this);
}
}
public void setExploded(boolean exploded) {
packageDelegate.setExploded(exploded);
- PackagesModel.instance().fireNodeChanged(this);
}
public void setManifest(IFile manifestFile) {
packageDelegate.setManifest(manifestFile.getProjectRelativePath().toString());
- PackagesModel.instance().fireNodeChanged(this);
}
public void setName(String name) {
packageDelegate.setName(name);
- PackagesModel.instance().fireNodeChanged(this);
}
public void setPackageType(String type) {
packageDelegate.setPackageType(type);
- PackagesModel.instance().fireNodeChanged(this);
}
public IPackageNode getOriginal() {
@@ -251,6 +254,11 @@
return new Path(path);
}
+ protected XbPackage getPackageDelegate ()
+ {
+ return packageDelegate;
+ }
+
public String toString() {
return getName();
}
More information about the jboss-cvs-commits
mailing list