Example usage for com.google.gwt.core.ext.typeinfo JArrayType getComponentType

List of usage examples for com.google.gwt.core.ext.typeinfo JArrayType getComponentType

Introduction

In this page you can find the example usage for com.google.gwt.core.ext.typeinfo JArrayType getComponentType.

Prototype

JType getComponentType();

Source Link

Usage

From source file:com.cgxlib.xq.rebind.JsonBuilderGenerator.java

License:Apache License

public void generateMethod(SourceWriter sw, JMethod method, String name, TreeLogger logger)
        throws UnableToCompleteException {
    String ifaceName = method.getEnclosingType().getQualifiedSourceName();

    String retType = method.getReturnType().getParameterizedQualifiedSourceName();
    sw.print("public final " + retType + " " + method.getName());
    JParameter[] params = method.getParameters();
    if (params.length == 0) {
        JArrayType arr = method.getReturnType().isArray();
        JParameterizedType list = method.getReturnType().isParameterized();

        sw.println("() {");
        sw.indent();//from   w w w.  ja va  2s.com
        if (retType.matches("(java.lang.Boolean|boolean)")) {
            sw.println("return p.getBoolean(\"" + name + "\");");
        } else if (retType.matches("java.util.Date")) {
            sw.println("return new Date(java.lang.Long.parseLong(p.getStr(\"" + name + "\")));");
        } else if (method.getReturnType().isPrimitive() != null) {
            sw.println("return (" + retType + ")p.getFloat(\"" + name + "\");");
        } else if (retType.equals("java.lang.Character")) {
            sw.println("return (char) p.getFloat(\"" + name + "\");");
        } else if (retType.equals("java.lang.Byte")) {
            sw.println("return (byte) p.getFloat(\"" + name + "\");");
        } else if (retType.equals("java.lang.Integer")) {
            sw.println("return (int) p.getFloat(\"" + name + "\");");
        } else if (retType.equals("java.lang.Float")) {
            sw.println("return p.getFloat(\"" + name + "\");");
        } else if (retType.equals("java.lang.Double")) {
            sw.println("return (double) p.getFloat(\"" + name + "\");");
        } else if (retType.equals("java.lang.Long")) {
            sw.println("return (long) p.getFloat(\"" + name + "\");");
        } else if (retType.equals("java.lang.Byte")) {
            sw.println("return (byte) p.getFloat(\"" + name + "\");");
        } else if (isTypeAssignableTo(method.getReturnType(), stringType)) {
            sw.println("return p.getStr(\"" + name + "\");");
        } else if (isTypeAssignableTo(method.getReturnType(), jsonBuilderType)) {
            String q = method.getReturnType().getQualifiedSourceName();
            sw.println("return " + "((" + q + ")GWT.create(" + q + ".class))" + ".load(getPropertiesBase(\""
                    + name + "\"));");
        } else if (isTypeAssignableTo(method.getReturnType(), settingsType)) {
            String q = method.getReturnType().getQualifiedSourceName();
            sw.println("return " + "((" + q + ")getPropertiesBase(\"" + name + "\"));");
        } else if (retType.equals(Properties.class.getName())) {
            sw.println("return getPropertiesBase(\"" + name + "\");");
        } else if (isTypeAssignableTo(method.getReturnType(), jsType)) {
            sw.println("return p.getJavaScriptObject(\"" + name + "\");");
        } else if (isTypeAssignableTo(method.getReturnType(), functionType)) {
            sw.println("return p.getFunction(\"" + name + "\");");
        } else if (arr != null || list != null) {
            JType type = arr != null ? arr.getComponentType() : list.getTypeArgs()[0];
            boolean buildType = isTypeAssignableTo(type, jsonBuilderType);
            String t = type.getQualifiedSourceName();
            sw.println("JsArrayMixed a = p.getArray(\"" + name + "\");");
            sw.println("int l = a == null ? 0 : a.length();");
            String ret;
            if (buildType) {
                sw.println(t + "[] r = new " + t + "[l];");
                sw.println("JsObjectArray<?> a1 = p.getArray(\"" + name + "\").cast();");
                sw.println("int l1 = r.length;");
                sw.println("for (int i = 0 ; i < l1 ; i++) {");
                sw.println("  Object w = a1.get(i);");
                sw.println("  " + t + " instance = GWT.create(" + t + ".class);");
                sw.println("  r[i] = instance.load(w);");
                sw.println("}");
                ret = "r";
            } else {
                ret = "getArrayBase(\"" + name + "\", new " + t + "[l], " + t + ".class)";
            }
            if (arr != null) {
                sw.println("return " + ret + ";");
            } else {
                sw.println("return Arrays.asList(" + ret + ");");
            }
        } else if (method.getReturnType().isEnum() != null) {
            sw.println("return " + method.getReturnType().getQualifiedSourceName() + ".valueOf(p.getStr(\""
                    + name + "\"));");
        } else {
            sw.println("System.err.println(\"JsonBuilderGenerator WARN: unknown return type " + retType + " "
                    + ifaceName + "." + name + "()\"); ");
            // We return the object because probably the user knows how to handle it
            sw.println("return p.get(\"" + name + "\");");
        }
        sw.outdent();
        sw.println("}");
    } else if (params.length == 1) {
        JType type = params[0].getType();
        JArrayType arr = type.isArray();
        JParameterizedType list = type.isParameterized();

        sw.print("(" + type.getParameterizedQualifiedSourceName() + " a)");
        sw.println("{");
        sw.indent();
        if (arr != null || list != null) {
            String a = "a";
            if (list != null) {
                a = "a.toArray(new " + list.getTypeArgs()[0].getQualifiedSourceName() + "[0])";
            }
            sw.println("setArrayBase(\"" + name + "\", " + a + ");");
        } else if (type.getParameterizedQualifiedSourceName().matches("java.util.Date")) {
            sw.println("p.setNumber(\"" + name + "\", a.getTime());");
        } else if (type.getParameterizedQualifiedSourceName().matches(
                "(java.lang.(Character|Long|Double|Integer|Float|Byte)|(char|long|double|int|float|byte))")) {
            sw.println("p.setNumber(\"" + name + "\", a);");
        } else if (type.getParameterizedQualifiedSourceName().matches("(java.lang.Boolean|boolean)")) {
            sw.println("p.setBoolean(\"" + name + "\", a);");
        } else if (type.getParameterizedQualifiedSourceName().matches("com.cgxlib.xq.client.Function")) {
            sw.println("p.setFunction(\"" + name + "\", a);");
        } else if (type.isEnum() != null) {
            sw.println("p.set(\"" + name + "\", a.name());");
        } else {
            sw.println("set(\"" + name + "\", a);");
        }
        if (!"void".equals(retType)) {
            if (isTypeAssignableTo(method.getReturnType(), method.getEnclosingType())) {
                sw.println("return this;");
            } else {
                sw.println("return null;");
            }
        }
        sw.outdent();
        sw.println("}");
    }
}

