Examples of XMLInfoNature


Examples of org.exolab.castor.builder.info.nature.XMLInfoNature

        DescriptorJClass classDesc = new DescriptorJClass(_config, descriptorClassName, jClass);

        //-- get handle to default constuctor
        JConstructor cons = classDesc.getConstructor(0);
        JSourceCode jsc   = cons.getSourceCode();
        XMLInfoNature xmlNature = new XMLInfoNature(classInfo);

        //-- Set namespace prefix
        String nsPrefix = xmlNature.getNamespacePrefix();
        if ((nsPrefix != null) && (nsPrefix.length() > 0)) {
            jsc.add("_nsPrefix = \"");
            jsc.append(nsPrefix);
            jsc.append("\";");
        }

        //-- Set namespace URI
        String nsURI = xmlNature.getNamespaceURI();
        if ((nsURI != null) && (nsURI.length() > 0)) {
            jsc.add("_nsURI = \"");
            jsc.append(nsURI);
            jsc.append("\";");
        }

        //-- set XML Name
        String xmlName = xmlNature.getNodeName();
        if (xmlName != null) {
            jsc.add("_xmlName = \"");
            jsc.append(xmlName);
            jsc.append("\";");
        }

        //-- set Element Definition flag
        boolean elementDefinition = xmlNature.isElementDefinition();
        jsc.add("_elementDefinition = ");
        jsc.append(new Boolean(elementDefinition).toString());
        jsc.append(";");
       
        //-- set grouping compositor
        if (xmlNature.isChoice()) {
            jsc.add("");
            jsc.add("//-- set grouping compositor");
            jsc.add("setCompositorAsChoice();");
        } else if (xmlNature.isSequence()) {
            jsc.add("");
            jsc.add("//-- set grouping compositor");
            jsc.add("setCompositorAsSequence();");
        }
       
        // handle substitution groups
        List<String> substitutionGroups = xmlNature.getSubstitutionGroups();
        if (!substitutionGroups.isEmpty()) {
            jsc.add("java.util.List substitutionGroups = new java.util.ArrayList();");
            Iterator<String> substitutionGroupIter = substitutionGroups.iterator();
            while (substitutionGroupIter.hasNext()) {
                String substitutionGroup = substitutionGroupIter.next();
                jsc.add("substitutionGroups.add(\"");
                jsc.append(substitutionGroup);
                jsc.append("\");");
            }
            jsc.add("setSubstitutes(substitutionGroups);");
        }
               
        //-- To prevent compiler warnings...make sure
        //-- we don't declare temp variables if field count is 0;
        if (classInfo.getFieldCount() == 0) {
            return classDesc;
        }

        //-- declare temp variables
        jsc.add("org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;");
        jsc.add("org.exolab.castor.mapping.FieldHandler             handler        = null;");
        jsc.add("org.exolab.castor.xml.FieldValidator               fieldValidator = null;");

        //-- handle  content
        if (classInfo.allowContent()) {
            createDescriptor(classDesc, classInfo.getTextField(), localClassName, null, jsc);
        }

        ClassInfo   base = classInfo.getBaseClass();
        FieldInfo[] atts = classInfo.getAttributeFields();

        //--------------------------------/
        //- Create attribute descriptors -/
        //--------------------------------/

        jsc.add("//-- initialize attribute descriptors");
        jsc.add("");

        for (int i = 0; i < atts.length; i++) {
            FieldInfo member = atts[i];
            //-- skip transient members
            if (member.isTransient()) {
                continue;
            }

            if (base != null) {
                String baseNodeName = new XMLInfoNature(member).getNodeName();
                if (baseNodeName.equals(XMLInfo.CHOICE_NODE_NAME_ERROR_INDICATION)) {
                    createDescriptor(classDesc, member, localClassName, nsURI, jsc);
                } else {
                    if (base.getAttributeField(baseNodeName) != null) {
                        createRestrictedDescriptor(member, jsc);
                    } else {
                        createDescriptor(classDesc, member, localClassName,
                                nsURI, jsc);
                    }
                }
            } else {
                createDescriptor(classDesc, member, localClassName, nsURI, jsc);
            }
        }

        //------------------------------/
        //- Create element descriptors -/
        //------------------------------/
        FieldInfo[] elements = classInfo.getElementFields();

        jsc.add("//-- initialize element descriptors");
        jsc.add("");

        for (int i = 0; i < elements.length; i++) {
            FieldInfo member = elements[i];
            //-- skip transient members
            if (member.isTransient()) {
                continue;
            }

            if (base != null) {
                String baseNodeName = xmlNature.getNodeName();
                if (baseNodeName == null) {
                    createDescriptor(classDesc, member, localClassName, nsURI, jsc);
                } else if (baseNodeName.equals(XMLInfo.CHOICE_NODE_NAME_ERROR_INDICATION)) {
                    createDescriptor(classDesc, member, localClassName, nsURI, jsc);
                } else {
View Full Code Here

Examples of org.exolab.castor.builder.info.nature.XMLInfoNature

     * @param member the restricted member for which we generate the restriction handling.
     * @param jsc the source code to which we append the validation code.
     */
    private static void createRestrictedDescriptor(final FieldInfo member, final JSourceCode jsc) {
        jsc.add("desc = (org.exolab.castor.xml.util.XMLFieldDescriptorImpl) getFieldDescriptor(\"");
        XMLInfoNature xmlNature = new XMLInfoNature(member);
        jsc.append(xmlNature.getNodeName());
        jsc.append("\"");
        jsc.append(", _nsURI");
        NodeType nodeType = xmlNature.getNodeType();
        if (nodeType == NodeType.ELEMENT) {
            jsc.append(", org.exolab.castor.xml.NodeType.Element);");
        } else if (nodeType == NodeType.ATTRIBUTE) {
            jsc.append(", org.exolab.castor.xml.NodeType.Attribute);");
        } else {
View Full Code Here

Examples of org.exolab.castor.builder.info.nature.XMLInfoNature

     */
    private void createDescriptor(final DescriptorJClass classDesc, final FieldInfo member,
                                  final String localClassName, final String nsURI,
                                  final JSourceCode jsc) {

        XMLInfoNature xmlNature = new XMLInfoNature(member);
       
        XSType xsType = xmlNature.getSchemaType();
        XSType xsCollectionType = null;
       
        boolean any         = false;
        NodeType nodeType = xmlNature.getNodeType();
        boolean isElement   = (nodeType == NodeType.ELEMENT);
        boolean isAttribute = (nodeType == NodeType.ATTRIBUTE);
        boolean isText      = (nodeType == NodeType.TEXT);

        jsc.add("//-- ");
        jsc.append(member.getName());

        //-- a hack, I know, I will change later (kv)
        if (member.getName().equals("_anyObject")) {
            any = true;
        }

        if (xsType.isCollection()) {
            //Attributes can handle COLLECTION type for NMTOKENS or IDREFS for instance
            xsCollectionType = xsType;
            xsType = new XMLInfoNature(((CollectionInfo) member).getContent()).getSchemaType();
        }

        // Resolve how the node name parameter to the XMLFieldDescriptorImpl constructor is supplied
        String nodeName = xmlNature.getNodeName();
        String nodeNameParam = null;
        if ((nodeName != null) && (!isText)) {
            //-- By default the node name parameter is a literal string
            nodeNameParam = "\"" + nodeName + "\"";
            if (_config.classDescFieldNames()) {
                //-- The node name parameter is a reference to a public static final
                nodeNameParam = nodeName.toUpperCase();
                //-- Expose node name as public static final (reused by XMLFieldDescriptorImpl)
                JConstant constant = new JConstant(SGTypes.STRING, nodeNameParam);
                constant.setInitString("\"" + nodeName + "\"");
                classDesc.addMember(constant);
            }
        }

        //-- Generate code to new XMLFieldDescriptorImpl instance
        jsc.add("desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(");
        jsc.append(classType(xsType.getJType()));
        jsc.append(", \"");
        jsc.append(member.getName());
        jsc.append("\", ");
        if (nodeNameParam != null) {
            jsc.append(nodeNameParam);
        } else if (isText) {
            jsc.append("\"PCDATA\"");
        } else {
            jsc.append("(java.lang.String) null");
        }

        if (isElement) {
            jsc.append(", org.exolab.castor.xml.NodeType.Element);");
        } else if (isAttribute) {
            jsc.append(", org.exolab.castor.xml.NodeType.Attribute);");
        } else if (isText) {
            jsc.append(", org.exolab.castor.xml.NodeType.Text);");
        }

        switch (xsType.getType()) {
            case XSType.STRING_TYPE :
                jsc.add("desc.setImmutable(true);");
                break;
                //only for attributes
            case XSType.IDREF_TYPE :
                jsc.add("desc.setReference(true);");
                break;
            case XSType.ID_TYPE :
                jsc.add("this._identity = desc;");
                break;
            case XSType.QNAME_TYPE :
                jsc.add("desc.setSchemaType(\"QName\");");
                break;
            default :
                break;
        } //switch

        //-- handler access methods
        if (member.getXMLFieldHandler() != null) {
            String handler = member.getXMLFieldHandler();
            jsc.add("handler = new " + handler + "();");
            jsc.add("//-- test for generalized field handler");
            jsc.add("if (handler instanceof ");
            jsc.append(GENERALIZED_FIELD_HANDLER_CLASS.getName());
            jsc.append(")");
            jsc.add("{");
            jsc.indent();
            jsc.add("//-- save reference to user-specified handler");
            jsc.add(GENERALIZED_FIELD_HANDLER_CLASS.getName());
            jsc.append(" gfh = (");
            jsc.append(GENERALIZED_FIELD_HANDLER_CLASS.getName());
            jsc.append(") handler;");
            _xmlFieldHandlerFactory.createXMLFieldHandler(
                    member, xsType, localClassName, jsc, true);
            jsc.add("gfh.setFieldHandler(handler);");
            jsc.add("handler = gfh;");
            jsc.unindent();
            jsc.add("}");
        } else {
            _xmlFieldHandlerFactory.createXMLFieldHandler(
                    member, xsType, localClassName, jsc, false);
            addSpecialHandlerLogic(member, xsType, jsc);
        }

        // Add the schema type as defined in the schema
        if (xsCollectionType == null) {
            jsc.add("desc.setSchemaType(\"" + xsType.getName() + "\");");
        } else {
            jsc.add("desc.setSchemaType(\"list\");");
            jsc.add("desc.setComponentType(\"" + xsType.getName() + "\");");
            if (xsCollectionType instanceof XSList && ((XSList) xsCollectionType).isDerivedFromXSList()) {
                jsc.add("desc.setDerivedFromXSList(true);");
            }
        }
        jsc.add("desc.setHandler(handler);");

        //-- container
        if (member.isContainer()) {
            jsc.add("desc.setContainer(true);");
            String className = xsType.getName(); //set the class descriptor
            //Try to prevent endless loop. Note: we only compare the localClassName.
            //If the packages are different an error can happen here
            if (className.equals(localClassName)) {
                jsc.add("desc.setClassDescriptor(this);");
            } else {
                String descriptorClassName = getQualifiedDescriptorClassName(className);
                jsc.add("desc.setClassDescriptor(new " + descriptorClassName + "());");
            }
        }

        //-- Handle namespaces
        //-- FieldInfo namespace has higher priority than ClassInfo namespace.
        if (xmlNature.getNamespaceURI() != null) {
            jsc.add("desc.setNameSpaceURI(\"");
            jsc.append(xmlNature.getNamespaceURI());
            jsc.append("\");");
        }

        //-- required
        if (xmlNature.isRequired()) {
            jsc.add("desc.setRequired(true);");
        }

        //-- nillable
        if (member.isNillable()) {
           jsc.add("desc.setNillable(true);");
        }

        //-- if any it can match all the names
        if (any) {
            jsc.add("desc.setMatches(\"*\");");
        }

        //-- mark as multi or single valued for elements
        if (isElement || isAttribute) {
            jsc.add("desc.setMultivalued(" + xmlNature.isMultivalued());
            jsc.append(");");
        }

        jsc.add("addFieldDescriptor(desc);");
        if (isElement) {
View Full Code Here

Examples of org.exolab.castor.builder.info.nature.XMLInfoNature

     * @param xsType the field type for which extra special handler logic may be created
     * @param jsc the java source code to which this will be written
     */
    private void addSpecialHandlerLogic(final FieldInfo member, final XSType xsType,
                                        final JSourceCode jsc) {
        XMLInfoNature xmlNature = new XMLInfoNature(member);
       
        if (xsType.isEnumerated()) {
            jsc.add("handler = new org.exolab.castor.xml.handlers.EnumFieldHandler(");
            jsc.append(classType(xsType.getJType()));
            jsc.append(", handler);");
            jsc.add("desc.setImmutable(true);");
        } else if (xsType.getType() == XSType.DATETIME_TYPE) {
            jsc.add("handler = new org.exolab.castor.xml.handlers.DateFieldHandler(");
            jsc.append("handler);");
            jsc.add("desc.setImmutable(true);");
        } else if (xsType.getType() == XSType.DECIMAL_TYPE) {
            jsc.add("desc.setImmutable(true);");
        } else if (xmlNature.getSchemaType().isCollection()) {
            //-- Handle special Collection Types such as NMTOKENS and IDREFS
            switch (xsType.getType()) {
                case XSType.NMTOKEN_TYPE:
                case XSType.NMTOKENS_TYPE:
                    //-- use CollectionFieldHandler
                    jsc.add("handler = new org.exolab.castor.xml.handlers.CollectionFieldHandler(");
                    jsc.append("handler, new org.exolab.castor.xml.validators.NameValidator(");
                    jsc.append("org.exolab.castor.xml.XMLConstants.NAME_TYPE_NMTOKEN));");
                    break;
                case XSType.QNAME_TYPE:
                    //-- use CollectionFieldHandler
                    jsc.add("handler = new org.exolab.castor.xml.handlers.CollectionFieldHandler(");
                    jsc.append("handler, null);");
                    break;
                case XSType.IDREF_TYPE:
                case XSType.IDREFS_TYPE:
                    //-- uses special code in UnmarshalHandler
                    //-- see UnmarshalHandler#processIDREF
                    jsc.add("desc.setMultivalued(");
                    jsc.append("" + xmlNature.isMultivalued());
                    jsc.append(");");
                    break;
                default:
                    break;
            }
View Full Code Here

Examples of org.exolab.castor.builder.info.nature.XMLInfoNature

            if (member.getName().equals("_anyObject")) {
                jsc.add("desc.setValidator(fieldValidator);");
                return;
            }

            XMLInfoNature xmlNature = new XMLInfoNature(member);
            XSType xsType = xmlNature.getSchemaType();
            //--handle collections
            if (xsType.isCollection()) {
                XSListType xsList = (XSListType) xsType;

                jsc.add("fieldValidator.setMinOccurs(");
                jsc.append(Integer.toString(xsList.getMinimumSize()));
                jsc.append(");");
                if (xsList.getMaximumSize() > 0) {
                    jsc.add("fieldValidator.setMaxOccurs(");
                    jsc.append(Integer.toString(xsList.getMaximumSize()));
                    jsc.append(");");
                }
            } else if (xmlNature.isRequired()) {
                jsc.add("fieldValidator.setMinOccurs(1);");
            }

            jsc.add("{ //-- local scope");
            jsc.indent();
View Full Code Here

Examples of org.exolab.castor.builder.info.nature.XMLInfoNature

    private boolean inCurrentSchema(final SGStateInfo state, final ClassInfo classInfo) {
        final String targetNamespace = state.getSchema().getTargetNamespace();
        boolean inCurrentSchema = true;
        if (targetNamespace != null) {
            if (classInfo.hasNature(XMLInfoNature.class.getName())) {
                XMLInfoNature xmlNature = new XMLInfoNature(classInfo);
                inCurrentSchema = targetNamespace.equals(xmlNature.getNamespaceURI());
            }
        }
        return inCurrentSchema;
    }
View Full Code Here

Examples of org.exolab.castor.builder.info.nature.XMLInfoNature

     * @param fieldInfo the fieldInfo to translate
     * @return the created methods
     */
    public JMethod[] createAccessMethods(final FieldInfo fieldInfo) {
            String mname = fieldInfo.getMethodSuffix();
            JType jType = new XMLInfoNature(fieldInfo).getSchemaType().getJType();

            JMethod[] methods = new JMethod[3];
            methods[0] = makeGetMethod(fieldInfo, mname, jType); // -- create get method
            methods[1] = makeSetMethod(fieldInfo, mname, jType); // -- create set method
            methods[2] = makeGetReferenceIdMethod(fieldInfo); // -- create getReferenceId
View Full Code Here

Examples of org.exolab.castor.builder.info.nature.XMLInfoNature

        //-- Set namespace prefix
        MapTo mapTo = new MapTo();
        classMapping.setMapTo(mapTo);

        XMLInfoNature xmlNature = new XMLInfoNature(classInfo);

        String nsPrefix = xmlNature.getNamespacePrefix();
        if ((nsPrefix != null) && (nsPrefix.length() > 0)) {
            mapTo.setNsPrefix(nsPrefix);
        }

        //-- Set namespace URI
        String nsURI = xmlNature.getNamespaceURI();
        if ((nsURI != null) && (nsURI.length() > 0)) {
            mapTo.setNsUri(nsURI);
        }

        //-- set XML Name
        mapTo.setXml(xmlNature.getNodeName());

        //-- set Element Definition flag
        mapTo.setElementDefinition(xmlNature.isElementDefinition());

        //-- set grouping compositor
        if (xmlNature.isChoice()) {
            // TODO need a way to specify choice in Mapping file
        }

        boolean isAbstract = classInfo.isAbstract();
        if (!isAbstract) {
            isAbstract = jClass.getModifiers().isAbstract();
        }
        classInfo.setAbstract(isAbstract);

        //-- To prevent compiler warnings...make sure
        //-- we don't declare temp variables if field count is 0;
        if (classInfo.getFieldCount() == 0) {
            return classMapping;
        }

        //-- handle  content
        if (classInfo.allowContent()) {
            createFieldMapping(classMapping, classInfo.getTextField(), null);
        }

        ClassInfo base = classInfo.getBaseClass();
        if (base != null) {
            classMapping.setExtends(base.getJClass().getName());
        }

        FieldInfo[] atts = classInfo.getAttributeFields();

        //-----------------------------/
        //- Create attribute mappings -/
        //-----------------------------/

        for (int i = 0; i < atts.length; i++) {
            FieldInfo member = atts[i];
            //-- skip transient members
            if (member.isTransient()) {
                continue;
            }

            //-- skip inherited fields
            if (base != null && base.getAttributeField(xmlNature.getNodeName()) != null) {
                continue;
            }

            createFieldMapping(classMapping, member, nsURI);
        }

        //---------------------------/
        //- Create element mappings -/
        //---------------------------/

        FieldInfo[] elements = classInfo.getElementFields();
        for (int i = 0; i < elements.length; i++) {
            FieldInfo member = elements[i];
            //-- skip transient members
            if (member.isTransient()) {
                continue;
            }

            //-- skip inherited fields
            if (base != null && base.getElementField(xmlNature.getNodeName()) != null) {
                continue;
            }

            createFieldMapping(classMapping, member, nsURI);
        }
View Full Code Here

Examples of org.exolab.castor.builder.info.nature.XMLInfoNature

     * @param member member for which we are creating a FieldMapping
     * @param nsURI name space URI
     */
    private void createFieldMapping(final ClassMapping classMapping, final FieldInfo member,
                                    final String nsURI) {
        XMLInfoNature xmlNature = new XMLInfoNature(member);
       
        XSType xsType = xmlNature.getSchemaType();

        boolean any = false;
        NodeType nodeType = xmlNature.getNodeType();
        boolean isAttribute = (nodeType == NodeType.ATTRIBUTE);
        boolean isText = (nodeType == NodeType.TEXT);

        //-- a hack, I know, I will change later (kv)
        if (member.getName().equals("_anyObject")) {
            any = true;
        }

        //Attributes can handle COLLECTION type for NMTOKENS or IDREFS for instance
        if (xsType.isCollection()) {
            xsType = new XMLInfoNature(((CollectionInfo) member).getContent()).getSchemaType();
        }

        //-- create class choice on demand
        ClassChoice classChoice = classMapping.getClassChoice();
        if (classChoice == null) {
            classChoice = new ClassChoice();
            classMapping.setClassChoice(classChoice);
        }

        //-- create field mapping
        FieldMapping fieldMap = new FieldMapping();
        classChoice.addFieldMapping(fieldMap);
        String fieldName = member.getName();
        if (fieldName.charAt(0) == '_') {
            fieldName = fieldName.substring(1);
        }
        fieldMap.setName(fieldName);
        String className = getClassName(xsType.getJType());
        if (className.equals("byte[]")) {
            className = "bytes";
        }
        fieldMap.setType(className);

        BindXml bindXml = new BindXml();
        fieldMap.setBindXml(bindXml);

        String nodeName = xmlNature.getNodeName();
        if ((nodeName != null) && (!isText)) {
            bindXml.setName(nodeName);
        }

        if (isAttribute) {
            bindXml.setNode(BindXmlNodeType.ATTRIBUTE);
        } else if (isText) {
            bindXml.setNode(BindXmlNodeType.TEXT);
        } else {
            bindXml.setNode(BindXmlNodeType.ELEMENT);
        }

        switch (xsType.getType()) {
            case XSType.IDREF_TYPE :
                bindXml.setReference(true);
                break;
            case XSType.ID_TYPE :
                classMapping.addIdentity(member.getName());
                break;
            case XSType.QNAME_TYPE :
                bindXml.setType("QName");
            default:
                break;
        }

        //-- set any user-specified field handler
        fieldMap.setHandler(member.getXMLFieldHandler());

        //-- container
        if (member.isContainer()) {
            fieldMap.setContainer(true);
        }

        // Handle namespaces.  FieldInfo namespace has higher priority than ClassInfo namespace.
        // TODO Need to add better namespace support to bind-xml element,
        //      it's not very good at the moment
//      nsURI = member.getNamespaceURI();
//      if (nsURI != null) {
//          jsc.add("desc.setNameSpaceURI(\"");
//          jsc.append(nsURI);
//          jsc.append("\");");
//      }
//
//      if (any && member.getNamespaceURI() == null) {
//          nsURI = null;
//      }

        // required
        if (xmlNature.isRequired()) {
            fieldMap.setRequired(true);
        }

        // nillable
        if (member.isNillable()) {
View Full Code Here

Examples of org.exolab.castor.builder.info.nature.XMLInfoNature

        }

        assertEquals(1, cInfos.size());

        ClassInfo cInfo = (ClassInfo) cInfos.get(0);
        XMLInfoNature xmlNature = new XMLInfoNature(cInfo);

        assertEquals("father", xmlNature.getNodeName());

        JDOClassInfoNature cNature = new JDOClassInfoNature(cInfo);

        assertEquals("Father", cNature.getTableName());
View Full Code Here
TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.