295614 - directly update persistence.xml when generating entities. Also added the "Update..." option to the persisted state of the wizard.
diff --git a/jpa/plugins/org.eclipse.jpt.gen/META-INF/MANIFEST.MF b/jpa/plugins/org.eclipse.jpt.gen/META-INF/MANIFEST.MF
index 7af207d..fd2313c 100644
--- a/jpa/plugins/org.eclipse.jpt.gen/META-INF/MANIFEST.MF
+++ b/jpa/plugins/org.eclipse.jpt.gen/META-INF/MANIFEST.MF
@@ -13,6 +13,7 @@
org.eclipse.jdt.core;bundle-version="[3.4.0,4.0.0)",
org.eclipse.jpt.utility;bundle-version="[1.2.0,2.0.0)",
org.eclipse.jpt.db;bundle-version="[1.2.0,2.0.0)",
+ org.eclipse.jpt.core;bundle-version="[2.2.0,2.4.0)",
org.eclipse.core.resources;bundle-version="[3.4.0,4.0.0)",
org.eclipse.jface.text;bundle-version="[3.4.0,4.0.0)",
org.apache.commons.collections;bundle-version="3.2.0",
diff --git a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/ORMGenCustomizer.java b/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/ORMGenCustomizer.java
index 6d25a39..cb9ef35 100644
--- a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/ORMGenCustomizer.java
+++ b/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/ORMGenCustomizer.java
@@ -26,7 +26,6 @@
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jpt.db.Column;
-import org.eclipse.jpt.db.ForeignKey;
import org.eclipse.jpt.db.Schema;
import org.eclipse.jpt.db.Table;
import org.eclipse.jpt.gen.internal.util.DTPUtil;
@@ -95,6 +94,8 @@
private Map<String, String> mProps = new java.util.HashMap<String, String>();
private transient DatabaseAnnotationNameBuilder databaseAnnotationNameBuilder = DatabaseAnnotationNameBuilder.Default.INSTANCE;
+
+ private boolean mUpdatePersistenceXml = true;
//-----------------------------------------
//---- abstract methods
@@ -572,6 +573,7 @@
mTableNames = customizer.mTableNames;
mAssociations = customizer.mAssociations;
mProps = customizer.mProps;
+ mUpdatePersistenceXml = customizer.mUpdatePersistenceXml;
if( mSchema == null )
return;
@@ -809,4 +811,10 @@
}
} );
}
+ public boolean shouldUpdatePersistenceXml() {
+ return mUpdatePersistenceXml;
+ }
+ public void setShouldUpdatePersistenceXml(boolean updatePersistenceXml) {
+ this.mUpdatePersistenceXml = updatePersistenceXml;
+ }
}
diff --git a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/PackageGenerator2.java b/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/PackageGenerator2.java
index 3bad3d6..894eda9 100644
--- a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/PackageGenerator2.java
+++ b/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/PackageGenerator2.java
@@ -39,6 +39,11 @@
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jpt.core.JpaProject;
+import org.eclipse.jpt.core.context.persistence.ClassRef;
+import org.eclipse.jpt.core.context.persistence.Persistence;
+import org.eclipse.jpt.core.context.persistence.PersistenceUnit;
+import org.eclipse.jpt.core.resource.xml.JpaXmlResource;
import org.eclipse.jpt.gen.internal.util.CompilationUnitModifier;
import org.eclipse.jpt.gen.internal.util.FileUtil;
import org.eclipse.jpt.gen.internal.util.UrlUtil;
@@ -51,8 +56,8 @@
public class PackageGenerator2 {
private static final String LOGGER_NAME = "org.eclipse.jpt.entities.gen.log"; //$NON-NLS-1$
- private IJavaProject javaProject;
- private ORMGenCustomizer customizer ;
+ private JpaProject jpaProject;
+ private ORMGenCustomizer customizer;
private static OverwriteConfirmer overwriteConfirmer = null;
static public void setOverwriteConfirmer(OverwriteConfirmer confirmer){
@@ -64,13 +69,13 @@
* @param copyJdbcDrive
* @throws Exception
*/
- static public void generate(IJavaProject jpaProject, ORMGenCustomizer customizer, IProgressMonitor monitor ) throws CoreException {
+ static public void generate(JpaProject jpaProject, ORMGenCustomizer customizer, IProgressMonitor monitor ) throws CoreException {
PackageGenerator2 generator = new PackageGenerator2();
generator.setProject(jpaProject);
generator.setCustomizer(customizer);
try {
- generator.doGenerate( monitor);
+ generator.doGenerate(monitor);
} catch (Exception e) {
throw new CoreException(new Status(IStatus.ERROR, JptGenPlugin.PLUGIN_ID, JptGenMessages.Error_Generating_Entities, e));
}
@@ -84,19 +89,19 @@
this.customizer = customizer2;
}
- private void setProject(IJavaProject proj ){
- this.javaProject = proj;
+ private void setProject(JpaProject proj ){
+ this.jpaProject = proj;
}
- protected void doGenerate( IProgressMonitor monitor ) throws Exception {
+ protected void doGenerate(IProgressMonitor monitor ) throws Exception {
generateInternal( monitor );
}
- protected void generateInternal( IProgressMonitor progress) throws Exception {
+ protected void generateInternal(IProgressMonitor progress) throws Exception {
File templDir = prepareTemplatesFolder();
List<String> genClasses = new java.util.ArrayList<String>();
- List<String> tableNames = customizer.getGenTableNames();
+ List<String> tableNames = this.customizer.getGenTableNames();
/* .java per table, persistence.xml, refresh package folder */
String taskName = NLS.bind(JptGenMessages.EntityGenerator_taskName, "Total "+ tableNames.size() + 2);//$NON-NLS-1$
@@ -121,8 +126,47 @@
genClasses.add(table.getQualifiedCompositeKeyClassName());
}
}
+
+ //update persistence.xml
+ if (this.customizer.shouldUpdatePersistenceXml()) {
+ updatePersistenceXml(genClasses);
+ }
progress.done();
}
+ private void updatePersistenceXml(List<String> genClasses) {
+ JpaXmlResource resource = jpaProject.getPersistenceXmlResource();
+ if (resource == null) {
+ //the resource would only be null if the persistence.xml file had an invalid content type,
+ //do not attempt to update
+ return;
+ }
+
+ Persistence persistence = jpaProject.getRootContextNode().getPersistenceXml().getPersistence();
+ if (persistence == null) {
+ //invalid content, do not attempt to update
+ return;
+ }
+
+ PersistenceUnit persistenceUnit;
+ //create a persistence unit if one doesn't already exist
+ if (persistence.persistenceUnitsSize()== 0){
+ persistenceUnit = persistence.addPersistenceUnit();
+ persistenceUnit.setName(jpaProject.getName());
+ }
+ else {
+ //we only support one persistence unit - take the first one
+ persistenceUnit = persistence.persistenceUnits().next();
+ }
+
+ for (Iterator<String> stream = genClasses.iterator(); stream.hasNext();){
+ String className = stream.next();
+ if (!persistenceUnit.mappingFileRefsContaining(className).hasNext()
+ && !persistenceUnit.specifiesPersistentType(className)){
+ ClassRef classRef = persistenceUnit.addSpecifiedClassRef();
+ classRef.setClassName(className);
+ }
+ }
+ }
private File prepareTemplatesFolder() throws IOException, Exception,
CoreException {
@@ -240,7 +284,7 @@
/*use CompilationUnitModifier instead of calling WideEnv.getEnv().setFileContent
* so that if the unit is up to date if it is used before file change
* notifications are delivered (see EJB3ImportSchemaWizard.updateExistingDomainClass for example)*/
- IJavaProject project = javaProject.getJavaProject();
+ IJavaProject project = jpaProject.getJavaProject();
CompilationUnitModifier modifier = new CompilationUnitModifier(project, className);
modifier.setJavaSource(fileContent);
modifier.save();
@@ -251,7 +295,7 @@
}
public IFolder getJavaPackageFolder(ORMGenTable table, IProgressMonitor monitor) throws CoreException {
- IPackageFragmentRoot root = getDefaultJavaSrouceLocation ( javaProject , table.getSourceFolder()) ;
+ IPackageFragmentRoot root = getDefaultJavaSrouceLocation ( getJavaProject() , table.getSourceFolder()) ;
String packageName = table.getPackage();
if( packageName==null ) packageName ="";
IPackageFragment packageFragment = root.getPackageFragment(packageName);
@@ -261,6 +305,10 @@
return (IFolder)packageFragment.getResource();
}
+ private IJavaProject getJavaProject(){
+ return this.jpaProject.getJavaProject();
+ }
+
private IPackageFragmentRoot getDefaultJavaSrouceLocation(IJavaProject jproject, String sourceFolder){
IPackageFragmentRoot defaultSrcPath = null;
if (jproject != null) {
diff --git a/jpa/plugins/org.eclipse.jpt.ui/property_files/jpt_ui_entity_gen.properties b/jpa/plugins/org.eclipse.jpt.ui/property_files/jpt_ui_entity_gen.properties
index 8d053c2..9fd1fa8 100644
--- a/jpa/plugins/org.eclipse.jpt.ui/property_files/jpt_ui_entity_gen.properties
+++ b/jpa/plugins/org.eclipse.jpt.ui/property_files/jpt_ui_entity_gen.properties
@@ -35,7 +35,7 @@
GenerateEntitiesWizard_tableSelectPage_selectTable=Select Tables
GenerateEntitiesWizard_tableSelectPage_chooseEntityTable=Select tables to generate entities from.
-GenerateEntitiesWizard_tableSelectPage_synchronizeClasses=Synchronize classes listed in persistence.xml
+GenerateEntitiesWizard_tableSelectPage_updatePersistenceXml=Update class list in persistence.xml
GenerateEntitiesWizard_tableSelectPage_tables=&Tables:
GenerateEntitiesWizard_tableSelectPage_tableColumn=Table
GenerateEntitiesWizard_tableSelectPage_Restore_Defaults=Restore Defaults
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/gen/GenerateEntitiesFromSchemaWizard.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/gen/GenerateEntitiesFromSchemaWizard.java
index 1123503..db7cf08 100644
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/gen/GenerateEntitiesFromSchemaWizard.java
+++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/gen/GenerateEntitiesFromSchemaWizard.java
@@ -13,7 +13,6 @@
import java.io.File;
import java.io.IOException;
-import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IResourceRuleFactory;
@@ -37,8 +36,6 @@
import org.eclipse.jpt.core.JpaPlatform;
import org.eclipse.jpt.core.JpaProject;
import org.eclipse.jpt.core.JptCorePlugin;
-import org.eclipse.jpt.core.context.persistence.PersistenceXml;
-import org.eclipse.jpt.core.internal.synch.SynchronizeClassesJob;
import org.eclipse.jpt.db.Column;
import org.eclipse.jpt.db.ConnectionProfile;
import org.eclipse.jpt.db.ForeignKey;
@@ -51,7 +48,6 @@
import org.eclipse.jpt.ui.JptUiPlugin;
import org.eclipse.jpt.ui.internal.JptUiIcons;
import org.eclipse.jpt.ui.internal.JptUiMessages;
-import org.eclipse.jpt.utility.internal.CollectionTools;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
@@ -81,8 +77,6 @@
private ORMGenCustomizer customizer = null;
- private boolean synchronizePersistenceXml;
-
private PromptJPAProjectWizardPage projectPage;
private TablesSelectorWizardPage tablesSelectorPage;
@@ -201,36 +195,17 @@
public boolean performFinish() {
if( this.jpaProject == null )
return true;
-
try {
this.customizer.setDatabaseAnnotationNameBuilder( buildDatabaseAnnotationNameBuilder() );
this.customizer.save();
} catch (IOException e) {
JptUiPlugin.log(e);
}
-
- this.synchronizePersistenceXml = this.tablesSelectorPage.synchronizePersistenceXml();
-
if(shouldShowOverwriteWarning())
PackageGenerator2.setOverwriteConfirmer( new OverwriteConfirmer());
-
- WorkspaceJob genEntitiesJob = new GenerateEntitiesJob( this.jpaProject, getCustomizer() );
- WorkspaceJob synchClassesJob = null;
- if (synchronizePersistenceXml()) {
- // we currently only support *one* persistence.xml file per project
- PersistenceXml persistenceXml = jpaProject.getRootContextNode().getPersistenceXml();
- if (persistenceXml != null) {
- // TODO casting to IFile - just trying to get rid of all compiler errors for now
- synchClassesJob = new SynchronizeClassesJob((IFile) persistenceXml.getResource());
- }
- }
-
+ WorkspaceJob genEntitiesJob = new GenerateEntitiesJob( this.jpaProject, getCustomizer());
genEntitiesJob.schedule();
- if (synchClassesJob != null) {
- synchClassesJob.schedule();
- }
-
return true;
}
@@ -250,7 +225,7 @@
@Override
public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException {
try{
- PackageGenerator2.generate(jpaProject.getJavaProject(),this.customizer, monitor);
+ PackageGenerator2.generate(jpaProject,this.customizer, monitor);
}catch(OperationCanceledException e){
//user canceled generation
}
@@ -520,10 +495,6 @@
return getJpaProject().getDefaultDbSchema() ;
}
- public boolean synchronizePersistenceXml() {
- return this.synchronizePersistenceXml;
- }
-
public void init(IWorkbench workbench, IStructuredSelection selection) {
Object sel = selection.getFirstElement();
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/gen/JptUiEntityGenMessages.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/gen/JptUiEntityGenMessages.java
index b5c1c33..a064959 100644
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/gen/JptUiEntityGenMessages.java
+++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/gen/JptUiEntityGenMessages.java
@@ -28,7 +28,7 @@
public static String GenerateEntitiesWizard_selectJPAProject_msg;
public static String GenerateEntitiesWizard_tableSelectPage_selectTable;
public static String GenerateEntitiesWizard_tableSelectPage_chooseEntityTable;
- public static String GenerateEntitiesWizard_tableSelectPage_synchronizeClasses;
+ public static String GenerateEntitiesWizard_tableSelectPage_updatePersistenceXml;
public static String GenerateEntitiesWizard_tableSelectPage_tables;
public static String GenerateEntitiesWizard_tableSelectPage_tableColumn;
//Database connection group
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/gen/TablesSelectorWizardPage.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/gen/TablesSelectorWizardPage.java
index 4b5fb95..5191f12 100644
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/gen/TablesSelectorWizardPage.java
+++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/gen/TablesSelectorWizardPage.java
@@ -73,10 +73,11 @@
private JpaProject jpaProject;
private Schema schema = null;
private ORMGenCustomizer customizer = null;
- private boolean synchronizePersistenceXml = true;
+ private boolean updatePersistenceXml = true;
private DatabaseGroup databaseGroup;
private CheckboxTableViewer tableTable;
+ private Button updatePersistenceXmlCheckBox;
TablesSelectorWizardPage(JpaProject jpaProject ) {
super("TablesSelectorWizardPage"); //$NON-NLS-1$
@@ -135,18 +136,18 @@
//Filler column
new Label( composite, SWT.NONE);
- final Button synchronizeClassesCheckBox = new Button(composite, SWT.CHECK);
- synchronizeClassesCheckBox.setText(JptUiEntityGenMessages.GenerateEntitiesWizard_tableSelectPage_synchronizeClasses );
- synchronizeClassesCheckBox.setSelection(true);
- synchronizeClassesCheckBox.addSelectionListener(new SelectionListener() {
+ this.updatePersistenceXmlCheckBox = new Button(composite, SWT.CHECK);
+ this.updatePersistenceXmlCheckBox.setText(JptUiEntityGenMessages.GenerateEntitiesWizard_tableSelectPage_updatePersistenceXml );
+ this.updatePersistenceXmlCheckBox.setSelection(shouldUpdatePersistenceXml());
+ this.updatePersistenceXmlCheckBox.addSelectionListener(new SelectionListener() {
public void widgetDefaultSelected(SelectionEvent e) {}
public void widgetSelected(SelectionEvent e) {
- setSynchronizePersistenceXml(synchronizeClassesCheckBox.getSelection());
+ setShouldUpdatePersistenceXml(updatePersistenceXmlCheckBox.getSelection());
}
});
- fillColumns( synchronizeClassesCheckBox, 2);
+ fillColumns( this.updatePersistenceXmlCheckBox, 2);
//Filler column
@@ -161,8 +162,8 @@
if( customizer.getFile().exists() ){
customizer.getFile().delete();
}
- updateTablesSelector( databaseGroup.getSelectedSchema() );
deselectAllTables();
+ restoreUpdatePersistenceXmlDefault();
}
}
@@ -171,13 +172,17 @@
gridData.horizontalAlignment = SWT.END;
restoreBtn.setLayoutData(gridData);
-
+ this.updateSelectionState(databaseGroup.getSelectedSchema());
this.getHelpSystem().setHelp(this.tableTable.getControl(), JpaHelpContextIds.DIALOG_GENERATE_ENTITIES_TABLES);
-
this.setControl(composite);
this.setPageComplete(true);
}
+
+ private void restoreUpdatePersistenceXmlDefault(){
+ updatePersistenceXmlCheckBox.setSelection(true);
+ setShouldUpdatePersistenceXml(true);
+ }
@Override
public void dispose() {
@@ -215,7 +220,7 @@
// store the *identifier* in the JPA project, since it gets put in Java annotations
jpaProject.setUserOverrideDefaultSchema(schema.getIdentifier());
setSchema( schema );
- updateTablesSelector(schema);
+ updateSelectionState(schema);
}
doStatusUpdate();
}
@@ -225,12 +230,13 @@
return dbGroup;
}
- boolean synchronizePersistenceXml() {
- return this.synchronizePersistenceXml;
+ private boolean shouldUpdatePersistenceXml() {
+ return this.updatePersistenceXml;
}
- private void setSynchronizePersistenceXml(boolean synchronizePersistenceXml){
- this.synchronizePersistenceXml = synchronizePersistenceXml;
+ private void setShouldUpdatePersistenceXml(boolean updatePersistenceXml){
+ this.updatePersistenceXml = updatePersistenceXml;
+ doStatusUpdate();
}
private void selectAllTables(){
@@ -299,7 +305,6 @@
}
});
- updateTablesSelector( databaseGroup.getSelectedSchema() );
createButtonComposite(parent);
initTablesSelectionControl(possibleTables());
}
@@ -414,6 +419,7 @@
}
customizer.setSchema(schema);
customizer.setTableNames(tableNames);
+ customizer.setShouldUpdatePersistenceXml(updatePersistenceXml);
monitor.done();
}
});
@@ -471,7 +477,7 @@
}
- private void updateTablesSelector(final Schema schema) {
+ private void updateSelectionState(final Schema schema) {
if(schema ==null)
return;
this.jpaProject.setUserOverrideDefaultSchema( schema.getIdentifier());
@@ -482,7 +488,7 @@
GenerateEntitiesFromSchemaWizard wizard = (GenerateEntitiesFromSchemaWizard) getWizard();
customizer = wizard.createORMGenCustomizer( schema );
- if( tableTable!=null && customizer != null ){
+ if( this.tableTable!=null && this.updatePersistenceXmlCheckBox!=null && customizer != null ){
restoreWizardState();
}
doStatusUpdate();
@@ -491,6 +497,7 @@
private boolean restoreWizardState(){
boolean pageComplete = false;
+ this.updatePersistenceXmlCheckBox.setSelection(this.customizer.shouldUpdatePersistenceXml());
List<String> preSelectedTableNames = this.customizer.getTableNames();
if(preSelectedTableNames!=null && preSelectedTableNames.size()>0) {
Set<String> set = new HashSet<String>();