From source file:com.cgxlib.xq.rebind.XmlBuilderGenerator.java

License:Apache License

public void generateMethod(SourceWriter sw, JMethod method, TreeLogger logger)
        throws UnableToCompleteException {
    Name nameAnnotation = method.getAnnotation(Name.class);
    String name = nameAnnotation != null ? nameAnnotation.value()
            : method.getName().replaceFirst("^(get|set)", "");

    if (nameAnnotation == null) {
        name = name.substring(0, 1).toLowerCase() + name.substring(1);
    }//w  ww.  jav  a2  s.  co  m

    String retType = method.getReturnType().getParameterizedQualifiedSourceName();

    sw.print("public final " + retType + " " + method.getName());
    JParameter[] params = method.getParameters();
    if (params.length == 0) {
        JArrayType arr = method.getReturnType().isArray();
        sw.println("() {");
        sw.indent();
        if (retType.matches("(java.lang.Boolean|boolean)")) {
            sw.println("return getBooleanBase(\"" + name + "\");");
        } else if (method.getReturnType().isPrimitive() != null) {
            sw.println("return (" + retType + ")getFloatBase(\"" + name + "\");");
        } else if (isTypeAssignableTo(method.getReturnType(), stringType)) {
            sw.println("return getStrBase(\"" + name + "\");");
        } else if (isTypeAssignableTo(method.getReturnType(), xmlBuilderType)) {
            String q = method.getReturnType().getQualifiedSourceName();
            sw.println("Element e = getElementBase(\"" + name + "\");");
            sw.println(
                    "return e == null ? null : (" + q + ")((" + q + ")GWT.create(" + q + ".class)).load(e);");
        } else if (retType.equals(Properties.class.getName())) {
            sw.println("return getPropertiesBase(\"" + name + "\");");
        } else if (arr != null) {
            String q = arr.getComponentType().getQualifiedSourceName();
            sw.println("ArrayList<" + q + "> l = new ArrayList<" + q + ">();");
            sw.println("for (Element e: getElementsBase(\"" + name + "\")) {");
            sw.println("  " + q + " c = GWT.create(" + q + ".class);");
            sw.println("  c.load(e);");
            sw.println("  l.add(c);");
            sw.println("}");
            sw.println("return l.toArray(new " + q + "[0]);");
        } else {
            sw.println("return null; // Unsupported return type: " + retType);
        }
        sw.outdent();
        sw.println("}");
    } else if (params.length == 1) {
        JType type = params[0].getType();
        JArrayType arr = type.isArray();
        String qname = type.getParameterizedQualifiedSourceName();
        sw.print("(" + qname + " a)");
        sw.println("{");
        sw.indent();
        if (arr != null) {
            sw.println("setArrayBase(\"" + name + "\", a);");
        } else {
            sw.println("setBase(\"" + name + "\", a);");
        }
        if (!"void".equals(retType)) {
            if (isTypeAssignableTo(method.getReturnType(), method.getEnclosingType())) {
                sw.println("return this;");
            } else {
                sw.println("return null;");
            }
        }
        sw.outdent();
        sw.println("}");
    }
}

