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 }