Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JpaProject.java3
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/PersistenceUnitContext.java3
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/synch/SynchronizeClassesJob.java1
-rw-r--r--jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/generic/EntitiesGenerator.java67
4 files changed, 44 insertions, 30 deletions
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JpaProject.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JpaProject.java
index 789167e137..e168e0165a 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JpaProject.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JpaProject.java
@@ -196,6 +196,9 @@ public class JpaProject extends JpaEObject implements IJpaProject
}
};
+ if (this.project == null) {
+ throw new IllegalStateException("Project can not be null when the Resynch Job is built");
+ }
job.setRule(this.project);
return job;
}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/PersistenceUnitContext.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/PersistenceUnitContext.java
index becb682b17..d2f38cdc05 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/PersistenceUnitContext.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/PersistenceUnitContext.java
@@ -37,6 +37,7 @@ import org.eclipse.jpt.core.internal.validation.JpaValidationMessages;
import org.eclipse.jpt.utility.internal.CollectionTools;
import org.eclipse.jpt.utility.internal.HashBag;
import org.eclipse.jpt.utility.internal.StringTools;
+import org.eclipse.jpt.utility.internal.iterators.CloneIterator;
import org.eclipse.jpt.utility.internal.iterators.CompositeIterator;
import org.eclipse.jpt.utility.internal.iterators.EmptyIterator;
import org.eclipse.jpt.utility.internal.iterators.TransformationIterator;
@@ -191,7 +192,7 @@ public class PersistenceUnitContext extends BaseContext
}
protected Iterator<JavaPersistentType> listedJavaPersistentTypes() {
- return new TransformationIterator<JavaClassRef, JavaPersistentType>(persistenceUnit.getClasses().iterator()) {
+ return new TransformationIterator<JavaClassRef, JavaPersistentType>(new CloneIterator<JavaClassRef>(persistenceUnit.getClasses())) {
@Override
protected JavaPersistentType transform(JavaClassRef next) {
return javaPersistentTypeFor(next);
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/synch/SynchronizeClassesJob.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/synch/SynchronizeClassesJob.java
index 36cf1455d1..5c77aaea8d 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/synch/SynchronizeClassesJob.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/synch/SynchronizeClassesJob.java
@@ -50,6 +50,7 @@ public class SynchronizeClassesJob extends Job
public SynchronizeClassesJob(IFile file) {
super(JptCoreMessages.SYNCHRONIZE_CLASSES_JOB);
+ setRule(file.getProject());
persistenceXmlFile = file;
}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/generic/EntitiesGenerator.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/generic/EntitiesGenerator.java
index 05fe71c01b..ee8cbe0ed2 100644
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/generic/EntitiesGenerator.java
+++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/generic/EntitiesGenerator.java
@@ -9,16 +9,19 @@
*******************************************************************************/
package org.eclipse.jpt.ui.internal.generic;
+import java.lang.reflect.InvocationTargetException;
import java.util.Collection;
-
-import org.eclipse.core.resources.IWorkspaceRunnable;
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.NullProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.window.Window;
import org.eclipse.jface.wizard.WizardDialog;
@@ -38,6 +41,9 @@ import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.actions.WorkspaceModifyOperation;
+import org.eclipse.ui.progress.IProgressService;
/**
* EntitiesGenerator
@@ -75,7 +81,7 @@ public class EntitiesGenerator
dialog.create();
int returnCode = dialog.open();
if (returnCode == Window.OK) {
- IWorkspaceRunnable runnable = new GenerateEntitiesRunnable(
+ WorkspaceJob runnable = new GenerateEntitiesRunnable(
wizard.getPackageGeneratorConfig(),
wizard.getEntityGeneratorConfig(),
wizard.getSelectedTables(),
@@ -83,12 +89,8 @@ public class EntitiesGenerator
project,
new OverwriteConfirmer(this.getCurrentShell())
);
- try {
- // TODO pass in real ProgressMonitor
- ResourcesPlugin.getWorkspace().run(runnable, new NullProgressMonitor());
- } catch (CoreException ex) {
- throw new RuntimeException(ex);
- }
+
+ runnable.schedule();
}
}
@@ -98,7 +100,7 @@ public class EntitiesGenerator
// ********** runnable **********
- static class GenerateEntitiesRunnable implements IWorkspaceRunnable {
+ static class GenerateEntitiesRunnable extends WorkspaceJob {
private final PackageGenerator.Config packageConfig;
private final EntityGenerator.Config entityConfig;
private final Collection selectedTables;
@@ -114,31 +116,31 @@ public class EntitiesGenerator
IJpaProject project,
EntityGenerator.OverwriteConfirmer overwriteConfirmer
) {
- super();
+ super("Generating Entities");
this.packageConfig = packageConfig;
this.entityConfig = entityConfig;
this.selectedTables = selectedTables;
this.synchronizePersistenceXml = synchronizePersistenceXml;
this.overwriteConfirmer = overwriteConfirmer;
this.project = project;
+ setRule(project.getProject());
}
- public void run(IProgressMonitor monitor) throws CoreException {
- monitor.beginTask("", 1000);
- try {
- PackageGenerator.generateEntities(this.packageConfig, this.entityConfig, this.selectedTables, this.overwriteConfirmer, monitor);
- if (synchronizePersistenceXml) {
- // we currently only support *one* persistence.xml file per project
- IJpaFile resource = project.getPlatform().validPersistenceXmlFiles().next();
- if (resource != null) {
- SynchronizeClassesJob job = new SynchronizeClassesJob(resource.getFile());
- job.schedule();
- }
+ @Override
+ public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException {
+ PackageGenerator.generateEntities(this.packageConfig, this.entityConfig, this.selectedTables, this.overwriteConfirmer, monitor);
+ //force resourceChangeEvents to be posted before synchronizing persistence.xml
+ ResourcesPlugin.getWorkspace().checkpoint(false);
+ if (synchronizePersistenceXml) {
+ // we currently only support *one* persistence.xml file per project
+ IJpaFile resource = project.getPlatform().validPersistenceXmlFiles().next();
+ if (resource != null) {
+ SynchronizeClassesJob job = new SynchronizeClassesJob(resource.getFile());
+ job.schedule();
}
- } catch (OperationCanceledException ex) {
- // fall through and tell monitor we are done
}
- monitor.done();
+
+ return Status.OK_STATUS;
}
}
@@ -155,7 +157,7 @@ public class EntitiesGenerator
this.shell = shell;
}
- public boolean overwrite(String className) {
+ public boolean overwrite(final String className) {
if (this.overwriteAll) {
return true;
}
@@ -166,8 +168,15 @@ public class EntitiesGenerator
}
private boolean promptUser(String className) {
- OverwriteConfirmerDialog dialog = new OverwriteConfirmerDialog(this.shell, className);
- if (dialog.open() == Window.CANCEL) {
+
+ final OverwriteConfirmerDialog dialog = new OverwriteConfirmerDialog(this.shell, className);
+ //get on the UI thread synchronously, need feedback before continuing
+ shell.getDisplay().syncExec(new Runnable() {
+ public void run() {
+ dialog.open();
+ }
+ });
+ if (dialog.getReturnCode() == Window.CANCEL) {
throw new OperationCanceledException();
}
if (dialog.yes()) {

Back to the top