Author: pkluegl
Date: Mon Jun  6 15:35:32 2016
New Revision: 1747030

URL: http://svn.apache.org/viewvc?rev=1747030&view=rev
Log:
UIMA-4619
- do not rely on buildContext.hasDelta()
- use lastModified instead
- optimized descriptor build

Modified:
    
uima/ruta/trunk/ruta-maven-plugin/src/main/java/org/apache/uima/ruta/maven/RutaGenerateDescriptorMojo.java
    
uima/ruta/trunk/ruta-maven-plugin/src/main/java/org/apache/uima/ruta/maven/RutaGenerateMTWLMojo.java
    
uima/ruta/trunk/ruta-maven-plugin/src/main/java/org/apache/uima/ruta/maven/RutaGenerateTWLMojo.java
    
uima/ruta/trunk/ruta-maven-plugin/src/test/java/org/apache/uima/ruta/maven/RutaGenerateDescriptorMojoTest.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=1747030&r1=1747029&r2=1747030&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
 Mon Jun  6 15:35:32 2016
@@ -40,6 +40,7 @@ import org.apache.commons.lang3.StringUt
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.DependencyResolutionRequiredException;
+import org.apache.maven.execution.MavenSession;
 import org.apache.maven.model.FileSet;
 import org.apache.maven.model.Resource;
 import org.apache.maven.plugin.AbstractMojo;
@@ -86,12 +87,15 @@ public class RutaGenerateDescriptorMojo
 
   private static final String RUTA_NATURE = "org.apache.uima.ruta.ide.nature";
 
-  @Component
+  @Parameter( defaultValue = "${project}", readonly = true )
   private MavenProject project;
 
   @Component
   private BuildContext buildContext;
 
+  @Parameter( defaultValue = "${session}", readonly = true )
+  private MavenSession session;
+  
   /**
    * The source files for the multi tree word list.
    */
@@ -209,35 +213,7 @@ public class RutaGenerateDescriptorMojo
     
this.project.addCompileSourceRoot(this.typeSystemOutputDirectory.getPath());
     
this.project.addCompileSourceRoot(this.analysisEngineOutputDirectory.getPath());
     