From source file:com.didactilab.gwt.phprpc.rebind.PhpTools.java

License:Apache License

public static String typeToString(JType type, boolean phpCompatible) {
    String name = "";
    JArrayType arrayType = type.isArray();
    if (arrayType != null) {
        if (phpCompatible)
            name = "array";
        else//from w ww . j av  a 2  s . c  o m
            name = typeToString(arrayType.getComponentType(), phpCompatible) + "[]";
    } else {
        JClassType classType = type.isClassOrInterface();
        if ((classType != null) && (classType.getEnclosingType() != null))
            name = typeToString(classType.getEnclosingType(), phpCompatible) + "_";
        name += filterType(type.getSimpleSourceName());
        if (!phpCompatible) {
            JParameterizedType params = type.isParameterized();
            if (params != null) {
                JClassType[] args = params.getTypeArgs();
                name += "<";
                for (int i = 0, c = args.length; i < c; i++) {
                    name += typeToString(args[i], phpCompatible);
                    if (i < c - 1)
                        name += ", ";
                }
                name += ">";
            }
        }
    }
    return name;
}

From source file:com.github.nmorel.gwtjackson.rebind.property.PropertyProcessor.java

License:Apache License

/**
 * Extract the bean type from the type given in parameter. For {@link java.util.Collection}, it gives the bounded type. For {@link
 * java.util.Map}, it gives the second bounded type. Otherwise, it gives the type given in parameter.
 *
 * @param type type to extract the bean type
 * @param propertyName name of the property
 *
 * @return the extracted type/*  w ww  . ja v  a2s. co m*/
 */
private static Optional<JClassType> extractBeanType(TreeLogger logger, JacksonTypeOracle typeOracle, JType type,
        String propertyName) {
    if (null != type.isWildcard()) {
        // we use the base type to find the serializer to use
        type = type.isWildcard().getBaseType();
    }

    if (null != type.isRawType()) {
        type = type.isRawType().getBaseType();
    }

    JArrayType arrayType = type.isArray();
    if (null != arrayType) {
        return extractBeanType(logger, typeOracle, arrayType.getComponentType(), propertyName);
    }

    JClassType classType = type.isClassOrInterface();
    if (null == classType) {
        return Optional.absent();
    } else if (typeOracle.isIterable(classType)) {
        if ((null == classType.isParameterized() || classType.isParameterized().getTypeArgs().length != 1)
                && (null == classType.isGenericType()
                        || classType.isGenericType().getTypeParameters().length != 1)) {
            logger.log(Type.INFO,
                    "Expected one argument for the java.lang.Iterable '" + propertyName
                            + "'. Applying annotations to " + "type "
                            + classType.getParameterizedQualifiedSourceName());
            return Optional.of(classType);
        }
        if (null != classType.isParameterized()) {
            return extractBeanType(logger, typeOracle, classType.isParameterized().getTypeArgs()[0],
                    propertyName);
        } else {
            return extractBeanType(logger, typeOracle,
                    classType.isGenericType().getTypeParameters()[0].getBaseType(), propertyName);
        }
    } else if (typeOracle.isMap(classType)) {
        if ((null == classType.isParameterized() || classType.isParameterized().getTypeArgs().length != 2)
                && (null == classType.isGenericType()
                        || classType.isGenericType().getTypeParameters().length != 2)) {
            logger.log(Type.INFO,
                    "Expected two arguments for the java.util.Map '" + propertyName
                            + "'. Applying annotations to " + "type "
                            + classType.getParameterizedQualifiedSourceName());
            return Optional.of(classType);
        }
        if (null != classType.isParameterized()) {
            return extractBeanType(logger, typeOracle, classType.isParameterized().getTypeArgs()[1],
                    propertyName);
        } else {
            return extractBeanType(logger, typeOracle,
                    classType.isGenericType().getTypeParameters()[1].getBaseType(), propertyName);
        }
    } else {
        return Optional.of(classType);
    }
}

From source file:com.guit.rebind.jsorm.JsonSerializerUtil.java

License:Apache License

