Errors courtesy Jarda. dew
authorphrebejk
Mon, 21 Jan 2013 22:10:08 +0100
branchdew
changeset 541927a5f9fa430
parent 471 3f71a3364367
child 542 7400dc9f48fb
Errors courtesy Jarda.
launcher/src/main/java/org/apidesign/bck2brwsr/dew/Dew.java
launcher/src/main/resources/org/apidesign/bck2brwsr/dew/css/app.css
launcher/src/main/resources/org/apidesign/bck2brwsr/dew/index.html
launcher/src/main/resources/org/apidesign/bck2brwsr/dew/js/app.js
     1.1 --- a/launcher/src/main/java/org/apidesign/bck2brwsr/dew/Dew.java	Wed Jan 16 12:44:54 2013 +0100
     1.2 +++ b/launcher/src/main/java/org/apidesign/bck2brwsr/dew/Dew.java	Mon Jan 21 22:10:08 2013 +0100
     1.3 @@ -24,6 +24,8 @@
     1.4  import java.io.OutputStream;
     1.5  import java.io.Writer;
     1.6  import java.util.List;
     1.7 +import java.util.Locale;
     1.8 +import java.util.Locale;
     1.9  import java.util.logging.Logger;
    1.10  import javax.tools.Diagnostic;
    1.11  import javax.tools.JavaFileObject;
    1.12 @@ -33,7 +35,9 @@
    1.13  import org.glassfish.grizzly.http.server.Request;
    1.14  import org.glassfish.grizzly.http.server.Response;
    1.15  import org.glassfish.grizzly.http.util.HttpStatus;
    1.16 +import org.json.JSONArray;
    1.17  import org.json.JSONObject;
    1.18 +import org.json.JSONStringer;
    1.19  import org.json.JSONTokener;
    1.20  
    1.21  /**
    1.22 @@ -62,7 +66,19 @@
    1.23                  response.getOutputStream().write("[]".getBytes());
    1.24                  response.setStatus(HttpStatus.OK_200);
    1.25              } else {
    1.26 -                response.getOutputStream().write(("[errors:'" + err + "']").getBytes());
    1.27 +                
    1.28 +                JSONArray errors = new JSONArray();
    1.29 +                
    1.30 +                for (Diagnostic<? extends JavaFileObject> d : err) {
    1.31 +                    JSONObject e = new JSONObject();
    1.32 +                    e.put("col", d.getColumnNumber());
    1.33 +                    e.put("line", d.getLineNumber());
    1.34 +                    e.put("kind", d.getKind().toString());
    1.35 +                    e.put("msg", d.getMessage(Locale.ENGLISH));
    1.36 +                    errors.put(e);
    1.37 +                }
    1.38 +                
    1.39 +                errors.write(response.getWriter());                
    1.40                  response.setStatus(HttpStatus.PRECONDITION_FAILED_412);
    1.41              }
    1.42              
     2.1 --- a/launcher/src/main/resources/org/apidesign/bck2brwsr/dew/css/app.css	Wed Jan 16 12:44:54 2013 +0100
     2.2 +++ b/launcher/src/main/resources/org/apidesign/bck2brwsr/dew/css/app.css	Mon Jan 21 22:10:08 2013 +0100
     2.3 @@ -15,6 +15,11 @@
     2.4      overflow-x: auto;
     2.5  }
     2.6  
     2.7 +.error-hover:hover {
     2.8 +    text-decoration: underline;
     2.9 +    cursor: pointer;
    2.10 +} 
    2.11 +
    2.12  .ic-html5 {
    2.13    display: inline-block;  
    2.14    height: 20px;
     3.1 --- a/launcher/src/main/resources/org/apidesign/bck2brwsr/dew/index.html	Wed Jan 16 12:44:54 2013 +0100
     3.2 +++ b/launcher/src/main/resources/org/apidesign/bck2brwsr/dew/index.html	Mon Jan 21 22:10:08 2013 +0100
     3.3 @@ -14,33 +14,69 @@
     3.4          <link rel="stylesheet" href="css/app.css"/>
     3.5      </head>
     3.6      <body>
     3.7 -        <div class="container">        
     3.8 -        <div class="breadcrumb"><h4 class="text-info">Java and HTML5 <small>- Together at Last!</small></h4></div>    
     3.9 +                
    3.10 +        <div class="navbar navbar-fixed-top" style="width: 100%"> 
    3.11 +        <div class="navbar-inner" style="padding-left: 12px; padding-right: 12px;">
    3.12 +            <!-- a class="brand" style="font-size: 100%"><span class="text-info"><b>Java and HTML5</b></span><small>- Together at Last!</small></a-->
    3.13 +            <form class="navbar-form pull-right">
    3.14 +                <!-- select class="span2"></select -->
    3.15 +                <button ng-click="post()" class="btn btn-warning">Rebuild</button>
    3.16 +              </form>
    3.17 +            <!-- ul class="nav">                          
    3.18 +                <li><select class="btn-small" type="text"></select></li>
    3.19 +            </ul -->
    3.20 +            <!-- form class="form form-horizontal pull-right">
    3.21 +                <button class="btn btn-warning btn-small pull-right top" ng-click="post()">Rebuild</button>
    3.22 +            </form -->
    3.23 +            <!-- ul class="nav pull-right">
    3.24 +                
    3.25 +            </ul-->     
    3.26 +        </div>  
    3.27 +        </div>
    3.28 +
    3.29 +        <div class="container-fluid">        
    3.30 +        
    3.31 +        <div style="height: 4em;">&nbsp;</div>    
    3.32              
    3.33 -        <ul class="nav nav-tabs">
    3.34 -            <li ng-class="tabActive('html')" ng-click="tab='html'"><a href="#"><i class="ic-html5"></i> HTML5</a></li>
    3.35 -            <li ng-class="tabActive('java')" ng-click="tab='java'"><a href="#"><i class="ic-java"></i> Java</a></li>
    3.36 -        </ul>
    3.37 +        <div class="row-fluid">
    3.38 +            <div class="span6" style="margin-bottom: 10px;"> 
    3.39 +                <table class="table table-condensed" style="margin-bottom: 2px">
    3.40 +                <tr><td><i class="ic-html5"></i> HTML5</td></tr>               
    3.41 +                </table>
    3.42 +                <div>
    3.43 +                    <textarea ui-codemirror='{ lineNumbers : true, mode : "xml", theme : "elegant", matchBrackets : true, lineWrapping : true }' ng-model="html"></textarea>
    3.44 +                    <div class="alert alert-error" ng-show="doc.modelError">
    3.45 +                        <small>{{doc.modelError.toString()}}</small>
    3.46 +                    </div>
    3.47 +                </div>    
    3.48 +            </div>
    3.49 +            
    3.50 +            <div class="span6">  
    3.51 +                <table class="table table-condensed" style="margin-bottom: 2px">
    3.52 +                <tr><td><i class="ic-java"></i> Java</td></tr>               
    3.53 +                </table>                
    3.54 +                <div>
    3.55 +                    <textarea id="editorJava" ui-codemirror='{ lineNumbers : true, mode : "text/x-java", theme : "elegant", matchBrackets : true, lineWrapping : true }' ng-model="java"></textarea>
    3.56 +                    <div class="alert alert-error" ng-show="doc.modelError">
    3.57 +                        <small>{{doc.modelError.toString()}}</small>
    3.58 +                    </div>
    3.59 +                </div>
    3.60 +            </div>
    3.61          
    3.62 -        
    3.63 -        <div ng-switch on="tab">
    3.64 -        <div ng-switch-when="html">
    3.65 -            <textarea ui-codemirror='{ lineNumbers : true, mode : "xml", theme : "elegant", matchBrackets : true, lineWrapping : true }' ng-model="$parent.html"></textarea>
    3.66 -            <div class="alert alert-error" ng-show="doc.modelError">
    3.67 -                <small>{{doc.modelError.toString()}}</small>
    3.68 -            </div>
    3.69          </div>    
    3.70 -        <div ng-switch-when="java">
    3.71 -            <textarea ui-codemirror='{ lineNumbers : true, mode : "text/x-java", theme : "elegant", matchBrackets : true, lineWrapping : true }' ng-model="$parent.java"></textarea>
    3.72 -            <div class="alert alert-error" ng-show="doc.modelError">
    3.73 -                <small>{{doc.modelError.toString()}}</small>
    3.74 -            </div>
    3.75 -        </div>    
    3.76 -        </div>
    3.77 +            
    3.78 +        <table class="table table-condensed">
    3.79 +            <tr ng-click="gotoError(e.line, e.col)" ng-repeat="e in errors" ng-class="errorClass(e.kind)">
    3.80 +                <td style="text-align: right">{{e.line}}</td> 
    3.81 +                <td>:</td> 
    3.82 +                <td style="text-align: left">{{e.col}}</td> 
    3.83 +                <td width="100%" class="text-error error-hover">{{e.msg}} <i class="icon-play"/></td>
    3.84 +            </tr>            
    3.85 +        </table>    
    3.86 +            
    3.87          
    3.88          <div>&nbsp;</div>    
    3.89              
    3.90 -        <button class="btn btn-warning pull-right" ng-click="post()">Rebuild</button>
    3.91          <ul class="nav nav-tabs">
    3.92              <li ng-class="'active'"><a href="#">Result</a></li>
    3.93          </ul>    
     4.1 --- a/launcher/src/main/resources/org/apidesign/bck2brwsr/dew/js/app.js	Wed Jan 16 12:44:54 2013 +0100
     4.2 +++ b/launcher/src/main/resources/org/apidesign/bck2brwsr/dew/js/app.js	Mon Jan 21 22:10:08 2013 +0100
     4.3 @@ -29,6 +29,7 @@
     4.4                  
     4.5                  deferCodeMirror = function() {
     4.6                      codeMirror = CodeMirror.fromTextArea(elm[0], opts);
     4.7 +                    elm[0].codeMirror = codeMirror;
     4.8                      // codeMirror.on("change", onChange(opts.onChange));
     4.9                      codeMirror.on("change", onChange);
    4.10  
    4.11 @@ -119,19 +120,39 @@
    4.12          + "}\n";
    4.13  
    4.14      
    4.15 -    $scope.reload= function() {
    4.16 +    $scope.reload = function() {
    4.17 +        $scope.errors = null;
    4.18          var frame = document.getElementById("result");        
    4.19          frame.src = "result.html";
    4.20          frame.contentDocument.location.reload(true);
    4.21          frame.contentWindow.location.reload();
    4.22      };
    4.23      
    4.24 +    $scope.fail = function( data ) {
    4.25 +        $scope.errors = eval( data );
    4.26 +    };
    4.27 +    
    4.28      $scope.post = function(html, java) {
    4.29          return $http({url: ".",
    4.30              method: "POST",
    4.31              //headers: this.headers,
    4.32              data: { html : $scope.html, java : $scope.java} 
    4.33 -        }).success( $scope.reload );
    4.34 +        }).success( $scope.reload ).error( $scope.fail );
    4.35 +    };
    4.36 +    
    4.37 +    $scope.errorClass = function( kind ) {
    4.38 +        switch( kind ) {
    4.39 +            case "ERROR" :
    4.40 +                return "error";
    4.41 +            default :         
    4.42 +                return "warning";   
    4.43 +        }
    4.44 +    };
    4.45 +    
    4.46 +    $scope.gotoError = function( line, col ) {
    4.47 +        var editor = document.getElementById("editorJava").codeMirror;   
    4.48 +        editor.setCursor({ line: line - 1, ch : col });
    4.49 +        editor.focus();
    4.50      };
    4.51      
    4.52      $scope.tab = "html";