Author: rob.stryker(a)jboss.com
Date: 2011-03-28 19:27:51 -0400 (Mon, 28 Mar 2011)
New Revision: 30074
Modified:
trunk/archives/plugins/org.jboss.ide.eclipse.archives.core/src/eclipse/org/jboss/ide/eclipse/archives/core/build/ModelChangeListenerWithRefresh.java
trunk/archives/plugins/org.jboss.ide.eclipse.archives.core/src/eclipse/org/jboss/ide/eclipse/archives/core/build/PostBuildRefresher.java
trunk/archives/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/build/ArchiveBuildDelegate.java
trunk/archives/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/build/ModelChangeListener.java
trunk/archives/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/util/internal/ModelTruezipBridge.java
trunk/archives/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/util/internal/TrueZipUtil.java
Log:
JBIDE-7111 deadlock in project archives
Modified:
trunk/archives/plugins/org.jboss.ide.eclipse.archives.core/src/eclipse/org/jboss/ide/eclipse/archives/core/build/ModelChangeListenerWithRefresh.java
===================================================================
---
trunk/archives/plugins/org.jboss.ide.eclipse.archives.core/src/eclipse/org/jboss/ide/eclipse/archives/core/build/ModelChangeListenerWithRefresh.java 2011-03-28
22:22:02 UTC (rev 30073)
+++
trunk/archives/plugins/org.jboss.ide.eclipse.archives.core/src/eclipse/org/jboss/ide/eclipse/archives/core/build/ModelChangeListenerWithRefresh.java 2011-03-28
23:27:51 UTC (rev 30074)
@@ -15,6 +15,7 @@
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.resources.WorkspaceJob;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
@@ -46,12 +47,14 @@
protected void executeAndLog(IArchiveNodeDelta delta) {
final IArchiveNodeDelta delta2 = delta;
- new Job(ArchivesCoreMessages.UpdatingModelJob) {
- public IStatus run(IProgressMonitor monitor) {
+ Job j = new WorkspaceJob(ArchivesCoreMessages.UpdatingModelJob) {
+ public IStatus runInWorkspace(IProgressMonitor monitor) {
ModelChangeListenerWithRefresh.super.executeAndLog(delta2);
return Status.OK_STATUS;
}
- }.schedule();
+ };
+ j.setRule(ResourcesPlugin.getWorkspace().getRoot());
+ j.schedule();
}
Modified:
trunk/archives/plugins/org.jboss.ide.eclipse.archives.core/src/eclipse/org/jboss/ide/eclipse/archives/core/build/PostBuildRefresher.java
===================================================================
---
trunk/archives/plugins/org.jboss.ide.eclipse.archives.core/src/eclipse/org/jboss/ide/eclipse/archives/core/build/PostBuildRefresher.java 2011-03-28
22:22:02 UTC (rev 30073)
+++
trunk/archives/plugins/org.jboss.ide.eclipse.archives.core/src/eclipse/org/jboss/ide/eclipse/archives/core/build/PostBuildRefresher.java 2011-03-28
23:27:51 UTC (rev 30074)
@@ -4,93 +4,45 @@
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.resources.WorkspaceJob;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.Status;
+import org.jboss.ide.eclipse.archives.core.model.AbstractBuildListener;
import org.jboss.ide.eclipse.archives.core.model.IArchive;
-import org.jboss.ide.eclipse.archives.core.model.IArchiveBuildListener;
-import org.jboss.ide.eclipse.archives.core.model.IArchiveFileSet;
-import org.jboss.ide.eclipse.archives.core.model.IArchiveNode;
import org.jboss.ide.eclipse.archives.core.util.PathUtils;
-public class PostBuildRefresher implements IArchiveBuildListener {
+public class PostBuildRefresher extends AbstractBuildListener {
- public void buildFailed(IArchive pkg, IStatus status) {
+ public void finishedBuildingArchive(final IArchive pkg) {
// TODO Auto-generated method stub
-
- }
-
- public void cleanArchive(IArchive pkg) {
- // TODO Auto-generated method stub
-
- }
-
- public void cleanProject(IPath project) {
- // TODO Auto-generated method stub
-
- }
-
- public void error(IArchiveNode node, IStatus[] multi) {
- // TODO Auto-generated method stub
-
- }
-
- public void fileRemoved(IArchive topLevelArchive, IArchiveFileSet fileset,
- IPath filePath) {
- // TODO Auto-generated method stub
-
- }
-
- public void fileUpdated(IArchive topLevelArchive, IArchiveFileSet fileset,
- IPath filePath) {
- // TODO Auto-generated method stub
-
- }
-
- public void finishedBuild(IPath project) {
-
- // TODO Auto-generated method stub
-
- }
-
- public void finishedBuildingArchive(IArchive pkg) {
- // TODO Auto-generated method stub
if( pkg.isDestinationInWorkspace()) {
- IPath loc = PathUtils.getGlobalLocation(pkg);
- IFile[] files = ResourcesPlugin.getWorkspace().getRoot().findFilesForLocation(loc);
- for( int i = 0; i < files.length; i++ ) {
- try {
- files[i].refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor());
- } catch( CoreException ce ) {}
- }
- IContainer[] folders =
ResourcesPlugin.getWorkspace().getRoot().findContainersForLocation(loc);
- for( int i = 0; i < folders.length; i++ ) {
- try {
- folders[i].refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor());
- } catch( CoreException ce ) {}
- }
+ new WorkspaceJob("Refresh Project") { //$NON-NLS-1$
+ public IStatus runInWorkspace(IProgressMonitor monitor)
+ throws CoreException {
+ handlePostBuild(pkg);
+ return Status.OK_STATUS;
+ }
+ }.schedule(1000);
}
}
-
- public void finishedCollectingFileSet(IArchiveFileSet fileset) {
- // TODO Auto-generated method stub
-
+
+ private void handlePostBuild(IArchive pkg) {
+ IPath loc = PathUtils.getGlobalLocation(pkg);
+ IFile[] files = ResourcesPlugin.getWorkspace().getRoot().findFilesForLocation(loc);
+ for( int i = 0; i < files.length; i++ ) {
+ try {
+ files[i].refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor());
+ } catch( CoreException ce ) {}
+ }
+ IContainer[] folders =
ResourcesPlugin.getWorkspace().getRoot().findContainersForLocation(loc);
+ for( int i = 0; i < folders.length; i++ ) {
+ try {
+ folders[i].refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor());
+ } catch( CoreException ce ) {}
+ }
}
-
- public void startedBuild(IPath project) {
- // TODO Auto-generated method stub
-
- }
-
- public void startedBuildingArchive(IArchive pkg) {
- // TODO Auto-generated method stub
-
- }
-
- public void startedCollectingFileSet(IArchiveFileSet fileset) {
- // TODO Auto-generated method stub
-
- }
-
}
Modified:
trunk/archives/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/build/ArchiveBuildDelegate.java
===================================================================
---
trunk/archives/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/build/ArchiveBuildDelegate.java 2011-03-28
22:22:02 UTC (rev 30073)
+++
trunk/archives/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/build/ArchiveBuildDelegate.java 2011-03-28
23:27:51 UTC (rev 30074)
@@ -142,8 +142,14 @@
EventManager.cleanArchiveBuild(pkg);
EventManager.startedBuildingArchive(pkg);
-
- ModelTruezipBridge.deleteArchive(pkg);
+
+ IPath filePath = pkg.getArchiveFilePath();
+ if( filePath.toFile().isFile())
+ filePath.toFile().delete();
+ else
+ TrueZipUtil.javaIODeleteDir(filePath.toFile());
+
+ //ModelTruezipBridge.deleteArchive(pkg);
IPath dest = PathUtils.getGlobalLocation(pkg);
if( dest != null && !dest.toFile().exists() ) {
if( !dest.toFile().mkdirs() ) {
Modified:
trunk/archives/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/build/ModelChangeListener.java
===================================================================
---
trunk/archives/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/build/ModelChangeListener.java 2011-03-28
22:22:02 UTC (rev 30073)
+++
trunk/archives/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/build/ModelChangeListener.java 2011-03-28
23:27:51 UTC (rev 30074)
@@ -13,12 +13,18 @@
import java.util.ArrayList;
import java.util.Arrays;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.resources.WorkspaceJob;
+import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
import org.jboss.ide.eclipse.archives.core.ArchivesCore;
import org.jboss.ide.eclipse.archives.core.ArchivesCoreMessages;
+import
org.jboss.ide.eclipse.archives.core.model.DirectoryScannerFactory.DirectoryScannerExtension.FileWrapper;
import org.jboss.ide.eclipse.archives.core.model.EventManager;
import org.jboss.ide.eclipse.archives.core.model.IArchive;
import org.jboss.ide.eclipse.archives.core.model.IArchiveFileSet;
@@ -27,7 +33,6 @@
import org.jboss.ide.eclipse.archives.core.model.IArchiveModelRootNode;
import org.jboss.ide.eclipse.archives.core.model.IArchiveNode;
import org.jboss.ide.eclipse.archives.core.model.IArchiveNodeDelta;
-import
org.jboss.ide.eclipse.archives.core.model.DirectoryScannerFactory.DirectoryScannerExtension.FileWrapper;
import org.jboss.ide.eclipse.archives.core.util.ModelUtil;
import org.jboss.ide.eclipse.archives.core.util.internal.ModelTruezipBridge;
import
org.jboss.ide.eclipse.archives.core.util.internal.ModelTruezipBridge.FileWrapperStatusPair;
@@ -50,9 +55,18 @@
* This is the entry point for model change events.
* It immediately passes the delta to be handled.
*/
- public void modelChanged(IArchiveNodeDelta delta) {
- if( shouldRun(delta))
- executeAndLog(delta);
+ public void modelChanged(final IArchiveNodeDelta delta) {
+ if( shouldRun(delta)) {
+ Job j = new WorkspaceJob("Responding to archives model change") {
//$NON-NLS-1$
+ public IStatus runInWorkspace(IProgressMonitor monitor)
+ throws CoreException {
+ executeAndLog(delta);
+ return Status.OK_STATUS;
+ }
+ };
+ j.setRule(ResourcesPlugin.getWorkspace().getRoot());
+ j.schedule();
+ }
}
protected boolean shouldRun(IArchiveNodeDelta delta) {
Modified:
trunk/archives/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/util/internal/ModelTruezipBridge.java
===================================================================
---
trunk/archives/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/util/internal/ModelTruezipBridge.java 2011-03-28
22:22:02 UTC (rev 30073)
+++
trunk/archives/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/util/internal/ModelTruezipBridge.java 2011-03-28
23:27:51 UTC (rev 30074)
@@ -243,7 +243,7 @@
} else {
parentFile = fsFile;
}
- returnFiles.add(new File(parentFile, new Path(filesetRelative).lastSegment(),
ArchiveDetector.DEFAULT));
+ returnFiles.add(new File(parentFile, new Path(filesetRelative).lastSegment(),
ArchiveDetector.NULL));
}
return (File[]) returnFiles.toArray(new File[returnFiles.size()]);
}
Modified:
trunk/archives/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/util/internal/TrueZipUtil.java
===================================================================
---
trunk/archives/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/util/internal/TrueZipUtil.java 2011-03-28
22:22:02 UTC (rev 30073)
+++
trunk/archives/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/util/internal/TrueZipUtil.java 2011-03-28
23:27:51 UTC (rev 30074)
@@ -167,4 +167,22 @@
}
}
+
+
+ public static boolean javaIODeleteDir(java.io.File dir) {
+ if (dir.isDirectory()) {
+ String[] children = dir.list();
+ for (int i=0; i<children.length; i++) {
+ boolean success = javaIODeleteDir(new java.io.File(dir, children[i]));
+ if (!success) {
+ return false;
+ }
+ }
+ }
+
+ // The directory is now empty so delete it
+ return dir.delete();
+ }
+
+
}
Show replies by date