[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 Feb 15 17:47:52 EST 2007
User: mculpepper
Date: 07/02/15 17:47:52
Modified: core/plugins/org.jboss.ide.eclipse.packages.core/src/main/org/jboss/ide/eclipse/packages/core/model/internal
PackageBuildDelegate.java
Log:
lots of changes here:
- fixed a bug that was causing referring projects to be duplicated
- implemented package reference building (update/removeFile now apply incremental changes to any reference in the package hierarchy)
Revision Changes Path
1.11 +125 -85 jbosside/core/plugins/org.jboss.ide.eclipse.packages.core/src/main/org/jboss/ide/eclipse/packages/core/model/internal/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/model/internal/PackageBuildDelegate.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -b -r1.10 -r1.11
--- PackageBuildDelegate.java 14 Feb 2007 19:10:18 -0000 1.10
+++ PackageBuildDelegate.java 15 Feb 2007 22:47:52 -0000 1.11
@@ -27,10 +27,12 @@
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
+import java.util.Comparator;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.TreeSet;
import org.apache.tools.ant.DirectoryScanner;
import org.eclipse.core.resources.IContainer;
@@ -65,7 +67,7 @@
import de.schlichtherle.io.FileOutputStream;
public class PackageBuildDelegate implements IPackagesModelListener {
- private ArrayList referencedProjects;
+ private TreeSet referencedProjects;
private Hashtable scannerCache;
private List packages;
private ArrayList nodesToUpdate, nodesToRemove;
@@ -366,7 +368,12 @@
throws CoreException {
building = true;
- referencedProjects = new ArrayList();
+ referencedProjects = new TreeSet(new Comparator () {
+ public int compare(Object o1, Object o2) {
+ if (o1.equals(o2)) return 0;
+ else return -1;
+ }
+ });
packages = PackagesModel.instance().getProjectPackages(project);
@@ -550,19 +557,16 @@
}
}
- private File createFilesetRoot (IPackageFileSet fileset)
+ private File[] createFilesetRoots (IPackageFileSet fileset)
{
- ArrayList parents = new ArrayList();
+ ArrayList roots = new ArrayList();
- IPackageNode parent = fileset.getParent();
- while (parent != null)
+ Hashtable pkgsAndPaths = PackagesModel.instance().getTopLevelPackagesAndPathways(fileset);
+ for (Iterator iter = pkgsAndPaths.keySet().iterator(); iter.hasNext(); )
{
- parents.add(0, parent);
-
- parent = parent.getParent();
- }
+ IPackage topLevelPackage = (IPackage) iter.next();
+ ArrayList pathway = (ArrayList) pkgsAndPaths.get(topLevelPackage);
- IPackage topLevelPackage = PackagesCore.getTopLevelPackage(fileset);
File root = null;
if (topLevelPackage.isDestinationInWorkspace())
{
@@ -573,11 +577,12 @@
root = new File(topLevelPackage.getDestinationPath().toFile());
}
- for (Iterator iter = parents.iterator(); iter.hasNext(); )
+ for (Iterator iter2 = pathway.iterator(); iter2.hasNext(); )
{
- IPackageNode currentParent = (IPackageNode) iter.next();
+ IPackageNode currentParent = (IPackageNode) iter2.next();
- if (currentParent.getNodeType() == IPackageNode.TYPE_PACKAGE) {
+ if (currentParent.getNodeType() == IPackageNode.TYPE_PACKAGE
+ || currentParent.getNodeType() == IPackageNode.TYPE_PACKAGE_REFERENCE) {
IPackage pkg = (IPackage)currentParent;
root = new File(root, pkg.getName(), pkg.isExploded() ? ArchiveDetector.NULL : ArchiveDetector.DEFAULT);
} else if (currentParent.getNodeType() == IPackageNode.TYPE_PACKAGE_FOLDER) {
@@ -586,24 +591,39 @@
}
}
- return root;
+ roots.add(root);
+ }
+
+ return (File[]) roots.toArray(new File[roots.size()]);
}
- private File createFile (IPackageFileSet fileset, IPath subPath)
+ private File[] createFiles (IPackageFileSet fileset, IPath subPath)
{
- return new File(createFilesetRoot(fileset), subPath.toString(), ArchiveDetector.NULL);
+ ArrayList files = new ArrayList();
+ File[] roots = createFilesetRoots(fileset);
+ for (int i = 0; i < roots.length; i++)
+ {
+ files.add(new File(roots[i], subPath.toString(), ArchiveDetector.NULL));
+ }
+
+ return (File[]) files.toArray(new File[files.size()]);
}
- private OutputStream createFileOutputStream (IPackageFileSet fileset, IPath subPath)
+ private OutputStream[] createFileOutputStreams (IPackageFileSet fileset, IPath subPath)
+ {
+ ArrayList streams = new ArrayList();
+ File[] files = createFiles(fileset, subPath);
+
+ for (int i = 0; i < files.length; i++)
{
- File root = createFilesetRoot(fileset);
- root = new File(root, subPath.toString(), ArchiveDetector.NULL);
try {
- return new FileOutputStream(root);
+ streams.add(new FileOutputStream(files[i]));
} catch (FileNotFoundException e) {
Trace.trace(getClass(), e);
}
- return null;
+ }
+
+ return (OutputStream[]) streams.toArray(new OutputStream[streams.size()]);
}
// private IPath getNode333ParentPath (IPackageNode node)
@@ -666,41 +686,50 @@
if (checkStamps)
{
- File packageFile = createFile(filesets[i], copyTo);
+ File[] packageFiles = createFiles(filesets[i], copyTo);
+ for (int j = 0; j < packageFiles.length; j++)
+ {
+ File packageFile = packageFiles[j];
long stamp = file.getModificationStamp();
if (stamp != IResource.NULL_STAMP && packageFile.exists() && stamp >= packageFile.lastModified())
{
return;
}
}
+ }
Trace.trace(getClass(), "copying " + file.getProjectRelativePath().toString() + " ...");
InputStream in = null;
- OutputStream out = null;
+ OutputStream[] outStreams = null;
// I'm using the fully qualified package name here to avoid confusion with java.io
try {
+ outStreams = createFileOutputStreams(filesets[i], copyTo);
+
+ for (int j = 0; j < outStreams.length; j++)
+ {
try {
in = file.getContents();
- out = createFileOutputStream(filesets[i], copyTo);
+ File.cp(in, outStreams[j]);
- File.cp(in, out);
+ Trace.trace(getClass(), "closing file contents inputstream", Trace.DEBUG_OPTION_STREAM_CLOSE);
+ in.close();
} catch (FileNotFoundException e) {
Trace.trace(getClass(), e);
} catch (IOException e) {
Trace.trace(getClass(), e);
+ }
+ }
} catch (CoreException e) {
Trace.trace(getClass(), e);
- }
} finally {
try {
- if (in != null) {
- Trace.trace(getClass(), "closing file contents inputstream", Trace.DEBUG_OPTION_STREAM_CLOSE);
- in.close();
+ if (outStreams != null) {
+ Trace.trace(getClass(), "closing package file outputstreams", Trace.DEBUG_OPTION_STREAM_CLOSE);
+ for (int j = 0; j < outStreams.length; j++)
+ {
+ outStreams[j].close();
}
- if (out != null) {
- Trace.trace(getClass(), "closing package file outputstream", Trace.DEBUG_OPTION_STREAM_CLOSE);
- out.close();
}
} catch (IOException e) {
Trace.trace(getClass(), e);
@@ -715,39 +744,46 @@
if (checkStamps)
{
- File packageFile = createFile(fileset, copyTo);
+ File[] packageFiles = createFiles(fileset, copyTo);
File externalFile = new File(path.toFile());
+ for (int i = 0; i < packageFiles.length; i++)
+ {
+ File packageFile = packageFiles[i];
long stamp = externalFile.lastModified();
if (packageFile.exists() && stamp >= packageFile.lastModified())
{
return;
}
}
+ }
Trace.trace(getClass(), "copying " + path.toString() + " ...");
InputStream in = null;
- OutputStream out = null;
+ OutputStream[] outStreams = null;
try {
+ outStreams = createFileOutputStreams(fileset, copyTo);
+ for (int i = 0; i < outStreams.length; i++)
+ {
try {
in = new FileInputStream(path.toFile());
- out = createFileOutputStream(fileset, copyTo);
- File.cp(in, out);
- } catch (FileNotFoundException e) {
- Trace.trace(getClass(), e);
+ File.cp(in, outStreams[i]);
+
+ Trace.trace(getClass(), "closing file contents input stream", Trace.DEBUG_OPTION_STREAM_CLOSE);
+ in.close();
} catch (IOException e) {
Trace.trace(getClass(), e);
}
+ }
} finally {
try {
- if (in != null) {
- Trace.trace(getClass(), "closing file contents input stream", Trace.DEBUG_OPTION_STREAM_CLOSE);
- in.close();
- }
- if (out != null) {
+ if (outStreams != null) {
Trace.trace(getClass(), "closing package file outputstream", Trace.DEBUG_OPTION_STREAM_CLOSE);
- out.close();
+ for (int i = 0; i < outStreams.length; i++)
+ {
+ outStreams[i].close();
+ }
}
} catch (IOException e) {
Trace.trace(getClass(), e);
@@ -759,11 +795,15 @@
{
for (int i = 0; i < filesets.length; i++)
{
- File packagedFile = createFile(filesets[i], getFileDestinationPath(file, filesets[i]));
+ File[] packagedFiles = createFiles(filesets[i], getFileDestinationPath(file, filesets[i]));
+ for (int j = 0; j < packagedFiles.length; j++)
+ {
+ File packagedFile = packagedFiles[j];
if (packagedFile.exists()) packagedFile.deleteAll();
}
}
+ }
private void removePath(IPath path, IPackageFileSet fileset)
{
More information about the jboss-cvs-commits
mailing list