No need for WrapperObject.equals trick osgi
authorJaroslav Tulach <jaroslav.tulach@netbeans.org>
Tue, 24 Dec 2013 13:43:31 +0100
branchosgi
changeset 3842838203d1736
parent 383 b090267a3264
child 385 68012e8398a8
No need for WrapperObject.equals trick
json/src/main/java/org/apidesign/html/json/spi/Proto.java
json/src/main/java/org/netbeans/html/json/impl/JSON.java
json/src/main/java/org/netbeans/html/json/impl/ModelProcessor.java
json/src/main/java/org/netbeans/html/json/impl/WrapperObject.java
     1.1 --- a/json/src/main/java/org/apidesign/html/json/spi/Proto.java	Tue Dec 24 08:21:48 2013 +0100
     1.2 +++ b/json/src/main/java/org/apidesign/html/json/spi/Proto.java	Tue Dec 24 13:43:31 2013 +0100
     1.3 @@ -217,6 +217,7 @@
     1.4          public abstract Model cloneTo(Object model, BrwsrCtx ctx);
     1.5          public abstract Model read(BrwsrCtx c, Object json);
     1.6          public abstract void onChange(Model model, int index);
     1.7 +        public abstract Proto protoFor(Object object);
     1.8          
     1.9          //
    1.10          // Various support methods the generated classes use
    1.11 @@ -346,6 +347,6 @@
    1.12              }
    1.13              return type.cast(val);
    1.14          }
    1.15 -        
    1.16 +
    1.17      }
    1.18  }
     2.1 --- a/json/src/main/java/org/netbeans/html/json/impl/JSON.java	Tue Dec 24 08:21:48 2013 +0100
     2.2 +++ b/json/src/main/java/org/netbeans/html/json/impl/JSON.java	Tue Dec 24 13:43:31 2013 +0100
     2.3 @@ -339,7 +339,7 @@
     2.4          return findType(clazz) != null; 
     2.5      }
     2.6      
     2.7 -    private static Proto.Type<?> findType(Class<?> clazz) {
     2.8 +    static Proto.Type<?> findType(Class<?> clazz) {
     2.9          for (int i = 0; i < 2; i++) {
    2.10              Proto.Type<?> from = modelTypes.get(clazz);
    2.11              if (from == null) {
     3.1 --- a/json/src/main/java/org/netbeans/html/json/impl/ModelProcessor.java	Tue Dec 24 08:21:48 2013 +0100
     3.2 +++ b/json/src/main/java/org/netbeans/html/json/impl/ModelProcessor.java	Tue Dec 24 13:43:31 2013 +0100
     3.3 @@ -351,6 +351,9 @@
     3.4                  w.append("      }\n");
     3.5                  w.append("      throw new UnsupportedOperationException();\n");
     3.6                  w.append("    }\n");
     3.7 +                w.append("    @Override public org.apidesign.html.json.spi.Proto protoFor(Object obj) {\n");
     3.8 +                w.append("      return ((" + className + ")obj).proto;");
     3.9 +                w.append("    }\n");
    3.10                  w.append("    @Override public void onChange(" + className + " model, int type) {\n");
    3.11                  w.append("      switch (type) {\n");
    3.12                  {
    3.13 @@ -472,10 +475,6 @@
    3.14                  w.write("  }\n");
    3.15                  w.write("  public boolean equals(Object o) {\n");
    3.16                  w.write("    if (o == this) return true;\n");
    3.17 -                w.write("    if (o instanceof org.netbeans.html.json.impl.WrapperObject) {\n");
    3.18 -                w.write("      ((org.netbeans.html.json.impl.WrapperObject)o).setRealObject(proto.initBindings().koData());\n");
    3.19 -                w.write("      return false;\n");
    3.20 -                w.write("    }\n");
    3.21                  w.write("    if (!(o instanceof " + className + ")) return false;\n");
    3.22                  w.write("    " + className + " p = (" + className + ")o;\n");
    3.23                  for (Prprt p : props) {
     4.1 --- a/json/src/main/java/org/netbeans/html/json/impl/WrapperObject.java	Tue Dec 24 08:21:48 2013 +0100
     4.2 +++ b/json/src/main/java/org/netbeans/html/json/impl/WrapperObject.java	Tue Dec 24 13:43:31 2013 +0100
     4.3 @@ -43,22 +43,16 @@
     4.4  package org.netbeans.html.json.impl;
     4.5  
     4.6  import java.util.Collection;
     4.7 -import org.netbeans.html.json.impl.PropertyBindingAccessor.PBData;
     4.8 +import org.apidesign.html.json.spi.Proto;
     4.9  
    4.10  /** A way to extract real object from a model classes.
    4.11   *
    4.12   * @author Jaroslav Tulach <jtulach@netbeans.org>
    4.13   */
    4.14  public final class WrapperObject {
    4.15 -    private Object ko;
    4.16 -    
    4.17      private WrapperObject() {
    4.18      }
    4.19      
    4.20 -    public void setRealObject(Object ko) {
    4.21 -        this.ko = ko;
    4.22 -    }
    4.23 -    
    4.24      public static Object find(Object object) {
    4.25          return find(object, null);
    4.26      }
    4.27 @@ -74,9 +68,16 @@
    4.28          if (object instanceof Collection) {
    4.29              return JSONList.koData((Collection<?>)object, model);
    4.30          }
    4.31 -        
    4.32 -        WrapperObject ro = new WrapperObject();
    4.33 -        object.equals(ro);
    4.34 -        return ro.ko;
    4.35 +
    4.36 +        Proto.Type<?> type = JSON.findType(object.getClass());
    4.37 +        if (type == null) {
    4.38 +            return null;
    4.39 +        }
    4.40 +        final Proto proto = type.protoFor(object);
    4.41 +        if (proto == null) {
    4.42 +            return null;
    4.43 +        }
    4.44 +        final Bindings b = proto.initBindings();
    4.45 +        return b == null ? null : b.koData();
    4.46      }
    4.47  }