You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by pk...@apache.org on 2015/04/08 09:41:59 UTC
svn commit: r1672018 -
/uima/ruta/trunk/ruta-maven-plugin/src/main/java/org/apache/uima/ruta/maven/RutaGenerateDescriptorMojo.java
Author: pkluegl
Date: Wed Apr 8 07:41:59 2015
New Revision: 1672018
URL: http://svn.apache.org/r1672018
Log:
UIMA-3650
- option to wrangle ruta nature in
Modified:
uima/ruta/trunk/ruta-maven-plugin/src/main/java/org/apache/uima/ruta/maven/RutaGenerateDescriptorMojo.java
Modified: uima/ruta/trunk/ruta-maven-plugin/src/main/java/org/apache/uima/ruta/maven/RutaGenerateDescriptorMojo.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-maven-plugin/src/main/java/org/apache/uima/ruta/maven/RutaGenerateDescriptorMojo.java?rev=1672018&r1=1672017&r2=1672018&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-maven-plugin/src/main/java/org/apache/uima/ruta/maven/RutaGenerateDescriptorMojo.java (original)
+++ uima/ruta/trunk/ruta-maven-plugin/src/main/java/org/apache/uima/ruta/maven/RutaGenerateDescriptorMojo.java Wed Apr 8 07:41:59 2015
@@ -20,8 +20,11 @@ package org.apache.uima.ruta.maven;
import java.io.File;
import java.io.FileOutputStream;
+import java.io.FileReader;
+import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStream;
+import java.io.StringWriter;
import java.net.MalformedURLException;
import java.net.URISyntaxException;
import java.net.URL;
@@ -33,6 +36,7 @@ import java.util.Set;
import org.antlr.runtime.RecognitionException;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.exception.ExceptionUtils;
+import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.DependencyResolutionRequiredException;
@@ -55,6 +59,10 @@ import org.apache.uima.ruta.descriptor.R
import org.apache.uima.util.InvalidXMLException;
import org.apache.uima.util.XMLizable;
import org.codehaus.plexus.util.FileUtils;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
+import org.codehaus.plexus.util.xml.Xpp3DomBuilder;
+import org.codehaus.plexus.util.xml.Xpp3DomWriter;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
import org.sonatype.plexus.build.incremental.BuildContext;
import org.xml.sax.SAXException;
@@ -64,6 +72,8 @@ import org.xml.sax.SAXException;
*/
@Mojo(name = "generate", defaultPhase = LifecyclePhase.PROCESS_RESOURCES, requiresDependencyResolution = ResolutionScope.COMPILE)
public class RutaGenerateDescriptorMojo extends AbstractMojo {
+ private static final String RUTA_NATURE = "org.apache.uima.ruta.ide.nature";
+
@Component
private MavenProject project;
@@ -130,6 +140,12 @@ public class RutaGenerateDescriptorMojo
@Parameter(defaultValue = "${project.build.sourceEncoding}", required = true)
private String encoding;
+ /**
+ * Add UIMA Ruta nature to .project
+ */
+ @Parameter(defaultValue = "true", required = false)
+ private boolean addRutaNature;
+
public void execute() throws MojoExecutionException, MojoFailureException {
if (!typeSystemOutputDirectory.exists()) {
@@ -195,6 +211,10 @@ public class RutaGenerateDescriptorMojo
}
}
+ if (addRutaNature) {
+ addRutaNature();
+ }
+
}
private void write(XMLizable desc, String aFilename) throws SAXException, IOException {
@@ -248,4 +268,47 @@ public class RutaGenerateDescriptorMojo
return new URLClassLoader(urls.toArray(new URL[] {}),
RutaGenerateDescriptorMojo.class.getClassLoader());
}
+
+ private void addRutaNature() {
+
+ File projectDir = project.getFile().getParentFile();
+ File projectFile = new File(projectDir, ".project");
+ if (projectFile.exists()) {
+ Xpp3Dom project = null;
+ try {
+ project = Xpp3DomBuilder.build(new FileReader(projectFile));
+ } catch (XmlPullParserException | IOException e) {
+ getLog().warn("Failed to access .project file", e);
+ }
+ if (project == null) {
+ return;
+ }
+
+ Xpp3Dom naturesNode = project.getChild("natures");
+ if (naturesNode != null) {
+ for (int i = 0; i < naturesNode.getChildCount(); ++i) {
+ Xpp3Dom natureEntry = naturesNode.getChild(i);
+ if (natureEntry != null && StringUtils.equals(natureEntry.getValue(), RUTA_NATURE)) {
+ return;
+ }
+ }
+ }
+ Xpp3Dom rutaNatureNode = new Xpp3Dom("nature");
+ rutaNatureNode.setValue(RUTA_NATURE);
+ naturesNode.addChild(rutaNatureNode);
+
+ StringWriter sw = new StringWriter();
+ Xpp3DomWriter.write(sw, project);
+ String string = sw.toString();
+ // Xpp3DomWriter creates empty string with file writer, check before writing to file
+ if (!StringUtils.isBlank(string)) {
+ try {
+ FileUtils.fileWrite(projectFile, encoding, string);
+ } catch (IOException e) {
+ getLog().warn("Failed to write .project file", e);
+ }
+ }
+ buildContext.refresh(projectDir);
+ }
+ }
}