From 2e303f595176362f72c6bd77281dd0b470df5861 Mon Sep 17 00:00:00 2001
From: ulrich
Date: Tue, 17 Nov 2020 17:06:44 +0000
Subject: [PATCH] Ant imports hinzugefuegt, BuildListener gebaut

---
 src/java/de/uhilger/filecms/api/CompileService.java |   63 +++++++++++++++++++++++++++++++
 1 files changed, 62 insertions(+), 1 deletions(-)

diff --git a/src/java/de/uhilger/filecms/api/CompileService.java b/src/java/de/uhilger/filecms/api/CompileService.java
index 2aaf5aa..29dc09d 100644
--- a/src/java/de/uhilger/filecms/api/CompileService.java
+++ b/src/java/de/uhilger/filecms/api/CompileService.java
@@ -35,6 +35,8 @@
 import javax.tools.StandardJavaFileManager;
 import javax.tools.ToolProvider;
 import org.apache.commons.io.FileUtils;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.ProjectHelper;
 
 /**
  *
@@ -42,6 +44,65 @@
 public class CompileService extends Api {
   
   private static final Logger logger = Logger.getLogger(CompileService.class.getName());
+  
+  public String antBuild(String relPath) {
+    File targetDir = getTargetDir(relPath); // App-Ordner
+    StringBuilder sb = new StringBuilder();
+    sb.append("Ant build ist noch nicht implementiert.");
+
+    sb.append("<br/>");
+    sb.append("targetDir: ");
+    sb.append(targetDir.getAbsolutePath());
+    
+    File buildFile = new File(targetDir, "build.xml");
+    Project p = new Project();
+    //p.setName("FileCms Build");
+    FileCmsBuildListener listener = new FileCmsBuildListener();
+    p.addBuildListener(listener);
+    p.setUserProperty("ant.file", buildFile.getAbsolutePath());
+    p.init();
+    ProjectHelper helper = ProjectHelper.getProjectHelper();
+    p.addReference("ant.projectHelper", helper);
+    helper.parse(p, buildFile);
+    p.executeTarget(p.getDefaultTarget());  
+    sb.append("<br/>");
+    sb.append(listener.getOutput());
+    
+    return sb.toString();
+  }
+  
+  
+  /**
+   * Annahme: relPath zeigt auf einen Ordner, in dem ein build-Ordner die 
+   * fertigen Klassen und ein web-Ordner die Struktur mit WEB-INF 
+   * enthaelt.
+   * 
+   * @param relPath  der relative Pfad, der auf den App-Ordner verweist
+   * @return 
+   */
+  public String buildApp(String relPath) {
+    String result = "ok";
+    try {
+      File targetDir = getTargetDir(relPath); // App-Ordner
+      File classesDir = new File(targetDir, "web/WEB-INF/classes");
+      if(classesDir.exists()) {
+        FileUtils.deleteDirectory(classesDir);
+      }
+      classesDir.mkdirs();
+      File buildDir = new File(targetDir, "build/");
+      File[] files = buildDir.listFiles();
+      for(int i = 0; i < files.length; i++) {
+        if(files[i].isDirectory()) {
+          FileUtils.copyDirectoryToDirectory(files[i], classesDir);
+        } else {
+          FileUtils.copyFileToDirectory(files[i], classesDir);   
+        }
+      }
+    } catch(Exception ex) {
+      logger.log(Level.SEVERE, ex.getLocalizedMessage(), ex);
+    }
+    return result;
+  }
     
   public List<CompilerIssue> compileAll(String relPath) {
     logger.fine(relPath);
@@ -164,7 +225,7 @@
   }
 
   private final Iterable<String> buildOptions(File targetDir) {
-      String cbase = getCatalinaBase();
+      String cbase = getCatalinaBase(getServletContext());
       File lib = new File(cbase, "lib");
       String cp = "";
       cp = buildCPFromDir(cp, lib);

--
Gitblit v1.9.3