Dateiverwaltung für die WebBox
ulrich
2017-03-20 a450f233393a9e3297fea633373635d060a3c709
Compile all mitsamt Resultaten
6 files modified
146 ■■■■ changed files
src/java/de/uhilger/filecms/api/CompileService.java 28 ●●●● patch | view | raw | blame | history
src/java/de/uhilger/filecms/data/CompilerIssue.java 10 ●●●● patch | view | raw | blame | history
web/WEB-INF/web.xml 2 ●●● patch | view | raw | blame | history
web/ui/index.html 18 ●●●● patch | view | raw | blame | history
web/ui/stile.css 6 ●●●● patch | view | raw | blame | history
web/ui/ui.js 82 ●●●●● patch | view | raw | blame | history
src/java/de/uhilger/filecms/api/CompileService.java
@@ -34,6 +34,7 @@
import javax.tools.JavaFileObject;
import javax.tools.StandardJavaFileManager;
import javax.tools.ToolProvider;
import org.apache.commons.io.FileUtils;
/**
 *
@@ -53,16 +54,27 @@
      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();
      File buildDir = new File(targetDir.getParentFile(), "build");
      final Iterable<String> options = Arrays.asList(new String[]{"-Xlint",
                    /*"-cp", project.getClassPath(),*/
                    /*
                      ausgehend von src eins hoeher, dann nach build
                    */
                    "-d", buildDir.getAbsolutePath()
                    });
      FileUtils.deleteDirectory(buildDir);
      buildDir.mkdir();
      compiler.getTask(null, null, diagnostics, options, null, compilationUnits).call();
      fileManager.close();
      collectResults(diagnostics, compilerIssues);
      collectResults(diagnostics, compilerIssues, relPath);
    } catch(Exception ex) {
      logger.log(Level.SEVERE, ex.getLocalizedMessage(), ex);
    }
    return compilerIssues;
  }
  
  private void collectResults(DiagnosticCollector<JavaFileObject> diagnostics, List<CompilerIssue> compilerIssues) {
  private void collectResults(DiagnosticCollector<JavaFileObject> diagnostics, List<CompilerIssue> compilerIssues, String relPath) {
    List compileResults = diagnostics.getDiagnostics();
    Iterator i = compileResults.iterator();
    while (i.hasNext()) {
@@ -74,7 +86,13 @@
        issue.setKind(err.getKind().name());
        issue.setLineNumber(err.getLineNumber());
        issue.setMessage(err.getMessage(Locale.GERMANY));
        issue.setSoureName(err.getSource().getName());
        String srcName = err.getSource().getName().replace("\\", "/");
        String cleanRelPath = relPath.replace(HOME_DIR_NAME + "/", "").replace(PUB_DIR_NAME + "/", "");
        int pos = srcName.indexOf(cleanRelPath);
        String className = srcName.substring(pos + cleanRelPath.length());
        issue.setSourceName(className.replace("/", ".").substring(1));
        //issue.setSourceName(srcName + "\r\n" + relPath);
        compilerIssues.add(issue);
      }
    }
@@ -142,7 +160,7 @@
    }     
    fileManager.close();
    List<CompilerIssue> compilerIssues = new ArrayList();
    collectResults(diagnostics, compilerIssues);
    collectResults(diagnostics, compilerIssues, relPath);
    return compilerIssues;
  }
  
src/java/de/uhilger/filecms/data/CompilerIssue.java
@@ -22,17 +22,17 @@
 *
 */