-    RutaDescriptorFactory factory = new RutaDescriptorFactory();
-    if (typeSystemTemplate != null) {
-      try {
-        factory.setDefaultTypeSystem(typeSystemTemplate.toURI().toURL());
-      } catch (MalformedURLException e) {
-        getLog().warn("Failed to get URL of " + typeSystemTemplate, e);
-      }
-    }
-    if (analysisEngineTemplate != null) {
-      try {
-        factory.setDefaultEngine(analysisEngineTemplate.toURI().toURL());
-      } catch (MalformedURLException e) {
-        getLog().warn("Failed to get URL of " + analysisEngineTemplate, e);
-      }
-    }
-
-    URLClassLoader classloader = getClassloader(project, getLog());
-
-    RutaBuildOptions options = new RutaBuildOptions();
-    options.setTypeSystemSuffix(typeSystemSuffix);
-    options.setAnalysisEngineSuffix(analysisEngineSuffix);
-    options.setEncoding(encoding);
-    options.setResolveImports(resolveImports);
-    options.setImportByName(importByName);
-    options.setClassLoader(classloader);
-
-    List<String> extensions = getExtensionsFromClasspath(classloader);
-    options.setLanguageExtensions(extensions);
-
+    
     String[] files = null;
     if (scriptFiles != null) {
       try {
@@ -263,10 +239,21 @@ public class RutaGenerateDescriptorMojo
     List<File> filesToBuild = new ArrayList<File>();
     for (String each : files) {
       File file = new File(each);
-      boolean descriptorMissing = isDescriptorMissing(file);
-      boolean hasDelta = buildContext.hasDelta(file);
-      if (descriptorMissing || hasDelta) {
+      
+      // TODO should check the correct package!
+      List<File> possibleDescriptors = getPossibleDescriptors(file);
+      if(possibleDescriptors == null) {
         filesToBuild.add(file);
+        continue;
+      }
+      
+      long scriptModified = file.lastModified();
+      for (File eachDescriptor : possibleDescriptors) {
+        long descModified = eachDescriptor.lastModified();
+        if(scriptModified > descModified) {
+          filesToBuild.add(file);
+          break;
+        }
       }
     }
 
@@ -275,6 +262,38 @@ public class RutaGenerateDescriptorMojo
       return;
     }
 
+   
+    
+    RutaDescriptorFactory factory = new RutaDescriptorFactory();
+    if (typeSystemTemplate != null) {
+      try {
+        factory.setDefaultTypeSystem(typeSystemTemplate.toURI().toURL());
+      } catch (MalformedURLException e) {
+        getLog().warn("Failed to get URL of " + typeSystemTemplate, e);
+      }
+    }
+    if (analysisEngineTemplate != null) {
+      try {
+        factory.setDefaultEngine(analysisEngineTemplate.toURI().toURL());
+      } catch (MalformedURLException e) {
+        getLog().warn("Failed to get URL of " + analysisEngineTemplate, e);
+      }
+    }
+
+    URLClassLoader classloader = getClassloader(project, getLog());
+
+    RutaBuildOptions options = new RutaBuildOptions();
+    options.setTypeSystemSuffix(typeSystemSuffix);
+    options.setAnalysisEngineSuffix(analysisEngineSuffix);
+    options.setEncoding(encoding);
+    options.setResolveImports(resolveImports);
+    options.setImportByName(importByName);
+    options.setClassLoader(classloader);
+
+    List<String> extensions = getExtensionsFromClasspath(classloader);
+    options.setLanguageExtensions(extensions);
+    
+    
     if (maxBuildRetries == -1) {
       maxBuildRetries = filesToBuild.size() * 3;
     }
@@ -325,34 +344,39 @@ public class RutaGenerateDescriptorMojo
 
   }
 
-  private boolean isDescriptorMissing(File file) {
+  @SuppressWarnings("unchecked")
+  private List<File> getPossibleDescriptors(File file) {
+    List<File> result = new ArrayList<>();
     String scriptName = file.getName().substring(0, file.getName().length() - 
5);
 
-    String aeName = scriptName + analysisEngineSuffix + ".xml";
-    List<?> aeFiles = null;
+    String aeName = "**/" + scriptName + analysisEngineSuffix + ".xml";
+    List<File> aeFiles = null;
     try {
       aeFiles = FileUtils.getFiles(analysisEngineOutputDirectory, aeName, 
null);
+      result.addAll(aeFiles);
     } catch (IOException e) {
-      return true;
+      return null;
     }
     if (aeFiles == null || aeFiles.size() == 0) {
-      return true;
+      return null;
     }
 
-    String tsName = scriptName + typeSystemSuffix + ".xml";
-    List<?> tsFiles;
+    String tsName = "**/" + scriptName + typeSystemSuffix + ".xml";
+    List<File> tsFiles;
     try {
       tsFiles = FileUtils.getFiles(typeSystemOutputDirectory, tsName, null);
+      result.addAll(tsFiles);
     } catch (IOException e) {
-      return true;
+      return null;
     }
 
     if (tsFiles == null || tsFiles.size() == 0) {
-      return true;
+      return null;
     }
 
-    return false;
+    return result;
   }
+  
 
   private List<String> getExtensionsFromClasspath(ClassLoader classloader) {
     List<String> result = new ArrayList<String>();

Modified: 
uima/ruta/trunk/ruta-maven-plugin/src/main/java/org/apache/uima/ruta/maven/RutaGenerateMTWLMojo.java
URL: 
http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-maven-plugin/src/main/java/org/apache/uima/ruta/maven/RutaGenerateMTWLMojo.java?rev=1747030&r1=1747029&r2=1747030&view=diff
==============================================================================
--- 
uima/ruta/trunk/ruta-maven-plugin/src/main/java/org/apache/uima/ruta/maven/RutaGenerateMTWLMojo.java
 (original)
+++ 
uima/ruta/trunk/ruta-maven-plugin/src/main/java/org/apache/uima/ruta/maven/RutaGenerateMTWLMojo.java
 Mon Jun  6 15:35:32 2016
@@ -44,7 +44,8 @@ import org.sonatype.plexus.build.increme
  */
 @Mojo(name = "mtwl", defaultPhase = LifecyclePhase.GENERATE_RESOURCES, 
requiresDependencyResolution = ResolutionScope.COMPILE)
 public class RutaGenerateMTWLMojo extends AbstractMojo {
-  @Component
+  
+  @Parameter( defaultValue = "${project}", readonly = true )
   private MavenProject project;
 
   @Component
@@ -119,6 +120,7 @@ public class RutaGenerateMTWLMojo extend
     List<File> result = new ArrayList<File>();
 
     boolean exists = outputFile.exists();
+    long outputModified = outputFile.lastModified();
     
     File directory = new File(fileSet.getDirectory());
     String includes = Utils.toString(fileSet.getIncludes());
@@ -128,10 +130,11 @@ public class RutaGenerateMTWLMojo extend
     for (Object each : FileUtils.getFiles(directory, includes, excludes)) {
       if (each instanceof File) {
         File file = (File) each;
-        result.add(file);
-        if (buildContext.hasDelta(file)) {
+        long inputModified = file.lastModified();
+        if(inputModified > outputModified) {
           modified = true;
         }
+        result.add(file);
       }
     }
     if(!exists || modified) {

Modified: 
uima/ruta/trunk/ruta-maven-plugin/src/main/java/org/apache/uima/ruta/maven/RutaGenerateTWLMojo.java
URL: 
http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-maven-plugin/src/main/java/org/apache/uima/ruta/maven/RutaGenerateTWLMojo.java?rev=1747030&r1=1747029&r2=1747030&view=diff
==============================================================================
--- 
uima/ruta/trunk/ruta-maven-plugin/src/main/java/org/apache/uima/ruta/maven/RutaGenerateTWLMojo.java
 (original)
+++ 
uima/ruta/trunk/ruta-maven-plugin/src/main/java/org/apache/uima/ruta/maven/RutaGenerateTWLMojo.java
 Mon Jun  6 15:35:32 2016
@@ -46,7 +46,8 @@ import org.sonatype.plexus.build.increme
  */
 @Mojo(name = "twl", defaultPhase = LifecyclePhase.GENERATE_RESOURCES, 
requiresDependencyResolution = ResolutionScope.COMPILE)
 public class RutaGenerateTWLMojo extends AbstractMojo {
-  @Component
+  
+  @Parameter( defaultValue = "${project}", readonly = true )
   private MavenProject project;
 
   @Component
@@ -131,9 +132,9 @@ public class RutaGenerateTWLMojo extends
     for (Object each : FileUtils.getFiles(directory, includes, excludes)) {
       if (each instanceof File) {
         File inputFile = (File) each;
-        File outputfile = getOutputFile(inputFile, directory, outputDirectory);
-        if (outputfile == null || !outputfile.exists() || 
buildContext.hasDelta(inputFile)) {
-          result.put(inputFile, outputfile);
+        File outputFile = getOutputFile(inputFile, directory, outputDirectory);
+        if (outputFile == null || !outputFile.exists() || 
inputFile.lastModified() > outputFile.lastModified()) {
+          result.put(inputFile, outputFile);
         }
       }
     }

Modified: 
uima/ruta/trunk/ruta-maven-plugin/src/test/java/org/apache/uima/ruta/maven/RutaGenerateDescriptorMojoTest.java
URL: 
http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-maven-plugin/src/test/java/org/apache/uima/ruta/maven/RutaGenerateDescriptorMojoTest.java?rev=1747030&r1=1747029&r2=1747030&view=diff
==============================================================================
--- 
uima/ruta/trunk/ruta-maven-plugin/src/test/java/org/apache/uima/ruta/maven/RutaGenerateDescriptorMojoTest.java
 (original)
+++ 
uima/ruta/trunk/ruta-maven-plugin/src/test/java/org/apache/uima/ruta/maven/RutaGenerateDescriptorMojoTest.java
 Mon Jun  6 15:35:32 2016
@@ -35,9 +35,7 @@ import org.apache.uima.cas.text.Annotati
 import org.apache.uima.cas.text.AnnotationIndex;
 import org.apache.uima.util.XMLInputSource;
 import org.codehaus.plexus.util.FileUtils;
-
-import junit.framework.Assert;
-
+import org.junit.Assert;
 
 public class RutaGenerateDescriptorMojoTest extends AbstractMojoTestCase {
 


Reply via email to