[327369] EAR Library Directory field should not have preceding slash
diff --git a/features/org.eclipse.jst.enterprise_ui.feature.patch/buildnotes_org.eclipse.jst.enterprise_ui.feature.patch.html b/features/org.eclipse.jst.enterprise_ui.feature.patch/buildnotes_org.eclipse.jst.enterprise_ui.feature.patch.html index d1d3642..2dd3b39 100644 --- a/features/org.eclipse.jst.enterprise_ui.feature.patch/buildnotes_org.eclipse.jst.enterprise_ui.feature.patch.html +++ b/features/org.eclipse.jst.enterprise_ui.feature.patch/buildnotes_org.eclipse.jst.enterprise_ui.feature.patch.html
@@ -19,6 +19,7 @@ <p>Bug <a href='https://bugs.eclipse.org/326468'>326468</a>. Duplicate accelerator key in new web project wizard</p> <p>Bug <a href='https://bugs.eclipse.org/326549'>326549</a>. Web Service Wizard Can Default to invalid project type</p> <p>Bug <a href='https://bugs.eclipse.org/326963'>326963</a>. NPE when running Servlet on server if servlet-class is not defined</p> +<p>Bug <a href='https://bugs.eclipse.org/327369'>327369</a>. EAR Library Directory field should not have preceding slash</p> </body> </html> \ No newline at end of file
diff --git a/features/org.eclipse.jst.enterprise_ui.feature.patch/feature.properties b/features/org.eclipse.jst.enterprise_ui.feature.patch/feature.properties index 8fc5680..bddd9d2 100644 --- a/features/org.eclipse.jst.enterprise_ui.feature.patch/feature.properties +++ b/features/org.eclipse.jst.enterprise_ui.feature.patch/feature.properties
@@ -34,6 +34,7 @@ Bug https://bugs.eclipse.org/326468 Duplicate accelerator key in new web project wizard\n\ Bug https://bugs.eclipse.org/326549 Web Service Wizard Can Default to invalid project type\n\ Bug https://bugs.eclipse.org/326963 NPE when running Servlet on server if <servlet-class> is not defined\n\ +Bug https://bugs.eclipse.org/327369 EAR Library Directory field should not have preceding slash\n\ \n\ # "copyright" property - text of the "Feature Update Copyright"
diff --git a/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/j2ee/internal/ui/preferences/EarModuleDependenciesPropertyPage.java b/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/j2ee/internal/ui/preferences/EarModuleDependenciesPropertyPage.java index 2817a44..4a5ed7f 100644 --- a/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/j2ee/internal/ui/preferences/EarModuleDependenciesPropertyPage.java +++ b/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/j2ee/internal/ui/preferences/EarModuleDependenciesPropertyPage.java
@@ -17,9 +17,12 @@ import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Path; import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.jface.fieldassist.ControlDecoration; +import org.eclipse.jface.fieldassist.FieldDecorationRegistry; import org.eclipse.jst.j2ee.application.internal.operations.AddReferenceToEnterpriseApplicationDataModelProvider; import org.eclipse.jst.j2ee.application.internal.operations.RemoveReferenceFromEnterpriseApplicationDataModelProvider; import org.eclipse.jst.j2ee.internal.J2EEConstants; @@ -29,11 +32,10 @@ import org.eclipse.jst.j2ee.internal.plugin.J2EEUIMessages; import org.eclipse.jst.j2ee.internal.plugin.J2EEUIPlugin; import org.eclipse.jst.j2ee.internal.project.J2EEProjectUtilities; -import org.eclipse.jst.j2ee.internal.ui.JavaEEComponentDependencyContentProvider; import org.eclipse.jst.j2ee.internal.ui.J2EEModuleDependenciesPropertyPage.ClasspathEntryProxy; +import org.eclipse.jst.j2ee.internal.ui.JavaEEComponentDependencyContentProvider; import org.eclipse.jst.j2ee.model.IEARModelProvider; import org.eclipse.jst.j2ee.model.ModelProviderManager; -import org.eclipse.jst.j2ee.project.EarUtilities; import org.eclipse.jst.j2ee.project.JavaEEProjectUtilities; import org.eclipse.jst.javaee.application.Application; import org.eclipse.jst.jee.project.facet.EarCreateDeploymentFilesDataModelProvider; @@ -68,6 +70,10 @@ AddModuleDependenciesPropertiesPage { private String libDir = null; private Text libDirText; + private ControlDecoration libDirTextErrorDecoration = null; + private static String earDefaultLirDir = new Path(J2EEConstants.EAR_DEFAULT_LIB_DIR).makeRelative().toString(); + boolean previousLibDirIsValid = true; + public EarModuleDependenciesPropertyPage(IProject project, ModuleAssemblyRootPage page) { super(project, page); @@ -84,7 +90,17 @@ } private String loadLibDirString() { - return EarUtilities.getEARLibDir(rootComponent); + String oldLibDir = null; + if(JavaEEProjectUtilities.isJEEComponent(rootComponent, JavaEEProjectUtilities.DD_VERSION) && JavaEEProjectUtilities.isJEEComponent(rootComponent, JavaEEProjectUtilities.FACET_VERSION)) { + final IEARModelProvider earModel = (IEARModelProvider)ModelProviderManager.getModelProvider(project); + Application app = (Application)earModel.getModelObject(); + if(app != null) + oldLibDir = app.getLibraryDirectory(); + } + if(oldLibDir != null) { + return oldLibDir; + } + return earDefaultLirDir; } protected void addLibDirComposite(Composite parent) { @@ -102,8 +118,11 @@ l.setText(Messages.EarModuleDependenciesPropertyPage_LIBDIR); libDirText = new Text(c, SWT.BORDER); GridData gd = new GridData(GridData.FILL_HORIZONTAL); - libDirText.setLayoutData(gd); + gd.horizontalIndent = FieldDecorationRegistry.getDefault().getMaximumDecorationWidth(); libDirText.setText(libDir); + libDirText.setLayoutData(gd); + libDirTextErrorDecoration = new ControlDecoration(libDirText, SWT.TOP | SWT.LEAD); + libDirTextErrorDecoration.hide(); libDirText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { libDirTextModified(); @@ -113,6 +132,34 @@ protected void libDirTextModified() { libDir = libDirText.getText(); + validatelibDirText(); + } + + protected void validatelibDirText() { + if(libDirTextErrorDecoration != null) { + if(!isValidLibDir(libDir)) { + libDirTextErrorDecoration.setImage(FieldDecorationRegistry.getDefault().getFieldDecoration(FieldDecorationRegistry.DEC_ERROR).getImage()); + libDirTextErrorDecoration.setDescriptionText(Messages.EarModuleDependenciesPropertyPage_ERROR_INVALID_LIBDIR); + libDirTextErrorDecoration.show(); + propPage.setValid(false); + propPage.setMessage(Messages.EarModuleDependenciesPropertyPage_ERROR_HOVER_FOR_DETAILS,IStatus.ERROR); + propPage.setErrorMessage(Messages.EarModuleDependenciesPropertyPage_ERROR_HOVER_FOR_DETAILS); + previousLibDirIsValid = false; + } else if(!previousLibDirIsValid){ + previousLibDirIsValid = true; + libDirTextErrorDecoration.setImage(null); + libDirTextErrorDecoration.setDescriptionText(null); + libDirTextErrorDecoration.hide(); + super.verify(); + } + } + } + + private boolean isValidLibDir(String libraryDirectory) { + if(libraryDirectory != null && libraryDirectory.length() > 0 && libraryDirectory.trim().startsWith("/")) { //$NON-NLS-1$ + return false; + } + return true; } protected IDataModelOperation generateEARDDOperation() { @@ -200,7 +247,7 @@ } private void updateLibDir() { - if (!libDir.equals(J2EEConstants.EAR_DEFAULT_LIB_DIR)) { + if (!libDir.equals(earDefaultLirDir)) { IVirtualFile vFile = rootComponent.getRootFolder().getFile(new Path(J2EEConstants.APPLICATION_DD_URI)); if (!vFile.exists()) { if (!MessageDialog.openQuestion(null, @@ -214,7 +261,7 @@ final IEARModelProvider earModel = (IEARModelProvider)ModelProviderManager.getModelProvider(project); Application app = (Application)earModel.getModelObject(); String oldLibDir = app.getLibraryDirectory(); - if (libDir.equals(J2EEConstants.EAR_DEFAULT_LIB_DIR)) { + if (libDir.equals(earDefaultLirDir)) { if(oldLibDir != null) { earModel.modify(new Runnable() { public void run() { @@ -264,4 +311,16 @@ return super.canRemove(selectedObject) && !(selectedObject instanceof JavaEEComponentDependencyContentProvider.ConsumedClasspathEntryProxy); } + @Override + protected void verify() { + super.verify(); + validatelibDirText(); + } + + @Override + public void performDefaults() { + libDir = loadLibDirString(); + libDirText.setText(libDir); + super.performDefaults(); + } }
diff --git a/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/j2ee/internal/ui/preferences/Messages.java b/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/j2ee/internal/ui/preferences/Messages.java index 3feab37..407ccfb 100644 --- a/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/j2ee/internal/ui/preferences/Messages.java +++ b/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/j2ee/internal/ui/preferences/Messages.java
@@ -9,6 +9,8 @@ public static String EarModuleDependenciesPropertyPage_2; public static String EarModuleDependenciesPropertyPage_3; public static String EarModuleDependenciesPropertyPage_LIBDIR; + public static String EarModuleDependenciesPropertyPage_ERROR_INVALID_LIBDIR; + public static String EarModuleDependenciesPropertyPage_ERROR_HOVER_FOR_DETAILS; public static String EarModuleDependencyPageProvider_0; public static String WebDependencyPropertyPage_0; public static String WebDependencyPropertyPage_1;
diff --git a/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/j2ee/internal/ui/preferences/messages.properties b/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/j2ee/internal/ui/preferences/messages.properties index 1ec9c38..e6f065a 100644 --- a/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/j2ee/internal/ui/preferences/messages.properties +++ b/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/j2ee/internal/ui/preferences/messages.properties
@@ -3,6 +3,8 @@ EarModuleDependenciesPropertyPage_2=Edit Ear Module Reference... EarModuleDependenciesPropertyPage_3=Define packaging structure for this Java EE Application project. EarModuleDependenciesPropertyPage_LIBDIR=EAR &library directory: +EarModuleDependenciesPropertyPage_ERROR_INVALID_LIBDIR=Library directory value cannot begin with a slash ('/') character. Specify as relative path to the root of the project. +EarModuleDependenciesPropertyPage_ERROR_HOVER_FOR_DETAILS=Library directory cannot begin with slash. Hover over error below for details. EarModuleDependencyPageProvider_0=Ear Module Assembly WebDependencyPropertyPage_0=Add Web Library Reference... WebDependencyPropertyPage_1=Define packaging structure for this Java EE Web Application project.