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");
}
}