[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