From 89789d96d6eecb2dc293f98a10a8ddc564ab9216 Mon Sep 17 00:00:00 2001 From: Xavier Coulon Date: Tue, 6 Jan 2015 15:17:18 +0100 Subject: [PATCH] JBIDE-18690 - ResourceException while deleting project --- .../domain/JaxrsMetamodelLocator.java | 4 ++ .../jaxrs/ui/cnf/UriPathTemplateCategory.java | 6 +- .../UriMappingsContentProviderTestCase.java | 69 +++++++++++++++++++ 3 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 tests/org.jboss.tools.ws.jaxrs.ui.test/src/org/jboss/tools/ws/jaxrs/ui/cnf/UriMappingsContentProviderTestCase.java diff --git a/plugins/org.jboss.tools.ws.jaxrs.core/src/org/jboss/tools/ws/jaxrs/core/metamodel/domain/JaxrsMetamodelLocator.java b/plugins/org.jboss.tools.ws.jaxrs.core/src/org/jboss/tools/ws/jaxrs/core/metamodel/domain/JaxrsMetamodelLocator.java index 06dec964f..adfa83816 100644 --- a/plugins/org.jboss.tools.ws.jaxrs.core/src/org/jboss/tools/ws/jaxrs/core/metamodel/domain/JaxrsMetamodelLocator.java +++ b/plugins/org.jboss.tools.ws.jaxrs.core/src/org/jboss/tools/ws/jaxrs/core/metamodel/domain/JaxrsMetamodelLocator.java @@ -110,6 +110,10 @@ public static JaxrsMetamodel get(final IJavaProject javaProject, final boolean f } final IProject project = javaProject.getProject(); + if(!project.isAccessible()) { + Logger.debug("Returning a null metamodel because the underlying project does not exist or is not opened."); + return null; + } final JaxrsMetamodel metamodel = (JaxrsMetamodel) project.getSessionProperty( JaxrsMetamodel.METAMODEL_QUALIFIED_NAME); if (metamodel == null && force) { diff --git a/plugins/org.jboss.tools.ws.jaxrs.ui/src/org/jboss/tools/ws/jaxrs/ui/cnf/UriPathTemplateCategory.java b/plugins/org.jboss.tools.ws.jaxrs.ui/src/org/jboss/tools/ws/jaxrs/ui/cnf/UriPathTemplateCategory.java index 306cef0a3..10becca35 100644 --- a/plugins/org.jboss.tools.ws.jaxrs.ui/src/org/jboss/tools/ws/jaxrs/ui/cnf/UriPathTemplateCategory.java +++ b/plugins/org.jboss.tools.ws.jaxrs.ui/src/org/jboss/tools/ws/jaxrs/ui/cnf/UriPathTemplateCategory.java @@ -111,6 +111,10 @@ public final IJavaProject getJavaProject() { return javaProject; } + /** + * Returns {@code true} if the {@link IJaxrsMetamodel} associated with the {@link IJavaProject} given in the constructor has {@link IJaxrsElement}. Returns {@code false} otherwise (or if there is no {@link IJaxrsMetamodel} for the current {@link IJavaProject}). + * @param element not used (mandatory to implement the {@link ITreeContentProvider#hasChildren(Object)} method. + */ @Override public boolean hasChildren(Object element) { try { @@ -123,7 +127,7 @@ public boolean hasChildren(Object element) { } catch (CoreException e) { Logger.error("Failed to retrieve JAX-RS Metamodel in project '" + javaProject.getElementName() + "'", e); } - return true; + return false; } /** diff --git a/tests/org.jboss.tools.ws.jaxrs.ui.test/src/org/jboss/tools/ws/jaxrs/ui/cnf/UriMappingsContentProviderTestCase.java b/tests/org.jboss.tools.ws.jaxrs.ui.test/src/org/jboss/tools/ws/jaxrs/ui/cnf/UriMappingsContentProviderTestCase.java new file mode 100644 index 000000000..0a1e578d1 --- /dev/null +++ b/tests/org.jboss.tools.ws.jaxrs.ui.test/src/org/jboss/tools/ws/jaxrs/ui/cnf/UriMappingsContentProviderTestCase.java @@ -0,0 +1,69 @@ +/** + * + */ +package org.jboss.tools.ws.jaxrs.ui.cnf; + +import org.eclipse.core.resources.IProject; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.jdt.core.IJavaProject; +import org.jboss.tools.ws.jaxrs.core.internal.metamodel.domain.JaxrsMetamodel; +import org.jboss.tools.ws.jaxrs.core.junitrules.JaxrsMetamodelMonitor; +import org.jboss.tools.ws.jaxrs.core.junitrules.WorkspaceSetupRule; +import org.junit.Assert; +import org.junit.Before; +import org.junit.ClassRule; +import org.junit.Rule; +import org.junit.Test; + +import static org.hamcrest.Matchers.equalTo; + +/** + * @author xcoulon + * + */ +public class UriMappingsContentProviderTestCase { + + @ClassRule + public static WorkspaceSetupRule workspaceSetupRule = new WorkspaceSetupRule("org.jboss.tools.ws.jaxrs.tests.sampleproject"); + + @Rule + public JaxrsMetamodelMonitor metamodelMonitor = new JaxrsMetamodelMonitor("org.jboss.tools.ws.jaxrs.tests.sampleproject", true); + + private JaxrsMetamodel metamodel = null; + + private IProject project = null; + + private IJavaProject javaProject = null; + + @Before + public void setup() throws CoreException { + this.metamodel = metamodelMonitor.getMetamodel(); + this.project = metamodel.getProject(); + this.javaProject = metamodel.getJavaProject(); + } + + @Test + // @see https://issues.jboss.org/browse/JBIDE-18690 + public void shouldReturnTrueWhenProjectExists() { + // given + final UriMappingsContentProvider uriMappingsContentProvider = new UriMappingsContentProvider(); + final UriPathTemplateCategory uriPathTemplateCategory = new UriPathTemplateCategory(uriMappingsContentProvider, javaProject); + // when + boolean hasChildren = uriMappingsContentProvider.hasChildren(uriPathTemplateCategory); + // then + Assert.assertThat(hasChildren, equalTo(true)); + } + + @Test + // @see https://issues.jboss.org/browse/JBIDE-18690 + public void shouldNotFailWhenProjectIsDeleted() throws CoreException { + // given + final UriMappingsContentProvider uriMappingsContentProvider = new UriMappingsContentProvider(); + final UriPathTemplateCategory uriPathTemplateCategory = new UriPathTemplateCategory(uriMappingsContentProvider, javaProject); + // when + project.delete(true, null); + boolean hasChildren = uriMappingsContentProvider.hasChildren(uriPathTemplateCategory); + // then + Assert.assertThat(hasChildren, equalTo(false)); + } +}