use of com.cloud.api.response.ApiResponseResponse 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;
}
use of com.cloud.api.response.ApiResponseResponse in project cosmic by MissionCriticalCloud.
the class ApiDiscoveryServiceImpl method getFieldResponseMap.
private ApiResponseResponse getFieldResponseMap(final Field responseField) {
final ApiResponseResponse responseResponse = new ApiResponseResponse();
final SerializedName serializedName = responseField.getAnnotation(SerializedName.class);
final Param param = responseField.getAnnotation(Param.class);
if (serializedName != null && param != null) {
responseResponse.setName(serializedName.value());
responseResponse.setDescription(param.description());
responseResponse.setType(responseField.getType().getSimpleName().toLowerCase());
// If response is not of primitive type - we have a nested entity
final Class fieldClass = param.responseObject();
if (fieldClass != null) {
final Class<?> superClass = fieldClass.getSuperclass();
if (superClass != null) {
final String superName = superClass.getName();
if (superName.equals(BaseResponse.class.getName())) {
final Field[] fields = fieldClass.getDeclaredFields();
for (final Field field : fields) {
final ApiResponseResponse innerResponse = getFieldResponseMap(field);
if (innerResponse != null) {
responseResponse.addApiResponse(innerResponse);
}
}
}
}
}
}
return responseResponse;
}
Aggregations