Return-Path: Delivered-To: apmail-incubator-cxf-commits-archive@locus.apache.org Received: (qmail 82179 invoked from network); 6 Sep 2006 16:11:46 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 6 Sep 2006 16:11:46 -0000 Received: (qmail 52866 invoked by uid 500); 6 Sep 2006 16:11:46 -0000 Delivered-To: apmail-incubator-cxf-commits-archive@incubator.apache.org Received: (qmail 52833 invoked by uid 500); 6 Sep 2006 16:11:45 -0000 Mailing-List: contact cxf-commits-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: cxf-dev@incubator.apache.org Delivered-To: mailing list cxf-commits@incubator.apache.org Received: (qmail 52823 invoked by uid 99); 6 Sep 2006 16:11:45 -0000 Received: from asf.osuosl.org (HELO asf.osuosl.org) (140.211.166.49) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 06 Sep 2006 09:11:45 -0700 X-ASF-Spam-Status: No, hits=-9.4 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received-SPF: pass (asf.osuosl.org: local policy) Received: from [140.211.166.113] (HELO eris.apache.org) (140.211.166.113) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 06 Sep 2006 09:11:42 -0700 Received: by eris.apache.org (Postfix, from userid 65534) id B11C01A9823; Wed, 6 Sep 2006 09:11:22 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r440753 [3/3] - in /incubator/cxf/trunk: api/src/main/java/org/apache/cxf/ common/src/main/java/org/apache/cxf/configuration/ common/src/main/java/org/apache/cxf/configuration/impl/ common/src/main/java/org/apache/cxf/configuration/spring/ ... Date: Wed, 06 Sep 2006 16:11:20 -0000 To: cxf-commits@incubator.apache.org From: andreasmyth@apache.org X-Mailer: svnmailer-1.1.0 Message-Id: <20060906161122.B11C01A9823@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N Added: incubator/cxf/trunk/tools/xjc/dv/.ruleset URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/xjc/dv/.ruleset?view=auto&rev=440753 ============================================================================== --- incubator/cxf/trunk/tools/xjc/dv/.ruleset (added) +++ incubator/cxf/trunk/tools/xjc/dv/.ruleset Wed Sep 6 09:11:15 2006 @@ -0,0 +1,172 @@ + + + PMD Plugin preferences rule set + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Added: incubator/cxf/trunk/tools/xjc/dv/pom.xml URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/xjc/dv/pom.xml?view=auto&rev=440753 ============================================================================== --- incubator/cxf/trunk/tools/xjc/dv/pom.xml (added) +++ incubator/cxf/trunk/tools/xjc/dv/pom.xml Wed Sep 6 09:11:15 2006 @@ -0,0 +1,39 @@ + + 4.0.0 + org.apache.cxf + cxf-tools-xjc-dv + jar + 1.1-SNAPSHOT + CXF XJC Default Value Plugin + http://cwiki.apache.org/confluence/display/CXF/CeltiXfire+space + + + org.apache.cxf + cxf-tools-xjc + 1.1-SNAPSHOT + + + + ../../.. + + + + + com.sun.xml.bind + jaxb-xjc + + + com.sun.xml.bind + jaxb-impl + + + + org.easymock + easymockclassextension + 2.2 + test + + + + Propchange: incubator/cxf/trunk/tools/xjc/dv/pom.xml ------------------------------------------------------------------------------ svn:eol-style = native Propchange: incubator/cxf/trunk/tools/xjc/dv/pom.xml ------------------------------------------------------------------------------ svn:keywords = Rev Date Propchange: incubator/cxf/trunk/tools/xjc/dv/pom.xml ------------------------------------------------------------------------------ svn:mime-type = text/xml Added: incubator/cxf/trunk/tools/xjc/dv/src/main/java/org/apache/cxf/xjc/dv/DefaultValuePlugin.java URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/xjc/dv/src/main/java/org/apache/cxf/xjc/dv/DefaultValuePlugin.java?view=auto&rev=440753 ============================================================================== --- incubator/cxf/trunk/tools/xjc/dv/src/main/java/org/apache/cxf/xjc/dv/DefaultValuePlugin.java (added) +++ incubator/cxf/trunk/tools/xjc/dv/src/main/java/org/apache/cxf/xjc/dv/DefaultValuePlugin.java Wed Sep 6 09:11:15 2006 @@ -0,0 +1,140 @@ +package org.apache.cxf.xjc.dv; + +import java.util.Map; + +import javax.xml.bind.DatatypeConverter; +import javax.xml.bind.annotation.adapters.HexBinaryAdapter; +import javax.xml.namespace.NamespaceContext; +import javax.xml.namespace.QName; + +import org.xml.sax.ErrorHandler; + +import com.sun.codemodel.JDefinedClass; +import com.sun.codemodel.JExpr; +import com.sun.codemodel.JFieldVar; +import com.sun.codemodel.JType; +import com.sun.tools.xjc.Options; +import com.sun.tools.xjc.Plugin; +import com.sun.tools.xjc.outline.ClassOutline; +import com.sun.tools.xjc.outline.FieldOutline; +import com.sun.tools.xjc.outline.Outline; +import com.sun.tools.xjc.util.NamespaceContextAdapter; +import com.sun.xml.xsom.XSElementDecl; +import com.sun.xml.xsom.XSParticle; +import com.sun.xml.xsom.XSTerm; +import com.sun.xml.xsom.XSType; +import com.sun.xml.xsom.XmlString; + +/** + * Modifies the JAXB code model to initialise fields mapped from schema elements + * with their default value. + */ +public class DefaultValuePlugin extends Plugin { + + public DefaultValuePlugin() { + } + + public String getOptionName() { + return "Xdv"; + } + + public String getUsage() { + return "-Xdv: Initialize fields mapped from elements with their default values"; + } + + public boolean run(Outline outline, Options opt, ErrorHandler errorHandler) { + System.out.println("Running default value plugin."); + for (ClassOutline co : outline.getClasses()) { + for (FieldOutline f : co.getDeclaredFields()) { + + // Use XML schema object model to determine if field is mapped + // from an element (attributes default values are handled + // natively) and get its default value. + + String fieldName = f.getPropertyInfo().getName(false); + XmlString xmlDefaultValue = null; + XSType xsType = null; + + if (f.getPropertyInfo().getSchemaComponent() instanceof XSParticle) { + XSParticle particle = (XSParticle)f.getPropertyInfo().getSchemaComponent(); + XSTerm term = particle.getTerm(); + XSElementDecl element = null; + + if (term.isElementDecl()) { + element = particle.getTerm().asElementDecl(); + xmlDefaultValue = element.getDefaultValue(); + xsType = element.getType(); + } + } + + if (null == xmlDefaultValue) { + continue; + } + + String defaultValue = xmlDefaultValue.value; + + if (null == defaultValue) { + continue; + } + + JType type = f.getRawType(); + String typeName = type.fullName(); + + JDefinedClass impl = co.implClass; + Map fields = impl.fields(); + JFieldVar var = fields.get(fieldName); + + if ("java.lang.Boolean".equals(typeName)) { + var.init(JExpr.direct(Boolean.valueOf(defaultValue) ? "Boolean.TRUE" : "Boolean.FALSE")); + } else if ("java.lang.Byte".equals(typeName)) { + var.init(JExpr._new(type) + .arg(JExpr.cast(type.unboxify(), + JExpr.lit(new Byte(Short.valueOf(defaultValue).byteValue()))))); + } else if ("java.lang.Double".equals(typeName)) { + var.init(JExpr._new(type) + .arg(JExpr.lit(new Double(Double.valueOf(defaultValue).doubleValue())))); + } else if ("java.lang.Float".equals(typeName)) { + var.init(JExpr._new(type) + .arg(JExpr.lit(new Float(Float.valueOf(defaultValue).floatValue())))); + } else if ("java.lang.Integer".equals(typeName)) { + var.init(JExpr._new(type) + .arg(JExpr.lit(new Integer(Integer.valueOf(defaultValue).intValue())))); + } else if ("java.lang.Long".equals(typeName)) { + var.init(JExpr._new(type) + .arg(JExpr.lit(new Long(Long.valueOf(defaultValue).longValue())))); + } else if ("java.lang.Short".equals(typeName)) { + var.init(JExpr._new(type) + .arg(JExpr.cast(type.unboxify(), + JExpr.lit(new Short(Short.valueOf(defaultValue).shortValue()))))); + } else if ("java.lang.String".equals(type.fullName())) { + var.init(JExpr.lit(defaultValue)); + } else if ("java.math.BigInteger".equals(type.fullName())) { + var.init(JExpr._new(type).arg(JExpr.lit(defaultValue))); + } else if ("java.math.BigDecimal".equals(type.fullName())) { + var.init(JExpr._new(type).arg(JExpr.lit(defaultValue))); + } else if ("byte[]".equals(type.fullName()) && xsType.isSimpleType()) { + while (!"anySimpleType".equals(xsType.getBaseType().getName())) { + xsType = xsType.getBaseType(); + } + if ("base64Binary".equals(xsType.getName())) { + // var.init(outline.getCodeModel().ref(DatatypeConverter.class) + // .staticInvoke("parseBase64Binary").arg(defaultValue)); + } else if ("hexBinary".equals(xsType.getName())) { + // var.init(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); + var.init(JExpr._new(outline.getCodeModel().ref(QName.class)) + .arg(qn.getNamespaceURI()) + .arg(qn.getLocalPart()) + .arg(qn.getPrefix())); + } + // TODO: GregorianCalendar, ... + } + } + + return true; + } +} Propchange: incubator/cxf/trunk/tools/xjc/dv/src/main/java/org/apache/cxf/xjc/dv/DefaultValuePlugin.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: incubator/cxf/trunk/tools/xjc/dv/src/main/java/org/apache/cxf/xjc/dv/DefaultValuePlugin.java ------------------------------------------------------------------------------ svn:keywords = Rev Date Added: incubator/cxf/trunk/tools/xjc/dv/src/main/resources/META-INF/services/com.sun.tools.xjc.Plugin URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/xjc/dv/src/main/resources/META-INF/services/com.sun.tools.xjc.Plugin?view=auto&rev=440753 ============================================================================== --- incubator/cxf/trunk/tools/xjc/dv/src/main/resources/META-INF/services/com.sun.tools.xjc.Plugin (added) +++ incubator/cxf/trunk/tools/xjc/dv/src/main/resources/META-INF/services/com.sun.tools.xjc.Plugin Wed Sep 6 09:11:15 2006 @@ -0,0 +1 @@ +org.apache.cxf.xjc.dv.DefaultValuePlugin Added: incubator/cxf/trunk/tools/xjc/pom.xml URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/xjc/pom.xml?view=auto&rev=440753 ============================================================================== --- incubator/cxf/trunk/tools/xjc/pom.xml (added) +++ incubator/cxf/trunk/tools/xjc/pom.xml Wed Sep 6 09:11:15 2006 @@ -0,0 +1,27 @@ + + 4.0.0 + org.apache.cxf + cxf-tools-xjc + pom + 1.1-SNAPSHOT + CXF XJC Plugins + http://cwiki.apache.org/confluence/display/CXF/CeltiXfire+space + + + org.apache.cxf + cxf-tools + 1.1-SNAPSHOT + + + + ../.. + + + + dv + cfg + cfg-test + dv-test + + Propchange: incubator/cxf/trunk/tools/xjc/pom.xml ------------------------------------------------------------------------------ svn:eol-style = native Propchange: incubator/cxf/trunk/tools/xjc/pom.xml ------------------------------------------------------------------------------ svn:keywords = Rev Date Propchange: incubator/cxf/trunk/tools/xjc/pom.xml ------------------------------------------------------------------------------ svn:mime-type = text/xml