[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