public static String generate(TreeLogger logger, GeneratorContext context, JClassType pojoType)
        throws UnableToCompleteException {
    JsonSerializerUtil.logger = logger;/*from   w w w .j a v a  2s  .c  o m*/

    // We cannot serialize java.lang.Object
    String pojoQualifiedName = pojoType.getQualifiedSourceName();
    if (pojoQualifiedName.equals(Object.class.getCanonicalName())) {
        error("You cannot serialize Object... we either");
    }

    if (exceptions == null) {
        exceptions = new HashMap<String, String>();
        try {
            List<String> ormExceptions = context.getPropertyOracle()
                    .getConfigurationProperty("json.orm.exception").getValues();
            for (String e : ormExceptions) {
                String[] parts = e.split(" ");
                if (parts.length != 2) {
                    error("Bad json orm exception format. i.e 'java.util.List java.util.ArrayList<%s>. Found: %s'",
                            e);
                }
                exceptions.put(parts[0], parts[1]);
            }
        } catch (BadPropertyValueException e) {
            throw new IllegalStateException(e);
        }
    }

    String parameterizedQualifiedSourceName = pojoType.getParameterizedQualifiedSourceName();
    String typeName = parameterizedQualifiedSourceName;

    // Basic types
    if (typeName.equals(Void.class.getCanonicalName())) {
        return VoidSerializer.class.getCanonicalName();
    } else if (typeName.equals(String.class.getCanonicalName())) {
        return StringSerializer.class.getCanonicalName();
    } else if (typeName.equals(Integer.class.getCanonicalName())) {
        return IntegerSerializer.class.getCanonicalName();
    } else if (typeName.equals(Long.class.getCanonicalName())) {
        return LongSerializer.class.getCanonicalName();
    } else if (typeName.equals(Double.class.getCanonicalName())) {
        return DoubleSerializer.class.getCanonicalName();
    } else if (typeName.equals(Float.class.getCanonicalName())) {
        return FloatSerializer.class.getCanonicalName();
    } else if (typeName.equals(Date.class.getCanonicalName())) {
        return DateSerializer.class.getCanonicalName();
    } else if (typeName.equals(Boolean.class.getCanonicalName())) {
        return BooleanSerializer.class.getCanonicalName();
    }

    // Build name avoiding generics collitions
    StringBuilder implName = new StringBuilder();
    makeImplName(pojoType, implName);
    implName.append("_GuitJsonSerializer");

    String packageName = pojoType.getPackage().getName();
    if (packageName.startsWith("java.")) {
        packageName = "com.guit.java." + packageName.substring(5);
    }

    String implNameString = implName.toString();

    if (getClass(packageName, implNameString)) {
        return packageName + "." + implNameString;
    }

    ClassSourceFileComposerFactory composer = new ClassSourceFileComposerFactory(packageName, implNameString);
    composer.addImplementedInterface(TypeJsonSerializer.class.getCanonicalName() + "<" + typeName + ">");
    PrintWriter printWriter = context.tryCreate(logger, packageName, implNameString);
    String createdName = composer.getCreatedClassName();
    if (printWriter != null) {
        SourceWriter writer = composer.createSourceWriter(context, printWriter);

        JType iterableParameterType = null;
        JPrimitiveType iterableParameterPrimitiveType = null;

        // Iterable
        JGenericType iterableType = context.getTypeOracle().findType(Iterable.class.getCanonicalName())
                .isGenericType();
        boolean isIterable = false;
        if (iterableType.isAssignableFrom(pojoType)) {
            isIterable = true;
            iterableParameterType = pojoType.asParameterizationOf(iterableType).getTypeArgs()[0];
            iterableParameterPrimitiveType = iterableParameterType.isPrimitive();

            // Find if theres any exception
            String qualifiedSourceName = pojoQualifiedName;
            if (exceptions.containsKey(qualifiedSourceName)) {
                parameterizedQualifiedSourceName = exceptions.get(qualifiedSourceName) + "<"
                        + iterableParameterType.getParameterizedQualifiedSourceName() + ">";
            }
        }

        // Map
        JGenericType mapType = context.getTypeOracle().findType(Map.class.getCanonicalName()).isGenericType();
        boolean isMap = false;
        JClassType mapKeyType = null;
        JClassType mapValueType = null;
        if (mapType.isAssignableFrom(pojoType)) {
            isMap = true;
            JParameterizedType pojoMap = pojoType.asParameterizationOf(mapType);
            JClassType[] args = pojoMap.getTypeArgs();
            mapKeyType = args[0];
            mapValueType = args[1];

            // Find if theres any exception
            String qualifiedSourceName = pojoQualifiedName;
            if (exceptions.containsKey(qualifiedSourceName)) {
                parameterizedQualifiedSourceName = exceptions.get(qualifiedSourceName) + "<"
                        + mapKeyType.getParameterizedQualifiedSourceName() + ","
                        + mapValueType.getParameterizedQualifiedSourceName() + ">";
            }
        }

        // Array
        boolean isArray = false;
        JArrayType pojoArray = pojoType.isArray();
        if (pojoArray != null) {
            isArray = true;
            iterableParameterType = pojoArray.getComponentType();
            iterableParameterPrimitiveType = iterableParameterType.isPrimitive();
        }

        // For pojos
        ArrayList<JField> fields = null;

        writer.println("public static " + createdName + " singleton;");

        writer.println("public static " + createdName + " getSingleton() {");
        writer.indent();
        writer.println("return singleton == null ? (singleton = new " + createdName + "()) : singleton;");
        writer.outdent();
        writer.println("}");

        writer.println("@Override");
        writer.println("public " + JSONValue.class.getCanonicalName() + " serialize(" + typeName + " data) {");
        writer.indent();

        if (isMap) {
            writer.println("if (data != null) {");
            writer.indent();
            writer.println(JSONArray.class.getCanonicalName() + " array = new "
                    + JSONArray.class.getCanonicalName() + "();");
            writer.println("int n = 0;");
            writer.println("for (" + Entry.class.getCanonicalName() + "<"
                    + mapKeyType.getParameterizedQualifiedSourceName() + ", "
                    + mapValueType.getParameterizedQualifiedSourceName() + ">" + " entry : data.entrySet()) {");
            writer.indent();

            writer.print("array.set(n, ");
            JPrimitiveType mapKeyPrimitive = mapKeyType.isPrimitive();
            if (mapKeyPrimitive == null) {
                printValueSerialized(logger, context, writer, "entry.getKey()", mapKeyType, pojoType);
            } else {
                printPrimitiveSerialized(typeName, writer, "entry.getKey()", mapKeyPrimitive);
            }
            writer.println(");");
            writer.println("n++;");

            writer.print("array.set(n, ");
            JPrimitiveType mapValuePrimitive = mapValueType.isPrimitive();
            if (mapValuePrimitive == null) {
                printValueSerialized(logger, context, writer, "entry.getValue()", mapValueType, pojoType);
            } else {
                printPrimitiveSerialized(typeName, writer, "entry.getValue()", mapValuePrimitive);
            }
            writer.println(");");
            writer.println("n++;");

            writer.outdent();
            writer.println("}");
            writer.println("return array;");
            writer.outdent();
            writer.println("}");
            writer.println("return " + JSONNull.class.getCanonicalName() + ".getInstance();");
        } else if (isIterable || isArray) {
            writer.println("if (data != null) {");
            writer.indent();
            writer.println(JSONArray.class.getCanonicalName() + " array = new "
                    + JSONArray.class.getCanonicalName() + "();");
            writer.println("int n = 0;");
            writer.println(
                    "for (" + iterableParameterType.getParameterizedQualifiedSourceName() + " item : data) {");
            writer.indent();

            writer.print("array.set(n, ");
            if (iterableParameterPrimitiveType == null) {
                printValueSerialized(logger, context, writer, "item", iterableParameterType, pojoType);
            } else {
                printPrimitiveSerialized(typeName, writer, "item", iterableParameterPrimitiveType);
            }
            writer.println(");");
            writer.println("n++;");

            writer.outdent();
            writer.println("}");
            writer.println("return array;");
            writer.outdent();
            writer.println("}");
            writer.println("return " + JSONNull.class.getCanonicalName() + ".getInstance();");
        } else if (pojoType.isEnum() != null) {
            writer.println("if (data != null) {");
            writer.indent();
            writer.println("return new " + JSONString.class.getCanonicalName() + "(data.name());");
            writer.outdent();
            writer.println("}");
            writer.println("return " + JSONNull.class.getCanonicalName() + ".getInstance();");
        } else {
            // Assert the type have an empty constructor
            try {
                pojoType.getConstructor(emptyParameter);
            } catch (NotFoundException e) {
                error("The data type of the place does not have an empty constructor. Found %s", typeName);
            }

            writer.println(jsonObject + " json = new " + jsonObject + "();");

            fields = new ArrayList<JField>();
            getFields(fields, pojoType);
            for (JField f : fields) {
                String fieldName = f.getName();
                String getterName = fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);
                JType fieldType = f.getType();
                JPrimitiveType primitive = fieldType.isPrimitive();
                String fieldTypeQualifiedType = fieldType.getQualifiedSourceName();

                if (primitive != null) {
                    writer.print("json.put(\"" + fieldName + "\",");
                    printPrimitiveSerialized(typeName, writer, "get" + getterName + "(data)", primitive);
                    writer.println(");");
                } else {
                    writer.println(
                            fieldTypeQualifiedType + " " + fieldName + " = get" + getterName + "(data);");
                    writer.println("if (" + fieldName + " != null) {");
                    writer.indent();

                    writer.print("json.put(\"" + fieldName + "\",");
                    printValueSerialized(logger, context, writer, fieldName, fieldType, pojoType);
                    writer.println(");");

                    writer.outdent();
                    writer.println("}");
                }
            }

            writer.println("return json;");
        }

        writer.outdent();
        writer.println("}");

        // Getters and setters
        printJsniGettersAndSetters(writer, pojoType);

        writer.println("@Override");
        writer.println(
                "public " + typeName + " deserialize(" + JSONValue.class.getCanonicalName() + " jsonValue) {");
        writer.indent();

        if (isMap) {
            writer.println("if (jsonValue.isNull() == null) {");
            writer.indent();

            writer.println(JSONArray.class.getCanonicalName() + " jsonArray = jsonValue.isArray();");
            writer.println("int jsonArraySize = jsonArray.size();");

            writer.println(parameterizedQualifiedSourceName + " map = new " + parameterizedQualifiedSourceName
                    + "();");

            writer.println("for (int n = 0; n < jsonArraySize; n+=2) {");
            writer.indent();
            writer.println(JSONValue.class.getCanonicalName() + " key = jsonArray.get(n);");
            writer.println(JSONValue.class.getCanonicalName() + " value = jsonArray.get(n + 1);");

            writer.print("map.put(");
            JPrimitiveType mapKeyPrimitive = mapKeyType.isPrimitive();
            if (mapKeyPrimitive == null) {
                printValueDeserialized(logger, context, writer, "key", mapKeyType);
            } else {
                printPrimitiveDeserialized(typeName, writer, "key", mapKeyPrimitive);
            }
            writer.print(",");
            JPrimitiveType mapValuePrimitive = mapValueType.isPrimitive();
            if (mapValuePrimitive == null) {
                printValueDeserialized(logger, context, writer, "value", mapValueType);
            } else {
                printPrimitiveDeserialized(typeName, writer, "value", mapValuePrimitive);
            }
            writer.println(");");

            writer.outdent();
            writer.println("}");
            writer.println("return map;");
            writer.outdent();
            writer.println("} else { return null; }");
        } else if (isIterable || isArray) {
            writer.println("if (jsonValue.isNull() == null) {");
            writer.indent();

            writer.println(JSONArray.class.getCanonicalName() + " jsonArray = jsonValue.isArray();");
            writer.println("int jsonArraySize = jsonArray.size();");

            if (isIterable) {
                writer.println(parameterizedQualifiedSourceName + " array = new "
                        + parameterizedQualifiedSourceName + "();");
            } else {
                JArrayType array = iterableParameterType.isArray();
                if (array != null) {
                    String arrayName = array.getQualifiedSourceName() + "[]";
                    int index = arrayName.indexOf("[");
                    String arrayDeclaration = arrayName.substring(0, index + 1) + "jsonArraySize"
                            + arrayName.substring(index + 1);
                    writer.println(arrayName + " array = new " + arrayDeclaration + ";");
                } else {
                    String parameterQualifiedName = iterableParameterType.getQualifiedSourceName();
                    writer.println(parameterQualifiedName + "[] array = new " + parameterQualifiedName
                            + "[jsonArraySize];");
                }
            }

            writer.println("for (int n = 0; n < jsonArraySize; n++) {");
            writer.indent();
            writer.println(JSONValue.class.getCanonicalName() + " item = jsonArray.get(n);");

            if (isIterable) {
                writer.print("array.add(");
            } else {
                writer.print("array[n] = ");
            }

            if (iterableParameterPrimitiveType == null) {
                printValueDeserialized(logger, context, writer, "item", iterableParameterType);
            } else {
                printPrimitiveDeserialized(typeName, writer, "item", iterableParameterPrimitiveType);
            }

            if (isIterable) {
                writer.println(");");
            } else {
                writer.println(";");
            }

            writer.outdent();
            writer.println("}");
            writer.println("return array;");
            writer.outdent();
            writer.println("} else { return null; }");
        } else if (pojoType.isEnum() != null) {
            writer.println("if (jsonValue.isNull() == null) {");
            writer.indent();
            writer.println("return " + typeName + ".valueOf(jsonValue.isString().stringValue());");
            writer.outdent();
            writer.println("} else { return null; }");

        } else {
            // Assert the type have an empty constructor
            try {
                pojoType.getConstructor(emptyParameter);
            } catch (NotFoundException e) {
                error("The data type of the place does not have an empty constructor. Found %s", typeName);
            }

            writer.println(JSONObject.class.getCanonicalName() + " json = jsonValue.isObject();");
            writer.println(typeName + " instance = new " + typeName + "();");

            for (JField f : fields) {
                String fieldName = f.getName();
                String setterName = fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);
                JType fieldType = f.getType();
                JPrimitiveType primitive = fieldType.isPrimitive();
                if (primitive != null) {
                    writer.print("set" + setterName + "(instance,");
                    printPrimitiveDeserialized(typeName, writer, "json.get(\"" + fieldName + "\")", primitive);
                    writer.println(");");
                } else {
                    writer.println("if (json.containsKey(\"" + fieldName + "\")) {");
                    writer.indent();

                    writer.print("set" + setterName + "(instance,");
                    printValueDeserialized(logger, context, writer, "json.get(\"" + fieldName + "\")",
                            fieldType);
                    writer.println(");");

                    writer.outdent();
                    writer.println("}");
                }
            }

            writer.println("return instance;");
        }

        writer.outdent();
        writer.println("}");

        writer.commit(logger);
    }

    return createdName;
}

