Author: rob.stryker(a)jboss.com
Date: 2007-06-08 17:26:44 -0400 (Fri, 08 Jun 2007)
New Revision: 2105
Modified:
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/packages/ArchivesBuildListener.java
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/packages/PackageModuleFactory.java
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/packages/PackagedArtifactAdapter.java
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/publishers/JstPublisher.java
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/publishers/PackagesPublisher.java
Log:
publishing cleanup linked with archives
Modified:
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/packages/ArchivesBuildListener.java
===================================================================
---
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/packages/ArchivesBuildListener.java 2007-06-08
21:25:35 UTC (rev 2104)
+++
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/packages/ArchivesBuildListener.java 2007-06-08
21:26:44 UTC (rev 2105)
@@ -36,7 +36,9 @@
import org.jboss.ide.eclipse.archives.core.model.ArchivesModel;
import org.jboss.ide.eclipse.archives.core.model.IArchive;
import org.jboss.ide.eclipse.archives.core.model.IArchiveFileSet;
+import org.jboss.ide.eclipse.archives.core.model.IArchiveNodeDelta;
import org.jboss.ide.eclipse.archives.core.model.other.IArchiveBuildListener;
+import org.jboss.ide.eclipse.archives.core.model.other.IArchiveModelListener;
import org.jboss.ide.eclipse.archives.core.util.ModelUtil;
import
org.jboss.ide.eclipse.as.core.packages.PackageModuleFactory.PackagedModuleDelegate;
import org.jboss.ide.eclipse.as.core.server.attributes.IDeployableServer;
@@ -47,7 +49,7 @@
*
* @author rob.stryker(a)jboss.com
*/
-public class ArchivesBuildListener implements IArchiveBuildListener {
+public class ArchivesBuildListener implements IArchiveBuildListener,
IArchiveModelListener {
public static ArchivesBuildListener instance;
public static final String DEPLOY_SERVERS =
"org.jboss.ide.eclipse.as.core.model.PackagesListener.DeployServers";
@@ -62,6 +64,7 @@
public ArchivesBuildListener() {
ArchivesModel.instance().addBuildListener(this);
+ ArchivesModel.instance().addModelListener(this, ArchivesModel.LIST_FRONT);
}
public void cleanArchive(IArchive pkg) {
@@ -77,16 +80,12 @@
}
public void fileRemoved(IArchive topLevelPackage, IArchiveFileSet fileset, IPath
filePath) {
- // make absolute
- IPath filePath2 = ModelUtil.getBaseDestinationFile(fileset, filePath);
PackagedModuleDelegate del = getModuleDelegate(topLevelPackage);
- del.fileRemoved(filePath2);
+ del.fileRemoved(filePath, fileset);
}
public void fileUpdated(IArchive topLevelPackage, IArchiveFileSet fileset, IPath
filePath) {
- // make absolute
- IPath filePath2 = ModelUtil.getBaseDestinationFile(fileset, filePath);
PackagedModuleDelegate del = getModuleDelegate(topLevelPackage);
- del.fileUpdated(filePath2);
+ del.fileUpdated(filePath, fileset);
}
// If we're supposed to auto-deploy, get on it
@@ -192,5 +191,15 @@
public void cleanProject(IPath project) {
}
+ public void modelChanged(IArchiveNodeDelta delta) {
+ IPath p ;
+ if( delta.getPreNode() == null )
+ p = delta.getPostNode().getProjectPath();
+ else
+ p = delta.getPreNode().getProjectPath();
+
+ PackageModuleFactory.getFactory().refreshProject(p);
+ }
+
}
Modified:
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/packages/PackageModuleFactory.java
===================================================================
---
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/packages/PackageModuleFactory.java 2007-06-08
21:25:35 UTC (rev 2104)
+++
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/packages/PackageModuleFactory.java 2007-06-08
21:26:44 UTC (rev 2105)
@@ -45,11 +45,16 @@
import org.eclipse.wst.server.core.internal.ServerPlugin;
import org.eclipse.wst.server.core.model.IModuleResource;
import org.eclipse.wst.server.core.model.ModuleDelegate;
+import org.eclipse.wst.server.core.model.ModuleFactoryDelegate;
import org.eclipse.wst.server.core.util.ProjectModuleFactoryDelegate;
import org.jboss.ide.eclipse.archives.core.model.ArchivesModel;
import org.jboss.ide.eclipse.archives.core.model.ArchivesModelCore;
import org.jboss.ide.eclipse.archives.core.model.IArchive;
+import org.jboss.ide.eclipse.archives.core.model.IArchiveFileSet;
+import org.jboss.ide.eclipse.archives.core.model.IArchiveFolder;
import org.jboss.ide.eclipse.archives.core.model.IArchiveNode;
+import org.jboss.ide.eclipse.archives.core.model.IArchiveNodeVisitor;
+import org.jboss.ide.eclipse.archives.core.util.ModelUtil;
import org.jboss.ide.eclipse.as.core.JBossServerCorePlugin;
import org.osgi.service.prefs.BackingStoreException;
@@ -57,9 +62,7 @@
*
* @author rob.stryker(a)jboss.com
*/
-public class PackageModuleFactory extends ProjectModuleFactoryDelegate {
- protected Map moduleDelegates = new HashMap(5);
- protected HashMap packageToModule = new HashMap(5);
+public class PackageModuleFactory extends ModuleFactoryDelegate {
private static int nextArchiveId = -1;
private static final String NEXT_ARCHIVE_KEY =
"org.jboss.ide.eclipse.as.core.PackageModuleFactory.nextId";
@@ -70,70 +73,30 @@
public static final String MODULE_ID_PROPERTY_KEY =
"org.jboss.ide.eclipse.as.core.packages.ModuleIDPropertyKey";
- private static PackageModuleFactory factory;
+ // the factory delegate and the factory respectively
+ private static PackageModuleFactory factDelegate;
+ private static ModuleFactory factory;
+
public static PackageModuleFactory getFactory() {
- if( factory != null ) return factory;
-
- ModuleFactory[] factories = ServerPlugin.getModuleFactories();
- for( int i = 0; i < factories.length; i++ ) {
- if( factories[i].getId().equals(PackageModuleFactory.FACTORY_TYPE_ID)) {
- Object o = factories[i].getDelegate(new NullProgressMonitor());
- if( o instanceof PackageModuleFactory ) {
- factory = (PackageModuleFactory)o;
- return factory;
+ if( factDelegate == null ) {
+ // find them
+ ModuleFactory[] factories = ServerPlugin.getModuleFactories();
+
+ search:
+ for( int i = 0; i < factories.length; i++ ) {
+ if( factories[i].getId().equals(PackageModuleFactory.FACTORY_TYPE_ID)) {
+ Object o = factories[i].getDelegate(new NullProgressMonitor());
+ if( o instanceof PackageModuleFactory ) {
+ factory = factories[i];
+ factDelegate = (PackageModuleFactory)o;
+ break search;
+ }
}
}
}
- return null;
+ return factDelegate;
}
-
-
- public PackageModuleFactory() {
- super();
- }
-
- /**
- * @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( getID(archives[i]) == null ) {
- requiresSave = true;
- archives[i].setProperty(MODULE_ID_PROPERTY_KEY, getID(archives[i], true));
- }
- }
- if( requiresSave ) {
- // save
- ArchivesModel.instance().saveModel(project.getLocation(), new NullProgressMonitor());
- }
- return requiresSave;
- }
- protected IModule[] createModules(IProject project) {
- try {
- if( ArchivesModelCore.getProjectPackages(project.getLocation(), null, true).length >
0 ) {
- ArrayList list = new ArrayList();
- IModule module;
- IArchive[] packages = ArchivesModelCore.getProjectPackages(project.getLocation(), new
NullProgressMonitor(), true);
- boolean saved = ensureArchivesHaveIDs(project, packages);
- for( int i = 0; i < packages.length; i++ ) {
- module = createModule(getID(packages[i]), getName(packages[i]),
- MODULE_TYPE, VERSION, project);
- list.add(module);
- Object moduleDelegate = new PackagedModuleDelegate(packages[i]);
- moduleDelegates.put(module, moduleDelegate);
- packageToModule.put(packages[i], module);
- }
- return (IModule[]) list.toArray(new IModule[list.size()]);
- }
- } catch( Throwable t ) {
- t.printStackTrace();
- }
- return null;
- }
-
public static String getID(IArchive pack) {
return getID(pack, false);
}
@@ -157,7 +120,6 @@
}
return propVal;
}
-
public static String getProjectName(IArchiveNode node) {
IPath projPath = node.getProjectPath();
if( projPath == null ) return null;
@@ -171,49 +133,178 @@
String projName = getProjectName(pack);
return projName + "/" + pack.getName();
}
+
+
+
+ /*
+ * The beginning of the class. Finally!
+ */
+
+
+
+
+
+ protected HashMap moduleDelegates = new HashMap(5);
+ protected HashMap packageToModule = new HashMap(5);
+ protected HashMap projectToPackages = new HashMap(5);
+ public PackageModuleFactory() {
+ super();
+ }
+
+ /**
+ * 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( getID(archives[i]) == null ) {
+ requiresSave = true;
+ archives[i].setProperty(MODULE_ID_PROPERTY_KEY, getID(archives[i], true));
+ }
+ }
+ if( requiresSave ) {
+ // save
+ ArchivesModel.instance().saveModel(project.getLocation(), new NullProgressMonitor());
+ }
+ return requiresSave;
+ }
+
+
+
+ /**
+ * Create and return the modules for a given IProject
+ * @param project The project which has the modules
+ * @return The modules that the project has
+ */
+ protected IModule[] createModules(IProject project) {
+ try {
+ if( ArchivesModelCore.getProjectPackages(project.getLocation(), null, true).length
> 0 ) {
+ ArrayList list = new ArrayList();
+ IModule module;
+ IArchive[] packages = ArchivesModelCore.getProjectPackages(project.getLocation(), new
NullProgressMonitor(), true);
+ boolean saved = ensureArchivesHaveIDs(project, packages);
+ for( int i = 0; i < packages.length; i++ ) {
+ module = createModule(getID(packages[i]), getName(packages[i]),
+ MODULE_TYPE, VERSION, project);
+ list.add(module);
+ Object moduleDelegate = new PackagedModuleDelegate(packages[i]);
+ moduleDelegates.put(module, moduleDelegate);
+ packageToModule.put(packages[i], module);
+ }
+ projectToPackages.put(project, packages);
+ return (IModule[]) list.toArray(new IModule[list.size()]);
+ }
+ } catch( Throwable t ) {
+ t.printStackTrace();
+ }
+ return new IModule[]{};
+ }
+
public ModuleDelegate getModuleDelegate(IModule module) {
return (ModuleDelegate) moduleDelegates.get(module);
}
+ public IModule getModuleFromPackage(IArchive pack) {
+ return (IModule)packageToModule.get(pack);
+ }
- protected void clearCache() {
- moduleDelegates = new HashMap(5);
- packageToModule = new HashMap(5);
+ private static boolean initiated = false;
+ public IModule[] getModules() {
+ if( !initiated )
+ init();
+ Collection c = packageToModule.values();
+ return (IModule[]) c.toArray(new IModule[c.size()]);
}
- public IModule getModuleFromPackage(IArchive pack) {
- getModules(); // prime it
- return (IModule)packageToModule.get(pack);
+ protected void init() {
+ IProject[] projects2 = ResourcesPlugin.getWorkspace().getRoot().getProjects();
+ int size = projects2.length;
+ for (int i = 0; i < size; i++) {
+ if (projects2[i].isAccessible()) {
+ createModules(projects2[i]);
+ }
+ }
}
+
- public IModule[] getModulesFromProject(IProject project) {
- ArrayList mods = new ArrayList();
- IArchive[] packs = ArchivesModelCore.getProjectPackages(project.getLocation(), new
NullProgressMonitor(), true);
- for( int i = 0; i < packs.length; i++ ) {
- IModule mod = getModuleFromPackage(packs[i]);
- if( mod != null ) mods.add(mod);
+ public void refreshProject(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 (IModule[]) mods.toArray(new IModule[mods.size()]);
+ if( proj != null ) {
+ IArchive[] archives = (IArchive[])projectToPackages.get(proj);
+ IModule mod;
+ projectToPackages.remove(proj);
+ for( int i = 0; i < archives.length; i++ ) {
+ mod = (IModule)packageToModule.get(archives[i]);
+ packageToModule.remove(archives[i]);
+ moduleDelegates.remove(mod);
+ }
+ createModules(proj);
+ clearModuleCache();
+ }
}
- /**
- * Returns the list of resources that the module should listen to
- * for state changes. The paths should be project relative paths.
- * Subclasses can override this method to provide the paths.
- *
- * @return a possibly empty array of paths
- */
- protected IPath[] getListenerPaths() {
- return new IPath[] { new Path(ArchivesModel.PROJECT_PACKAGES_FILE) };
+ protected static interface IExtendedModuleResource {
+ public IPath getPath();
+ public IArchiveNode getNode();
+ public IPath getDeepDestination();
}
public class PackagedModuleDelegate extends ModuleDelegate {
private IArchive pack;
private HashMap members;
- private IPath root;
+ private IArchiveNodeVisitor initVisitor;
public PackagedModuleDelegate(IArchive pack) {
this.pack = pack;
+ initVisitor = createInitVisitor();
}
+ private IArchiveNodeVisitor createInitVisitor() {
+ return new IArchiveNodeVisitor() {
+ public boolean visit(IArchiveNode node) {
+ if( node.getNodeType() == IArchiveNode.TYPE_ARCHIVE ) {
+ IPath rel = ((IArchive)node).getRootArchiveRelativePath();
+ members.put(rel, new ArchiveFolderModuleFolder(((IArchive)node).getName(), rel,
node));
+ } else if( node.getNodeType() == IArchiveNode.TYPE_ARCHIVE_FOLDER) {
+ IPath rel = ((IArchiveFolder)node).getRootArchiveRelativePath();
+ members.put(rel, new ArchiveFolderModuleFolder(((IArchiveFolder)node).getName(),
rel, node));
+ } else if( node.getNodeType() == IArchiveNode.TYPE_ARCHIVE_FILESET) {
+ IArchiveFileSet fs = (IArchiveFileSet)node;
+ IPath[] paths = fs.findMatchingPaths();
+ File tmp = null;
+ IPath archiveRelative;
+ for( int i = 0; i < paths.length; i++ ) {
+ archiveRelative = fs.getRootArchiveRelativePath(paths[i]);
+ tmp = paths[i].toFile();
+ ExtendedModuleFile emf = new ExtendedModuleFile(tmp.getName(), archiveRelative,
tmp.lastModified(), paths[i], fs);
+ members.put(archiveRelative, emf);
+ IPath tmp2 =
archiveRelative.removeFirstSegments(fs.getRootArchiveRelativePath().segmentCount()).removeLastSegments(1);
+ if( tmp2.segmentCount() > 0 )
+ addFoldersFor(fs, tmp2);
+ }
+ }
+ return true;
+ }
+ };
+ }
+ protected void addFoldersFor(IArchiveFileSet fs, IPath fsRelative) {
+ IPath fsBase = fs.getRootArchiveRelativePath();
+ IPath folderPath = null;
+ IPath tmpRelative;
+ for( int i = 0; i < fsRelative.segmentCount(); i++ ) {
+ tmpRelative = fsRelative.removeLastSegments(i);
+ folderPath = fsBase.append(tmpRelative);
+ if( !members.containsKey(folderPath))
+ members.put(folderPath, new FilesetModuleFolder(folderPath.lastSegment(),
folderPath, fs, fs.getGlobalSourcePath().append(tmpRelative)));
+ }
+ }
public IArchive getPackage() {
return pack;
}
@@ -226,60 +317,102 @@
}
protected void init() {
- if( members == null ) {
- members = new HashMap();
- root = pack.getArchiveFilePath();
- addResource(root.toFile());
- }
+ members = new HashMap();
+ pack.accept(initVisitor);
}
- protected void addResource(File f) {
- if( f.isDirectory() ) {
- IPath relative = getRelativePath(f);
- members.put(relative, new ModuleFolder(f.getName(), relative));
- File[] kids = f.listFiles();
- for( int i = 0; i < kids.length; i++ ) {
- addResource(kids[i]);
- }
- } else if( f.isFile() ) {
- members.put(root, new ModuleFile(f.getName(), new Path(f.getName()),
f.lastModified()));
- }
- }
- protected IPath getRelativePath(File f) {
- IPath tmp = new Path(f.getAbsolutePath());
- return tmp.removeFirstSegments(root.segmentCount()-1);
- }
public IModuleResource[] members() throws CoreException {
- reset();
init();
Collection c = members.values();
return (IModuleResource[]) c.toArray(new IModuleResource[c.size()]);
}
- public void fileUpdated(IPath filePath) {
- init();
- long timestamp;
- timestamp = new Date().getTime(); // now
+ public void fileUpdated(IPath changedFile, IArchiveFileSet fs) {
+ IPath archiveRelative = fs.getRootArchiveRelativePath(changedFile);
+ long stamp = new Date().getTime();
+ ExtendedModuleFile emf = new ExtendedModuleFile(changedFile.lastSegment(),
archiveRelative, stamp, changedFile, fs);
+ members.put(archiveRelative, emf);
+ }
+ public void fileRemoved(IPath removedFile, IArchiveFileSet fs) {
+ IPath archiveRelative = fs.getRootArchiveRelativePath(removedFile);
+ members.remove(archiveRelative);
+ }
+
+
+ public class ExtendedModuleFile extends ModuleFile implements IExtendedModuleResource
{
+ private IPath srcPath;
+ private IArchiveFileSet node;
+ public ExtendedModuleFile(String name, IPath relativePath, long stamp,
+ IPath srcPath, IArchiveFileSet fs) {
+ super(name, relativePath, stamp);
+ this.srcPath = srcPath;
+ this.node = fs;
+ System.out.println("adding emfile " + srcPath);
+ }
+ public IPath getPath() { return srcPath; }
+ public IArchiveNode getNode() { return node; }
+ public IPath getDeepDestination() {
+ return
node.getRootArchive().getDestinationPath().append(node.getRootArchiveRelativePath(path));
+ }
+ }
- IPath dest = pack.getDestinationPath();
- if( dest.isPrefixOf(filePath)) {
- filePath = filePath.removeFirstSegments(dest.segmentCount());
+ public class FilesetModuleFolder extends ModuleFolder implements
IExtendedModuleResource {
+
+ private IArchiveFileSet node;
+ private IPath srcPath;
+ public FilesetModuleFolder(String name, IPath path, IArchiveFileSet fs, IPath srcPath)
{
+ super(name, path);
+ this.node = fs;
+ this.srcPath = srcPath;
}
- members.put(filePath, new ModuleFile(filePath.lastSegment(), filePath, timestamp));
+ public IPath getPath() { return srcPath; }
+ public IArchiveNode getNode() { return node; }
+ public IPath getDeepDestination() {
+ return
node.getRootArchive().getDestinationPath().append(node.getRootArchiveRelativePath(path));
+ }
}
- public void fileRemoved(IPath filePath) {
- init();
- IPath dest = pack.getDestinationPath();
- if( dest.isPrefixOf(filePath)) {
- filePath = filePath.removeFirstSegments(dest.segmentCount());
+
+ public class ArchiveFolderModuleFolder extends ModuleFolder implements
IExtendedModuleResource {
+ private IArchiveNode node;
+ private IPath srcPath;
+ public ArchiveFolderModuleFolder(String name, IPath path, IArchiveNode node) {
+ super(name, path);
+ this.node = node;
+ this.srcPath = null;
}
- members.remove(filePath);
+ public IPath getPath() { return srcPath; }
+ public IArchiveNode getNode() { return node; }
+ public IPath getDeepDestination() {
+ return
node.getRootArchive().getDestinationPath().append(node.getRootArchiveRelativePath());
+ }
}
+ public IPath getSourceFile(IModuleResource mf) {
+ if( mf instanceof IExtendedModuleResource ) {
+ return ((IExtendedModuleResource)mf).getPath();
+ }
+ return null;
+ }
+
+ public IPath getConcreteDestFile(IModuleResource mr) {
+ if( mr instanceof IExtendedModuleResource ) {
+ IExtendedModuleResource emf =(IExtendedModuleResource)mr;
+ return ModelUtil.getBaseDestinationFile(emf.getNode(), emf.getPath());
+ }
+ return null;
+ }
+ public IPath getDeepDestFile(IModuleResource mf) {
+ if( mf instanceof IExtendedModuleResource ) {
+ return ((IExtendedModuleResource)mf).getDeepDestination();
+ }
+ return null;
+ }
+
public IStatus validate() {
return new Status(IStatus.OK, JBossServerCorePlugin.PLUGIN_ID,
0, "", null);
}
}
+
}
Modified:
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/packages/PackagedArtifactAdapter.java
===================================================================
---
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/packages/PackagedArtifactAdapter.java 2007-06-08
21:25:35 UTC (rev 2104)
+++
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/packages/PackagedArtifactAdapter.java 2007-06-08
21:26:44 UTC (rev 2105)
@@ -29,10 +29,10 @@
if( obj instanceof IProject ) {
PackageModuleFactory factory = PackageModuleFactory.getFactory();
if( factory != null ) {
- IModule[] mods = factory.getModulesFromProject((IProject)obj);
- if( mods != null && mods.length != 0) {
- return getArtifact(mods);
- }
+// IModule[] mods = factory.getModulesFromProject((IProject)obj);
+// if( mods != null && mods.length != 0) {
+// return getArtifact(mods);
+// }
}
}
return null;
Modified:
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/publishers/JstPublisher.java
===================================================================
---
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/publishers/JstPublisher.java 2007-06-08
21:25:35 UTC (rev 2104)
+++
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/publishers/JstPublisher.java 2007-06-08
21:26:44 UTC (rev 2105)
@@ -176,14 +176,14 @@
protected void handleResource(int kind, IModuleResource resource, Set addedChanged, Set
removed) {
if( resource instanceof ModuleFile ) {
ModuleFile mf = (ModuleFile)resource;
- File f = (File)resource.getAdapter(java.io.File.class);
+ IFile f = (IFile)resource.getAdapter(IFile.class);
IPath p = null;
if( f == null ) {
IFile ifile = (IFile)resource.getAdapter(IFile.class);
if( ifile != null )
p = ifile.getLocation();
} else {
- p = new Path(f.getAbsolutePath());
+ p = f.getLocation();
}
if( p != null ) {
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 2007-06-08
21:25:35 UTC (rev 2104)
+++
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/publishers/PackagesPublisher.java 2007-06-08
21:26:44 UTC (rev 2105)
@@ -31,6 +31,7 @@
import org.eclipse.core.runtime.Path;
import org.eclipse.wst.server.core.IModule;
import org.eclipse.wst.server.core.IServer;
+import org.eclipse.wst.server.core.model.IModuleFolder;
import org.eclipse.wst.server.core.model.IModuleResourceDelta;
import org.eclipse.wst.server.core.model.ServerBehaviourDelegate;
import org.jboss.ide.eclipse.archives.core.model.IArchive;
@@ -103,6 +104,7 @@
protected void publishModule(IModule module, int kind, int deltaKind, int
modulePublishState, IProgressMonitor monitor) {
+ System.out.println("*********** publishing");
PublishEvent event = PublisherEventLogger.createSingleModuleTopEvent(eventRoot, module,
kind, deltaKind);
IArchive pack = getPackage(module);
IPath sourcePath = pack.getArchiveFilePath();
@@ -117,28 +119,7 @@
PublisherFileUtilListener listener = new PublisherFileUtilListener(event);
if( shouldPublishIncremental(module, kind, deltaKind, modulePublishState) ) {
- IPath sourcePrefix = sourcePath.removeLastSegments(1);
- IPath destPath;
-
- ArrayList updated2 = new ArrayList();
- ArrayList removed2 = new ArrayList();
- fillFromDelta(updated2, removed2, delta);
- IPath[] updated = (IPath[]) updated2.toArray(new IPath[updated2.size()]);
- IPath[] removed = (IPath[]) removed2.toArray(new IPath[removed2.size()]);
-
- // incrementally remove removed files
- for( int j = 0; j < removed.length; j++ ) {
- destPath = destPathRoot.append(removed[j]);
- FileUtil.completeDelete(destPath.toFile(), listener);
- }
-
- // incrementally update updated files
- for( int j = 0; j < updated.length; j++ ) {
- destPath = destPathRoot.append(updated[j]);
- IPath srcp = sourcePrefix.append(updated[j]);
- FileUtil.fileSafeCopy(srcp.toFile(), destPath.toFile(), listener);
- }
-
+ publishFromDelta(module, destPathRoot, sourcePath.removeLastSegments(1), delta,
listener);
} else {
// full publish, copy whole folder or file
FileUtil.fileSafeCopy(sourcePath.toFile(),
destPathRoot.append(sourcePath.lastSegment()).toFile(), listener);
@@ -149,15 +130,29 @@
return false;
return true;
}
- protected void fillFromDelta(ArrayList updated2, ArrayList removed2,
IModuleResourceDelta[] delta) {
+ protected void publishFromDelta(IModule module, IPath destPathRoot, IPath sourcePrefix,
+ IModuleResourceDelta[] delta, PublisherFileUtilListener listener) {
+ PackagedModuleDelegate delegate =
(PackagedModuleDelegate)module.loadAdapter(PackagedModuleDelegate.class, new
NullProgressMonitor());
+ IPath concrete = null, destPath;
for( int j = 0; j < delta.length; j++ ) {
switch(delta[j].getKind()) {
case IModuleResourceDelta.ADDED:
case IModuleResourceDelta.CHANGED:
- updated2.add(delta[j].getModuleResource().getModuleRelativePath());
+ concrete = delegate.getConcreteDestFile(delta[j].getModuleResource());
+ destPath =
destPathRoot.append(concrete.removeFirstSegments(sourcePrefix.segmentCount()));
+ if( delta[j].getModuleResource() instanceof IModuleFolder ) {
+ System.out.println("mkdirs " + destPath.toOSString());
+ destPath.toFile().mkdirs();
+ } else {
+ System.out.println("safe-copying " + destPath.toOSString());
+ FileUtil.fileSafeCopy(concrete.toFile(), destPath.toFile(), listener);
+ }
break;
case IModuleResourceDelta.REMOVED:
- removed2.add(delta[j].getModuleResource().getModuleRelativePath());
+ concrete = delegate.getConcreteDestFile(delta[j].getModuleResource());
+ destPath =
destPathRoot.append(concrete.removeFirstSegments(sourcePrefix.segmentCount()));
+ System.out.println("safe-deleting " + destPath.toOSString());
+ FileUtil.safeDelete(destPath.toFile(), listener);
break;
}
}