javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java
branchmodel
changeset 490 e089ef6785c0
parent 489 4b59fa013d49
child 491 14268cd404a4
     1.1 --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java	Sun Jan 20 12:29:50 2013 +0100
     1.2 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java	Sun Jan 20 13:05:02 2013 +0100
     1.3 @@ -34,17 +34,18 @@
     1.4  import javax.annotation.processing.SupportedAnnotationTypes;
     1.5  import javax.lang.model.element.AnnotationMirror;
     1.6  import javax.lang.model.element.Element;
     1.7 -import javax.lang.model.element.ElementKind;
     1.8  import javax.lang.model.element.ExecutableElement;
     1.9  import javax.lang.model.element.Modifier;
    1.10  import javax.lang.model.element.PackageElement;
    1.11  import javax.lang.model.element.TypeElement;
    1.12 +import javax.lang.model.type.MirroredTypeException;
    1.13  import javax.lang.model.type.TypeMirror;
    1.14  import javax.tools.Diagnostic;
    1.15  import javax.tools.FileObject;
    1.16  import javax.tools.StandardLocation;
    1.17  import org.apidesign.bck2brwsr.htmlpage.api.On;
    1.18  import org.apidesign.bck2brwsr.htmlpage.api.Page;
    1.19 +import org.apidesign.bck2brwsr.htmlpage.api.Property;
    1.20  import org.openide.util.lookup.ServiceProvider;
    1.21  
    1.22  /** Annotation processor to process an XHTML page and generate appropriate 
    1.23 @@ -99,6 +100,7 @@
    1.24                          return false;
    1.25                      }
    1.26                      w.append("  }\n");
    1.27 +                    generateProperties(w, p.properties());
    1.28                      w.append("}\n");
    1.29                  } finally {
    1.30                      w.close();
    1.31 @@ -229,4 +231,39 @@
    1.32          }
    1.33          return e.getEnclosingElement();
    1.34      }
    1.35 +
    1.36 +    private static void generateProperties(Writer w, Property[] properties) throws IOException {
    1.37 +        for (Property p : properties) {
    1.38 +            String[] gs = toGetSet(p);
    1.39 +
    1.40 +            final String tn = typeName(p);
    1.41 +            w.write("private static " + tn + " prop_" + p.name() + ";\n");
    1.42 +            w.write("public static " + tn + " " + gs[0] + "() {\n");
    1.43 +            w.write("  return prop_" + p.name() + ";\n");
    1.44 +            w.write("}\n");
    1.45 +            w.write("public static void " + gs[1] + "(" + tn + " v) {\n");
    1.46 +            w.write("  prop_" + p.name() + " = v;\n");
    1.47 +            w.write("}\n");
    1.48 +        }
    1.49 +    }
    1.50 +
    1.51 +    private static String[] toGetSet(Property p) {
    1.52 +        String n = Character.toUpperCase(p.name().charAt(0)) + p.name().substring(1);
    1.53 +//        if (p.type() == boolean.class) {
    1.54 +//            return new String[] { "is" + n, "set" + n };
    1.55 +//        } else {
    1.56 +        return new String[]{"get" + n, "set" + n};
    1.57 +//        }
    1.58 +    }
    1.59 +
    1.60 +    private static String typeName(Property p) {
    1.61 +        try {
    1.62 +            return p.type().getName();
    1.63 +        } catch (MirroredTypeException ex) {
    1.64 +            if (ex.getTypeMirror().getKind().isPrimitive()) {
    1.65 +                return ex.getTypeMirror().toString();
    1.66 +            }
    1.67 +            throw ex;
    1.68 +        }
    1.69 +    }
    1.70  }