From source file:com.guit.rebind.jsorm.JsonSerializerUtil.java

License:Apache License

private static void makeImplName(JType pojoType, StringBuilder implName) {
    JArrayType array = pojoType.isArray();
    if (pojoType.isPrimitive() != null) {
        implName.append(pojoType.getSimpleSourceName());
    } else if (array != null) {
        implName.append("Array");
        makeImplName(array.getComponentType(), implName);
    } else {//  w  w  w.ja  va2s.c o  m
        JParameterizedType parameterized = pojoType.isParameterized();
        implName.append(pojoType.getSimpleSourceName());
        if (parameterized != null) {
            JClassType[] args = parameterized.getTypeArgs();
            for (JClassType a : args) {
                makeImplName(a, implName);
            }
        }
    }
}

From source file:com.rhizospherejs.gwt.rebind.ModelInspector.java

License:Open Source License

/**
 * Verifies that the return type of a POJO method matches a Java type that
 * can be ported onto an equivalent Rhizosphere type.
 *
 * @param method the method to inspect.//from w  w w.j  a  v  a2  s  .c  om
 * @throws UnableToCompleteException if the return type cannot be converted
 *     into an equivalent Rhizosphere type.
 */
private void verifyValidReturnType(JMethod method) throws UnableToCompleteException {
    JType returnType = method.getReturnType();
    JPrimitiveType primitiveReturnType = returnType.isPrimitive();
    if (primitiveReturnType != null) {
        verifySupportedPrimitiveReturnType(method, primitiveReturnType);
    }
    JArrayType arrayType = returnType.isArray();
    if (arrayType != null) {
        JType componentType = arrayType.getComponentType();
        if (componentType.isPrimitive() != null) {
            verifySupportedPrimitiveReturnType(method, componentType.isPrimitive());
        }
    }
}

