Search in sources :

Example 1 with ApiParameterResponse

use of com.cloud.api.response.ApiParameterResponse in project cosmic by MissionCriticalCloud.

the class ApiDiscoveryServiceImpl method cacheResponseMap.

protected Map<String, List<String>> cacheResponseMap(final Set<Class<?>> cmdClasses) {
    final Map<String, List<String>> responseApiNameListMap = new HashMap<>();
    for (final Class<?> cmdClass : cmdClasses) {
        APICommand apiCmdAnnotation = cmdClass.getAnnotation(APICommand.class);
        if (apiCmdAnnotation == null) {
            apiCmdAnnotation = cmdClass.getSuperclass().getAnnotation(APICommand.class);
        }
        if (apiCmdAnnotation == null || !apiCmdAnnotation.includeInApiDoc() || apiCmdAnnotation.name().isEmpty()) {
            continue;
        }
        final String apiName = apiCmdAnnotation.name();
        if (s_logger.isTraceEnabled()) {
            s_logger.trace("Found api: " + apiName);
        }
        final ApiDiscoveryResponse response = getCmdRequestMap(cmdClass, apiCmdAnnotation);
        final String responseName = apiCmdAnnotation.responseObject().getName();
        if (!responseName.contains("SuccessResponse")) {
            if (!responseApiNameListMap.containsKey(responseName)) {
                responseApiNameListMap.put(responseName, new ArrayList<>());
            }
            responseApiNameListMap.get(responseName).add(apiName);
        }
        response.setRelated(responseName);
        final Field[] responseFields = apiCmdAnnotation.responseObject().getDeclaredFields();
        for (final Field responseField : responseFields) {
            final ApiResponseResponse responseResponse = getFieldResponseMap(responseField);
            response.addApiResponse(responseResponse);
        }
        response.setObjectName("api");
        s_apiNameDiscoveryResponseMap.put(apiName, response);
    }
    for (final String apiName : s_apiNameDiscoveryResponseMap.keySet()) {
        final ApiDiscoveryResponse response = s_apiNameDiscoveryResponseMap.get(apiName);
        final Set<ApiParameterResponse> processedParams = new HashSet<>();
        for (final ApiParameterResponse param : response.getParams()) {
            if (responseApiNameListMap.containsKey(param.getRelated())) {
                final List<String> relatedApis = responseApiNameListMap.get(param.getRelated());
                param.setRelated(StringUtils.join(relatedApis, ","));
            } else {
                param.setRelated(null);
            }
            processedParams.add(param);
        }
        response.setParams(processedParams);
        if (responseApiNameListMap.containsKey(response.getRelated())) {
            final List<String> relatedApis = responseApiNameListMap.get(response.getRelated());
            relatedApis.remove(apiName);
            response.setRelated(StringUtils.join(relatedApis, ","));
        } else {
            response.setRelated(null);
        }
        s_apiNameDiscoveryResponseMap.put(apiName, response);
    }
    return responseApiNameListMap;
}
Also used : HashMap(java.util.HashMap) ApiResponseResponse(com.cloud.api.response.ApiResponseResponse) ApiParameterResponse(com.cloud.api.response.ApiParameterResponse) APICommand(com.cloud.api.APICommand) Field(java.lang.reflect.Field) ArrayList(java.util.ArrayList) List(java.util.List) ApiDiscoveryResponse(com.cloud.api.response.ApiDiscoveryResponse) HashSet(java.util.HashSet)

Example 2 with ApiParameterResponse

use of com.cloud.api.response.ApiParameterResponse in project cosmic by MissionCriticalCloud.

the class ApiDiscoveryServiceImpl method getCmdRequestMap.

private ApiDiscoveryResponse getCmdRequestMap(final Class<?> cmdClass, final APICommand apiCmdAnnotation) {
    final String apiName = apiCmdAnnotation.name();
    final ApiDiscoveryResponse response = new ApiDiscoveryResponse();
    response.setName(apiName);
    response.setGroupName(apiCmdAnnotation.group().name());
    response.setGroupDescription(apiCmdAnnotation.group().toString());
    response.setDescription(apiCmdAnnotation.description());
    if (!apiCmdAnnotation.since().isEmpty()) {
        response.setSince(apiCmdAnnotation.since());
    }
    final Set<Field> fields = ReflectUtil.getAllFieldsForClass(cmdClass, new Class<?>[] { BaseCmd.class, BaseAsyncCmd.class, BaseAsyncCreateCmd.class });
    final boolean isAsync = ReflectUtil.isCmdClassAsync(cmdClass, new Class<?>[] { BaseAsyncCmd.class, BaseAsyncCreateCmd.class });
    response.setAsync(isAsync);
    for (final Field field : fields) {
        final Parameter parameterAnnotation = field.getAnnotation(Parameter.class);
        if (parameterAnnotation != null && parameterAnnotation.expose() && parameterAnnotation.includeInApiDoc()) {
            final ApiParameterResponse paramResponse = new ApiParameterResponse();
            paramResponse.setName(parameterAnnotation.name());
            paramResponse.setDescription(parameterAnnotation.description());
            paramResponse.setType(parameterAnnotation.type().toString().toLowerCase());
            paramResponse.setLength(parameterAnnotation.length());
            paramResponse.setRequired(parameterAnnotation.required());
            if (!parameterAnnotation.since().isEmpty()) {
                paramResponse.setSince(parameterAnnotation.since());
            }
            paramResponse.setRelated(parameterAnnotation.entityType()[0].getName());
            response.addParam(paramResponse);
        }
    }
    return response;
}
Also used : Field(java.lang.reflect.Field) ApiParameterResponse(com.cloud.api.response.ApiParameterResponse) Parameter(com.cloud.api.Parameter) ApiDiscoveryResponse(com.cloud.api.response.ApiDiscoveryResponse)

Aggregations

ApiDiscoveryResponse (com.cloud.api.response.ApiDiscoveryResponse)2 ApiParameterResponse (com.cloud.api.response.ApiParameterResponse)2 Field (java.lang.reflect.Field)2 APICommand (com.cloud.api.APICommand)1 Parameter (com.cloud.api.Parameter)1 ApiResponseResponse (com.cloud.api.response.ApiResponseResponse)1 ArrayList (java.util.ArrayList)1 HashMap (java.util.HashMap)1 HashSet (java.util.HashSet)1 List (java.util.List)1