[Bug 228777] - Mapping File wizard: no defaults based on selection selected
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/operations/OrmFileCreationDataModelProvider.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/operations/OrmFileCreationDataModelProvider.java
index 9a76167..1dfeb70 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/operations/OrmFileCreationDataModelProvider.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/operations/OrmFileCreationDataModelProvider.java
@@ -122,7 +122,17 @@
@Override
public DataModelPropertyDescriptor[] getValidPropertyDescriptors(String propertyName) {
- if (propertyName.equals(DEFAULT_ACCESS)) {
+ if (propertyName.equals(PROJECT_NAME)) {
+ return CollectionTools.array(
+ new TransformationIterator<IProject, DataModelPropertyDescriptor>(jpaIProjects()) {
+ @Override
+ protected DataModelPropertyDescriptor transform(IProject next) {
+ return new DataModelPropertyDescriptor(next.getName());
+ }
+ },
+ new DataModelPropertyDescriptor[0]);
+ }
+ else if (propertyName.equals(DEFAULT_ACCESS)) {
DataModelPropertyDescriptor[] accessTypes = new DataModelPropertyDescriptor[3];
accessTypes[0] = accessPropertyDescriptor(null);
accessTypes[1] = accessPropertyDescriptor(AccessType.FIELD);
@@ -145,7 +155,10 @@
@Override
public DataModelPropertyDescriptor getPropertyDescriptor(String propertyName) {
- if (propertyName.equals(DEFAULT_ACCESS)) {
+ if (propertyName.equals(PROJECT_NAME)) {
+ return new DataModelPropertyDescriptor(getStringProperty(PROJECT_NAME));
+ }
+ else if (propertyName.equals(DEFAULT_ACCESS)) {
return accessPropertyDescriptor((AccessType) getProperty(DEFAULT_ACCESS));
}
else if (propertyName.equals(PERSISTENCE_UNIT)) {
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/orm/MappingFileWizard.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/orm/MappingFileWizard.java
index a567760..04e1983 100644
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/orm/MappingFileWizard.java
+++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/orm/MappingFileWizard.java
@@ -12,10 +12,22 @@
import java.lang.reflect.InvocationTargetException;
import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.Path;
+import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.IPackageFragment;
+import org.eclipse.jdt.core.IPackageFragmentRoot;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jem.util.emf.workbench.ProjectUtilities;
import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jpt.core.JptCorePlugin;
+import org.eclipse.jpt.core.context.JpaContextNode;
+import org.eclipse.jpt.core.context.persistence.PersistenceUnit;
import org.eclipse.jpt.core.internal.operations.OrmFileCreationDataModelProperties;
import org.eclipse.jpt.core.internal.operations.OrmFileCreationDataModelProvider;
import org.eclipse.jpt.ui.JptUiPlugin;
@@ -61,7 +73,164 @@
}
public void init(IWorkbench workbench, IStructuredSelection selection) {
+ // check for project, source folder, persistence unit?
+ if (selection == null || selection.isEmpty()) {
+ return;
+ }
+ Object firstSelection = selection.getFirstElement();
+
+ PersistenceUnit pUnit = extractPersistenceUnit(firstSelection);
+ IFolder sourceFolder = extractSourceFolder(pUnit, firstSelection);
+ IProject project = extractProject(pUnit, sourceFolder, firstSelection);
+
+ if (project != null) {
+ getDataModel().setStringProperty(OrmFileCreationDataModelProperties.PROJECT_NAME, project.getName());
+ }
+ if (sourceFolder != null) {
+ getDataModel().setStringProperty(OrmFileCreationDataModelProperties.SOURCE_FOLDER, sourceFolder.getFullPath().toPortableString());
+ }
+ if (pUnit != null) {
+ getDataModel().setBooleanProperty(OrmFileCreationDataModelProperties.ADD_TO_PERSISTENCE_UNIT, true);
+ getDataModel().setStringProperty(OrmFileCreationDataModelProperties.PERSISTENCE_UNIT, pUnit.getName());
+ }
+ }
+
+ private PersistenceUnit extractPersistenceUnit(Object selection) {
+ if (selection instanceof PersistenceUnit) {
+ return (PersistenceUnit) selection;
+ }
+ PersistenceUnit pUnit = null;
+ if (selection instanceof JpaContextNode) {
+ try {
+ pUnit = ((JpaContextNode) selection).getPersistenceUnit();
+ }
+ catch (Exception e) { /* do nothing, just continue */ }
+ }
+ if (pUnit == null && selection instanceof IAdaptable) {
+ pUnit = (PersistenceUnit) ((IAdaptable) selection).getAdapter(PersistenceUnit.class);
+
+ }
+ return pUnit;
+ }
+
+ private IFolder extractSourceFolder(PersistenceUnit pUnit, Object selection) {
+ IJavaProject javaProject = null;
+ IFolder srcFolder = null;
+ if (pUnit != null) {
+ javaProject = pUnit.getJpaProject().getJavaProject();
+ srcFolder = findSourceFolder(javaProject, pUnit.getResource());
+ if (srcFolder != null) {
+ return srcFolder;
+ }
+
+ }
+ if (selection instanceof IResource) {
+ javaProject = JavaCore.create(((IResource) selection).getProject());
+ if (javaProject.exists()) {
+ srcFolder = findSourceFolder(javaProject, (IResource) selection);
+ if (srcFolder != null) {
+ return srcFolder;
+ }
+ }
+ }
+
+ if (selection instanceof IAdaptable) {
+ IResource resource = (IResource) ((IAdaptable) selection).getAdapter(IResource.class);
+ if (resource != null) {
+ javaProject = JavaCore.create((resource).getProject());
+ if (javaProject.exists()) {
+ srcFolder = findSourceFolder(javaProject, resource);
+ if (srcFolder != null) {
+ return srcFolder;
+ }
+ }
+ }
+ }
+ return null;
+ }
+
+ private IFolder findSourceFolder(IJavaProject javaProject, IResource resource) {
+ if (JptCorePlugin.getJpaProject(javaProject.getProject()) == null) {
+ // not even a jpa project
+ return null;
+ }
+ while (resource != null && ! (resource instanceof IFolder)) {
+ resource = resource.getParent();
+ }
+ if (resource == null) {
+ return null;
+ }
+ IFolder folder = (IFolder) resource;
+ try {
+ IPackageFragmentRoot packageFragmentRoot = null;
+ while (packageFragmentRoot == null && folder != null) {
+ packageFragmentRoot = javaProject.findPackageFragmentRoot(folder.getFullPath());
+ if (packageFragmentRoot == null) {
+ IPackageFragment packageFragment = javaProject.findPackageFragment(folder.getFullPath());
+ if (packageFragment != null) {
+ packageFragmentRoot = (IPackageFragmentRoot) packageFragment.getAncestor(IJavaElement.PACKAGE_FRAGMENT_ROOT);
+ }
+ }
+ if (packageFragmentRoot == null) {
+ try {
+ folder = (IFolder) folder.getParent();
+ }
+ catch (ClassCastException cce) {
+ folder = null;
+ }
+ }
+ }
+ if (packageFragmentRoot == null) {
+ return null;
+ }
+ if (packageFragmentRoot.getKind() == IPackageFragmentRoot.K_SOURCE) {
+ return (IFolder) packageFragmentRoot.getResource();
+ }
+ }
+ catch (JavaModelException jme) { /* do nothing, return null */ }
+ return null;
+ }
+
+ private IProject extractProject(PersistenceUnit pUnit, IFolder sourceFolder, Object selection) {
+ if (pUnit != null) {
+ return pUnit.getJpaProject().getProject();
+ }
+ if (sourceFolder != null) {
+ return sourceFolder.getProject();
+ }
+
+ IProject project = null;
+ if (selection instanceof IResource) {
+ project = ((IResource) selection).getProject();
+ }
+ if (project == null && selection instanceof IJavaElement) {
+ project = ((IJavaElement) selection).getJavaProject().getProject();
+ }
+ if (project == null && selection instanceof JpaContextNode) {
+ project = ((JpaContextNode) selection).getJpaProject().getProject();
+ }
+ if (project == null && selection instanceof IAdaptable) {
+ project = (IProject) ((IAdaptable) selection).getAdapter(IProject.class);
+ if (project == null) {
+ IResource resource = (IResource) ((IAdaptable) selection).getAdapter(IResource.class);
+ if (resource != null) {
+ project = resource.getProject();
+ }
+ }
+ if (project == null) {
+ IJavaElement javaElement = (IJavaElement) ((IAdaptable) selection).getAdapter(IJavaElement.class);
+ if (javaElement != null) {
+ project = javaElement.getJavaProject().getProject();
+ }
+ }
+ }
+
+ if (project != null && JptCorePlugin.getJpaProject(project) != null) {
+ return project;
+ }
+
+ return null;
}
protected void postPerformFinish() throws InvocationTargetException {
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/orm/MappingFileWizardPage.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/orm/MappingFileWizardPage.java
index a8f1b4b..787762c 100644
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/orm/MappingFileWizardPage.java
+++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/orm/MappingFileWizardPage.java
@@ -10,12 +10,10 @@
*******************************************************************************/
package org.eclipse.jpt.ui.internal.wizards.orm;
-import java.util.Iterator;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jdt.core.IPackageFragmentRoot;
@@ -28,15 +26,11 @@
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.jface.window.Window;
-import org.eclipse.jpt.core.JptCorePlugin;
import org.eclipse.jpt.core.internal.operations.OrmFileCreationDataModelProperties;
import org.eclipse.jpt.ui.JptUiPlugin;
import org.eclipse.jpt.ui.internal.JptUiMessages;
-import org.eclipse.jpt.utility.internal.CollectionTools;
-import org.eclipse.jpt.utility.internal.iterators.FilteringIterator;
import org.eclipse.jst.j2ee.internal.project.J2EEProjectUtilities;
import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
@@ -54,7 +48,6 @@
import org.eclipse.ui.model.WorkbenchLabelProvider;
import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
import org.eclipse.wst.common.frameworks.internal.datamodel.ui.DataModelWizardPage;
-import org.eclipse.wst.common.project.facet.core.FacetedProjectFramework;
public class MappingFileWizardPage extends DataModelWizardPage
implements OrmFileCreationDataModelProperties
@@ -124,20 +117,7 @@
data.widthHint = 300;
data.horizontalSpan = 1;
projectNameCombo.setLayoutData(data);
- projectNameCombo.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- super.widgetSelected(e);
- // update source folder
-// if (folderText != null) {
-// String sourceFolder = getDefaultJavaSourceFolder(ProjectUtilities.getProject(projectNameCombo.getText())).getFullPath().toOSString();
-// if (sourceFolder != null)
-// folderText.setText(sourceFolder);
-// }
- }
- });
synchHelper.synchCombo(projectNameCombo, PROJECT_NAME, null);
- fillProjects();
new Label(composite, SWT.NONE);
sourceFolderLabel = new Label(composite, SWT.NONE);
@@ -232,27 +212,6 @@
return composite;
}
- private void fillProjects() {
- projectNameCombo.setItems(new String[0]);
- for (Iterator<IProject> stream = jpaProjects(); stream.hasNext(); ) {
- projectNameCombo.add(stream.next().getName());
- }
- }
-
- private Iterator<IProject> jpaProjects() {
- return new FilteringIterator<IProject, IProject>(CollectionTools.iterator(ProjectUtilities.getAllProjects())) {
- @Override
- protected boolean accept(IProject project) {
- try {
- return FacetedProjectFramework.hasProjectFacet(project, JptCorePlugin.FACET_ID);
- }
- catch (CoreException ce) {
- return false;
- }
- }
- };
- }
-
private void handleSourceFolderButtonPressed() {
ISelectionStatusValidator validator = getSourceFolderDialogSelectionValidator();
ViewerFilter filter = getSourceFolderDialogViewerFilter();