468081 : simplify persistence.xml lookup

Change-Id: I2ae1fe85eb02b329bb1b2206b0041483cc43248d
Signed-off-by: Fred Bricon <fbricon@gmail.com>
diff --git a/org.eclipse.m2e.wtp.jpa/src/org/eclipse/m2e/wtp/jpa/internal/configurators/JpaProjectConfigurator.java b/org.eclipse.m2e.wtp.jpa/src/org/eclipse/m2e/wtp/jpa/internal/configurators/JpaProjectConfigurator.java
index d050e17..7d6c1dc 100644
--- a/org.eclipse.m2e.wtp.jpa/src/org/eclipse/m2e/wtp/jpa/internal/configurators/JpaProjectConfigurator.java
+++ b/org.eclipse.m2e.wtp.jpa/src/org/eclipse/m2e/wtp/jpa/internal/configurators/JpaProjectConfigurator.java
@@ -27,7 +27,6 @@
 import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.SubProgressMonitor;
 import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jpt.common.core.resource.ResourceLocator;
 import org.eclipse.jpt.common.core.resource.xml.JptXmlResource;
 import org.eclipse.jpt.jpa.core.JpaPlatform;
 import org.eclipse.jpt.jpa.core.JpaProject;
@@ -89,7 +88,7 @@
 		IProject project = request.getProject();
 		MavenProject mavenProject = request.getMavenProject();
 
-		IFile persistenceXml = getPersistenceXml(project);
+		IFile persistenceXml = getPersistenceXml(request.getMavenProjectFacade());
 		if (persistenceXml == null || !persistenceXml.exists()) {
 			//No persistence.xml => not a JPA project 
 			return;
@@ -113,10 +112,9 @@
 		} 
 	}
 
-	private IFile getPersistenceXml(IProject project) {
-		ResourceLocator resourceLocator = new MavenResourceLocator();
-		
-		IPath path = resourceLocator.getWorkspacePath(project, new Path("META-INF/persistence.xml")); //$NON-NLS-1$
+	private IFile getPersistenceXml(IMavenProjectFacade mavenProjectFacade) {
+		MavenResourceLocator resourceLocator = new MavenResourceLocator();
+		IPath path = resourceLocator.lookupMavenResources(mavenProjectFacade, new Path("META-INF/persistence.xml")); //$NON-NLS-1$
 		IFile persistenceXml = null;
 		if (path != null) {
 			persistenceXml = ResourcesPlugin.getWorkspace().getRoot().getFile(path);		
diff --git a/org.eclipse.m2e.wtp.jpa/src/org/eclipse/m2e/wtp/jpa/internal/configurators/MavenResourceLocator.java b/org.eclipse.m2e.wtp.jpa/src/org/eclipse/m2e/wtp/jpa/internal/configurators/MavenResourceLocator.java
index d362423..e94d879 100644
--- a/org.eclipse.m2e.wtp.jpa/src/org/eclipse/m2e/wtp/jpa/internal/configurators/MavenResourceLocator.java
+++ b/org.eclipse.m2e.wtp.jpa/src/org/eclipse/m2e/wtp/jpa/internal/configurators/MavenResourceLocator.java
@@ -35,10 +35,13 @@
 import org.eclipse.m2e.core.MavenPlugin;
 import org.eclipse.m2e.core.internal.IMavenConstants;
 import org.eclipse.m2e.core.project.IMavenProjectFacade;
+import org.eclipse.osgi.util.NLS;
 import org.eclipse.wst.common.componentcore.ModuleCoreNature;
 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.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Maven resource Locator
@@ -48,6 +51,8 @@
 @SuppressWarnings("restriction")
 public class MavenResourceLocator implements ResourceLocator {
 
+	private static final Logger LOG = LoggerFactory.getLogger(MavenResourceLocator.class);
+
 	private static IPath META_INF_PATH = new Path("META-INF"); //$NON-NLS-1$
 	
 	private static final IProjectFacet WEB_FACET = ProjectFacetsManager.getProjectFacet("jst.web"); //$NON-NLS-1$
@@ -100,37 +105,19 @@
 	}
 
 	/**
-	 * Returns the resource path from Maven's resource folders mapped to theP
+	 * Returns the resource path from Maven's resource folders mapped to the
 	 * runtimePath.
 	 */
 	@Override
 	public IPath getWorkspacePath(IProject project, IPath runtimePath) {
-		IPath resourcePath = null;
 		IMavenProjectFacade mavenProjectFacade = getMavenProjectFacade(project);
-		if (mavenProjectFacade != null 	&& mavenProjectFacade.getMavenProject() != null) {
-			List<Resource> resources = mavenProjectFacade.getMavenProject().getBuild().getResources();
-			for (Resource resourceFolder : resources) {
-				resourcePath = getFilePath(getWorkspaceRelativePath(resourceFolder), runtimePath);
-				if (resourcePath != null) {
-					break;
-				}
-			}
+		IPath resourcePath = null;
+		if (mavenProjectFacade != null) {
+			resourcePath = lookupMavenResources(mavenProjectFacade, runtimePath);
 		} else {
 			// Maven project not loaded yet, we fallback on the JavaProject
 			// source folders lookup
-			IJavaProject javaProject = JavaCore.create(project);
-			try {
-				for (IClasspathEntry entry : javaProject.getRawClasspath()) {
-					if (IClasspathEntry.CPE_SOURCE == entry.getEntryKind()) {
-						resourcePath = getFilePath(entry.getPath(), runtimePath);
-						if (resourcePath != null) {
-							break;
-						}
-					}
-				}
-			} catch (JavaModelException e) {
-				e.printStackTrace();
-			}
+			resourcePath = lookupProjectSources(project, runtimePath);
 		}
 
 		if (resourcePath == null) {
@@ -139,6 +126,42 @@
 		return resourcePath;
 	}
 
+	IPath lookupMavenResources(IMavenProjectFacade mavenProjectFacade, IPath runtimePath) {
+		if (mavenProjectFacade == null) {
+			return null;
+		}
+		IPath resourcePath = null;
+		if (mavenProjectFacade.getMavenProject() != null) {
+			List<Resource> resources = mavenProjectFacade.getMavenProject().getBuild().getResources();
+			for (Resource resourceFolder : resources) {
+				resourcePath = getFilePath(getWorkspaceRelativePath(resourceFolder), runtimePath);
+				if (resourcePath != null) {
+					return resourcePath;
+				}
+			}
+		}
+
+		return lookupProjectSources(mavenProjectFacade.getProject(), runtimePath);
+	}
+
+	IPath lookupProjectSources(IProject project, IPath runtimePath) {
+		IJavaProject javaProject = JavaCore.create(project);
+		IPath resourcePath = null;
+		try {
+			for (IClasspathEntry entry : javaProject.getRawClasspath()) {
+				if (IClasspathEntry.CPE_SOURCE == entry.getEntryKind()) {
+					resourcePath = getFilePath(entry.getPath(), runtimePath);
+					if (resourcePath != null) {
+						return resourcePath;
+					}
+				}
+			}
+		} catch (JavaModelException e) {
+			LOG.error(NLS.bind("An error occured while looking up {0} sources",project),e); //$NON-NLS-1$
+		}
+		return null;
+	}
+
 	private IPath getFilePath(IPath containerPath, IPath runtimePath) {
 		if (containerPath != null) {
 			final IWorkspaceRoot root = ResourcesPlugin.getWorkspace()