private void writeGetSetMethods()

in src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/BeanParamWriter.java [87:276]


    private void writeGetSetMethods() throws WrapperFault
    {
        if (type.isArray())
            return;
        
        try
        {
            int anyCounter = 0;
            
            for (int i = 0; i < attribs.length; i++)
            {
                // Set method name
                String methodName = attribs[i].getMethodName();
                
                // Set parameter name
                String parameterName = attribs[i].getParamNameAsMember();
                
                // Set the type to use
                String properParamType = getCorrectParmNameConsideringArraysAndComplexTypes(attribs[i]);
                
                String type = attribs[i].getTypeName();
                
                // arrays require '*' in prototype for type if one not specified.
                String asterisk = " ";
                
                // Details
                if (attribs[i].isArray())
                {
                    // Ensure that type on prototype is a pointer to an array
                    if (!properParamType.endsWith("*"))
                        asterisk += "* ";
                }
                else if (attribs[i].getType().isAnyElement())
                {
                    // We use a counter appended to parameter name.
                    anyCounter += 1;
                    parameterName = parameterName + Integer.toString(anyCounter);
                    methodName = methodName + Integer.toString(anyCounter);
                }
                
                properParamType = CUtils.sanitizeStringWithSplats(properParamType);
                type            = CUtils.sanitizeString(type);
                
                //=============================================================================
                // Write getter method
                //=============================================================================      

                CUtils.printMethodComment(c_writer, "Getter method for class member field " 
                        + parameterName + ".");
                
                c_writer.write(properParamType + asterisk + c_classname + "::\nget" + methodName + "()\n{\n");

                c_writer.write("\t" + "return " + parameterName + "; \n}\n");

                //=============================================================================
                // Write setter method
                //=============================================================================  
                
                CUtils.printMethodComment(c_writer, "Setter method for class member field " 
                        + parameterName + ".");
                
                // TODO setter leaks memory if setting complex type!
                if (attribs[i].isArray())
                {   
                    c_writer.write("void " + c_classname + "::\nset"
                            + methodName + "(" + properParamType + asterisk + "pInValue)\n{\n");
                    
                    if (attribs[i].getChoiceElement())
                    {
                        c_writer.write("\t// For 'choice' you need to ensure that any\n");
                        c_writer.write("\t// other objects belonging to this union of elements are empty.\n");
                    }
                    
                    c_writer.write("\tif(" + parameterName + " == NULL)\n");
                    c_writer.write("\t\t" + parameterName + " = new " + properParamType + "();\n");                   
                    
                    c_writer.write("\t" + parameterName + "->clone( *pInValue);\n");
                    c_writer.write("}\n");
                }
                else if (isElementNillable(i)  || isElementOptional(i))
                {
                    // Setter method
                    c_writer.write("void " + c_classname + "::\nset"
                            + methodName + "(" + properParamType  
                            + " pInValue, bool deep, bool makeCopy)\n{\n");
                    
                    if (attribs[i].getChoiceElement())
                    {
                        c_writer.write("\t// For 'choice' you need to ensure that any\n");
                        c_writer.write("\t// other objects belonging to this union of elements are NULL.\n");
                    }

                    c_writer.write("\tif (__axis_deepcopy_" + parameterName + ")\n");
                    c_writer.write("\t\tdelete " + parameterName + ";\n");
                    c_writer.write("\t" + parameterName + " = NULL;\n");

                    c_writer.write("\tif (pInValue != NULL)\n");
                    c_writer.write("\t{\n");
                    c_writer.write("\t\tif (deep && makeCopy)\n");
                    c_writer.write("\t\t{\n");
                    
                    c_writer.write("\t\t\t" + parameterName + " = new " + type + "();\n");

                    c_writer.write("\t\t\t*" + parameterName + " = *pInValue;\n");
                    c_writer.write("\t\t}\n");
                    c_writer.write("\t\telse\n");
                    c_writer.write("\t\t\t" + parameterName + " = pInValue;\n");
                    c_writer.write("\t}\n");

                    c_writer.write("\t__axis_deepcopy_" + parameterName + " = deep;\n");

                    c_writer.write("}\n");
                } 
                else
                {
                    c_writer.write("void " + c_classname + "::\nset"
                            + methodName + "(" + properParamType + " InValue");
                                        
                    Type attributeType = attribs[i].getType();
                    
                    boolean isPointerType = false;
                    if (attributeType.isSimpleType())
                        isPointerType = CUtils.isPointerType(CUtils.getSimpleType(attributeType.getBaseType())); 
                    else
                        isPointerType = CUtils.isPointerType(getCorrectParmNameConsideringArraysAndComplexTypes(attribs[i]));
                    
                    if((attribs[i].isSimpleType() || attribs[i].getType().isSimpleType()) 
                            && (isPointerType || attribs[i].getAllElement() || attribs[i].getChoiceElement()))
                        c_writer.write(", bool deep, bool makeCopy");
                    
                    c_writer.write(")\n{\n");
                    
                    if (attribs[i].getChoiceElement())
                    {
                        c_writer.write("\t// For 'choice' you need to ensure that any\n");
                        c_writer.write("\t// other objects belonging to this union of elements are NULL.\n");
                    }
                    
                    if(isPointerType)
                    {
                        c_writer.write("\tif (__axis_deepcopy_" + parameterName + ")\n");
                        c_writer.write("\t\tdelete [] " + parameterName + ";\n");
                        c_writer.write("\t" + parameterName + " = NULL;\n");
                        
                        c_writer.write("\tif(InValue != NULL)\n");
                        c_writer.write("\t{\n");
                        c_writer.write("\t\tif (deep && makeCopy)\n");
                        c_writer.write("\t\t{\n");
                        c_writer.write("\t\t\t" + parameterName + " = new char[strlen(InValue) + 1];\n");
                        c_writer.write("\t\t\tstrcpy(" + parameterName + ", InValue);\n");
                        c_writer.write("\t\t}\n");
                        c_writer.write("\t\telse\n");
                        c_writer.write("\t\t\t" + parameterName + " = InValue;\n");
                        c_writer.write("\t}\n");

                        c_writer.write("\t__axis_deepcopy_" + parameterName + " = deep;\n");
                    }
                    else if ((attribs[i].isSimpleType() || attribs[i].getType().isSimpleType()) 
                                && (attribs[i].getAllElement() || attribs[i].getChoiceElement()))
                    {
                        c_writer.write("\tif (__axis_deepcopy_" + parameterName + ")\n");
                        c_writer.write("\t\tdelete " + parameterName + ";\n");
                        c_writer.write("\t" + parameterName + " = NULL;\n");

                        c_writer.write("\tif (InValue != NULL)\n");
                        c_writer.write("\t{\n");
                        c_writer.write("\t\tif (deep && makeCopy)\n");
                        c_writer.write("\t\t{\n");
                        c_writer.write("\t\t\t" + parameterName + " = new " + type + "();\n");
                        c_writer.write("\t\t\t*" + parameterName + " = *InValue;\n");
                        c_writer.write("\t\t}\n");
                        c_writer.write("\t\telse\n");
                        c_writer.write("\t\t\t" + parameterName + " = InValue;\n");
                        c_writer.write("\t}\n");

                        c_writer.write("\t__axis_deepcopy_" + parameterName + " = deep;\n");
                    }
                    else
                        c_writer.write("\t" + parameterName + " = InValue ; \n");

                    c_writer.write("}\n");
                }
            } // for loop
        } 
        catch (IOException e)
        {
            throw new WrapperFault(e);
        }

    }