Exemplo n.º 1
0
  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;
  }