From source file:com.seanchenxi.gwt.storage.rebind.StorageKeyProviderModel.java

License:Apache License

private boolean isValideType(JType type) {
    if (type == null)
        return false;

    if (type.isInterface() != null)
        return false;

    if (type.isPrimitive() != null)
        return true;

    JClassType aClass = type.isClass();/*from w  ww .  ja va2s.  c  om*/
    if (aClass != null
            && (aClass.isAssignableTo(serializableIntf) || aClass.isAssignableTo(isSerializableIntf))) {
        return true;
    }

    JArrayType array = type.isArray();
    if (array == null)
        return false;
    return isValideType(array.getComponentType());
}

From source file:com.smartgwt.rebind.BeanValueType.java

License:Open Source License

private void initializeBeanValueType() {
    requiresGeneration = false;//from   w w  w . j ava2s . c o m

    final JPrimitiveType primitiveType = valueType.isPrimitive();
    if (primitiveType != null) {
        if (primitiveType == JPrimitiveType.BOOLEAN) {
            beanValueType = findType(PBooleanValueType.class);
            genericType = findType(Boolean.class);
        } else if (primitiveType == JPrimitiveType.FLOAT) {
            beanValueType = findType(PFloatValueType.class);
            genericType = findType(Float.class);
        } else if (primitiveType == JPrimitiveType.DOUBLE) {
            beanValueType = findType(PDoubleValueType.class);
            genericType = findType(Double.class);
        } else if (primitiveType == JPrimitiveType.INT) {
            beanValueType = findType(PIntegerValueType.class);
            genericType = findType(Integer.class);
        } else if (primitiveType == JPrimitiveType.LONG) {
            beanValueType = findType(PLongValueType.class);
            genericType = findType(Long.class);
        }
        return;
    }

    final JEnumType enumType = valueType.isEnum();
    if (enumType != null) {
        genericType = enumType;

        final JType valueEnumType = findType(ValueEnum.class);
        if (Arrays.asList(enumType.getImplementedInterfaces()).contains(valueEnumType)) {
            beanValueType = findType(ValueEnumValueType.class);
        } else {
            beanValueType = findType(EnumValueType.class);
        }
        return;
    }

    final JArrayType arrayType = valueType.isArray();
    if (arrayType != null) {
        genericType = arrayType;
        componentType = arrayType.getComponentType();
        assert componentType != null;

        componentValueType = new BeanValueType(componentType, oracle);
        assert componentValueType != null;

        if (componentType.isPrimitive() != null) {
            if (componentType == JPrimitiveType.BOOLEAN) {
                beanValueType = findType(PBooleanArrayValueType.class);
            } else if (componentType == JPrimitiveType.DOUBLE) {
                beanValueType = findType(PDoubleArrayValueType.class);
            } else if (componentType == JPrimitiveType.FLOAT) {
                beanValueType = findType(PFloatArrayValueType.class);
            } else if (componentType == JPrimitiveType.INT) {
                beanValueType = findType(PIntegerArrayValueType.class);
            } else if (componentType == JPrimitiveType.LONG) {
                beanValueType = findType(PLongArrayValueType.class);
            }
        } else if (componentType.isInterface() != null) {
            beanValueType = findType(InterfaceArrayValueType.class);

            // We have to generate for isAssignableFrom to work
            requiresGeneration = true;

            // The generic type for the subclass is the component type,
            // rather than the array type
            genericType = componentType.isInterface();
        } else if (componentType instanceof JClassType) {
            beanValueType = findType(ObjectArrayValueType.class);
            constructorTakesEmptyArray = true;
            genericType = (JClassType) componentType;
        } else {
            throw new IllegalStateException("componentType " + componentType.getQualifiedSourceName()
                    + " is not a primitive, an interface, or a class");
        }

        return;
    }

    final JClassType classType = valueType.isClass();
    if (classType != null) {
        genericType = classType;

        if (classType == findType(Integer.class)) {
            beanValueType = findType(IntegerValueType.class);
        } else if (classType == findType(Boolean.class)) {
            beanValueType = findType(BooleanValueType.class);
        } else if (classType == findType(Float.class)) {
            beanValueType = findType(FloatValueType.class);
        } else if (classType == findType(Double.class)) {
            beanValueType = findType(DoubleValueType.class);
        } else if (classType == findType(Long.class)) {
            beanValueType = findType(LongValueType.class);
        } else if (classType == findType(Number.class)) {
            beanValueType = findType(NumberValueType.class);
        } else if (classType == findType(String.class)) {
            beanValueType = findType(StringValueType.class);
        } else if (classType == findType(Date.class)) {
            beanValueType = findType(DateValueType.class);
        } else if (classType.isAssignableTo(findType(JavaScriptObject.class))) {
            beanValueType = findType(JsoValueType.class);
        } else if (classType.isAssignableTo(findType(DataSource.class))) {
            beanValueType = findType(DataSourceBaseValueType.class);
            // Need to generate, in order to get newInstance(JavaScriptObject object)
            requiresGeneration = true;
            hasSetJavaScriptObject = true;
        } else if (classType.isAssignableTo(findType(Canvas.class))) {
            beanValueType = findType(CanvasBaseValueType.class);
            // Need to generate, in order to get newInstance(JavaScriptObject object)
            requiresGeneration = true;
            hasSetJavaScriptObject = true;
        } else if (jsObjConstructor != null) {
            beanValueType = findType(JsoWrapperValueType.class);
            // Need to generate, in order to get newInstance(JavaScriptObject object)
            requiresGeneration = true;
        } else {
            beanValueType = findType(OtherValueType.class);
        }
        return;
    }

    final JClassType interfaceType = valueType.isInterface();
    if (interfaceType != null) {
        genericType = interfaceType;
        beanValueType = findType(InterfaceValueType.class);

        // Need to generate, because otherwise we can't use instanceof
        requiresGeneration = true;

        return;
    }

    System.out.println("No specific BeanValueType subclass for " + getQualifiedTypeName());
}

