[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
Thu Nov 16 15:56:58 EST 2006


  User: mculpepper
  Date: 06/11/16 15:56:58

  Modified:    core/plugins/org.jboss.ide.eclipse.packages.core/src/main/org/jboss/ide/eclipse/packages/core/model/internal  
                        PackagesModel.java PackageImpl.java
  Log:
  fixed some modeling bugs where folder and package nodes that weren't at the top level were being replaced at the root node.. fixed
  
  Revision  Changes    Path
  1.4       +52 -23    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.3
  retrieving revision 1.4
  diff -u -b -r1.3 -r1.4
  --- PackagesModel.java	15 Nov 2006 03:36:31 -0000	1.3
  +++ PackagesModel.java	16 Nov 2006 20:56:58 -0000	1.4
  @@ -106,11 +106,14 @@
   		}
   	}
   	
  -	public IPackage createPackage(IProject project)
  +	public IPackage createPackage(IProject project, boolean isTopLevel)
   	{
   		Assert.isNotNull(project);
   		
  -		return new PackageImpl(project, new XbPackage());
  +		PackageImpl pkg = new PackageImpl(project, new XbPackage());
  +		pkg.setParentShouldBeNull(isTopLevel);
  +		
  +		return pkg;
   	}
   	
   	public IPackageFolder createPackageFolder(IProject project) {
  @@ -239,6 +242,9 @@
   	{
   		if (node.getNodeType() == IPackageNode.TYPE_PACKAGE)
   		{
  +			PackageImpl pkg = (PackageImpl) node;
  +			if (pkg.isTopLevel())
  +			{
   			XbPackages packages = getXbPackages(node.getProject());
   			if (packages == null) {
   				packages = new XbPackages();
  @@ -250,9 +256,11 @@
   				packages.addChild(node.getNodeDelegate());
   			}
   		}
  +		}
   		
  -		if (!isPackageNodeRegistered(node))
  +		if (!isPackageNodeRegistered(node)) {
   			registerPackageNode(node, node.getNodeDelegate());
  +		}
   		
   		saveModel(node.getProject());
   	}
  @@ -321,7 +329,28 @@
   	
   	protected void fireNodeAdded (final IPackageNode added)
   	{
  -		fireEventUnlessWorkingCopy(added, new Runnable() {
  +		// need to make sure if this is a package or folder node that we don't fire the "added" event prematurely
  +		// basically we need to check if the node has been properly added to it's parent or not.
  +		// since a package can be top level (i.e. no parent), i've added a special "shouldParentBeNull" flag (internal)
  +		// to see if we can trigger the "added" event or not for packages. folders are only children of each other and packages
  +		if (added.getNodeType() == IPackageNode.TYPE_PACKAGE)
  +		{
  +			PackageImpl pkg = (PackageImpl) added;
  +			if (!pkg.shouldParentBeNull() && pkg.isTopLevel())
  +			{
  +				return;
  +			}
  +		}
  +		else if (added.getNodeType() == IPackageNode.TYPE_PACKAGE_FOLDER)
  +		{
  +			PackageFolderImpl folder = (PackageFolderImpl) added;
  +			if (folder.getParent() == null)
  +			{
  +				return;
  +			}
  +		}
  +		
  +		fireEvent(added, new Runnable() {
   			public void run() {
   				for (Iterator iter = modelListeners.iterator(); iter.hasNext(); )
   				{
  @@ -334,7 +363,7 @@
   	
   	protected void fireNodeRemoved (final IPackageNode removed)
   	{
  -		fireEventUnlessWorkingCopy(removed, new Runnable() {
  +		fireEvent(removed, new Runnable() {
   			public void run() {
   				for (Iterator iter = modelListeners.iterator(); iter.hasNext(); )
   				{
  @@ -347,10 +376,7 @@
   	
   	protected void fireNodeChanged (final IPackageNode changed)
   	{
  -		if (changed.getParent() == null) //not registered in the model, no "change" occurred
  -			return;
  -		
  -		fireEventUnlessWorkingCopy(changed, new Runnable() {
  +		fireEvent(changed, new Runnable() {
   			public void run() {
   				for (Iterator iter = modelListeners.iterator(); iter.hasNext(); )
   				{
  @@ -361,8 +387,11 @@
   		});
   	}
   	
  -	protected void fireEventUnlessWorkingCopy (IPackageNode source, Runnable runnable)
  +	protected void fireEvent (IPackageNode source, Runnable runnable)
   	{
  +		if (!modelBridge.containsKey(source)) //not registered in the model, no event should be broadcast
  +			return;
  +		
   		PackageNodeImpl nodeImpl = (PackageNodeImpl) source;
   		if (!nodeImpl.isWorkingCopy())
   		{
  @@ -381,10 +410,10 @@
   		{
   			modelBridge.put(nodeImpl, node);
   			
  -			if (nodeImpl instanceof IPackage)
  +			if (nodeImpl.getNodeType() == IPackageNode.TYPE_PACKAGE)
   			{
  -				IPackage pkg = (IPackage) nodeImpl;
  -				if (pkg.isTopLevel()) {
  +				PackageImpl pkg = (PackageImpl) nodeImpl;
  +				if (pkg.isTopLevel() && pkg.shouldParentBeNull()) {
   					if (!projectPackages.containsKey(pkg.getProject()))
   					{
   						projectPackages.put(pkg.getProject(), new ArrayList());
  @@ -402,7 +431,7 @@
   		{
   			modelBridge.remove(nodeImpl);
   		
  -			if (nodeImpl instanceof IPackage)
  +			if (nodeImpl.getNodeType() == IPackageNode.TYPE_PACKAGE)
   			{
   				IPackage pkg = (IPackage) nodeImpl;
   				if (pkg.isTopLevel()) {
  
  
  
  1.3       +14 -2     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.2
  retrieving revision 1.3
  diff -u -b -r1.2 -r1.3
  --- PackageImpl.java	8 Nov 2006 19:54:41 -0000	1.2
  +++ PackageImpl.java	16 Nov 2006 20:56:58 -0000	1.3
  @@ -44,12 +44,13 @@
    * A Package.
    * 
    * @author <a href="marshall at jboss.org">Marshall Culpepper</a>
  - * @version $Revision: 1.2 $
  + * @version $Revision: 1.3 $
    */
   public class PackageImpl extends PackageNodeImpl implements IPackage, IPackageWorkingCopy {
   
   	private XbPackage packageDelegate;
   	private PackageImpl original;
  +	private boolean parentShouldBeNull;
   	
   	public PackageImpl(IProject project, XbPackage delegate)
   	{
  @@ -57,6 +58,7 @@
   		
   		this.packageDelegate = delegate;
   		this.hasWorkingCopy = false;
  +		this.parentShouldBeNull = false;
   	}
   	
   	public int getNodeType() {
  @@ -130,7 +132,7 @@
   	}
   	
   	public boolean isTopLevel() {
  -		return packageDelegate.getParent() instanceof XbPackages;
  +		return (packageDelegate.getParent() instanceof XbPackages || packageDelegate.getParent() == null);
   	}
   	
   	public Manifest getManifest() {
  @@ -262,4 +264,14 @@
   	public String toString() {
   		return getName();
   	}
  +
  +	protected boolean shouldParentBeNull ()
  +	{
  +		return parentShouldBeNull;
  +	}
  +	
  +	public void setParentShouldBeNull (boolean parentShouldBeNull)
  +	{
  +		this.parentShouldBeNull = parentShouldBeNull;
  +	}
   }
  
  
  



More information about the jboss-cvs-commits mailing list