[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
Fri Feb 9 14:09:40 EST 2007
User: mculpepper
Date: 07/02/09 14:09:40
Modified: core/plugins/org.jboss.ide.eclipse.packages.core/src/main/org/jboss/ide/eclipse/packages/core/model/internal
PackagesModel.java
Log:
added implementation logic for package references, fixed a bug for node attachment event notification
Revision Changes Path
1.12 +145 -15 jbosside/core/plugins/org.jboss.ide.eclipse.packages.core/src/main/org/jboss/ide/eclipse/packages/core/model/internal/PackagesModel.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: PackagesModel.java
===================================================================
RCS file: /cvsroot/jboss/jbosside/core/plugins/org.jboss.ide.eclipse.packages.core/src/main/org/jboss/ide/eclipse/packages/core/model/internal/PackagesModel.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -b -r1.11 -r1.12
--- PackagesModel.java 20 Dec 2006 19:56:40 -0000 1.11
+++ PackagesModel.java 9 Feb 2007 19:09:40 -0000 1.12
@@ -35,20 +35,25 @@
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.Path;
import org.jboss.ide.eclipse.core.util.ProjectUtil;
import org.jboss.ide.eclipse.packages.core.ExtensionManager;
+import org.jboss.ide.eclipse.packages.core.PackagesCorePlugin;
import org.jboss.ide.eclipse.packages.core.Trace;
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.IPackageFolder;
import org.jboss.ide.eclipse.packages.core.model.IPackageNode;
+import org.jboss.ide.eclipse.packages.core.model.IPackageReference;
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.PackagesCore;
import org.jboss.ide.eclipse.packages.core.model.internal.xb.XMLBinding;
import org.jboss.ide.eclipse.packages.core.model.internal.xb.XbFileSet;
import org.jboss.ide.eclipse.packages.core.model.internal.xb.XbFolder;
@@ -79,6 +84,7 @@
buildListeners = new ArrayList();
modelListeners = new ArrayList();
projectBeingRegistered = null;
+ packageRefs = new Hashtable();
loadPackageTypes();
}
@@ -98,23 +104,34 @@
projectBeingRegistered = project;
monitor.beginTask("Loading configuration...", XMLBinding.NUM_UNMARSHAL_MONITOR_STEPS + 2);
- IFile packagesFile = project.getFile(PROJECT_PACKAGES_FILE);
- if (packagesFile.exists())
- {
try {
if (!project.hasNature(PackagesNature.NATURE_ID)) {
ProjectUtil.addProjectNature(project, PackagesNature.NATURE_ID);
}
+ } catch (CoreException e) {
+ Trace.trace(getClass(), e);
+ }
+ IFile packagesFile = project.getFile(PROJECT_PACKAGES_FILE);
+ if (packagesFile.exists())
+ {
+ try {
XbPackages packages = XMLBinding.unmarshal(packagesFile.getContents(), monitor);
monitor.worked(1);
xbPackages.put(project, packages);
- createPackageNodeImpl(project, packages);
+ createPackageNodeImpl(project, packages, null);
+ linkPackageReferences(project);
+
monitor.worked(1);
} catch (CoreException e) {
- Trace.trace(PackagesModel.class, e);
+ Trace.trace(getClass(), e);
}
+ } else {
+ // This is the first time this project has been registered (probably before the model has even been saved)
+
+ saveModel(project, monitor);
+ registerProject(project, monitor);
}
projectBeingRegistered = null;
}
@@ -197,6 +214,16 @@
return buildListeners;
}
+ public static DirectoryScanner createDirectoryScanner (IFile file)
+ {
+ return createDirectoryScanner(file, true);
+ }
+
+ public static DirectoryScanner createDirectoryScanner (IPath path)
+ {
+ return createDirectoryScanner(path, true);
+ }
+
public static DirectoryScanner createDirectoryScanner (IPath filesystemFolder, String include, String excludes)
{
return createDirectoryScanner(filesystemFolder, include, excludes, true);
@@ -207,6 +234,34 @@
return createDirectoryScanner(srcFolder, include, excludes, true);
}
+ public static DirectoryScanner createDirectoryScanner (IFile file, boolean scan)
+ {
+ DirectoryScanner scanner = new DirectoryScanner();
+ scanner.setBasedir(ProjectUtil.getProjectLocation(file.getProject()).toFile());
+ scanner.setIncludes(new String[] { file.getProjectRelativePath().toString() });
+
+ if (scan)
+ scanner.scan();
+
+ return scanner;
+ }
+
+ public static DirectoryScanner createDirectoryScanner (IPath path, boolean scan)
+ {
+ DirectoryScanner scanner = new DirectoryScanner();
+
+ String filename = path.lastSegment();
+ IPath parentPath = path.removeLastSegments(1);
+
+ scanner.setBasedir(parentPath.toFile());
+ scanner.setIncludes(new String[] { filename });
+
+ if (scan)
+ scanner.scan();
+
+ return scanner;
+ }
+
public static DirectoryScanner createDirectoryScanner (IPath filesystemFolder, String includes, String excludes, boolean scan)
{
if (includes == null) includes = "";
@@ -302,19 +357,28 @@
}
}
- protected PackageNodeImpl createPackageNodeImpl (IProject project, XbPackageNode node)
+ protected PackageNodeImpl createPackageNodeImpl (IProject project, XbPackageNode node, IPackageNode parent)
{
PackageNodeImpl nodeImpl = null;
if (node instanceof XbPackage)
{
- PackageImpl packageImpl = new PackageImpl(project, (XbPackage)node);
+ XbPackage xbPackage = (XbPackage)node;
+
+ if (xbPackage.getRef() != null)
+ {
+ storePackageReference(xbPackage, parent);
+ }
+ else {
+ PackageImpl packageImpl = new PackageImpl(project, xbPackage);
if (node.getParent() == null || node.getParent() instanceof XbPackages)
{
packageImpl.setParentShouldBeNull(true);
}
+
nodeImpl = packageImpl;
}
+ }
else if (node instanceof XbFolder)
{
nodeImpl = new PackageFolderImpl(project, (XbFolder)node);
@@ -328,9 +392,9 @@
{
XbPackageNode child = (XbPackageNode) iter.next();
- PackageNodeImpl childImpl = createPackageNodeImpl(project, child);
+ PackageNodeImpl childImpl = createPackageNodeImpl(project, child, nodeImpl);
- if (nodeImpl != null)
+ if (nodeImpl != null && childImpl != null)
{
nodeImpl.addChildImpl(childImpl);
}
@@ -344,6 +408,70 @@
return nodeImpl;
}
+ private Hashtable packageRefs;
+
+ protected void storePackageReference (XbPackage xbPackage, IPackageNode parent)
+ {
+ ArrayList references = null;
+ if (packageRefs.containsKey(xbPackage))
+ {
+ references = (ArrayList) packageRefs.get(xbPackage);
+ }
+ else {
+ references = new ArrayList();
+ packageRefs.put(xbPackage, references);
+ }
+
+ references.add(parent);
+ }
+
+ protected void linkPackageReferences (IProject project)
+ {
+ for (Iterator iter = packageRefs.keySet().iterator(); iter.hasNext(); )
+ {
+ XbPackage xbPackage = (XbPackage) iter.next();
+ String ref = xbPackage.getRef();
+ PackageReferenceImpl.RefAttributes attrs = PackageReferenceImpl.getRefAttributes(ref);
+
+ IPackageReference pkgRef = null;
+ if (attrs.locationType == PackageReferenceImpl.RefAttributes.WORKSPACE)
+ {
+ IFile packageFile = ResourcesPlugin.getWorkspace().getRoot().getFile(attrs.packagePath);
+ IPackage pkg = PackagesCore.getPackage(packageFile);
+
+ if (pkg != null)
+ {
+ pkgRef = new PackageReferenceImpl(pkg, xbPackage);
+ }
+ }
+ else if (attrs.locationType == PackageReferenceImpl.RefAttributes.FILESYSTEM)
+ {
+ IPackage pkg = PackagesCore.getPackageFromFilesystem(project, attrs.packagePath);
+
+ if (pkg != null)
+ {
+ pkgRef = new PackageReferenceImpl(pkg, xbPackage);
+ }
+ }
+
+ ArrayList references = (ArrayList) packageRefs.get(xbPackage);
+ for (Iterator refIter = references.iterator(); refIter.hasNext(); )
+ {
+ PackageNodeImpl parent = (PackageNodeImpl) refIter.next();
+ if (pkgRef != null)
+ {
+ parent.addChild(pkgRef);
+ refIter.remove();
+ }
+ }
+
+ if (references.isEmpty())
+ {
+ iter.remove();
+ }
+ }
+ }
+
protected void fireNodeAdded (final IPackageNode added)
{
// need to make sure if this is a package or folder node that we don't fire the "added" event prematurely
@@ -447,6 +575,8 @@
packages.addChild(pkg.getNodeDelegate());
}
}
+
+
}
protected void unregisterPackage (PackageImpl pkg)
@@ -503,12 +633,12 @@
{
node.setDetached(false);
- fireNodeAttached(node);
if (node.getNodeType() == IPackageNode.TYPE_PACKAGE)
{
registerPackage((PackageImpl) node);
}
+ fireNodeAttached(node);
saveModel(node.getProject(), monitor);
}
}
More information about the jboss-cvs-commits
mailing list