Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpfullbright2010-08-04 14:25:03 +0000
committerpfullbright2010-08-04 14:25:03 +0000
commitf7bbabc72cca336c6b102086dfb02c6ff5c96bdc (patch)
tree0f09e7af8ca1cb05111bf623bbcaeab5d7f3e61b
parentd04f66bae432f5a4703ad62076e056471ff66548 (diff)
downloadwebtools.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
-rw-r--r--jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/jface/XmlMappingFileViewerFilter.java73
-rw-r--r--jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/entity/EntityClassWizardPage.java93
-rw-r--r--jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/entity/EntityWizard.java52
-rw-r--r--jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/entity/data/model/EntityDataModelProvider.java150
-rw-r--r--jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/wizards/entity/data/operation/NewEntityClassOperation.java23
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);
}

Back to the top