From source file:com.totsp.gwittir.serial.json.rebind.JSONCodecGenerator.java

License:Open Source License

public void writeReader(SourceWriter writer, RProperty prop) {
    if (prop.getWriteMethod() == null) {
        return;//ww w  .  j  av  a  2s  .  co  m
    }

    JSONField field = prop.getReadMethod() == null ? null
            : prop.getReadMethod().getBaseMethod().getAnnotation(JSONField.class);
    JSONOmit omit = prop.getReadMethod() == null ? null
            : prop.getReadMethod().getBaseMethod().getAnnotation(JSONOmit.class);
    System.out.println(prop.getName() + " omit " + omit + " field " + field);
    if (omit != null) {
        return;
    }

    String fieldName = (field == null) ? prop.getName() : field.value();

    try {
        writer.println("if(root.containsKey(\"" + fieldName + "\")){");

        if (prop.getType().isPrimitive() == null) {
            writer.println("if(root.get(\"" + fieldName + "\").isNull() != null) {");
            writer.println(this.setterPrefix(prop) + "null);");
            writer.println("} else {");
        }

        if (prop.getType().isArray() != null) {
            JArrayType arrayType = prop.getType().isArray();
            JType paramType = arrayType.getComponentType();
            writer.println("JSONArray array = root.get(\"" + fieldName + "\").isArray();");
            writer.println(paramType.getQualifiedSourceName() + "[] value = new "
                    + paramType.getQualifiedSourceName() + "[ array.size() ];");
            writer.println("for(int i=0; i<array.size(); i++){");
            writer.indent();

            writer.println(" value[i] = " + this.fromType(paramType, "array.get(i)") + ";");

            writer.outdent();
            writer.println("}"); //endfor
            writer.println(this.setterPrefix(prop) + " value );");
        } else if (prop.getType() instanceof JClassType
                && ((JClassType) prop.getType()).isAssignableTo(this.collectionType)) {
            // get the parameter type
            JClassType propType = (JClassType) prop.getType();
            JType paramType = propType.asParameterizationOf((JGenericType) this.collectionType)
                    .getTypeArgs()[0];
            writer.println("JSONArray array = root.get(\"" + fieldName + "\").isArray();");
            writer.println(propType.getParameterizedQualifiedSourceName() + " col = "
                    + this.newCollectionExpression(propType) + ";");
            writer.println("for(int i=0; i<array.size(); i++){");
            writer.indent();

            writer.println(" col.add(" + this.fromType(paramType, "array.get(i)") + ");");

            writer.outdent();
            writer.println("}"); //endfor
            writer.println(this.setterPrefix(prop) + " col );");
        } else {
            writer.println(
                    setterPrefix(prop) + fromType(prop.getType(), "root.get(\"" + fieldName + "\")") + ");");
        }

        if (prop.getType().isPrimitive() == null) {
            writer.println("}"); //end null else
        }

        writer.println("}"); //end contains key
    } catch (Exception e) {
        System.out.println("Exception on prop " + prop);
        throw new RuntimeException(e);
    }
}