diff options
author | pfullbright | 2010-08-04 14:25:03 +0000 |
---|---|---|
committer | pfullbright | 2010-08-04 14:25:03 +0000 |
commit | f7bbabc72cca336c6b102086dfb02c6ff5c96bdc (patch) | |
tree | 0f09e7af8ca1cb05111bf623bbcaeab5d7f3e61b | |
parent | d04f66bae432f5a4703ad62076e056471ff66548 (diff) | |
download | webtools.dali-f7bbabc72cca336c6b102086dfb02c6ff5c96bdc.tar.gz webtools.dali-f7bbabc72cca336c6b102086dfb02c6ff5c96bdc.tar.xz webtools.dali-f7bbabc72cca336c6b102086dfb02c6ff5c96bdc.zip |
Refactored entity wizard to work without module facet and with project as source folder
5 files changed, 297 insertions, 94 deletions
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/jface/XmlMappingFileViewerFilter.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/jface/XmlMappingFileViewerFilter.java index 9edf44a651..223843ab87 100644 --- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/jface/XmlMappingFileViewerFilter.java +++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/jface/XmlMappingFileViewerFilter.java @@ -9,13 +9,11 @@ *******************************************************************************/ package org.eclipse.jpt.ui.internal.jface; +import org.eclipse.core.resources.IContainer; 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.CoreException; -import org.eclipse.jdt.core.IClasspathEntry; -import org.eclipse.jdt.core.IJavaProject; -import org.eclipse.jdt.core.JavaModelException; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerFilter; import org.eclipse.jpt.core.JpaFile; @@ -30,59 +28,50 @@ import org.eclipse.jpt.ui.JptUiPlugin; * content type. * @see JptCorePlugin.MAPPING_FILE_CONTENT_TYPE */ -public class XmlMappingFileViewerFilter extends ViewerFilter { - - private final IJavaProject javaProject; - +public class XmlMappingFileViewerFilter + extends ViewerFilter { + private final JpaProject jpaProject; + public XmlMappingFileViewerFilter(JpaProject jpaProject) { super(); this.jpaProject = jpaProject; - this.javaProject = jpaProject.getJavaProject(); - } - - /** - * Determines whether the given file (an XML file) is a JPA mapping - * descriptor file. - */ - private boolean isMappingFile(IFile file) { - JpaFile jpaFile = this.jpaProject.getJpaFile(file); - return jpaFile != null ? jpaFile.getContentType().isKindOf(JptCorePlugin.MAPPING_FILE_CONTENT_TYPE): false; } - + + @Override - public boolean select(Viewer viewer, - Object parentElement, - Object element) { - + public boolean select(Viewer viewer, Object parentElement, Object element) { + if (element instanceof IFile) { return isMappingFile((IFile) element); } - else if (element instanceof IFolder) { - IFolder folder = (IFolder) element; - - try { - for (IClasspathEntry entry : this.javaProject.getRawClasspath()) { - if (entry.getEntryKind() == IClasspathEntry.CPE_SOURCE) { - if (entry.getPath().isPrefixOf(folder.getFullPath().makeRelative())) { - for (IResource resource : folder.members()) { - if (select(viewer, folder, resource)) { - return true; - } - } + else if (element instanceof IContainer) { + IContainer container = (IContainer) element; + IProject project = this.jpaProject.getProject(); + if (JptCorePlugin.getResourceLocator(project).acceptResourceLocation(project, container)) { + try { + for (IResource resource : container.members()) { + if (select(viewer, container, resource)) { + return true; } } } - } - catch (JavaModelException e) { - JptUiPlugin.log(e.getStatus()); - } - catch (CoreException e) { - JptUiPlugin.log(e.getStatus()); + catch (CoreException ce) { + // fall through + JptUiPlugin.log(ce); + } } } - return false; } + + /** + * Determines whether the given file (an XML file) is a JPA mapping + * descriptor file. + */ + private boolean isMappingFile(IFile file) { + JpaFile jpaFile = this.jpaProject.getJpaFile(file); + return jpaFile != null ? jpaFile.getContentType().isKindOf(JptCorePlugin.MAPPING_FILE_CONTENT_TYPE): false; + } } diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/entity/EntityClassWizardPage.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/entity/EntityClassWizardPage.java index b7a9505797..149aa20fce 100644 --- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/entity/EntityClassWizardPage.java +++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/entity/EntityClassWizardPage.java @@ -14,19 +14,26 @@ package org.eclipse.jpt.ui.internal.wizards.entity; import java.io.File; import org.eclipse.core.resources.IContainer; 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.CoreException; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Status; +import org.eclipse.jdt.core.IJavaProject; +import org.eclipse.jdt.core.IPackageFragmentRoot; +import org.eclipse.jdt.core.JavaCore; +import org.eclipse.jem.util.emf.workbench.ProjectUtilities; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.TreeSelection; +import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerFilter; import org.eclipse.jface.window.Window; +import org.eclipse.jpt.core.JpaFacet; import org.eclipse.jpt.core.JpaProject; import org.eclipse.jpt.core.JptCorePlugin; +import org.eclipse.jpt.core.internal.utility.jdt.JDTTools; import org.eclipse.jpt.core.resource.xml.JpaXmlResource; import org.eclipse.jpt.ui.JptUiPlugin; import org.eclipse.jpt.ui.internal.JpaHelpContextIds; @@ -34,6 +41,7 @@ import org.eclipse.jpt.ui.internal.jface.XmlMappingFileViewerFilter; import org.eclipse.jpt.ui.internal.wizards.entity.data.model.IEntityDataModelProperties; import org.eclipse.jpt.utility.internal.ArrayTools; import org.eclipse.jst.j2ee.internal.common.operations.INewJavaClassDataModelProperties; +import org.eclipse.jst.j2ee.internal.plugin.J2EEUIMessages; import org.eclipse.jst.j2ee.internal.wizard.NewJavaClassWizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; @@ -50,28 +58,24 @@ import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.dialogs.ElementTreeSelectionDialog; +import org.eclipse.ui.dialogs.ISelectionStatusValidator; import org.eclipse.ui.help.IWorkbenchHelpSystem; import org.eclipse.ui.model.WorkbenchContentProvider; import org.eclipse.ui.model.WorkbenchLabelProvider; import org.eclipse.wst.common.frameworks.datamodel.IDataModel; -import org.eclipse.wst.common.project.facet.core.IFacetedProject; -import org.eclipse.wst.common.project.facet.core.IProjectFacet; -import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager; +import org.eclipse.wst.common.frameworks.internal.plugin.WTPCommonPlugin; -public class EntityClassWizardPage extends NewJavaClassWizardPage{ +public class EntityClassWizardPage + extends NewJavaClassWizardPage { - private static final String JPA_FACET = JptCorePlugin.FACET_ID; private static final String META_INF = "META-INF";//$NON-NLS-1$ private static final String EMPTY = "";//$NON-NLS-1$ private static final char SLASH = '/'; private static final String SINGLE_TABLE = "SINGLE_TABLE";//$NON-NLS-1$ private static final String TABLE_PER_CLASS = "TABLE_PER_CLASS";//$NON-NLS-1$ private static final String JOINED = "JOINED";//$NON-NLS-1$ - private static final String[] INHERITANCE_STRATEGIES = new String[] { - EMPTY, - SINGLE_TABLE, - TABLE_PER_CLASS, - JOINED }; + private static final String[] INHERITANCE_STRATEGIES = + new String[] {EMPTY, SINGLE_TABLE, TABLE_PER_CLASS, JOINED }; private Combo inheritanceStrategyCombo; private Button entityButton; private Button mapedAsSuperclassButton; @@ -82,9 +86,11 @@ public class EntityClassWizardPage extends NewJavaClassWizardPage{ private Text ormXmlName; private Button browseButton; - public EntityClassWizardPage(IDataModel model, String pageName, - String pageDesc, String pageTitle, String moduleType) { - super(model, pageName, pageDesc, pageTitle, moduleType); + + public EntityClassWizardPage( + IDataModel model, String pageName, String pageDesc, String pageTitle) { + + super(model, pageName, pageDesc, pageTitle, null); } @@ -134,6 +140,54 @@ public class EntityClassWizardPage extends NewJavaClassWizardPage{ return composite; } + @Override + protected ISelectionStatusValidator getContainerDialogSelectionValidator() { + return new ISelectionStatusValidator() { + public IStatus validate(Object[] selection) { + if (selection != null && selection[0] != null) { + if (selection[0] instanceof IProject) { + IProject project = (IProject) selection[0]; + IJavaProject javaProject = JavaCore.create(project); + for (IPackageFragmentRoot root : JDTTools.getJavaSourceFolders(javaProject)) { + if (project.equals(root.getResource())) { + return WTPCommonPlugin.OK_STATUS; + } + } + } + else { + return WTPCommonPlugin.OK_STATUS; + } + } + return WTPCommonPlugin.createErrorStatus(J2EEUIMessages.CONTAINER_SELECTION_DIALOG_VALIDATOR_MESG); + } + }; + } + + @Override + protected ViewerFilter getContainerDialogViewerFilter() { + return new ViewerFilter() { + @Override + public boolean select(Viewer viewer, Object parent, Object element) { + String projectName = (String) model.getProperty(IEntityDataModelProperties.PROJECT_NAME); + if (element instanceof IProject) { + IProject project = (IProject) element; + return project.getName().equals(projectName); + } + else if (element instanceof IFolder) { + IFolder folder = (IFolder) element; + // only show source folders + IProject project = ProjectUtilities.getProject(projectName); + IJavaProject javaProject = JavaCore.create(project); + for (IPackageFragmentRoot root : JDTTools.getJavaSourceFolders(javaProject)) { + if (folder.equals(root.getResource())) + return true; + } + } + return false; + } + }; + } + /** * Create the inheritance group * @param parent the main composite @@ -321,15 +375,8 @@ public class EntityClassWizardPage extends NewJavaClassWizardPage{ * the project list, <code>false</code> - otherwise. */ @Override - protected boolean isProjectValid(IProject project) { - IProjectFacet jpaFacet = ProjectFacetsManager.getProjectFacet(JPA_FACET); - IFacetedProject fProject = null; - try { - fProject = ProjectFacetsManager.create(project); - } catch (CoreException e) { - return false; - } - return (project.isAccessible() && fProject != null && fProject.hasProjectFacet(jpaFacet)); + protected boolean isProjectValid(IProject project) { + return (project.isAccessible() && JpaFacet.isInstalled(project)); } private class SelectMappingXMLDialog extends ElementTreeSelectionDialog diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/entity/EntityWizard.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/entity/EntityWizard.java index 59fea4ba5c..6a471d13fb 100644 --- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/entity/EntityWizard.java +++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/entity/EntityWizard.java @@ -15,13 +15,16 @@ import static org.eclipse.jst.j2ee.internal.common.operations.INewJavaClassDataM import java.lang.reflect.InvocationTargetException; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.IResource; +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.jdt.core.IJavaElement; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jpt.core.context.JpaContextNode; import org.eclipse.jpt.ui.JptUiPlugin; import org.eclipse.jpt.ui.internal.JptUiIcons; import org.eclipse.jpt.ui.internal.wizards.entity.data.model.EntityDataModelProvider; import org.eclipse.jst.j2ee.internal.plugin.J2EEEditorUtility; -import org.eclipse.jst.j2ee.internal.project.J2EEProjectUtilities; import org.eclipse.ui.INewWizard; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPage; @@ -32,12 +35,12 @@ import org.eclipse.wst.common.frameworks.datamodel.IDataModel; import org.eclipse.wst.common.frameworks.datamodel.IDataModelProvider; import org.eclipse.wst.common.frameworks.internal.datamodel.ui.DataModelWizard; -public class EntityWizard extends DataModelWizard implements INewWizard { - +public class EntityWizard + extends DataModelWizard + implements INewWizard { + + protected String initialProjectName; - private static final String PAGE_ONE = "pageOne"; //$NON-NLS-1$ - private static final String PAGE_TWO = "pageTwo"; //$NON-NLS-1$ - /** * Constructs the Entity wizard * @param model the data model @@ -62,12 +65,12 @@ public class EntityWizard extends DataModelWizard implements INewWizard { protected void doAddPages() { EntityClassWizardPage page1 = new EntityClassWizardPage( getDataModel(), - PAGE_ONE, + "pageOne", EntityWizardMsg.ENTITY_WIZARD_PAGE_DESCRIPTION, - EntityWizardMsg.ENTITY_WIZARD_PAGE_TITLE, - J2EEProjectUtilities.EJB); + EntityWizardMsg.ENTITY_WIZARD_PAGE_TITLE); + page1.setProjectName(this.initialProjectName); addPage(page1); - EntityFieldsWizardPage page2 = new EntityFieldsWizardPage(getDataModel(), PAGE_TWO); + EntityFieldsWizardPage page2 = new EntityFieldsWizardPage(getDataModel(), "pageTwo"); addPage(page2); } @@ -131,7 +134,36 @@ public class EntityWizard extends DataModelWizard implements INewWizard { * @see org.eclipse.ui.IWorkbenchWizard#init(org.eclipse.ui.IWorkbench, org.eclipse.jface.viewers.IStructuredSelection) */ public void init(IWorkbench workbench, IStructuredSelection selection) { + this.initialProjectName = extractProjectName(selection); getDataModel(); } + protected String extractProjectName(IStructuredSelection selection) { + Object selectedObj = selection.getFirstElement(); + if (selectedObj instanceof IResource) { + return ((IResource) selectedObj).getProject().getName(); + } + if (selectedObj instanceof IJavaElement) { + return ((IJavaElement) selectedObj).getJavaProject().getProject().getName(); + } + if (selectedObj instanceof JpaContextNode) { + return ((JpaContextNode) selectedObj).getJpaProject().getProject().getName(); + } + + if (selectedObj instanceof IAdaptable) { + IResource resource = (IResource) ((IAdaptable) selectedObj).getAdapter(IResource.class); + if (resource != null) { + return resource.getProject().getName(); + } + IJavaElement javaElement = (IJavaElement) ((IAdaptable) selectedObj).getAdapter(IJavaElement.class); + if (javaElement != null) { + return javaElement.getJavaProject().getProject().getName(); + } + JpaContextNode node = (JpaContextNode) ((IAdaptable) selectedObj).getAdapter(JpaContextNode.class); + if (node != null) { + return node.getJpaProject().getProject().getName(); + } + } + return null; + } } diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/entity/data/model/EntityDataModelProvider.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/entity/data/model/EntityDataModelProvider.java index cad057b9b6..02f10f9d6f 100644 --- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/entity/data/model/EntityDataModelProvider.java +++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/entity/data/model/EntityDataModelProvider.java @@ -14,25 +14,33 @@ package org.eclipse.jpt.ui.internal.wizards.entity.data.model; import java.util.ArrayList; import java.util.List; import java.util.Set; +import org.eclipse.core.resources.IContainer; +import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IProject; +import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Status; import org.eclipse.jdt.core.IJavaProject; +import org.eclipse.jdt.core.IPackageFragmentRoot; import org.eclipse.jdt.core.IType; import org.eclipse.jdt.core.JavaConventions; import org.eclipse.jdt.core.JavaCore; import org.eclipse.jdt.core.JavaModelException; import org.eclipse.jdt.core.Signature; import org.eclipse.jem.util.emf.workbench.ProjectUtilities; +import org.eclipse.jpt.core.JpaFacet; import org.eclipse.jpt.core.JpaFile; +import org.eclipse.jpt.core.JpaProject; import org.eclipse.jpt.core.JptCorePlugin; import org.eclipse.jpt.ui.JptUiPlugin; import org.eclipse.jpt.ui.internal.wizards.entity.EntityWizardMsg; import org.eclipse.jpt.ui.internal.wizards.entity.data.operation.NewEntityClassOperation; +import org.eclipse.jpt.utility.internal.StringTools; import org.eclipse.jst.j2ee.internal.common.J2EECommonMessages; import org.eclipse.jst.j2ee.internal.common.operations.INewJavaClassDataModelProperties; import org.eclipse.jst.j2ee.internal.common.operations.NewJavaClassDataModelProvider; +import org.eclipse.jst.j2ee.internal.plugin.J2EEPlugin; import org.eclipse.wst.common.frameworks.datamodel.IDataModel; import org.eclipse.wst.common.frameworks.datamodel.IDataModelOperation; import org.eclipse.wst.common.frameworks.datamodel.IDataModelProvider; @@ -83,7 +91,13 @@ public class EntityDataModelProvider extends NewJavaClassDataModelProvider imple */ @Override public Object getDefaultProperty(String propertyName) { - if (propertyName.equals(INHERITANCE)) { + // overridden + if (propertyName.equals(SOURCE_FOLDER)) { + IContainer container = getDefaultJavaSourceContainer(); + return (container == null) ? null : container.getFullPath().toString(); + } + + else if (propertyName.equals(INHERITANCE)) { return Boolean.FALSE; } else if (propertyName.equals(ENTITY)) { return Boolean.TRUE; @@ -117,10 +131,40 @@ public class EntityDataModelProvider extends NewJavaClassDataModelProvider imple } @Override + protected IFolder getDefaultJavaSourceFolder() { + return null; + } + + protected IContainer getDefaultJavaSourceContainer() { + JpaProject jpaProject = getTargetJpaProject(); + if (jpaProject == null) { + return null; + } + IJavaProject javaProject = jpaProject.getJavaProject(); + try { + for (IPackageFragmentRoot pfr : javaProject.getPackageFragmentRoots()) { + if (pfr.getKind() == IPackageFragmentRoot.K_SOURCE) { + return (IContainer) pfr.getUnderlyingResource(); + } + } + } + catch (JavaModelException jme) { + // fall through + JptUiPlugin.log(jme); + } + return null; + } + + @Override public boolean propertySet(String propertyName, Object propertyValue) { boolean ok = super.propertySet(propertyName, propertyValue); - if (propertyName.equals(PROJECT_NAME) || propertyName.equals(XML_SUPPORT)) { - this.model.notifyPropertyChange(XML_NAME, IDataModel.VALID_VALUES_CHG); + if (ok) { + if (COMPONENT_NAME.equals(propertyName) || PROJECT_NAME.equals(propertyName)) { + this.model.notifyPropertyChange(SOURCE_FOLDER, IDataModel.DEFAULT_CHG); + } + if (PROJECT_NAME.equals(propertyName) || XML_SUPPORT.equals(propertyName)) { + this.model.notifyPropertyChange(XML_NAME, IDataModel.VALID_VALUES_CHG); + } } return ok; } @@ -146,6 +190,48 @@ public class EntityDataModelProvider extends NewJavaClassDataModelProvider imple return result; } + @Override + protected IStatus validateJavaSourceFolder(String containerFullPath) { + // Ensure that the source folder path is not empty + if (containerFullPath == null || containerFullPath.length() == 0) { + String msg = J2EECommonMessages.ERR_JAVA_CLASS_FOLDER_NAME_EMPTY; + return WTPCommonPlugin.createErrorStatus(msg); + } + // Ensure that the source folder path is absolute + else if (!new Path(containerFullPath).isAbsolute()) { + String msg = J2EECommonMessages.ERR_JAVA_CLASS_FOLDER_NOT_ABSOLUTE; + return WTPCommonPlugin.createErrorStatus(msg); + } + IProject project = getTargetProject(); + // Ensure project is not closed + if (project == null) { + String msg = J2EECommonMessages.ERR_JAVA_CLASS_FOLDER_NOT_EXIST; + return WTPCommonPlugin.createErrorStatus(msg); + } + // Ensure project is accessible. + if (!project.isAccessible()) { + String msg = J2EECommonMessages.ERR_JAVA_CLASS_FOLDER_NOT_EXIST; + return WTPCommonPlugin.createErrorStatus(msg); + } + // Ensure the project is a java project. + try { + if (!project.hasNature(JavaCore.NATURE_ID)) { + String msg = J2EECommonMessages.ERR_JAVA_CLASS_NOT_JAVA_PROJECT; + return WTPCommonPlugin.createErrorStatus(msg); + } + } catch (CoreException e) { + J2EEPlugin.logError(e); + } + // Ensure the selected folder is a valid java source folder for the component + IContainer container = getJavaSourceContainer(); + if (container == null || (! container.getFullPath().equals(new Path(containerFullPath)))) { + String msg = J2EECommonMessages.getResourceString(J2EECommonMessages.ERR_JAVA_CLASS_FOLDER_NOT_SOURCE, new String[]{containerFullPath}); + return WTPCommonPlugin.createErrorStatus(msg); + } + // Valid source is selected + return WTPCommonPlugin.OK_STATUS; + } + /** * This method is intended for internal use only. It will be used to validate the correctness of entity package * in accordance with Java convention requirements. This method will accept a null parameter. @@ -187,12 +273,13 @@ public class EntityDataModelProvider extends NewJavaClassDataModelProvider imple if (getBooleanProperty(XML_SUPPORT)) { String projectName = this.model.getStringProperty(PROJECT_NAME); IProject project = ProjectUtilities.getProject(projectName); - if (project != null) { + JpaFile jpaFile = null; + if (project != null && ! StringTools.stringIsEmpty(xmlName)) { //TODO need to check content type as well since user can type in a file name, should have a different error message for invalid content type - JpaFile jpaFile = JptCorePlugin.getJpaFile(project, new Path(xmlName)); + jpaFile = JptCorePlugin.getJpaFile(project, new Path(xmlName)); if (jpaFile == null) { return new Status( - IStatus.ERROR, JptUiPlugin.PLUGIN_ID, + IStatus.ERROR, JptUiPlugin.PLUGIN_ID, EntityWizardMsg.INVALID_XML_NAME); } } @@ -200,7 +287,6 @@ public class EntityDataModelProvider extends NewJavaClassDataModelProvider imple return Status.OK_STATUS; } - /** * This method is intended for internal use only. It will be used to validate the entity fields * list to ensure there are not any duplicates. This method will accept a null parameter. @@ -359,5 +445,53 @@ public class EntityDataModelProvider extends NewJavaClassDataModelProvider imple } } return false; - } + } + + protected JpaProject getTargetJpaProject() { + IProject project = getTargetProject(); + if (project != null && JpaFacet.isInstalled(project)) { + return JptCorePlugin.getJpaProject(project); + } + return null; + } + + protected IContainer getJavaSourceContainer() { + String containerFullPath = getStringProperty(SOURCE_FOLDER); + JpaProject jpaProject = getTargetJpaProject(); + if (jpaProject == null) { + return null; + } + IJavaProject javaProject = jpaProject.getJavaProject(); + try { + for (IPackageFragmentRoot pfr : javaProject.getPackageFragmentRoots()) { + if (pfr.getKind() == IPackageFragmentRoot.K_SOURCE) { + IContainer container = (IContainer) pfr.getUnderlyingResource(); + if (container.getFullPath().equals(new Path(containerFullPath))) { + return container; + } + } + } + } + catch (JavaModelException jme) { + // fall through + JptUiPlugin.log(jme); + } + return null; + } + + @Override + protected IPackageFragmentRoot getJavaPackageFragmentRoot() { + JpaProject jpaProject = getTargetJpaProject(); + if (jpaProject != null) { + IJavaProject javaProject = jpaProject.getJavaProject(); + // Return the source folder for the java project of the selected project + if (javaProject != null) { + IContainer sourceContainer = getJavaSourceContainer(); + if (sourceContainer != null) { + return javaProject.getPackageFragmentRoot(sourceContainer); + } + } + } + return null; + } } diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/entity/data/operation/NewEntityClassOperation.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/entity/data/operation/NewEntityClassOperation.java index 8fcdd0351a..8372ad2368 100644 --- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/entity/data/operation/NewEntityClassOperation.java +++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/entity/data/operation/NewEntityClassOperation.java @@ -15,6 +15,7 @@ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.net.URL; import org.eclipse.core.commands.ExecutionException; +import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IMarker; @@ -50,6 +51,7 @@ import org.eclipse.jpt.core.context.InheritanceType; import org.eclipse.jpt.core.context.MappedSuperclass; import org.eclipse.jpt.core.context.orm.EntityMappings; import org.eclipse.jpt.core.context.orm.OrmPersistentType; +import org.eclipse.jpt.core.internal.utility.PlatformTools; import org.eclipse.jpt.core.resource.orm.OrmFactory; import org.eclipse.jpt.core.resource.persistence.PersistenceFactory; import org.eclipse.jpt.core.resource.persistence.XmlJavaClassRef; @@ -142,7 +144,7 @@ public class NewEntityClassOperation extends AbstractDataModelOperation { */ public IStatus doExecute(IProgressMonitor monitor, IAdaptable info) throws ExecutionException { // Create source folder if it does not exist - createJavaSourceFolder(); + createJavaSourceContainer(); // Create java package if it does not exist IPackageFragment pack = createJavaPackage(); // Generate filter class using templates @@ -341,7 +343,7 @@ public class NewEntityClassOperation extends AbstractDataModelOperation { } /** - * This method will return the java source folder as specified in the java + * This method will return the java source container as specified in the java * class data model. It will create the java source folder if it does not * exist. This method may return null. * @@ -351,26 +353,25 @@ public class NewEntityClassOperation extends AbstractDataModelOperation { * * @return IFolder the java source folder */ - protected final IFolder createJavaSourceFolder() { + protected final IContainer createJavaSourceContainer() { // Get the source folder name from the data model - String folderFullPath = model.getStringProperty(INewJavaClassDataModelProperties.SOURCE_FOLDER); + String containerFullPath = model.getStringProperty(INewJavaClassDataModelProperties.SOURCE_FOLDER); IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); - IFolder folder = root.getFolder(new Path(folderFullPath)); - // If folder does not exist, create the folder with the specified path - if (!folder.exists()) { + IContainer container = PlatformTools.getContainer(new Path(containerFullPath)); + // If container does not exist, create the folder with the specified path + if (! container.exists()) { try { - folder.create(true, true, null); + ((IFolder) container).create(true, true, null); } catch (CoreException e) { JptUiPlugin.log(e); } } // Return the source folder - return folder; + return container; } @Override - public IStatus execute(IProgressMonitor monitor, IAdaptable info) - throws ExecutionException { + public IStatus execute(IProgressMonitor monitor, IAdaptable info) throws ExecutionException { return doExecute(monitor, info); } |