summaryrefslogtreecommitdiff
path: root/src/main/java/org/apache/maven/plugin/nar/NarSystemGenerate.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/apache/maven/plugin/nar/NarSystemGenerate.java')
-rw-r--r--src/main/java/org/apache/maven/plugin/nar/NarSystemGenerate.java79
1 files changed, 79 insertions, 0 deletions
diff --git a/src/main/java/org/apache/maven/plugin/nar/NarSystemGenerate.java b/src/main/java/org/apache/maven/plugin/nar/NarSystemGenerate.java
new file mode 100644
index 0000000..f1d9e7e
--- /dev/null
+++ b/src/main/java/org/apache/maven/plugin/nar/NarSystemGenerate.java
@@ -0,0 +1,79 @@
+// Copyright FreeHEP, 2007.
+package org.freehep.maven.nar;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.Iterator;
+
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+
+/**
+ * Generates a NarSystem class with static methods to use inside the java part
+ * of the library.
+ *
+ * @goal nar-system-generate
+ * @phase generate-sources
+ * @requiresProject
+ * @author <a href="Mark.Donszelmann@slac.stanford.edu">Mark Donszelmann</a>
+ * @version $Id: plugin/src/main/java/org/freehep/maven/nar/NarSystemGenerate.java d43b38443d0b 2007/09/13 18:31:01 duns $
+ */
+public class NarSystemGenerate extends AbstractCompileMojo {
+
+ public void execute() throws MojoExecutionException, MojoFailureException {
+ if (shouldSkip())
+ return;
+
+ // get packageName if specified for JNI.
+ String packageName = null;
+ String narSystemName = null;
+ File narSystemDirectory = null;
+ for (Iterator i = getLibraries().iterator(); i.hasNext()
+ && (packageName == null);) {
+ Library library = (Library) i.next();
+ if (library.getType().equals(Library.JNI)) {
+ packageName = library.getNarSystemPackage();
+ narSystemName = library.getNarSystemName();
+ narSystemDirectory = library.getNarSystemDirectory();
+ }
+ }
+
+ if (packageName == null)
+ return;
+
+ // make sure destination is there
+ narSystemDirectory.mkdirs();
+
+ getMavenProject().addCompileSourceRoot(narSystemDirectory.getPath());
+
+ File fullDir = new File(narSystemDirectory, packageName.replace('.', '/'));
+ fullDir.mkdirs();
+
+ File narSystem = new File(fullDir, narSystemName + ".java");
+ try {
+ FileOutputStream fos = new FileOutputStream(narSystem);
+ PrintWriter p = new PrintWriter(fos);
+ p.println("// DO NOT EDIT: Generated by NarSystemGenerate.");
+ p.println("package " + packageName + ";");
+ p.println("");
+ p.println("public class NarSystem {");
+ p.println("");
+ p.println(" private NarSystem() {");
+ p.println(" }");
+ p.println("");
+ p.println(" public static void loadLibrary() {");
+ p.println(" System.loadLibrary(\""
+ + getMavenProject().getArtifactId() + "-"
+ + getMavenProject().getVersion() + "\");");
+ p.println(" }");
+ p.println("}");
+ p.close();
+ fos.close();
+ } catch (IOException e) {
+ throw new MojoExecutionException("Could not write '"
+ + narSystemName + "'", e);
+ }
+ }
+}