Author: rob.stryker(a)jboss.com
Date: 2008-05-16 22:30:22 -0400 (Fri, 16 May 2008)
New Revision: 8171
Modified:
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/modules/ArchivesModelModuleContributor.java
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/publishers/PackagesPublisher.java
trunk/core/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/model/ArchivesModel.java
trunk/core/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/model/IArchiveModel.java
Log:
JBIDE-2211 on trunk stream
Modified:
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/modules/ArchivesModelModuleContributor.java
===================================================================
---
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/modules/ArchivesModelModuleContributor.java 2008-05-17
02:28:45 UTC (rev 8170)
+++
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/modules/ArchivesModelModuleContributor.java 2008-05-17
02:30:22 UTC (rev 8171)
@@ -1,181 +1,186 @@
-/**
- * JBoss, a Division of Red Hat
- * Copyright 2006, Red Hat Middleware, LLC, and individual contributors as indicated
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
-* This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
- */
-package org.jboss.ide.eclipse.as.core.modules;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.wst.server.core.IModule;
-import org.jboss.ide.eclipse.archives.core.model.ArchivesModel;
-import org.jboss.ide.eclipse.archives.core.model.ArchivesModelException;
-import org.jboss.ide.eclipse.archives.core.model.IArchive;
-import org.jboss.ide.eclipse.archives.core.util.ModelUtil;
-import org.jboss.ide.eclipse.as.core.JBossServerCorePlugin;
-import org.jboss.ide.eclipse.as.core.modules.PackageModuleFactory.IModuleContributor;
-import
org.jboss.ide.eclipse.as.core.modules.PackageModuleFactory.PackagedModuleDelegate;
-
-/**
- *
- * @author Rob Stryker rob.stryker(a)jboss.com
- *
- */
-public class ArchivesModelModuleContributor implements IModuleContributor {
-
- private static ArchivesModelModuleContributor instance;
- public static ArchivesModelModuleContributor getInstance() {
- if( instance == null ) {
- instance = new ArchivesModelModuleContributor(PackageModuleFactory.getFactory());
- }
- return instance;
- }
-
- private PackageModuleFactory factory;
- protected ArrayList<IModule> modules = null;
- protected HashMap<IPath, ArrayList<IModule>> projectToModules = new
HashMap<IPath, ArrayList<IModule>>(5); //IPath to IModule
- protected HashMap<IModule, Object> moduleDelegates = new HashMap<IModule,
Object>(5);
- protected HashMap<IArchive, IModule> packageToModule = new HashMap<IArchive,
IModule>(5);
-
- private ArchivesModelModuleContributor(PackageModuleFactory factory) {
- this.factory = factory;
- }
-
- public IModule[] getModules() {
- if( modules == null ) {
- modules = new ArrayList<IModule>();
- IProject[] projects2 = ResourcesPlugin.getWorkspace().getRoot().getProjects();
- int size = projects2.length;
- for (int i = 0; i < size; i++) {
- if (projects2[i].isAccessible()) {
- try {
- createModules(projects2[i]);
- } catch(ArchivesModelException ame) {
- IStatus status = new Status(IStatus.ERROR, JBossServerCorePlugin.PLUGIN_ID,
ame.getMessage(), ame);
- JBossServerCorePlugin.getDefault().getLog().log(status);
- }
- }
- }
- }
- return modules.toArray(new IModule[modules.size()]);
- }
-
- protected void createModules(IProject project) throws ArchivesModelException {
- IArchive[] packs = ModelUtil.getProjectArchives(project.getLocation());
- if( packs != null && packs.length > 0 ) {
- IModule module;
- if( !ArchivesModel.instance().isProjectRegistered(project.getLocation())) {
- ArchivesModel.instance().registerProject(project.getLocation(), new
NullProgressMonitor());
- }
- IArchive[] packages = ModelUtil.getProjectArchives(project.getLocation());
- boolean requiresSave = ensureArchivesHaveIDs(project, packages);
- ArrayList<IModule> mods = new ArrayList<IModule>();
- for( int i = 0; i < packages.length; i++ ) {
- module = factory.createModule2(packages[i], project);
- modules.add(module);
- Object moduleDelegate = new PackagedModuleDelegate(packages[i]);
- packageToModule.put(packages[i], module);
- moduleDelegates.put(module, moduleDelegate);
- mods.add(module);
- }
- projectToModules.put(project.getLocation(), mods);
- if( requiresSave )
- try {
- ArchivesModel.instance().save(project.getLocation(),
- new NullProgressMonitor());
- } catch( ArchivesModelException ame ) {
-
- }
- }
- }
-
- public boolean containsModule(IModule module) {
- return moduleDelegates.containsKey(module);
- }
-
- public PackagedModuleDelegate getModuleDelegate(IModule module) {
- return (PackagedModuleDelegate)moduleDelegates.get(module);
- }
-
- public void refreshProject(IPath projectLoc) {
- // prime, make sure all are found
- if( modules == null )
- getModules();
-
- // remove old mods
- ArrayList<IModule> mods = projectToModules.get(projectLoc);
- IModule mod;
- PackagedModuleDelegate delegate;
- if (mods != null) {
- for( Iterator<IModule> i = mods.iterator(); i.hasNext();) {
- mod = (IModule)i.next();
- if( modules.contains(mod)) {
- delegate = ((PackagedModuleDelegate)moduleDelegates.get(mod));
- moduleDelegates.remove(mod);
- modules.remove(mod);
- if( delegate != null )
- packageToModule.remove(delegate.getPackage());
- }
- }
- }
- try {
- createModules(findProject(projectLoc));
- } catch( ArchivesModelException ame ) {
- IStatus status = new Status(IStatus.ERROR, JBossServerCorePlugin.PLUGIN_ID,
ame.getMessage(), ame);
- JBossServerCorePlugin.getDefault().getLog().log(status);
- }
- }
-
- protected IProject findProject(IPath projectLoc) {
- IProject proj = null;
- IProject[] projects2 = ResourcesPlugin.getWorkspace().getRoot().getProjects();
- int size = projects2.length;
- for (int i = 0; i < size; i++) {
- if( projects2[i].getLocation().equals(projectLoc))
- proj = projects2[i];
- }
- return proj;
- }
-
- /**
- * Set a property so that each module that's here in the factory
- * has a unique ID other than it's name (which is not unique)
- * @param archives
- * @return returns whether a save has occurred
- */
- protected boolean ensureArchivesHaveIDs(IProject project, IArchive[] archives) {
- boolean requiresSave = false;
- for( int i = 0; i < archives.length; i++ ) {
- if( PackageModuleFactory.getID(archives[i]) == null ) {
- requiresSave = true;
- archives[i].setProperty(PackageModuleFactory.MODULE_ID_PROPERTY_KEY,
- PackageModuleFactory.getID(archives[i], true));
- }
- }
- return requiresSave;
- }
-}
+/**
+ * JBoss, a Division of Red Hat
+ * Copyright 2006, Red Hat Middleware, LLC, and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+* This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ */
+package org.jboss.ide.eclipse.as.core.modules;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.wst.server.core.IModule;
+import org.jboss.ide.eclipse.archives.core.model.ArchivesModel;
+import org.jboss.ide.eclipse.archives.core.model.ArchivesModelException;
+import org.jboss.ide.eclipse.archives.core.model.IArchive;
+import org.jboss.ide.eclipse.archives.core.util.ModelUtil;
+import org.jboss.ide.eclipse.as.core.JBossServerCorePlugin;
+import org.jboss.ide.eclipse.as.core.modules.PackageModuleFactory.IModuleContributor;
+import
org.jboss.ide.eclipse.as.core.modules.PackageModuleFactory.PackagedModuleDelegate;
+
+/**
+ *
+ * @author Rob Stryker rob.stryker(a)jboss.com
+ *
+ */
+public class ArchivesModelModuleContributor implements IModuleContributor {
+
+ private static ArchivesModelModuleContributor instance;
+ public static ArchivesModelModuleContributor getInstance() {
+ if( instance == null ) {
+ instance = new ArchivesModelModuleContributor(PackageModuleFactory.getFactory());
+ }
+ return instance;
+ }
+
+ private PackageModuleFactory factory;
+ protected ArrayList<IModule> modules = null;
+ protected HashMap<IPath, ArrayList<IModule>> projectToModules = new
HashMap<IPath, ArrayList<IModule>>(5); //IPath to IModule
+ protected HashMap<IModule, Object> moduleDelegates = new HashMap<IModule,
Object>(5);
+ protected HashMap<IArchive, IModule> packageToModule = new HashMap<IArchive,
IModule>(5);
+
+ private ArchivesModelModuleContributor(PackageModuleFactory factory) {
+ this.factory = factory;
+ }
+
+ public IModule[] getModules() {
+ if( modules == null ) {
+ modules = new ArrayList<IModule>();
+ IProject[] projects2 = ResourcesPlugin.getWorkspace().getRoot().getProjects();
+ int size = projects2.length;
+ for (int i = 0; i < size; i++) {
+ if (projects2[i].isAccessible()) {
+
+ if( !ArchivesModel.instance().isProjectRegistered(projects2[i].getLocation())) {
+ if( ArchivesModel.instance().canReregister(projects2[i].getLocation()))
+ // registration should also add this to the factory manually, so do not create the
module
+ ArchivesModel.instance().registerProject(projects2[i].getLocation(), new
NullProgressMonitor());
+ } else {
+ try {
+ // project is already registered. create the module
+ createModules(projects2[i]);
+ } catch(ArchivesModelException ame) {
+ IStatus status = new Status(IStatus.ERROR, JBossServerCorePlugin.PLUGIN_ID,
ame.getMessage(), ame);
+ JBossServerCorePlugin.getDefault().getLog().log(status);
+ }
+ }
+ }
+ }
+ }
+ return modules.toArray(new IModule[modules.size()]);
+ }
+
+ protected void createModules(IProject project) throws ArchivesModelException {
+ IArchive[] packages = ModelUtil.getProjectArchives(project.getLocation());
+ if( packages != null && packages.length > 0 ) {
+ IModule module;
+ boolean requiresSave = ensureArchivesHaveIDs(project, packages);
+ ArrayList<IModule> mods = new ArrayList<IModule>();
+ for( int i = 0; i < packages.length; i++ ) {
+ module = factory.createModule2(packages[i], project);
+ modules.add(module);
+ Object moduleDelegate = new PackagedModuleDelegate(packages[i]);
+ packageToModule.put(packages[i], module);
+ moduleDelegates.put(module, moduleDelegate);
+ mods.add(module);
+ }
+ projectToModules.put(project.getLocation(), mods);
+ if( requiresSave ) {
+ try {
+ ArchivesModel.instance().save(project.getLocation(),
+ new NullProgressMonitor());
+ } catch( ArchivesModelException ame ) {
+
+ }
+ }
+ }
+ }
+
+ public boolean containsModule(IModule module) {
+ return moduleDelegates.containsKey(module);
+ }
+
+ public PackagedModuleDelegate getModuleDelegate(IModule module) {
+ return (PackagedModuleDelegate)moduleDelegates.get(module);
+ }
+
+ public void refreshProject(IPath projectLoc) {
+ // prime, make sure all are found
+ if( modules == null )
+ getModules();
+
+ // remove old mods
+ ArrayList<IModule> mods = projectToModules.get(projectLoc);
+ IModule mod;
+ PackagedModuleDelegate delegate;
+ if (mods != null) {
+ for( Iterator<IModule> i = mods.iterator(); i.hasNext();) {
+ mod = (IModule)i.next();
+ if( modules.contains(mod)) {
+ delegate = ((PackagedModuleDelegate)moduleDelegates.get(mod));
+ moduleDelegates.remove(mod);
+ modules.remove(mod);
+ if( delegate != null )
+ packageToModule.remove(delegate.getPackage());
+ }
+ }
+ }
+ try {
+ createModules(findProject(projectLoc));
+ } catch( ArchivesModelException ame ) {
+ IStatus status = new Status(IStatus.ERROR, JBossServerCorePlugin.PLUGIN_ID,
ame.getMessage(), ame);
+ JBossServerCorePlugin.getDefault().getLog().log(status);
+ }
+ }
+
+ protected IProject findProject(IPath projectLoc) {
+ IProject proj = null;
+ IProject[] projects2 = ResourcesPlugin.getWorkspace().getRoot().getProjects();
+ int size = projects2.length;
+ for (int i = 0; i < size; i++) {
+ if( projects2[i].getLocation().equals(projectLoc))
+ proj = projects2[i];
+ }
+ return proj;
+ }
+
+ /**
+ * Set a property so that each module that's here in the factory
+ * has a unique ID other than it's name (which is not unique)
+ * @param archives
+ * @return returns whether a save has occurred
+ */
+ protected boolean ensureArchivesHaveIDs(IProject project, IArchive[] archives) {
+ boolean requiresSave = false;
+ for( int i = 0; i < archives.length; i++ ) {
+ if( PackageModuleFactory.getID(archives[i]) == null ) {
+ requiresSave = true;
+ archives[i].setProperty(PackageModuleFactory.MODULE_ID_PROPERTY_KEY,
+ PackageModuleFactory.getID(archives[i], true));
+ }
+ }
+ return requiresSave;
+ }
+}
Modified:
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/publishers/PackagesPublisher.java
===================================================================
---
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/publishers/PackagesPublisher.java 2008-05-17
02:28:45 UTC (rev 8170)
+++
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/publishers/PackagesPublisher.java 2008-05-17
02:30:22 UTC (rev 8171)
@@ -32,6 +32,8 @@
import org.eclipse.core.runtime.Status;
import org.eclipse.wst.server.core.IModule;
import org.eclipse.wst.server.core.IServer;
+import org.eclipse.wst.server.core.model.IModuleFile;
+import org.eclipse.wst.server.core.model.IModuleFolder;
import org.eclipse.wst.server.core.model.IModuleResource;
import org.eclipse.wst.server.core.model.IModuleResourceDelta;
import org.jboss.ide.eclipse.archives.core.model.IArchive;
@@ -79,9 +81,9 @@
if( publishType == REMOVE_PUBLISH ) {
removeModule(module2, monitor);
} else if( publishType == FULL_PUBLISH ) {
+ publishModule(module2, false, monitor);
+ } else if( publishType == INCREMENTAL_PUBLISH ) {
publishModule(module2, true, monitor);
- } else if( publishType == INCREMENTAL_PUBLISH ) {
- publishModule(module2, false, monitor);
}
}catch(Exception e) {
IStatus status = new Status(IStatus.ERROR, JBossServerCorePlugin.PLUGIN_ID,
"Error during publish", e);
@@ -117,9 +119,11 @@
PublisherFileUtilListener listener = new PublisherFileUtilListener(eventRoot);
if( incremental ) {
+ eventRoot.setProperty(PublisherEventLogger.CHANGED_FILE_COUNT, countChanges(delta));
publishFromDelta(module, destPathRoot, sourcePath.removeLastSegments(1), delta,
listener);
} else {
// full publish, copy whole folder or file
+ eventRoot.setProperty(PublisherEventLogger.CHANGED_FILE_COUNT,
countConcreteFiles(module));
FileUtil.fileSafeCopy(sourcePath.toFile(),
destPathRoot.append(sourcePath.lastSegment()).toFile(), listener);
}
}
@@ -131,6 +135,44 @@
publishFromDeltaHandle(delta[i], destPathRoot, sourcePrefix, changedFiles, listener);
}
}
+
+ protected int countChanges(IModuleResourceDelta[] deltas) {
+ IModuleResource res;
+ int count = 0;
+ if( deltas == null ) return 0;
+ for( int i = 0; i < deltas.length; i++ ) {
+ res = deltas[i].getModuleResource();
+ if( res != null && res instanceof IModuleFile)
+ count++;
+ count += countChanges(deltas[i].getAffectedChildren());
+ }
+ return count;
+ }
+
+ protected int countConcreteFiles(IModule module) {
+ PackagedModuleDelegate delegate =
(PackagedModuleDelegate)module.loadAdapter(PackagedModuleDelegate.class, new
NullProgressMonitor());
+ try {
+ ArrayList list = new ArrayList();
+ countConcreteFiles(delegate.members()[0], list);
+ return list.size();
+ } catch( CoreException ce ) {
+
+ }
+ return -1;
+ }
+ protected void countConcreteFiles(IModuleResource mr, ArrayList list) {
+ if( mr instanceof IExtendedModuleResource) {
+ IExtendedModuleResource emr = ((IExtendedModuleResource)mr);
+ IPath p = emr.getConcreteDestFile();
+ if( mr instanceof IModuleFile && !list.contains(p)) list.add(p);
+ if( mr instanceof IModuleFolder) {
+ IModuleResource[] children = ((IModuleFolder)mr).members();
+ for( int i = 0; i < children.length; i++ )
+ countConcreteFiles(children[i], list);
+ }
+ }
+ }
+
protected void publishFromDeltaHandle(IModuleResourceDelta delta, IPath destRoot,
IPath sourcePrefix, ArrayList<IPath> changedFiles, PublisherFileUtilListener
listener) {
switch( delta.getKind()) {
@@ -160,7 +202,7 @@
}
return;
} else {
- System.out.println("not an extended module resource. need help here");
+ // TODO
return;
}
case IModuleResourceDelta.ADDED:
@@ -174,7 +216,7 @@
}
return;
} else {
- System.out.println("not an extended module resource. need help here");
+ // TODO
return;
}
case IModuleResourceDelta.CHANGED:
Modified:
trunk/core/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/model/ArchivesModel.java
===================================================================
---
trunk/core/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/model/ArchivesModel.java 2008-05-17
02:28:45 UTC (rev 8170)
+++
trunk/core/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/model/ArchivesModel.java 2008-05-17
02:30:22 UTC (rev 8171)
@@ -1,234 +1,242 @@
-/*
- * JBoss, a division of Red Hat
- * Copyright 2006, Red Hat Middleware, LLC, and individual contributors as indicated
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
- */
-package org.jboss.ide.eclipse.archives.core.model;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.jboss.ide.eclipse.archives.core.ArchivesCore;
-import org.jboss.ide.eclipse.archives.core.model.internal.ArchiveModelNode;
-import org.jboss.ide.eclipse.archives.core.model.internal.xb.XMLBinding;
-import org.jboss.ide.eclipse.archives.core.model.internal.xb.XbPackages;
-import org.jboss.ide.eclipse.archives.core.model.internal.xb.XMLBinding.XbException;
-import org.jboss.ide.eclipse.archives.core.util.ModelUtil;
-
-/**
- * The root model which keeps track of registered projects
- * and what archives / model nodes they contain.
- *
- * @author <a href="rob.stryker(a)redhat.com">Rob Stryker</a>
- */
-public class ArchivesModel implements IArchiveModel {
-
- /**
- * Singleton instance
- */
- protected static IArchiveModel instance;
- public static IArchiveModel instance() {
- if( instance == null )
- instance = new ArchivesModel();
- return instance;
- }
-
- private HashMap<IPath, XbPackages> xbPackages; // maps an IPath (of a project) to
XbPackages
- private HashMap<IPath, ArchiveModelNode> archivesRoot; // maps an IPath (of a
project) to PackageModelNode, aka root
- private ArrayList<IArchiveBuildListener> buildListeners;
- private ArrayList<IArchiveModelListener> modelListeners;
- public ArchivesModel() {
- xbPackages = new HashMap<IPath, XbPackages>();
- archivesRoot = new HashMap<IPath, ArchiveModelNode>();
- buildListeners = new ArrayList<IArchiveBuildListener>();
- modelListeners = new ArrayList<IArchiveModelListener>();
- }
-
- /*
- * (non-Javadoc)
- * @see
org.jboss.ide.eclipse.archives.core.model.IArchiveModel#addBuildListener(org.jboss.ide.eclipse.archives.core.model.IArchiveBuildListener)
- */
- public void addBuildListener(IArchiveBuildListener listener) {
- if( !buildListeners.contains(listener))
- buildListeners.add(listener);
- }
-
- /*
- * (non-Javadoc)
- * @see
org.jboss.ide.eclipse.archives.core.model.IArchiveModel#removeBuildListener(org.jboss.ide.eclipse.archives.core.model.IArchiveBuildListener)
- */
- public void removeBuildListener(IArchiveBuildListener listener) {
- buildListeners.remove(listener);
- }
-
- /*
- * (non-Javadoc)
- * @see org.jboss.ide.eclipse.archives.core.model.IArchiveModel#getBuildListeners()
- */
- public IArchiveBuildListener[] getBuildListeners() {
- return buildListeners.toArray(new IArchiveBuildListener[buildListeners.size()]);
- }
-
- /*
- * (non-Javadoc)
- * @see
org.jboss.ide.eclipse.archives.core.model.IArchiveModel#addModelListener(org.jboss.ide.eclipse.archives.core.model.IArchiveModelListener)
- */
- public void addModelListener(IArchiveModelListener listener) {
- if( !modelListeners.contains(listener))
- modelListeners.add(listener);
- }
-
- /*
- * (non-Javadoc)
- * @see
org.jboss.ide.eclipse.archives.core.model.IArchiveModel#removeModelListener(org.jboss.ide.eclipse.archives.core.model.IArchiveModelListener)
- */
- public void removeModelListener(IArchiveModelListener listener) {
- if( modelListeners.contains(listener))
- modelListeners.remove(listener);
- }
-
- /*
- * (non-Javadoc)
- * @see org.jboss.ide.eclipse.archives.core.model.IArchiveModel#getModelListeners()
- */
- public IArchiveModelListener[] getModelListeners() {
- return modelListeners.toArray(new IArchiveModelListener[modelListeners.size()]);
- }
-
- /*
- * (non-Javadoc)
- * @see org.jboss.ide.eclipse.archives.core.model.IArchiveModel#getModelNodes()
- */
- public IArchiveModelRootNode[] getModelNodes() {
- Collection<ArchiveModelNode> c = archivesRoot.values();
- return (IArchiveModelRootNode[]) c.toArray(new IArchiveModelRootNode[c.size()]);
- }
-
- /*
- * (non-Javadoc)
- * @see
org.jboss.ide.eclipse.archives.core.model.IArchiveModel#accept(org.jboss.ide.eclipse.archives.core.model.IArchiveNodeVisitor)
- */
- public boolean accept(IArchiveNodeVisitor visitor) {
- IArchiveModelRootNode[] children = getModelNodes();
- boolean keepGoing = true;
- if (keepGoing)
- for (int i = 0; i < children.length; i++)
- if (keepGoing)
- keepGoing = children[i].accept(visitor);
- return keepGoing;
- }
-
-
- public IArchiveModelRootNode getRoot(IPath project) {
- return (archivesRoot.get(project));
- }
-
- @Deprecated
- public void save(IPath projectPath, IProgressMonitor monitor) throws
ArchivesModelException {
- save(getRoot(projectPath), monitor);
- }
-
- @Deprecated
- public void save(IArchiveModelRootNode modelNode, IProgressMonitor monitor) throws
ArchivesModelException {
- modelNode.save(monitor);
- }
-
- public boolean isProjectRegistered(IPath projectPath) {
- return archivesRoot.containsKey(projectPath);
- }
-
- public IArchiveModelRootNode registerProject(IPath projectPath, IProgressMonitor
monitor) throws ArchivesModelException {
- return registerProject(projectPath, DEFAULT_PACKAGES_FILE, monitor);
- }
-
- public IArchiveModelRootNode registerProject(IPath projectPath, String file,
IProgressMonitor monitor) throws ArchivesModelException {
- XbPackages packages;
- ArchiveModelNode modelNode;
-
- IPath packagesFile = projectPath.append(file);
- if (packagesFile.toFile().exists()) {
- try {
- packages = XMLBinding.unmarshal(packagesFile.toFile(), monitor);
- } catch( XbException xbe ) {
- // Empty / non-working XML file loaded
- ArchivesCore.getInstance().getLogger().log(IArchivesLogger.MSG_ERR, "Error
unmarshalling packages file " + packagesFile, xbe);
- return null;
- }
- } else {
- packages = new XbPackages();
- }
-
- // Fill the model
- modelNode = new ArchiveModelNode(projectPath, projectPath.append(file), packages,
this);
- ModelUtil.fillArchiveModel(packages, modelNode);
- modelNode.clearDelta();
-
- registerProject(modelNode, monitor);
- return modelNode;
- }
-
- public void registerProject(IArchiveModelRootNode model, IProgressMonitor monitor) {
- ArchivesCore.getInstance().preRegisterProject(model.getProjectPath());
- xbPackages.put(model.getProjectPath(), ((ArchiveModelNode)model).getXbPackages());
- archivesRoot.put(model.getProjectPath(), (ArchiveModelNode)model);
- model.setModel(this);
- fireRegisterProjectEvent((ArchiveModelNode)model);
- }
-
- public void unregisterProject(IPath projectPath, IProgressMonitor monitor) {
- IArchiveModelRootNode root = getRoot(projectPath);
- xbPackages.remove(projectPath);
- archivesRoot.remove(projectPath);
- fireUnregisterProjectEvent(root);
- }
-
- public void unregisterProject(IArchiveModelRootNode model, IProgressMonitor monitor) {
- xbPackages.remove(model.getProjectPath());
- archivesRoot.remove(model.getProjectPath());
- fireUnregisterProjectEvent((ArchiveModelNode)model);
- }
-
- protected void fireRegisterProjectEvent(final IArchiveModelRootNode newRoot) {
- fireRegistrationEvent(null, newRoot, IArchiveNodeDelta.NODE_REGISTERED);
- }
-
- protected void fireUnregisterProjectEvent(final IArchiveModelRootNode oldRoot) {
- fireRegistrationEvent(oldRoot, null, IArchiveNodeDelta.NODE_UNREGISTERED);
- }
-
- protected void fireRegistrationEvent(final IArchiveModelRootNode oldRoot, final
IArchiveModelRootNode newRoot, final int type) {
- IArchiveNodeDelta delta = new IArchiveNodeDelta() {
- public IArchiveNodeDelta[] getAddedChildrenDeltas() {return null;}
- public IArchiveNodeDelta[] getAllAffectedChildren() {return null;}
- public INodeDelta getAttributeDelta(String key) {return null;}
- public String[] getAttributesWithDeltas() {return null;}
- public IArchiveNodeDelta[] getChangedDescendentDeltas() {return null;}
- public int getKind() {return type;}
- public IArchiveNode getPostNode() {return newRoot;}
- public IArchiveNode getPreNode() { return oldRoot; }
- public String[] getPropertiesWithDeltas() {return null;}
- public INodeDelta getPropertyDelta(String key) {return null;}
- public IArchiveNodeDelta[] getRemovedChildrenDeltas() {return null;}
- };
- EventManager.fireDelta(delta);
- }
-}
+/*
+ * JBoss, a division of Red Hat
+ * Copyright 2006, Red Hat Middleware, LLC, and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ */
+package org.jboss.ide.eclipse.archives.core.model;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.jboss.ide.eclipse.archives.core.ArchivesCore;
+import org.jboss.ide.eclipse.archives.core.model.internal.ArchiveModelNode;
+import org.jboss.ide.eclipse.archives.core.model.internal.xb.XMLBinding;
+import org.jboss.ide.eclipse.archives.core.model.internal.xb.XbPackages;
+import org.jboss.ide.eclipse.archives.core.model.internal.xb.XMLBinding.XbException;
+import org.jboss.ide.eclipse.archives.core.util.ModelUtil;
+
+/**
+ * The root model which keeps track of registered projects
+ * and what archives / model nodes they contain.
+ *
+ * @author <a href="rob.stryker(a)redhat.com">Rob Stryker</a>
+ */
+public class ArchivesModel implements IArchiveModel {
+
+ /**
+ * Singleton instance
+ */
+ protected static IArchiveModel instance;
+ public static IArchiveModel instance() {
+ if( instance == null )
+ instance = new ArchivesModel();
+ return instance;
+ }
+
+ private HashMap<IPath, XbPackages> xbPackages; // maps an IPath (of a project) to
XbPackages
+ private HashMap<IPath, ArchiveModelNode> archivesRoot; // maps an IPath (of a
project) to PackageModelNode, aka root
+ private ArrayList<IArchiveBuildListener> buildListeners;
+ private ArrayList<IArchiveModelListener> modelListeners;
+ public ArchivesModel() {
+ xbPackages = new HashMap<IPath, XbPackages>();
+ archivesRoot = new HashMap<IPath, ArchiveModelNode>();
+ buildListeners = new ArrayList<IArchiveBuildListener>();
+ modelListeners = new ArrayList<IArchiveModelListener>();
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see
org.jboss.ide.eclipse.archives.core.model.IArchiveModel#addBuildListener(org.jboss.ide.eclipse.archives.core.model.IArchiveBuildListener)
+ */
+ public void addBuildListener(IArchiveBuildListener listener) {
+ if( !buildListeners.contains(listener))
+ buildListeners.add(listener);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see
org.jboss.ide.eclipse.archives.core.model.IArchiveModel#removeBuildListener(org.jboss.ide.eclipse.archives.core.model.IArchiveBuildListener)
+ */
+ public void removeBuildListener(IArchiveBuildListener listener) {
+ buildListeners.remove(listener);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.jboss.ide.eclipse.archives.core.model.IArchiveModel#getBuildListeners()
+ */
+ public IArchiveBuildListener[] getBuildListeners() {
+ return buildListeners.toArray(new IArchiveBuildListener[buildListeners.size()]);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see
org.jboss.ide.eclipse.archives.core.model.IArchiveModel#addModelListener(org.jboss.ide.eclipse.archives.core.model.IArchiveModelListener)
+ */
+ public void addModelListener(IArchiveModelListener listener) {
+ if( !modelListeners.contains(listener))
+ modelListeners.add(listener);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see
org.jboss.ide.eclipse.archives.core.model.IArchiveModel#removeModelListener(org.jboss.ide.eclipse.archives.core.model.IArchiveModelListener)
+ */
+ public void removeModelListener(IArchiveModelListener listener) {
+ if( modelListeners.contains(listener))
+ modelListeners.remove(listener);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.jboss.ide.eclipse.archives.core.model.IArchiveModel#getModelListeners()
+ */
+ public IArchiveModelListener[] getModelListeners() {
+ return modelListeners.toArray(new IArchiveModelListener[modelListeners.size()]);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.jboss.ide.eclipse.archives.core.model.IArchiveModel#getModelNodes()
+ */
+ public IArchiveModelRootNode[] getModelNodes() {
+ Collection<ArchiveModelNode> c = archivesRoot.values();
+ return (IArchiveModelRootNode[]) c.toArray(new IArchiveModelRootNode[c.size()]);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see
org.jboss.ide.eclipse.archives.core.model.IArchiveModel#accept(org.jboss.ide.eclipse.archives.core.model.IArchiveNodeVisitor)
+ */
+ public boolean accept(IArchiveNodeVisitor visitor) {
+ IArchiveModelRootNode[] children = getModelNodes();
+ boolean keepGoing = true;
+ if (keepGoing)
+ for (int i = 0; i < children.length; i++)
+ if (keepGoing)
+ keepGoing = children[i].accept(visitor);
+ return keepGoing;
+ }
+
+
+ public IArchiveModelRootNode getRoot(IPath project) {
+ return (archivesRoot.get(project));
+ }
+
+ @Deprecated
+ public void save(IPath projectPath, IProgressMonitor monitor) throws
ArchivesModelException {
+ save(getRoot(projectPath), monitor);
+ }
+
+ @Deprecated
+ public void save(IArchiveModelRootNode modelNode, IProgressMonitor monitor) throws
ArchivesModelException {
+ modelNode.save(monitor);
+ }
+
+ public boolean isProjectRegistered(IPath projectPath) {
+ return archivesRoot.containsKey(projectPath);
+ }
+
+ public boolean canReregister(IPath projectPath) {
+ return canReregister(projectPath, DEFAULT_PACKAGES_FILE);
+ }
+
+ public boolean canReregister(IPath projectPath, String file) {
+ return projectPath.append(file).toFile().exists();
+ }
+
+ public IArchiveModelRootNode registerProject(IPath projectPath, IProgressMonitor
monitor) throws ArchivesModelException {
+ return registerProject(projectPath, DEFAULT_PACKAGES_FILE, monitor);
+ }
+
+ public IArchiveModelRootNode registerProject(IPath projectPath, String file,
IProgressMonitor monitor) throws ArchivesModelException {
+ XbPackages packages;
+ ArchiveModelNode modelNode;
+
+ IPath packagesFile = projectPath.append(file);
+ if (packagesFile.toFile().exists()) {
+ try {
+ packages = XMLBinding.unmarshal(packagesFile.toFile(), monitor);
+ } catch( XbException xbe ) {
+ // Empty / non-working XML file loaded
+ ArchivesCore.getInstance().getLogger().log(IArchivesLogger.MSG_ERR, "Error
unmarshalling packages file " + packagesFile, xbe);
+ return null;
+ }
+ } else {
+ packages = new XbPackages();
+ }
+
+ // Fill the model
+ modelNode = new ArchiveModelNode(projectPath, projectPath.append(file), packages,
this);
+ ModelUtil.fillArchiveModel(packages, modelNode);
+ modelNode.clearDelta();
+
+ registerProject(modelNode, monitor);
+ return modelNode;
+ }
+
+ public void registerProject(IArchiveModelRootNode model, IProgressMonitor monitor) {
+ ArchivesCore.getInstance().preRegisterProject(model.getProjectPath());
+ xbPackages.put(model.getProjectPath(), ((ArchiveModelNode)model).getXbPackages());
+ archivesRoot.put(model.getProjectPath(), (ArchiveModelNode)model);
+ model.setModel(this);
+ fireRegisterProjectEvent((ArchiveModelNode)model);
+ }
+
+ public void unregisterProject(IPath projectPath, IProgressMonitor monitor) {
+ IArchiveModelRootNode root = getRoot(projectPath);
+ xbPackages.remove(projectPath);
+ archivesRoot.remove(projectPath);
+ fireUnregisterProjectEvent(root);
+ }
+
+ public void unregisterProject(IArchiveModelRootNode model, IProgressMonitor monitor) {
+ xbPackages.remove(model.getProjectPath());
+ archivesRoot.remove(model.getProjectPath());
+ fireUnregisterProjectEvent((ArchiveModelNode)model);
+ }
+
+ protected void fireRegisterProjectEvent(final IArchiveModelRootNode newRoot) {
+ fireRegistrationEvent(null, newRoot, IArchiveNodeDelta.NODE_REGISTERED);
+ }
+
+ protected void fireUnregisterProjectEvent(final IArchiveModelRootNode oldRoot) {
+ fireRegistrationEvent(oldRoot, null, IArchiveNodeDelta.NODE_UNREGISTERED);
+ }
+
+ protected void fireRegistrationEvent(final IArchiveModelRootNode oldRoot, final
IArchiveModelRootNode newRoot, final int type) {
+ IArchiveNodeDelta delta = new IArchiveNodeDelta() {
+ public IArchiveNodeDelta[] getAddedChildrenDeltas() {return null;}
+ public IArchiveNodeDelta[] getAllAffectedChildren() {return null;}
+ public INodeDelta getAttributeDelta(String key) {return null;}
+ public String[] getAttributesWithDeltas() {return null;}
+ public IArchiveNodeDelta[] getChangedDescendentDeltas() {return null;}
+ public int getKind() {return type;}
+ public IArchiveNode getPostNode() {return newRoot;}
+ public IArchiveNode getPreNode() { return oldRoot; }
+ public String[] getPropertiesWithDeltas() {return null;}
+ public INodeDelta getPropertyDelta(String key) {return null;}
+ public IArchiveNodeDelta[] getRemovedChildrenDeltas() {return null;}
+ };
+ EventManager.fireDelta(delta);
+ }
+}
Modified:
trunk/core/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/model/IArchiveModel.java
===================================================================
---
trunk/core/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/model/IArchiveModel.java 2008-05-17
02:28:45 UTC (rev 8170)
+++
trunk/core/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/model/IArchiveModel.java 2008-05-17
02:30:22 UTC (rev 8171)
@@ -1,56 +1,58 @@
-/**
- * JBoss, a Division of Red Hat
- * Copyright 2006, Red Hat Middleware, LLC, and individual contributors as indicated
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
- */
-package org.jboss.ide.eclipse.archives.core.model;
-
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.jboss.ide.eclipse.archives.core.model.internal.xb.XMLBinding.XbException;
-
-
-/**
- * Manages Archive Model Listeners, build and model changes, for changes
- * in the model
- * @author rstryker
- *
- */
-public interface IArchiveModel {
- public static final String DEFAULT_PACKAGES_FILE = ".packages";
-
- public boolean isProjectRegistered(IPath projectPath);
- public void save(IPath projectPath, IProgressMonitor monitor) throws
ArchivesModelException;
- public void save(IArchiveModelRootNode modelNode, IProgressMonitor monitor) throws
ArchivesModelException;
- public IArchiveModelRootNode registerProject(IPath projectPath, IProgressMonitor
monitor) throws ArchivesModelException;
- public IArchiveModelRootNode registerProject(IPath projectPath, String file,
IProgressMonitor monitor) throws ArchivesModelException;
- public void registerProject(IArchiveModelRootNode modelNode, IProgressMonitor monitor);
- public void unregisterProject(IPath projectPath, IProgressMonitor monitor);
- public void unregisterProject(IArchiveModelRootNode modelNode, IProgressMonitor
monitor);
- public IArchiveModelRootNode getRoot(IPath project);
- public IArchiveModelRootNode[] getModelNodes();
- public boolean accept(IArchiveNodeVisitor visitor);
-
- public void addBuildListener(IArchiveBuildListener listener);
- public void removeBuildListener(IArchiveBuildListener listener);
- public IArchiveBuildListener[] getBuildListeners();
- public void addModelListener(IArchiveModelListener listener);
- public void removeModelListener(IArchiveModelListener listener);
- public IArchiveModelListener[] getModelListeners();
-}
+/**
+ * JBoss, a Division of Red Hat
+ * Copyright 2006, Red Hat Middleware, LLC, and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ */
+package org.jboss.ide.eclipse.archives.core.model;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.jboss.ide.eclipse.archives.core.model.internal.xb.XMLBinding.XbException;
+
+
+/**
+ * Manages Archive Model Listeners, build and model changes, for changes
+ * in the model
+ * @author rstryker
+ *
+ */
+public interface IArchiveModel {
+ public static final String DEFAULT_PACKAGES_FILE = ".packages";
+
+ public boolean isProjectRegistered(IPath projectPath);
+ public void save(IPath projectPath, IProgressMonitor monitor) throws
ArchivesModelException;
+ public void save(IArchiveModelRootNode modelNode, IProgressMonitor monitor) throws
ArchivesModelException;
+ public IArchiveModelRootNode registerProject(IPath projectPath, IProgressMonitor
monitor) throws ArchivesModelException;
+ public IArchiveModelRootNode registerProject(IPath projectPath, String file,
IProgressMonitor monitor) throws ArchivesModelException;
+ public void registerProject(IArchiveModelRootNode modelNode, IProgressMonitor monitor);
+ public void unregisterProject(IPath projectPath, IProgressMonitor monitor);
+ public void unregisterProject(IArchiveModelRootNode modelNode, IProgressMonitor
monitor);
+ public boolean canReregister(IPath projectPath);
+ public boolean canReregister(IPath projectPath, String file);
+ public IArchiveModelRootNode getRoot(IPath project);
+ public IArchiveModelRootNode[] getModelNodes();
+ public boolean accept(IArchiveNodeVisitor visitor);
+
+ public void addBuildListener(IArchiveBuildListener listener);
+ public void removeBuildListener(IArchiveBuildListener listener);
+ public IArchiveBuildListener[] getBuildListeners();
+ public void addModelListener(IArchiveModelListener listener);
+ public void removeModelListener(IArchiveModelListener listener);
+ public IArchiveModelListener[] getModelListeners();
+}