+ public Class[] getArgTypes() {
+ Field[] fields = _class.getFields();
+ Class[] ret = new Class[fields.length];
+ for(int i=0; i<fields.length; i++)
+ ret[i] = fields[i].getType();
+ return ret;
+ }
+ public void toJava(StringBuffer sb) {
+ sb.append("Bindable.create(");
+ sb.append(_class.getName().replace('$','.'));
+ sb.append(".class)");
+ }
+ }
+
+
+ // Helpers //////////////////////////////////////////////////////////////////////////////
+
+ private static void appendClassArray(StringBuffer sb, Class[] c) {
+ sb.append("new Class[] {");
+ for(int i=0; i<c.length; i++) {
+ sb.append(makeClass(c[i]));
+ sb.append(".class");
+ if (i<c.length-1)
+ sb.append(",");
+ }
+ sb.append("}");
+ }
+
+ private static String makeClass(Class c) {
+ if (!c.isArray()) return c.getName().replace('$','.');
+ return makeClass(c.getComponentType())+"[]";
+ }
+
+
+ // Creating Bindings //////////////////////////////////////////////////////////////////////////////
+
+ private class SimpleBinding implements Binding, ToJava {
+ private int[] map = null;
+ private Object prepend = null;
+ public SimpleBinding() { }
+ public SimpleBinding(int[] map) { this.map = map; }
+ public SimpleBinding(int[] map, Object prepend) { this.map = map; this.prepend = prepend; }
+
+ public Object invoke(Object[] o) {
+ if (map==null) return impose(o);
+ int max = 0;
+ for(int i=0; i<map.length; i++) max = Math.max(map[i], max);
+ Object[] o2 = new Object[max+1];
+ for(int i=0; i<o.length; i++) o2[map[i]+(prepend==null?0:1)] = o[i];
+ if (prepend != null) o2[0] = prepend;
+ return impose(o2);
+ }
+
+ public void toJava(StringBuffer sb) {
+ Bindable.this.toJava(sb);
+ sb.append(".createBinding(");
+ if (map != null) {
+ sb.append("new int[] {");
+ for(int i=0; i<map.length; i++) {
+ sb.append(i);
+ if (i<map.length-1) sb.append(",");
+ }
+ sb.append("}");
+ }
+ sb.append(")");
+ }