private void writeRequestTypes()

in tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/SourceGenerator.java [1182:1333]


    private void writeRequestTypes(Element requestEl, //NOPMD
                                   String classPackage,
                                   Element repElement,
                                   List<Element> inParamEls,
                                   boolean jaxpRequired,
                                   StringBuilder sbCode,
                                   StringBuilder sbMethodDocs,
                                   Set<String> imports,
                                   ContextInfo info,
                                   boolean suspendedAsync) {
    //CHECKSTYLE:ON: ParameterNumber
        boolean form = false;
        boolean multipart = false;
        boolean formOrMultipartParamsAvailable = false;
        String requestMediaType = null;
        int currentSize = 0;
        if (requestEl != null) {
            inParamEls.addAll(getWadlElements(requestEl, "param"));
            currentSize = inParamEls.size();
            List<Element> repElements = getWadlElements(requestEl, "representation");
            form = addFormParameters(inParamEls, requestEl, repElements);
            if (form) {
                formOrMultipartParamsAvailable = currentSize < inParamEls.size();
                requestMediaType = repElements.get(0).getAttribute("mediaType");
                multipart = requestMediaType.startsWith("multipart/");
            }
        }

        boolean writeAnnotations = writeAnnotations(info.isInterfaceGenerated());
        for (int i = 0; i < inParamEls.size(); i++) {

            Element paramEl = inParamEls.get(i);

            Class<?> paramAnn = getParamAnnotation(paramEl.getAttribute("style"));
            if (i >= currentSize && paramAnn == QueryParam.class && formOrMultipartParamsAvailable) {
                paramAnn = !multipart ? FormParam.class : Multipart.class;
            }
            String name = paramEl.getAttribute("name");
            boolean enumCreated = false;
            if (generateEnums) {
                List<Element> options =
                    DOMUtils.findAllElementsByTagNameNS(paramEl, getWadlNamespace(), "option");
                if (!options.isEmpty()) {
                    generateEnumClass(getTypicalClassName(name), options, info.getSrcDir(), classPackage);
                    enumCreated = true;
                }
            }
            if (writeAnnotations) {
                String required = paramEl.getAttribute("required");
                if (Multipart.class.equals(paramAnn) && "false".equals(required)) {
                    writeAnnotation(sbCode, imports, paramAnn, null)
                        .append("(value = \"").append(name).append("\", required = false").append(')');
                } else {
                    writeAnnotation(sbCode, imports, paramAnn, name);
                }
                sbCode.append(' ');
                String defaultVal = paramEl.getAttribute("default");
                if (!defaultVal.isEmpty()) {
                    writeAnnotation(sbCode, imports, DefaultValue.class, defaultVal)
                        .append(' ');
                }
            }
            boolean isRepeating = isRepeatingParam(paramEl);
            String type = enumCreated ? getTypicalClassName(name)
                : getPrimitiveType(paramEl, info, imports);
            if (OPTIONAL_PARAMS.contains(paramAnn)
                && (isRepeating || !Boolean.valueOf(paramEl.getAttribute("required")))
                && AUTOBOXED_PRIMITIVES_MAP.containsKey(type)) {
                type = AUTOBOXED_PRIMITIVES_MAP.get(type);
            }
            type = addListIfRepeating(type, isRepeating, imports);
            String paramName;
            if (JavaUtils.isJavaKeyword(name)) {
                paramName = name.concat("_arg");
            } else {
                paramName = name.replaceAll("[:\\.\\-]", "_");
            }
            String javaParamName = StringUtils.uncapitalize(paramName);
            sbCode.append(type).append(' ').append(javaParamName);
            if (i + 1 < inParamEls.size()) {
                sbCode.append(", ");
                if (i + 1 >= 4 && ((i + 1) % 4) == 0) {
                    sbCode.append(lineSeparator).append(TAB).append(TAB).append(TAB).append(TAB);
                }
            }
            if (sbMethodDocs != null) {
                writeMethodParamDocs(paramEl, javaParamName, sbMethodDocs);
            }
        }
        String elementParamType = null;
        String elementParamName = null;
        boolean writeBeanValidation = false;
        if (!form) {
            if (!jaxpRequired) {
                elementParamType = getElementRefName(repElement, info, imports, false);
                if (elementParamType != null) {
                    if (writeAnnotations && supportBeanValidation
                        && isRepWithElementAvailable(Collections.singletonList(repElement), info.getGrammarInfo())) {
                        writeBeanValidation = true;
                    }
                    int lastIndex = elementParamType.lastIndexOf('.');
                    if (lastIndex != -1) {
                        elementParamType = elementParamType.substring(lastIndex + 1);
                    }
                    elementParamName = elementParamType.toLowerCase();
                } else if (repElement != null) {
                    Element param = DOMUtils.getFirstChildWithName(repElement, getWadlNamespace(), "param");
                    if (param != null) {
                        elementParamType = getPrimitiveType(param, info, imports);
                        elementParamName = param.getAttribute("name");
                    }
                }
            } else {
                addImport(imports, Source.class.getName());
                elementParamType = Source.class.getSimpleName();
                elementParamName = "source";
            }
        } else if (!formOrMultipartParamsAvailable) {
            if (requestMediaType != null && mediaTypesMap.containsKey(requestMediaType)) {
                elementParamType = addImportsAndGetSimpleName(imports, mediaTypesMap.get(requestMediaType));
            } else {
                String fullClassName = !multipart ? MultivaluedMap.class.getName() : MultipartBody.class.getName();
                elementParamType = addImportsAndGetSimpleName(imports, fullClassName);
            }
            elementParamName = !multipart ? "map" : "body";
        }
        if (elementParamType != null) {
            if (!inParamEls.isEmpty()) {
                sbCode.append(", ");
            }
            if (writeBeanValidation) {
                addImport(imports, BEAN_VALID_FULL_NAME);
                sbCode.append('@').append(BEAN_VALID_SIMPLE_NAME).append(' ');
            }

            sbCode.append(elementParamType).append(' ').append(elementParamName);
        }
        if (sbMethodDocs != null && repElement != null) {
            writeMethodParamDocs(repElement, elementParamName, sbMethodDocs);
        }
        if (suspendedAsync) {
            if (!inParamEls.isEmpty() || elementParamType != null) {
                sbCode.append(", ");
            }
            if (writeAnnotations) {
                writeAnnotation(sbCode, imports, Suspended.class, null)
                    .append(' ');
            }
            addImport(imports, AsyncResponse.class.getName());
            sbCode.append(AsyncResponse.class.getSimpleName()).append(' ').append("async");
        }
    }