private void addMethod( ActionType action, Resource res, IMethodModel m, IDocInfo documentation, String returnName, String parameterName) { Action value = new Action(); value.setType(action); res.getActions().put(action, value); IParameterModel[] parameters = m.getParameters(); String[] responseCodes = new String[] {ResourceVisitor.DEFAULT_RESPONSE}; String[] responseDescriptions = new String[] {null}; if (config != null) { responseCodes = new String[] {config.getResponseCode(action)}; } IAnnotationModel annotation = m.getAnnotation(ResourceVisitor.API_RESPONSE); if (annotation != null) { responseCodes = new String[] {annotation.getValue(ResourceVisitor.CODE)}; responseDescriptions = new String[] {annotation.getValue(ResourceVisitor.MESSAGE)}; } annotation = m.getAnnotation(ResourceVisitor.API_RESPONSES); if (annotation != null) { IAnnotationModel[] subAnnotations = annotation.getSubAnnotations("value"); responseCodes = new String[subAnnotations.length]; responseDescriptions = new String[subAnnotations.length]; int a = 0; for (IAnnotationModel mq : subAnnotations) { responseCodes[a++] = mq.getValue(ResourceVisitor.CODE); responseDescriptions[a - 1] = mq.getValue(ResourceVisitor.MESSAGE); } } for (IParameterModel pm : parameters) { if (pm.hasAnnotation(QUERY_PARAM)) { String annotationValue = pm.getAnnotationValue(QUERY_PARAM); String type = pm.getType(); QueryParameter value2 = new QueryParameter(); configureParam(pm, value2); proceedType(type, value2, pm); String text = documentation.getDocumentation(pm.getName()); if (!"".equals(text)) { // $NON-NLS-1$ value2.setDescription(text); } value.getQueryParameters().put(annotationValue, value2); } } for (IParameterModel pm : parameters) { if (pm.hasAnnotation(HEADER_PARAM)) { String annotationValue = pm.getAnnotationValue(HEADER_PARAM); Header value2 = new Header(); configureParam(pm, value2); proceedType(pm.getType(), value2, pm); String text = documentation.getDocumentation(pm.getName()); if (!"".equals(text)) { // $NON-NLS-1$ value2.setDescription(text); } value.getHeaders().put(annotationValue, value2); } } for (IParameterModel pm : parameters) { if (pm.hasAnnotation(PATH_PARAM)) { String annotationValue = pm.getAnnotationValue(PATH_PARAM); UriParameter value2 = new UriParameter(); configureParam(pm, value2); String text = documentation.getDocumentation(pm.getName()); if (!"".equals(text)) { // $NON-NLS-1$ value2.setDescription(text); } proceedType(pm.getType(), value2, pm); res.getUriParameters().put(annotationValue, value2); } } String[] consumesValue = m.getAnnotationValues(CONSUMES); if (consumesValue == null) { consumesValue = classConsumes; } if (consumesValue != null) { for (String s : consumesValue) { s = sanitizeMediaType(s); MimeType bodyType = new MimeType(); if (s.contains(XML)) { bodyType.setSchema(parameterName); if (parameterName != null) { bodyType.setExample(EXAMPLES_PREFFIX + parameterName + XML_FILE_EXT); bodyType.setExampleOrigin(EXAMPLES_PREFFIX + parameterName + XML_FILE_EXT); } } if (s.contains(JSON)) { if (parameterName != null) { bodyType.setSchema(parameterName + ResourceVisitor.JSONSCHEMA); // $NON-NLS-1$ bodyType.setExample(EXAMPLES_PREFFIX + parameterName + JSON_FILE_EXT); bodyType.setExampleOrigin(EXAMPLES_PREFFIX + parameterName + JSON_FILE_EXT); } } bodyType.setType(s); if (s.contains(FORM)) { for (IParameterModel pm : parameters) { if (pm.hasAnnotation(FORM_PARAM)) { String annotationValue = pm.getAnnotationValue(FORM_PARAM); FormParameter vl = new FormParameter(); configureParam(pm, vl); String text = documentation.getDocumentation(pm.getName()); if (!"".equals(text)) { // $NON-NLS-1$ vl.setDescription(text); } proceedType(pm.getType(), vl, pm); ArrayList<FormParameter> arrayList = new ArrayList<FormParameter>(); arrayList.add(vl); if (bodyType.getFormParameters() == null) { bodyType.setFormParameters(new HashMap<String, java.util.List<FormParameter>>()); } bodyType.getFormParameters().put(annotationValue, arrayList); } } } value.getBody().put(s, bodyType); } } String[] producesValue = m.getAnnotationValues(PRODUCES); if (producesValue == null) { producesValue = classProduces; } int a = 0; for (String responseCode : responseCodes) { if (producesValue != null) { Response value2 = new Response(); String text = documentation.getReturnInfo(); String respDesc = responseDescriptions[a]; if (respDesc != null && respDesc.length() > 0) { text = respDesc; } a++; if (!"".equals(text)) { // $NON-NLS-1$ value2.setDescription(text); } for (String s : producesValue) { s = sanitizeMediaType(s); MimeType mimeType = new MimeType(); if (returnName != null) { if (s.contains(XML)) { mimeType.setSchema(returnName); if (returnName != null) { mimeType.setExample(EXAMPLES_PREFFIX + returnName + XML_FILE_EXT); mimeType.setExampleOrigin(EXAMPLES_PREFFIX + returnName + XML_FILE_EXT); } } if (s.contains(JSON)) { if (returnName != null) { mimeType.setSchema(returnName + ResourceVisitor.JSONSCHEMA); // $NON-NLS-1$ mimeType.setExample(EXAMPLES_PREFFIX + returnName + JSON_FILE_EXT); mimeType.setExampleOrigin(EXAMPLES_PREFFIX + returnName + JSON_FILE_EXT); } } } mimeType.setType(s); value2.getBody().put(s, mimeType); } value.getResponses().put(responseCode, value2); // $NON-NLS-1$ } else { Response value2 = new Response(); String text = documentation.getReturnInfo(); if (!"".equals(text)) { // $NON-NLS-1$ value2.setDescription(text); } value.getResponses().put(responseCode, value2); // $NON-NLS-1$ } } }
private String configureParam( IParameterModel model, AbstractParam param, IDocInfo documentation, IAnnotationModel paramAnnotation) { String paramName = paramAnnotation.getValue("value"); String type = model.getType(); proceedType(type, param, model); String text = documentation.getDocumentation(model.getName()); if (!"".equals(text)) { // $NON-NLS-1$ param.setDescription(text); } if (model.hasAnnotation("NotNull")) { // $NON-NLS-1$ param.setRequired(true); } if (model.hasAnnotation("Pattern")) { // $NON-NLS-1$ IAnnotationModel annotation = model.getAnnotation("Pattern"); // $NON-NLS-1$ String pattern = annotation.getValue("regexp"); // $NON-NLS-1$ param.setPattern(pattern); } if (model.hasAnnotation("Min")) { // $NON-NLS-1$ String min = model.getAnnotationValue("Min"); // $NON-NLS-1$ param.setMinimum(BigDecimal.valueOf(Double.parseDouble(min))); } if (model.hasAnnotation("DecimalMin")) { // $NON-NLS-1$ String min = model.getAnnotationValue("DecimalMin"); // $NON-NLS-1$ param.setMinimum(BigDecimal.valueOf(Double.parseDouble(min))); } if (model.hasAnnotation("Max")) { // $NON-NLS-1$ String max = model.getAnnotationValue("Max"); // $NON-NLS-1$ param.setMaximum(BigDecimal.valueOf(Double.parseDouble(max))); } if (model.hasAnnotation("DecimalMax")) { // $NON-NLS-1$ String max = model.getAnnotationValue("DecimalMax"); // $NON-NLS-1$ param.setMaximum(BigDecimal.valueOf(Double.parseDouble(max))); } if (model.hasAnnotation("ApiParam")) { IAnnotationModel ann = model.getAnnotation("ApiParam"); String allowableValues = ann.getValue("allowableValues"); if (allowableValues != null && !allowableValues.trim().isEmpty()) { int start = 0; int end = allowableValues.length(); if (allowableValues.startsWith("[")) { start++; } if (allowableValues.endsWith("]")) { end--; } allowableValues = allowableValues.substring(start, end); String[] split = allowableValues.split(","); ArrayList<String> list = new ArrayList<String>(); for (String s : split) { list.add(s.trim()); } param.setEnumeration(list); } String allowMultiple = ann.getValue("allowMultiple"); if (allowMultiple != null) { boolean boolValue = Boolean.parseBoolean(allowMultiple); param.setRepeat(boolValue); } String defaultValue = ann.getValue("defaultValue"); if (defaultValue != null && !defaultValue.trim().isEmpty()) { param.setDefaultValue(defaultValue.trim()); } String required = ann.getValue("required"); if (required != null && !required.trim().isEmpty()) { boolean boolValue = Boolean.parseBoolean(required); param.setRequired(boolValue); } String description = ann.getValue("value"); if (description != null && !description.trim().isEmpty()) { param.setDescription(description); } String overridenName = ann.getValue("name"); if (overridenName != null && !overridenName.trim().isEmpty()) { paramName = overridenName; } } return paramName; }