[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
Wed Feb 28 11:36:43 EST 2007
User: mculpepper
Date: 07/02/28 11:36:43
Modified: core/plugins/org.jboss.ide.eclipse.packages.core/src/main/org/jboss/ide/eclipse/packages/core/project/build
BuildEvents.java BuildFileOperations.java
Log:
moved the scanner cache and changePackage/changeFileset methods over to BuildFileOperations (analagous w/ removePackage/Fileset updatePackage/Fileset).
lots of bug fixes in build file operations, all unit tests should now be 100% again, including a new test for overlapping filesets.
Revision Changes Path
1.3 +174 -255 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.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- BuildEvents.java 27 Feb 2007 18:49:51 -0000 1.2
+++ BuildEvents.java 28 Feb 2007 16:36:43 -0000 1.3
@@ -1,11 +1,8 @@
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;
@@ -14,25 +11,18 @@
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;
-import de.schlichtherle.io.File;
-
public class BuildEvents implements IPackagesModelListener {
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);
}
@@ -142,32 +132,11 @@
if (added.getNodeType() == IPackageNode.TYPE_PACKAGE)
{
- updateScannerCache ((IPackage) added);
+ builder.getFileOperations().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;
- }
- });
+ builder.getFileOperations().updateScannerCache ((IPackageFileSet)added);
}
}
@@ -179,60 +148,11 @@
if (changed.getNodeType() == IPackageNode.TYPE_PACKAGE_FILESET)
{
- filesetChanged ((IPackageFileSet)changed);
+ builder.getFileOperations().changeFileset ((IPackageFileSet)changed);
}
else if (changed.getNodeType() == IPackageNode.TYPE_PACKAGE)
{
- 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()))
- {
- // File name was changed, rename
- File newPackageFile = new File(packageFile.getParent(), pkg.getName());
- packageFile.renameTo(newPackageFile, packageFile.getArchiveDetector());
- }
- else if (packageFile.getDelegate().isFile() && pkg.isExploded())
- {
- // Changed to exploded from compressed
- packageFile.renameTo(packageFile, ArchiveDetector.DEFAULT);
- }
- else if (packageFile.getDelegate().isDirectory() && !pkg.isExploded())
- {
- // Changed to compressed from exploded
- packageFile.renameTo(packageFile, ArchiveDetector.NULL);
+ builder.getFileOperations().changePackage((IPackage)changed);
}
}
@@ -251,5 +171,4 @@
}
}
}
-
}
1.2 +401 -253 jbosside/core/plugins/org.jboss.ide.eclipse.packages.core/src/main/org/jboss/ide/eclipse/packages/core/project/build/BuildFileOperations.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: BuildFileOperations.java
===================================================================
RCS file: /cvsroot/jboss/jbosside/core/plugins/org.jboss.ide.eclipse.packages.core/src/main/org/jboss/ide/eclipse/packages/core/project/build/BuildFileOperations.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- BuildFileOperations.java 26 Feb 2007 19:17:44 -0000 1.1
+++ BuildFileOperations.java 28 Feb 2007 16:36:43 -0000 1.2
@@ -5,7 +5,9 @@
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+import java.util.ArrayList;
import java.util.Hashtable;
+import java.util.Iterator;
import org.apache.tools.ant.DirectoryScanner;
import org.eclipse.core.resources.IFile;
@@ -21,19 +23,23 @@
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.IPackageNodeVisitor;
+import org.jboss.ide.eclipse.packages.core.model.PackagesCore;
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;
import de.schlichtherle.io.File;
public class BuildFileOperations {
private PackageBuildDelegate builder;
+ private Hashtable scannerCache;
private NullProgressMonitor nullMonitor = new NullProgressMonitor();
public BuildFileOperations (PackageBuildDelegate builder)
{
this.builder = builder;
+ this.scannerCache = new Hashtable();
}
public void removeFileFromFilesets (IFile file, IPackageFileSet[] filesets)
@@ -45,7 +51,7 @@
{
for (int i = 0; i < filesets.length; i++)
{
- Hashtable pkgsAndPathways = PackagesModel.instance().getTopLevelPackageAndPathway(filesets[i]);
+ Hashtable pkgsAndPathways = PackagesModel.instance().getTopLevelPackagesAndPathways(filesets[i]);
File[] packagedFiles = TruezipUtil.createFiles(filesets[i], getFilesetRelativePath(path, filesets[i]), pkgsAndPathways);
IPackage[] topLevelPackages = (IPackage[])
pkgsAndPathways.keySet().toArray(new IPackage[pkgsAndPathways.keySet().size()]);
@@ -153,7 +159,7 @@
}
}
- public synchronized void removeFileset (final IPackageFileSet fileset)
+ public synchronized void removeFileset (IPackageFileSet fileset)
{
DirectoryScanner scanner = ((PackageFileSetImpl)fileset).createDirectoryScanner(true);
IPackageFileSet filesets[] = new IPackageFileSet[] { fileset };
@@ -164,9 +170,12 @@
for (int i = 0; i < matchingPaths.length; i++)
{
+ if (!otherFilesetsMatch(matchingPaths[i], fileset))
+ {
removePathFromFilesets(matchingPaths[i], filesets);
}
}
+ }
public synchronized void removeFolder (IPackageFolder folder)
{
@@ -250,4 +259,143 @@
return copyTo;
}
}
+
+ public IPath getTopLevelPackageRelativePath (IPath absolutePath, ArrayList pathway, IPackageFileSet fileset)
+ {
+ IPath filesetRelativePath = getFilesetRelativePath(absolutePath, fileset);
+ IPath topPath = new Path("");
+ for (Iterator iter = pathway.iterator(); iter.hasNext(); )
+ {
+ IPackageNode pathNode = (IPackageNode) iter.next();
+ switch (pathNode.getNodeType())
+ {
+ case IPackageNode.TYPE_PACKAGE:
+ case IPackageNode.TYPE_PACKAGE_REFERENCE:
+ {
+ topPath = topPath.append(((IPackage)pathNode).getName());
+ } break;
+
+ case IPackageNode.TYPE_PACKAGE_FOLDER:
+ {
+ topPath = topPath.append(((IPackageFolder)pathNode).getName());
+ }
+ }
+ }
+
+ topPath = topPath.append(filesetRelativePath);
+ return topPath;
+ }
+
+ 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;
+ }
+ });
+ }
+ }
+
+ private boolean otherMatches = false;
+ private boolean otherFilesetsMatch (final IPath absolutePath, final IPackageFileSet current)
+ {
+ otherMatches = false;
+ Hashtable pkgsAndPathways = PackagesModel.instance().getTopLevelPackagesAndPathways(current);
+
+ for (Iterator pkgIter = pkgsAndPathways.keySet().iterator(); pkgIter.hasNext(); )
+ {
+ final IPackage topLevelPackage = (IPackage) pkgIter.next();
+ final ArrayList pathway = (ArrayList) pkgsAndPathways.get(topLevelPackage);
+
+ final IPath destPath = getTopLevelPackageRelativePath(absolutePath, pathway, current);
+
+ topLevelPackage.accept(new IPackageNodeVisitor () {
+ public boolean visit(IPackageNode node) {
+ if (node.getNodeType() == IPackageNode.TYPE_PACKAGE_FILESET)
+ {
+ IPackageFileSet fileset = (IPackageFileSet) node;
+ if (fileset != current)
+ {
+ IPath currentDestPath = getTopLevelPackageRelativePath(absolutePath, pathway, fileset);
+ if (currentDestPath.equals(destPath))
+ {
+ otherMatches = true;
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+ });
+ }
+ return otherMatches;
+ }
+
+ public void changePackage (IPackage pkg)
+ {
+ File packageFile = TruezipUtil.getPackageFile(pkg);
+
+ if (! packageFile.getName().equals(pkg.getName()))
+ {
+ // File name was changed, rename
+ File newPackageFile = new File(packageFile.getParent(), pkg.getName());
+ packageFile.renameTo(newPackageFile, packageFile.getArchiveDetector());
+ }
+ else if (packageFile.getDelegate().isFile() && pkg.isExploded())
+ {
+ // Changed to exploded from compressed
+ File tmpFile = new File(packageFile.getParent(), "_tmp_" + pkg.getName(), ArchiveDetector.NULL);
+ File newPackageFile = new File(packageFile.getParent(), pkg.getName(), ArchiveDetector.NULL);
+
+ packageFile.renameTo(tmpFile, ArchiveDetector.NULL);
+ tmpFile.renameTo(newPackageFile, ArchiveDetector.NULL);
+ }
+ else if (packageFile.getDelegate().isDirectory() && !pkg.isExploded())
+ {
+ // Changed to compressed from exploded
+ File tmpFile = new File(packageFile.getParent(), "_tmp_" + pkg.getName());
+ packageFile.renameTo(tmpFile, ArchiveDetector.DEFAULT);
+ tmpFile.renameTo(packageFile, ArchiveDetector.DEFAULT);
+ }
+ }
+
+ public void changeFileset (IPackageFileSet fileset)
+ {
+ updateNode(fileset);
+ IPackageFileSet filesets[] = new IPackageFileSet[] { fileset };
+ PackageFileSetImpl filesetImpl = (PackageFileSetImpl) fileset;
+
+ DirectoryScanner oldScanner = (DirectoryScanner) scannerCache.get(fileset);
+
+ if (oldScanner != null)
+ {
+ IPath oldPaths[] = filesetImpl.findMatchingPaths(oldScanner);
+ for (int i = 0; i < oldPaths.length; i++)
+ {
+ if (!otherFilesetsMatch(oldPaths[i], fileset))
+ {
+ removePathFromFilesets(oldPaths[i], filesets);
+ }
+ }
+ }
+
+ IPath newPaths[] = filesetImpl.findMatchingPaths();
+ for (int i = 0; i < newPaths.length; i++)
+ {
+ updatePathInFilesets(newPaths[i], filesets, false);
+ }
+
+ updateScannerCache(fileset);
+ }
}
More information about the jboss-cvs-commits
mailing list