[jboss-cvs] jbosside/core/plugins/org.jboss.ide.eclipse.packages.core/src/main/org/jboss/ide/eclipse/packages/core/project/build ...

Marshall Culpepper mculpepper at jboss.com
Tue Feb 27 13:49:51 EST 2007


  User: mculpepper
  Date: 07/02/27 13:49:51

  Modified:    core/plugins/org.jboss.ide.eclipse.packages.core/src/main/org/jboss/ide/eclipse/packages/core/project/build  
                        BuildEvents.java PackageBuildDelegate.java
  Log:
  re-implemented the scanner cache, but right now it's only being used to compare old fileset directory scanners (not being used for optimization.. yet)
  
  Revision  Changes    Path
  1.2       +88 -20    jbosside/core/plugins/org.jboss.ide.eclipse.packages.core/src/main/org/jboss/ide/eclipse/packages/core/project/build/BuildEvents.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: BuildEvents.java
  ===================================================================
  RCS file: /cvsroot/jboss/jbosside/core/plugins/org.jboss.ide.eclipse.packages.core/src/main/org/jboss/ide/eclipse/packages/core/project/build/BuildEvents.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -b -r1.1 -r1.2
  --- BuildEvents.java	26 Feb 2007 19:17:44 -0000	1.1
  +++ BuildEvents.java	27 Feb 2007 18:49:51 -0000	1.2
  @@ -1,8 +1,11 @@
   package org.jboss.ide.eclipse.packages.core.project.build;
   
  +import java.util.Hashtable;
   import java.util.Iterator;
   import java.util.List;
   
  +import org.apache.tools.ant.DirectoryScanner;
  +import org.eclipse.core.resources.IFile;
   import org.eclipse.core.resources.IProject;
   import org.eclipse.core.runtime.IPath;
   import org.eclipse.core.runtime.IStatus;
  @@ -11,8 +14,10 @@
   import org.jboss.ide.eclipse.packages.core.model.IPackage;
   import org.jboss.ide.eclipse.packages.core.model.IPackageFileSet;
   import org.jboss.ide.eclipse.packages.core.model.IPackageNode;
  +import org.jboss.ide.eclipse.packages.core.model.IPackageNodeVisitor;
   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.PackageFileSetImpl;
   import org.jboss.ide.eclipse.packages.core.model.internal.PackagesModel;
   
   import de.schlichtherle.io.ArchiveDetector;
  @@ -22,10 +27,12 @@
   
   	private PackageBuildDelegate builder;
   	private NullProgressMonitor nullMonitor = new NullProgressMonitor();
  +	private Hashtable scannerCache;
   	
   	public BuildEvents (PackageBuildDelegate builder)
   	{
   		this.builder = builder;
  +		this.scannerCache = new Hashtable();
   
   		PackagesModel.instance().addPackagesModelListener(this);
   	}
  @@ -132,6 +139,36 @@
   
   	public void packageNodeAdded(IPackageNode added) {		
   		builder.getFileOperations().updateNode(added);
  +		
  +		if (added.getNodeType() == IPackageNode.TYPE_PACKAGE)
  +		{
  +			updateScannerCache ((IPackage) added);
  +		}
  +		else if (added.getNodeType() == IPackageNode.TYPE_PACKAGE_FILESET)
  +		{
  +			updateScannerCache ((IPackageFileSet)added);
  +		}
  +	}
  +
  +	public void updateScannerCache (IPackageFileSet fileset)
  +	{
  +		scannerCache.put(fileset, ((PackageFileSetImpl)fileset).createDirectoryScanner(true));
  +	}
  +	
  +	public void updateScannerCache (IPackage pkg)
  +	{
  +		if (pkg.isTopLevel())
  +		{
  +			pkg.accept(new IPackageNodeVisitor () {
  +				public boolean visit(IPackageNode node) {
  +					if (node.getNodeType() == IPackageNode.TYPE_PACKAGE_FILESET)
  +					{
  +						updateScannerCache((IPackageFileSet)node);
  +					}
  +					return true;
  +				}
  +			});
  +		}
   	}
   
   	public void packageNodeAttached(IPackageNode attached) {
  @@ -142,11 +179,43 @@
   		
   		if (changed.getNodeType() == IPackageNode.TYPE_PACKAGE_FILESET)
   		{
  -			builder.getFileOperations().updateNode(changed);
  +			filesetChanged ((IPackageFileSet)changed);
   		}
   		else if (changed.getNodeType() == IPackageNode.TYPE_PACKAGE)
   		{
  -			IPackage pkg = (IPackage) changed;
  +			packageChanged ((IPackage)changed);
  +		}
  +	}
  +
  +	private void filesetChanged (IPackageFileSet fileset)
  +	{
  +		builder.getFileOperations().updateNode(fileset);
  +		IPackageFileSet filesets[] = new IPackageFileSet[] { fileset };
  +		PackageFileSetImpl filesetImpl = (PackageFileSetImpl) fileset;
  +		
  +		DirectoryScanner oldScanner = (DirectoryScanner) scannerCache.get(fileset);
  +		
  +		if (oldScanner != null)
  +		{
  +			if (fileset.isInWorkspace())
  +			{
  +				IFile oldFiles[] = filesetImpl.findMatchingFiles(oldScanner);
  +				for (int i = 0; i < oldFiles.length; i++)
  +				{
  +					builder.getFileOperations().removeFileFromFilesets(oldFiles[i], filesets);
  +				}
  +			} else {
  +				IPath oldPaths[] = filesetImpl.findMatchingPaths(oldScanner);
  +				for (int i = 0; i < oldPaths.length; i++)
  +				{
  +					builder.getFileOperations().removePathFromFilesets(oldPaths[i], filesets);
  +				}
  +			}
  +		}
  +	}
  +	
  +	private void packageChanged (IPackage pkg)
  +	{
   			File packageFile = TruezipUtil.getPackageFile(pkg);
   			
   			if (! packageFile.getName().equals(pkg.getName()))
  @@ -166,7 +235,6 @@
   				packageFile.renameTo(packageFile, ArchiveDetector.NULL);
   			}
   		}
  -	}
   
   	public void packageNodeRemoved(IPackageNode removed) {	
   		builder.getFileOperations().removeNode(removed);
  
  
  
  1.3       +0 -22     jbosside/core/plugins/org.jboss.ide.eclipse.packages.core/src/main/org/jboss/ide/eclipse/packages/core/project/build/PackageBuildDelegate.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: PackageBuildDelegate.java
  ===================================================================
  RCS file: /cvsroot/jboss/jbosside/core/plugins/org.jboss.ide.eclipse.packages.core/src/main/org/jboss/ide/eclipse/packages/core/project/build/PackageBuildDelegate.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -b -r1.2 -r1.3
  --- PackageBuildDelegate.java	26 Feb 2007 20:56:48 -0000	1.2
  +++ PackageBuildDelegate.java	27 Feb 2007 18:49:51 -0000	1.3
  @@ -55,7 +55,6 @@
   public class PackageBuildDelegate {
   	private static PackageBuildDelegate _instance;
   	
  -	private Hashtable oldScanners;
   	private boolean building;
   	private NullProgressMonitor nullMonitor = new NullProgressMonitor();
   	// 
  @@ -76,8 +75,6 @@
   	}
   	
   	public PackageBuildDelegate () {
  -		oldScanners = new Hashtable();
  -		
   		events = new BuildEvents(this);
   		fileOperations = new BuildFileOperations(this);
   	}
  @@ -169,28 +166,9 @@
   	public void buildFileset (IPackageFileSet fileset, boolean checkStamps)
   	{
   		DirectoryScanner scanner = ((PackageFileSetImpl)fileset).createDirectoryScanner(true);
  -		DirectoryScanner oldScanner = (DirectoryScanner) oldScanners.get(fileset);
   		PackageFileSetImpl filesetImpl = (PackageFileSetImpl) fileset;
   		IPackageFileSet filesets[] = new IPackageFileSet[] { fileset };
   		
  -		if (oldScanner != null)
  -		{
  -			if (fileset.isInWorkspace())
  -			{
  -				IFile oldFiles[] = filesetImpl.findMatchingFiles(oldScanner);
  -				for (int i = 0; i < oldFiles.length; i++)
  -				{
  -					fileOperations.removeFileFromFilesets(oldFiles[i], filesets);
  -				}
  -			} else {
  -				IPath oldPaths[] = filesetImpl.findMatchingPaths(oldScanner);
  -				for (int i = 0; i < oldPaths.length; i++)
  -				{
  -					fileOperations.removePathFromFilesets(oldPaths[i], filesets);
  -				}
  -			}
  -		}
  -		
   		if (fileset.isInWorkspace())
   		{
   			events.fireStartedCollectingFileSet(fileset);	
  
  
  



More information about the jboss-cvs-commits mailing list