public class CompilerIssue {
  private String soureName;
  private String sourceName;
  private String message;
  private String kind;
  private long lineNumber;
  public String getSoureName() {
    return soureName;
  public String getSourceName() {
    return sourceName;
  }
  public void setSoureName(String soureName) {
    this.soureName = soureName;
  public void setSourceName(String sourceName) {
    this.sourceName = sourceName;
  }
  public String getMessage() {
web/WEB-INF/web.xml
@@ -7,7 +7,7 @@
          Bleibt der Eintrag leer oder wird er ganz weggelassen, wird ein hart 
          kodierter Pfad fuer die WebBox verwendet.</description>
        <param-name>datenAblage</param-name>
        <param-value>/home/ulli/srv/wbx_probe/daten</param-value>
        <param-value>C:\Users\hilgeru\Documents\daten</param-value>
    </context-param>
    <listener>
        <description>Der Initialiser setzt globale Variable fuer die Dateiverwaltung</description>
web/ui/index.html
@@ -10,6 +10,14 @@
    <link rel="stylesheet" type="text/css" href="/jslib/font-awesome/css/font-awesome.min.css">
    <link rel="stylesheet" type="text/css" href="/jslib/lightbox/lightbox.css">
    <link rel="stylesheet" type="text/css" href="stile.css">
    <script id="tpl-ci" type="x-tmpl-mustache">
      {{#issues}}
        <p class="compiler-issue">
          {{sourceName}}, line {{lineNumber}}<br>
          {{kind}}: {{message}}
        </p>
      {{/issues}}
    </script>
    <script id="tpl-kacheln" type="x-tmpl-mustache">
      {{#files}}          
        <figure class="figure datei-figure text-center text-warning align-top datei-elem">
@@ -111,6 +119,7 @@
              <a id="m-test" class="dropdown-item" href="#">Test</a>
              <a id="m-test-2" class="dropdown-item" href="#">Compile</a>
              <a id="m-test-3" class="dropdown-item" href="#">Compile all</a>
              <a id="m-compile-results" class="dropdown-item" href="#">Compile results</a>
              <div class="dropdown-divider"></div>
              <a id="logout" class="dropdown-item" href="#">Abmelden</a>
            </div>
@@ -205,11 +214,14 @@
      <!-- Modal ok / cancel Ende -->
    </div>
    <!-- Fusszeile -->
    <!--
    <div class="sued">
      Fu&szlig;zeile
      <button id="fusszeile-schliessen" type="button" class="close" aria-label="Close">
        <span aria-hidden="true">&times;</span>
      </button>
      <div class="system-out">
      </div>
    </div>
    -->
    <!-- Skripte -->
    <script src="/jslib/jquery/jquery.min.js"></script>
    <script src="/jslib/codemirror/lib/codemirror.js"></script>
web/ui/stile.css
@@ -73,7 +73,11 @@
}
.sued {
  background-color: lightgray;
  background-color: #eee;
}
.system-out {
  height: 8em;
  overflow-y: auto;
}
.west {
  flex-grow: 0;
web/ui/ui.js
@@ -40,6 +40,7 @@
  $("#mce-editor").hide();
  $('.codeeditor-space').hide();
  $('.code-editor-container').hide();
  $('.sued').hide();
  //$('.ost').attr('flex-basis', 0);
  $('#newTextFile').on('click', fm_menu_neue_textdatei);
  $('#newDoc').on('click', fm_menu_neues_dokument);
@@ -63,10 +64,12 @@
  $('#m-test').on('click', fm_menu_test);
  $('#m-test-2').on('click', fm_menu_compile);
  $('#m-test-3').on('click', fm_menu_compile_all);
  $('#m-compile-results').on('click', fm_fusszeile_zeigen);
  $('#saveModal').on('hidden.bs.modal', function (e) {
    $('#modal_ok').attr('onclick','').unbind('click');
  });
  $('#logout').click(fm_logout);  
  $('#fusszeile-schliessen').on('click', fm_fusszeile_schliessen);
  fm_get_login();
  fm_get_list('');
  fm_init_uploader();
@@ -89,6 +92,14 @@
    } catch (err) {
    }
  }, 200);
}
function fm_fusszeile_schliessen() {
  $('.sued').hide();
}
function fm_fusszeile_zeigen() {
  $('.sued').show();
}
function fm_get_path(uid) {
@@ -266,6 +277,7 @@
 */
function fm_gewaehlte_dateien() {
  var gewaehlte = $('.datei-gewaehlt');
  /*
  //console.log('anzahl: ' + gewaehlte.length);
  var fnames = new Array();
  var i = 0;
@@ -281,7 +293,27 @@
  // {"List":[{"java.lang.String":"test3.txt"},{"java.lang.String":"Test1.txt"},{"java.lang.String":"Test2.txt"}]}
  // und wird auf dem Server zu einer List[ArrayList<String>] bei der jede ArrayList<String> nur ein Element hat 
  return liste;
  */
  return fm_dateiliste_bilden(gewaehlte);
}
function fm_dateiliste_bilden(gewaehlte) {
  var fnames = new Array();
  var i = 0;
  while(i < gewaehlte.length) {
    var str = { "java.lang.String": $(gewaehlte[i]).text()};
    fnames.push(str);
    //console.log('loeschen ' + pfad + ' ' + $(gewaehlte[i]).text());
    //i += 2;
    i++;
  }
  var liste = '{"List":' + JSON.stringify(fnames) + '}';
  // 'liste' enthaelt:
  // {"List":[{"java.lang.String":"test3.txt"},{"java.lang.String":"Test1.txt"},{"java.lang.String":"Test2.txt"}]}
  // und wird auf dem Server zu einer List[ArrayList<String>] bei der jede ArrayList<String> nur ein Element hat
  return liste;
}
/* --------- Dateifunktionen Ende ---------- */
function fm_menu_test() {
@@ -335,21 +367,53 @@
    if(resp.List[0].CompilerIssue !== undefined) {
      var lno;
      var eMsg;
      var issueList = new Array();
      if(resp.List[0].CompilerIssue instanceof Array) {
        var issueNo = 0;
        while(issueNo < resp.List[0].CompilerIssue.length) {
          /*
          $('.system-out').append('   +++ ---- +++   ');
          $('.system-out').append(resp.List[0].CompilerIssue[issueNo].kind);
          $('.system-out').append(resp.List[0].CompilerIssue[issueNo].lineNumber);
          $('.system-out').append(resp.List[0].CompilerIssue[issueNo].sourceName);
          $('.system-out').append(resp.List[0].CompilerIssue[issueNo].message);
          */
          var issue = new CompilerIssue(
            resp.List[0].CompilerIssue[issueNo].sourceName,
            resp.List[0].CompilerIssue[issueNo].message,
            resp.List[0].CompilerIssue[issueNo].kind,
            resp.List[0].CompilerIssue[issueNo].lineNumber
          );
          issueList.push(issue);
          /*
          console.log('   +++ ---- +++   ');
          console.log(resp.List[0].CompilerIssue[issueNo].kind);
          console.log(resp.List[0].CompilerIssue[issueNo].lineNumber);
          console.log(resp.List[0].CompilerIssue[issueNo].sourceName);
          console.log(resp.List[0].CompilerIssue[issueNo].message);
          */
          issueNo++;
        }
      } else {
        lno = resp.List[0].CompilerIssue.lineNumber;
        eMsg = resp.List[0].CompilerIssue.kind + ' ' + resp.List[0].CompilerIssue.message;
        console.log(lno + ' ' + eMsg);
        //lno = resp.List[0].CompilerIssue.lineNumber;
        //eMsg = resp.List[0].CompilerIssue.kind + ' ' + resp.List[0].CompilerIssue.message;
        //$('.system-out').append(lno + ' ' + eMsg);
        //console.log(lno + ' ' + eMsg);
        var issue = new CompilerIssue(
          resp.List[0].CompilerIssue.sourceName,
          resp.List[0].CompilerIssue.message,
          resp.List[0].CompilerIssue.kind,
          resp.List[0].CompilerIssue.lineNumber
        );
        issueList.push(issue);
      }
      var theList = new IssueList(issueList);
      var template = $('#tpl-ci').html();
      Mustache.parse(template);   // optional, speeds up future uses
      $('.system-out').empty();
      $('.system-out').html(Mustache.render(template, theList));
      $('.sued').show();
    }
  });
}
@@ -1045,6 +1109,18 @@
/* ----- Objekte ----- */
function IssueList(il) {
  this.issues = il;
}
function CompilerIssue(sn, ms, ki, ln) {
  var self = this;
  this.sourceName = sn;
  this.message = ms;
  this.kind = ki;
  this.lineNumber = ln;
}
function FileList(fl) {
  this.files = fl;
}