package org.jboss.tools.playground.easymport.jee.servlet; import java.io.File; import java.io.InputStream; import java.util.Collections; import java.util.Set; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; 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.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.jface.wizard.IWizard; import org.eclipse.jst.j2ee.project.facet.IJ2EEModuleFacetInstallDataModelProperties; import org.eclipse.jst.j2ee.web.project.facet.WebFacetInstallDataModelProvider; import org.eclipse.ui.wizards.datatransfer.ProjectConfigurator; import org.eclipse.ui.wizards.datatransfer.RecursiveFileFinder; import org.eclipse.wst.common.frameworks.datamodel.DataModelFactory; 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.jboss.tools.playground.easymport.jee.Activator; import org.w3c.dom.Document; public class JPAProjectConfigurator implements ProjectConfigurator { @Override public boolean canConfigure(IProject project, Set<IPath> ignoredDirectories, IProgressMonitor monitor) { try { RecursiveFileFinder finder = new RecursiveFileFinder("persistence.xml", ignoredDirectories); project.accept(finder); return finder.getFile() != null; } catch (CoreException ex) { return false; } } @Override public void configure(IProject project, Set<IPath> ignoredDirectories, IProgressMonitor monitor) { try { DynamicProjectTools.convertToFacetedProject(project, ignoredDirectories, monitor); IFacetedProject facetedProject = ProjectFacetsManager.create(project, true, monitor); IProjectFacet JPA_FACET = ProjectFacetsManager.getProjectFacet("jpt.jpa"); if (!facetedProject.hasProjectFacet(JPA_FACET)) { DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); RecursiveFileFinder finder = new RecursiveFileFinder("persistence.xml", ignoredDirectories); project.accept(finder); InputStream webXmlStream = finder.getFile().getContents(); Document doc = dBuilder.parse(webXmlStream); webXmlStream.close(); IDataModel aFacetInstallDataModel = DataModelFactory.createDataModel(new WebFacetInstallDataModelProvider()); aFacetInstallDataModel.setBooleanProperty(IJ2EEModuleFacetInstallDataModelProperties.ADD_TO_EAR, false); String version = doc.getElementById("persistence").getAttribute("version"); facetedProject.installProjectFacet(JPA_FACET.getVersion(version), aFacetInstallDataModel, monitor); } } catch (Exception ex) { Activator.getDefault().getLog().log(new Status( IStatus.ERROR, Activator.PLUGIN_ID, ex.getMessage(), ex)); } } @Override public boolean shouldBeAnEclipseProject(IContainer container, IProgressMonitor monitor) { return false; // TODO can we make sure a given dir is actually a JPA project } @Override public Set<IFolder> getFoldersToIgnore(IProject project, IProgressMonitor monitor) { return null; } @Override public Set<File> findConfigurableLocations(File root, IProgressMonitor monitor) { // No easy way to deduce project roots from jee files... return Collections.EMPTY_SET; } }