From 72e43ddf5a01b28d57a41bdbd4b77a0519d92912 Mon Sep 17 00:00:00 2001
From: ulrich <not disclosed>
Date: Sun, 19 Mar 2017 16:27:57 +0000
Subject: [PATCH] compileAll (Entwurf)

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

diff --git a/src/java/de/uhilger/filecms/api/CompileService.java b/src/java/de/uhilger/filecms/api/CompileService.java
index 21f3464..49bc175 100644
--- a/src/java/de/uhilger/filecms/api/CompileService.java
+++ b/src/java/de/uhilger/filecms/api/CompileService.java
@@ -17,26 +17,17 @@
 */
 package de.uhilger.filecms.api;
 
-import static de.uhilger.filecms.api.FileMgr.HOME_DIR_NAME;
-import static de.uhilger.filecms.api.FileMgr.HOME_DIR_PATH;
-import static de.uhilger.filecms.api.FileMgr.PUB_DIR_NAME;
-import static de.uhilger.filecms.api.FileMgr.PUB_DIR_PATH;
 import de.uhilger.filecms.data.CompilerIssue;
-import de.uhilger.filecms.data.FileRef;
-import de.uhilger.filecms.web.Initialiser;
-import de.uhilger.transit.web.RequestKontext;
-import de.uhilger.transit.web.WebKontext;
 import java.io.File;
+import java.io.FileFilter;
 import java.io.IOException;
-import java.security.Principal;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Locale;
+import java.util.logging.Level;
 import java.util.logging.Logger;
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServletRequest;
 import javax.tools.Diagnostic;
 import javax.tools.DiagnosticCollector;
 import javax.tools.JavaCompiler;
@@ -47,12 +38,70 @@
 /**
  *
  */
-public class CompileService implements RequestKontext, WebKontext {
+public class CompileService extends Api {
   
   private static final Logger logger = Logger.getLogger(CompileService.class.getName());
+    
+  public List<CompilerIssue> compileAll(String relPath) {
+    logger.fine(relPath);
+    List<CompilerIssue> compilerIssues = new ArrayList();
+    try {
+      File targetDir = getTargetDir(relPath);
+      ArrayList<File> files = new ArrayList();
+      collectFiles(files, targetDir, new JavaFileFilter());
+      JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
+      DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector();
+      StandardJavaFileManager fileManager = compiler.getStandardFileManager(diagnostics, null, null);
+      Iterable<? extends JavaFileObject> compilationUnits = fileManager.getJavaFileObjectsFromFiles(files);
+      compiler.getTask(null, null, diagnostics, null, null, compilationUnits).call();
+      fileManager.close();
+
+      List compileResults = diagnostics.getDiagnostics();
+      Iterator i = compileResults.iterator();
+      while(i.hasNext()) {
+        Object o = i.next();
+        Diagnostic<? extends JavaFileObject> err;
+        if(o instanceof Diagnostic) {
+          err = (Diagnostic) o;
+          CompilerIssue issue = new CompilerIssue();
+          issue.setKind(err.getKind().name());
+          issue.setLineNumber(err.getLineNumber());
+          issue.setMessage(err.getMessage(Locale.GERMANY));
+          issue.setSoureName(err.getSource().getName());
+          compilerIssues.add(issue);
+        }
+      }
+    } catch(Exception ex) {
+      logger.log(Level.SEVERE, ex.getLocalizedMessage(), ex);
+    }
+    return compilerIssues;
+  }
   
-  private ServletContext ctx;
-  private HttpServletRequest request;
+  private void collectFiles(ArrayList<File> files, File dir, FileFilter filter) {
+    File[] dirFiles = dir.listFiles(filter);
+    for(int i = 0; i < dirFiles.length; i++) {
+      if(dirFiles[i].isDirectory()) {
+        logger.fine("drill down to " + dirFiles[i].getAbsolutePath());
+        collectFiles(files, dirFiles[i], filter);
+      } else {
+        logger.fine("add " + dirFiles[i].getAbsolutePath());
+        files.add(dirFiles[i]);
+      }
+    }
+  }
+  
+  public class JavaFileFilter implements FileFilter {
+
+    @Override
+    public boolean accept(File pathname) {
+      boolean doAccept = false;
+      if(pathname.getName().endsWith(".java") || pathname.isDirectory()) {
+        doAccept = true;
+      }
+      return doAccept;
+    }
+  
+  }
   
   /**
    * 
@@ -128,6 +177,7 @@
     return compilerIssues;
   }
   
+  /*
   private File getTargetDir(String relPath) {
     logger.fine(relPath);
     String targetPath = null;
@@ -162,26 +212,7 @@
     }
     return userName;
   }    
-
-  @Override
-  public HttpServletRequest getRequest() {
-    return request;
-  }
-
-  @Override
-  public void setRequest(HttpServletRequest r) {
-    this.request = r;
-  }
-
-  @Override
-  public ServletContext getServletContext() {
-    return ctx;
-  }
-
-  @Override
-  public void setServletContext(ServletContext servletContext) {
-    this.ctx = servletContext;
-  }
+*/
 }
 
 

--
Gitblit v1.9.3