JExpression getDefaultValueExpression()

in dv/src/main/java/org/apache/cxf/xjc/dv/DefaultValuePlugin.java [346:440]


    JExpression getDefaultValueExpression(FieldOutline f,
                                          ClassOutline co,
                                          Outline outline,
                                          XSType xsType,
                                          boolean isElement,
                                          XmlString xmlDefaultValue,
                                          boolean unbox) {
        JType type = f.getRawType();
        String typeName = type.fullName();
        String defaultValue = xmlDefaultValue == null ? null : xmlDefaultValue.value;
        if (defaultValue == null) {
            return null;
        }

        JExpression dv = null;
        
        if ("java.lang.Boolean".equals(typeName) && isElement) {
            dv = JExpr.direct(Boolean.valueOf(defaultValue) ? "Boolean.TRUE" : "Boolean.FALSE");
        } else if ("java.lang.Byte".equals(typeName) && isElement) {
            dv = ((JClass) type).staticInvoke("valueOf")
                .arg(JExpr.cast(type.unboxify(), JExpr.lit(Byte.parseByte(defaultValue))));
        } else if ("java.lang.Double".equals(typeName) && isElement) {
            dv = ((JClass) type).staticInvoke("valueOf")
                .arg(JExpr.lit(Double.parseDouble(defaultValue)));
        } else if ("java.lang.Float".equals(typeName) && isElement) {
            dv = ((JClass) type).staticInvoke("valueOf")
                .arg(JExpr.lit(Float.parseFloat(defaultValue)));
        } else if ("java.lang.Integer".equals(typeName) && isElement) {
            dv = ((JClass) type).staticInvoke("valueOf")
                .arg(JExpr.lit(Integer.parseInt(defaultValue)));
        } else if ("java.lang.Long".equals(typeName) && isElement) {
            dv = ((JClass) type).staticInvoke("valueOf")
                .arg(JExpr.lit(Long.parseLong(defaultValue)));
        } else if ("java.lang.Short".equals(typeName) && isElement) {
            dv = ((JClass) type).staticInvoke("valueOf")
                .arg(JExpr.cast(type.unboxify(), JExpr.lit(Short.parseShort(defaultValue))));
        } else if ("java.lang.String".equals(type.fullName()) && isElement) {
            dv = JExpr.lit(defaultValue);
        } else if ("java.math.BigInteger".equals(type.fullName()) && isElement) {
            dv = JExpr._new(type).arg(JExpr.lit(defaultValue));
        } else if ("java.math.BigDecimal".equals(type.fullName()) && isElement) {
            dv = JExpr._new(type).arg(JExpr.lit(defaultValue));
        } else if ("byte[]".equals(type.fullName()) && xsType.isSimpleType() && isElement) {
            while (!"anySimpleType".equals(xsType.getBaseType().getName())) {
                xsType = xsType.getBaseType();
            }
            if ("base64Binary".equals(xsType.getName())) {
                dv = outline.getCodeModel().ref(DatatypeConverter.class)
                   .staticInvoke("parseBase64Binary").arg(defaultValue);
            } else if ("hexBinary".equals(xsType.getName())) {
                dv = JExpr._new(outline.getCodeModel().ref(HexBinaryAdapter.class))
                    .invoke("unmarshal").arg(defaultValue);
            }
        } else if ("javax.xml.namespace.QName".equals(typeName)) {
            NamespaceContext nsc = new NamespaceContextAdapter(xmlDefaultValue);
            QName qn = DatatypeConverter.parseQName(xmlDefaultValue.value, nsc);
            dv = JExpr._new(outline.getCodeModel().ref(QName.class))
                .arg(qn.getNamespaceURI())
                .arg(qn.getLocalPart())
                .arg(qn.getPrefix());
        } else if ("javax.xml.datatype.Duration".equals(typeName)) {
            dv = null;
        } else if (type instanceof JDefinedClass) {
            JDefinedClass cls = (JDefinedClass)type;
            if (cls.getClassType() == ClassType.ENUM) {
                dv = cls.staticInvoke("fromValue").arg(defaultValue);
            }
        } else if (unbox) {
            typeName = type.unboxify().fullName();
            if ("int".equals(typeName)) {
                dv = JExpr.lit(Integer.parseInt(defaultValue));
            } else if ("long".equals(typeName)) {
                dv = JExpr.lit(Long.parseLong(defaultValue));
            } else if ("short".equals(typeName)) {
                dv = JExpr.lit(Short.parseShort(defaultValue));
            } else if ("boolean".equals(typeName)) {
                dv = JExpr.lit(Boolean.parseBoolean(defaultValue));
            } else if ("double".equals(typeName)) {
                dv = JExpr.lit(Double.parseDouble(defaultValue));
            } else if ("float".equals(typeName)) {
                dv = JExpr.lit(Float.parseFloat(defaultValue));
            } else if ("byte".equals(typeName)) {
                dv = JExpr.lit(Byte.parseByte(defaultValue));
            } else {
                dv = getDefaultValueExpression(f,
                                               co,
                                               outline,
                                               xsType,
                                               true,
                                               xmlDefaultValue,
                                               false);
            }
        }
        return dv;
    }