javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java
branchmodel
changeset 512 1c3fda8898a1
parent 510 aaf86ae88f46
child 528 08cd5a0c967e
     1.1 --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java	Mon Jan 21 15:57:30 2013 +0100
     1.2 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java	Mon Jan 21 16:16:30 2013 +0100
     1.3 @@ -96,11 +96,9 @@
     1.4                      w.append("import org.apidesign.bck2brwsr.htmlpage.api.*;\n");
     1.5                      w.append("final class ").append(className).append(" {\n");
     1.6                      w.append("  private static boolean locked;\n");
     1.7 -                    w.append("  public ").append(className).append("() {\n");
     1.8                      if (!initializeOnClick(className, (TypeElement) e, w, pp)) {
     1.9                          return false;
    1.10                      }
    1.11 -                    w.append("  }\n");
    1.12                      for (String id : pp.ids()) {
    1.13                          String tag = pp.tagNameForId(id);
    1.14                          String type = type(tag);
    1.15 @@ -177,6 +175,9 @@
    1.16            //  if (clazz.getKind() != ElementKind.CLASS) {
    1.17              //    continue;
    1.18             // }
    1.19 +            w.append("  public ").append(className).append("() {\n");
    1.20 +            StringBuilder dispatch = new StringBuilder();
    1.21 +            int dispatchCnt = 0;
    1.22              for (Element method : type.getEnclosedElements()) {
    1.23                  On oc = method.getAnnotation(On.class);
    1.24                  if (oc != null) {
    1.25 @@ -218,15 +219,33 @@
    1.26                              return false;
    1.27                          }
    1.28                          w.append("  OnEvent." + oc.event()).append(".of(").append(cnstnt(id)).
    1.29 -                            append(").perform(new Runnable() { public void run() {\n");
    1.30 -                        w.append("    ").append(type.getSimpleName().toString()).
    1.31 -                            append('.').append(ee.getSimpleName()).append("(");
    1.32 -                        w.append(params);
    1.33 -                        w.append(");\n");
    1.34 -                        w.append("  }});\n");
    1.35 -                    }           
    1.36 +                            append(").perform(new OnDispatch(" + dispatchCnt + "));\n");
    1.37 +
    1.38 +                        dispatch.
    1.39 +                            append("      case ").append(dispatchCnt).append(": ").
    1.40 +                            append(type.getSimpleName().toString()).
    1.41 +                            append('.').append(ee.getSimpleName()).append("(").
    1.42 +                            append(params).
    1.43 +                            append("); break;\n");
    1.44 +                        
    1.45 +                        dispatchCnt++;
    1.46 +                    }
    1.47                  }
    1.48              }
    1.49 +            w.append("  }\n");
    1.50 +            if (dispatchCnt > 0) {
    1.51 +                w.append("class OnDispatch implements Runnable {\n");
    1.52 +                w.append("  private final int dispatch;\n");
    1.53 +                w.append("  OnDispatch(int d) { dispatch = d; }\n");
    1.54 +                w.append("  public void run() {\n");
    1.55 +                w.append("    switch (dispatch) {\n");
    1.56 +                w.append(dispatch);
    1.57 +                w.append("    }\n");
    1.58 +                w.append("  }\n");
    1.59 +                w.append("}\n");
    1.60 +            }
    1.61 +            
    1.62 +
    1.63          }
    1.64          return true;
    1.65      }