Author: snjeza
Date: 2012-04-06 17:31:08 -0400 (Fri, 06 Apr 2012)
New Revision: 40098
Modified:
trunk/maven/plugins/org.jboss.tools.maven.core/src/org/jboss/tools/maven/core/MavenCoreActivator.java
trunk/maven/plugins/org.jboss.tools.maven.core/src/org/jboss/tools/maven/core/libprov/MavenLibraryProviderInstallOperation.java
Log:
JBIDE-11496 - Customized Maven libraries not persisted correctly
Modified:
trunk/maven/plugins/org.jboss.tools.maven.core/src/org/jboss/tools/maven/core/MavenCoreActivator.java
===================================================================
---
trunk/maven/plugins/org.jboss.tools.maven.core/src/org/jboss/tools/maven/core/MavenCoreActivator.java 2012-04-06
20:59:31 UTC (rev 40097)
+++
trunk/maven/plugins/org.jboss.tools.maven.core/src/org/jboss/tools/maven/core/MavenCoreActivator.java 2012-04-06
21:31:08 UTC (rev 40098)
@@ -683,7 +683,7 @@
}
}
- private static void copy(InputStream is, OutputStream os)
+ public static void copy(InputStream is, OutputStream os)
throws IOException {
byte[] buffer = new byte[1024];
int count;
@@ -745,4 +745,5 @@
IMavenConstants.PLUGIN_ID, -1, msg, ex));
}
}
+
}
Modified:
trunk/maven/plugins/org.jboss.tools.maven.core/src/org/jboss/tools/maven/core/libprov/MavenLibraryProviderInstallOperation.java
===================================================================
---
trunk/maven/plugins/org.jboss.tools.maven.core/src/org/jboss/tools/maven/core/libprov/MavenLibraryProviderInstallOperation.java 2012-04-06
20:59:31 UTC (rev 40097)
+++
trunk/maven/plugins/org.jboss.tools.maven.core/src/org/jboss/tools/maven/core/libprov/MavenLibraryProviderInstallOperation.java 2012-04-06
21:31:08 UTC (rev 40098)
@@ -10,33 +10,54 @@
************************************************************************************/
package org.jboss.tools.maven.core.libprov;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
import java.io.File;
-import java.io.FileWriter;
+import java.io.FileOutputStream;
import java.io.IOException;
-import java.net.URL;
+import java.io.InputStream;
+import java.io.OutputStream;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.FileLocator;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
+import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.emf.ecore.resource.URIConverter;
import org.eclipse.emf.ecore.xmi.XMIResource;
import org.eclipse.jst.common.project.facet.core.libprov.ILibraryProvider;
import org.eclipse.jst.common.project.facet.core.libprov.LibraryProviderOperation;
import org.eclipse.jst.common.project.facet.core.libprov.LibraryProviderOperationConfig;
+import org.eclipse.m2e.core.embedder.IMaven;
import org.eclipse.m2e.core.internal.IMavenConstants;
+import org.eclipse.m2e.core.internal.MavenPluginActivator;
+import org.eclipse.m2e.model.edit.pom.Dependency;
+import org.eclipse.m2e.model.edit.pom.Exclusion;
import org.eclipse.m2e.model.edit.pom.Model;
+import org.eclipse.m2e.model.edit.pom.Repository;
+import org.eclipse.m2e.model.edit.pom.RepositoryPolicy;
import org.eclipse.m2e.model.edit.pom.util.PomResourceFactoryImpl;
import org.eclipse.m2e.model.edit.pom.util.PomResourceImpl;
import org.eclipse.wst.common.project.facet.core.IFacetedProjectBase;
import org.jboss.tools.maven.core.MavenCoreActivator;
+import org.w3c.dom.Attr;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
/**
* @author snjeza
@@ -73,53 +94,153 @@
}
ILibraryProvider provider = config.getLibraryProvider();
File providerFile = MavenCoreActivator.getProviderFile(provider);
- URL url = null;
- PomResourceImpl libraryResource = null;
- URIConverter.WriteableOutputStream uws = null;
- FileWriter fw = null;
- try {
- Map<String, String> params = provider.getParams();
- String pomURLString = params.get("template"); //$NON-NLS-1$
- URL platformURL = new URL(pomURLString);
- url = FileLocator.resolve(platformURL);
-
- libraryResource = MavenCoreActivator.loadResource(url);
- libraryResource.getContents().clear();
- libraryResource.getContents().add(libraryModel);
+ savePomModel(providerFile, libraryModel);
+ } else {
+ MavenCoreActivator.addLibraryProviderOperationConfig(config);
+ }
+ }
- Map<String, String> options = new HashMap<String, String>();
- options.put(XMIResource.OPTION_ENCODING,
- MavenCoreActivator.ENCODING);
- fw = new FileWriter(providerFile);
- uws = new URIConverter.WriteableOutputStream(
- fw, MavenCoreActivator.ENCODING);
- libraryResource.save(uws, options);
- } catch (IOException e) {
+ private void savePomModel(File file, Model pomModel) throws CoreException {
+ org.apache.maven.model.Model model = new org.apache.maven.model.Model();
+ model.setModelVersion("4.0.0"); //$NON-NLS-1$
+
+ model.setGroupId(pomModel.getArtifactId());
+ model.setArtifactId(pomModel.getArtifactId());
+ model.setVersion(pomModel.getVersion());
+ model.setPackaging(pomModel.getPackaging());
+
+ if(pomModel.getName() != null && pomModel.getName().length() > 0) {
+ model.setName(pomModel.getName());
+ }
+ if(pomModel.getDescription() != null && pomModel.getDescription().length()
> 0) {
+ model.setDescription(pomModel.getDescription());
+ }
+ EList<Dependency> pomDependencies = pomModel.getDependencies();
+ List<org.apache.maven.model.Dependency> dependencies =
model.getDependencies();
+ for (Dependency pomDependency:pomDependencies) {
+ org.apache.maven.model.Dependency dependency = new
org.apache.maven.model.Dependency();
+ dependency.setArtifactId(pomDependency.getArtifactId());
+ dependency.setGroupId(pomDependency.getGroupId());
+ dependency.setVersion(pomDependency.getVersion());
+ dependency.setType(pomDependency.getType());
+ dependency.setScope(pomDependency.getScope());
+ dependency.setClassifier(pomDependency.getClassifier());
+ dependency.setOptional(pomDependency.getOptional());
+ dependency.setSystemPath(pomDependency.getSystemPath());
+ EList<Exclusion> pomExclusions = pomDependency.getExclusions();
+ List<org.apache.maven.model.Exclusion> exclusions =
dependency.getExclusions();
+ for (Exclusion pomExclusion:pomExclusions) {
+ org.apache.maven.model.Exclusion exclusion = new
org.apache.maven.model.Exclusion();
+ exclusion.setGroupId(pomExclusion.getGroupId());
+ exclusion.setArtifactId(pomExclusion.getArtifactId());
+ exclusions.add(exclusion);
+ }
+ dependencies.add(dependency);
+ }
+ EList<Repository> pomRepositories = pomModel.getRepositories();
+ List<org.apache.maven.model.Repository> repositories =
model.getRepositories();
+ for (Repository pomRepository:pomRepositories) {
+ org.apache.maven.model.Repository repository = new
org.apache.maven.model.Repository();
+ repository.setId(pomRepository.getId());
+ repository.setLayout(pomRepository.getLayout());
+ repository.setName(pomRepository.getName());
+ RepositoryPolicy pomReleases = pomRepository.getReleases();
+ repository.setReleases(getRepositoryPolicy(pomReleases));
+ RepositoryPolicy pomSnapshots = pomRepository.getSnapshots();
+ repository.setSnapshots(getRepositoryPolicy(pomSnapshots));
+ repository.setLayout(pomRepository.getLayout());
+ repository.setUrl(pomRepository.getUrl());
+ repositories.add(repository);
+ }
+ createMavenModel(file, model);
+ }
+
+ public void createMavenModel(File file, org.apache.maven.model.Model model) throws
CoreException {
+
+ try {
+ ByteArrayOutputStream buf = new ByteArrayOutputStream();
+
+ IMaven maven = MavenPluginActivator.getDefault().getMaven();
+ maven.writeModel(model, buf);
+
+ DocumentBuilderFactory documentBuilderFactory =
DocumentBuilderFactory.newInstance();
+ documentBuilderFactory.setNamespaceAware(false);
+ DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
+
+ Document document = documentBuilder.parse(new
ByteArrayInputStream(buf.toByteArray()));
+ Element documentElement = document.getDocumentElement();
+
+ NamedNodeMap attributes = documentElement.getAttributes();
+
+ if(attributes == null || attributes.getNamedItem("xmlns") == null) {
//$NON-NLS-1$
+ Attr attr = document.createAttribute("xmlns"); //$NON-NLS-1$
+
attr.setTextContent("http://maven.apache.org/POM/4.0.0");
//$NON-NLS-1$
+ documentElement.setAttributeNode(attr);
+ }
+
+ if(attributes == null || attributes.getNamedItem("xmlns:xsi") == null) {
//$NON-NLS-1$
+ Attr attr = document.createAttribute("xmlns:xsi"); //$NON-NLS-1$
+
attr.setTextContent("http://www.w3.org/2001/XMLSchema-instance");
//$NON-NLS-1$
+ documentElement.setAttributeNode(attr);
+ }
+
+ if(attributes == null || attributes.getNamedItem("xsi:schemaLocation")
== null) { //$NON-NLS-1$
+ Attr attr =
document.createAttributeNS("http://www.w3.org/2001/XMLSchema-instanc...;,
"xsi:schemaLocation"); //$NON-NLS-1$ //$NON-NLS-2$
+
attr.setTextContent("http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd"); //$NON-NLS-1$
+ documentElement.setAttributeNode(attr);
+ }
+
+ TransformerFactory transfac = TransformerFactory.newInstance();
+ Transformer trans = transfac.newTransformer();
+ trans.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
//$NON-NLS-1$
+
+ buf.reset();
+ trans.transform(new DOMSource(document), new StreamResult(buf));
+
+ OutputStream os = null;
+ InputStream is = null;
+ try {
+ os = new FileOutputStream(file);
+ is = new ByteArrayInputStream(buf.toByteArray());
+ MavenCoreActivator.copy(is, os);
+ } catch (Exception e) {
MavenCoreActivator.log(e);
+ throw new CoreException(new Status(IStatus.ERROR,
+ MavenCoreActivator.PLUGIN_ID, -1, e.getMessage(), e));
} finally {
- if (uws != null) {
+ if (is != null) {
try {
- uws.flush();
- uws.close();
- } catch (IOException e) {
- MavenCoreActivator.log(e);
- }
+ is.close();
+ } catch (Exception ignore) {}
}
- if (fw != null) {
+ if (os != null) {
try {
- fw.close();
- } catch (IOException e) {
- MavenCoreActivator.log(e);
- }
+ os.close();
+ } catch (Exception ignore) {}
}
- if (libraryResource != null) {
- libraryResource.unload();
- }
}
-
- } else {
- MavenCoreActivator.addLibraryProviderOperationConfig(config);
+
+ } catch (RuntimeException ex) {
+ String msg = "Can't create model " + file.getAbsolutePath();
+ throw new CoreException(new Status(IStatus.ERROR,
+ MavenCoreActivator.PLUGIN_ID, -1, msg, ex));
+ } catch (Exception ex) {
+ String msg = "Can't create model " + file.getAbsolutePath();
+ throw new CoreException(new Status(IStatus.ERROR,
+ MavenCoreActivator.PLUGIN_ID, -1, msg, ex));
}
+ }
+
+ private org.apache.maven.model.RepositoryPolicy getRepositoryPolicy(
+ RepositoryPolicy pomRepositoryPolicy) {
+ if (pomRepositoryPolicy == null) {
+ return null;
+ }
+ org.apache.maven.model.RepositoryPolicy repositoryPolicy = new
org.apache.maven.model.RepositoryPolicy();
+ repositoryPolicy.setChecksumPolicy(pomRepositoryPolicy.getChecksumPolicy());
+ repositoryPolicy.setEnabled(pomRepositoryPolicy.getEnabled());
+ repositoryPolicy.setUpdatePolicy(pomRepositoryPolicy.getUpdatePolicy());
+ return repositoryPolicy;
}
public static PomResourceImpl loadResource(IFile pomFile)