[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