protected void preprocess()

in axis-codegen/src/main/java/org/apache/axis/wsdl/toJava/JavaBeanWriter.java [269:416]


    protected void preprocess() {
        
        // Add element names
        if (elements != null) {

            // Check the inheritance chain for xs:any and xs:mixed
            TypeEntry parent = extendType;
            while ((!parentIsAny || !parentIsMixed) && parent != null) {
                if (SchemaUtils.isMixed(parent.getNode())) {
                    parentIsMixed = true;
                }
                Vector hisElements = parent.getContainedElements();
                for (int i = 0; hisElements != null && i < hisElements.size(); i++) {
                    ElementDecl elem = (ElementDecl) hisElements.get(i);
                    if (elem.getAnyElement()) {
                        parentIsAny = true;
                    }
                }

                parent =
                    SchemaUtils.getComplexElementExtensionBase(parent.getNode(),
                            emitter.getSymbolTable());
            }

            for (int i = 0; i < elements.size(); i++) {
                ElementDecl elem = (ElementDecl) elements.get(i);
                String typeName = elem.getType().getName();
                String variableName = null;

                if (elem.getAnyElement()) {
                    if (!parentIsAny && !parentIsMixed) {
                        typeName = "org.apache.axis.message.MessageElement []";
                        variableName = Constants.ANYCONTENT;
                    }
                    isAny = true;
                } else {
                    variableName = elem.getName();
                    typeName = processTypeName(elem, typeName);
                }

                if (variableName == null) {
                    continue;
                }

                // Make sure the property name is not reserved.
                variableName = JavaUtils.getUniqueValue(
                        helper.reservedPropNames, variableName);
                names.add(typeName);
                names.add(variableName);

                if (type.isSimpleType()
                        && (variableName.endsWith("Value")
                        || variableName.equals("_value"))) {
                    simpleValueTypes.add(typeName);
                }

                // bug 19069: need to generate code that access member variables that
                // are enum types through the class interface, not the constructor
                // this util method returns non-null if the type at node is an enum
                if (null != Utils.getEnumerationBaseAndValues(
                        elem.getType().getNode(), emitter.getSymbolTable())) {
                    enumerationTypes.add(typeName);
                }
            }
        }

        if (enableMemberFields && SchemaUtils.isMixed(type.getNode())) {
            isMixed = true;
            if (!isAny && !parentIsAny && !parentIsMixed) {
                names.add("org.apache.axis.message.MessageElement []");
                names.add(Constants.ANYCONTENT);
            }
        }

        // Add attribute names
        if (attributes != null) {

            for (int i = 0; i < attributes.size(); i++) {
                ContainedAttribute attr = (ContainedAttribute) attributes.get(i);
                String typeName = attr.getType().getName();
                String variableName = getAttributeName(attr);

                // TODO - What about MinOccurs and Nillable?
                // Do they make sense here?
                if (attr.getOptional()) {
                    typeName = Utils.getWrapperType(typeName);
                }

                // Make sure the property name is not reserved.
                variableName = JavaUtils.getUniqueValue(
                        helper.reservedPropNames, variableName);

                names.add(typeName);
                names.add(variableName);

                if (type.isSimpleType()
                        && (variableName.endsWith("Value")
                        || variableName.equals("_value"))) {
                    simpleValueTypes.add(typeName);
                }

                // bug 19069: need to generate code that access member variables that
                // are enum types through the class interface, not the constructor
                // this util method returns non-null if the type at node is an enum
                if (null != Utils.getEnumerationBaseAndValues(attr.getType().getNode(),
                        emitter.getSymbolTable())) {
                    enumerationTypes.add(typeName);
                }
            }
        }

        if ((extendType != null) && extendType.getDimensions().equals("[]")) {
            String typeName = extendType.getName();
            String elemName = extendType.getQName().getLocalPart();
            String variableName = JavaUtils.xmlNameToJava(elemName);

            names.add(typeName);
            names.add(variableName);
        }

        if((extendType != null) && (Utils.getEnumerationBaseAndValues(
                        extendType.getNode(), emitter.getSymbolTable()) != null)){
            enableDefaultConstructor = false;
        }

        // Check for duplicate names and make them unique
        // Start at index 2 and go by twos
        for (int i = 1; i < names.size(); i +=2)
        {
            int suffix = 2;     // the number we append to the name
            String s = (String) names.elementAt(i);
            if (i < names.size() - 2)
            {
                int dup = names.indexOf(s, i+1);
                while (dup > 0)
                {
                    // duplicate name, tack a number on the end
                    names.set(dup, names.get(dup) + Integer.toString(suffix));
                    suffix++;
                    // get out if we don't have more
                    if (i >= names.size() - 2)
                        break;
                    dup = names.indexOf(s, dup+1);
                }
            }

        }
    }