use of com.cloud.api.response.ApiDiscoveryResponse in project cosmic by MissionCriticalCloud.
the class ListApisCmd method execute.
@Override
public void execute() throws ServerApiException {
if (_apiDiscoveryService != null) {
final User user = CallContext.current().getCallingUser();
final ListResponse<ApiDiscoveryResponse> response = (ListResponse<ApiDiscoveryResponse>) _apiDiscoveryService.listApis(user, name);
if (response == null) {
throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Api Discovery plugin was unable to find an api by that name or process any apis");
}
response.setResponseName(getCommandName());
this.setResponseObject(response);
}
}
use of com.cloud.api.response.ApiDiscoveryResponse in project cosmic by MissionCriticalCloud.
the class ApiDiscoveryServiceImpl method listApis.
@Override
public ListResponse<? extends BaseResponse> listApis(final User user, final String name) {
final ListResponse<ApiDiscoveryResponse> response = new ListResponse<>();
final List<ApiDiscoveryResponse> responseList = new ArrayList<>();
if (user == null) {
return null;
}
if (name != null) {
if (!s_apiNameDiscoveryResponseMap.containsKey(name)) {
return null;
}
for (final APIChecker apiChecker : _apiAccessCheckers) {
try {
apiChecker.checkAccess(user, name);
} catch (final Exception ex) {
s_logger.debug("API discovery access check failed for " + name + " with " + ex.getMessage());
return null;
}
}
responseList.add(s_apiNameDiscoveryResponseMap.get(name));
} else {
for (final String apiName : s_apiNameDiscoveryResponseMap.keySet()) {
boolean isAllowed = true;
for (final APIChecker apiChecker : _apiAccessCheckers) {
try {
apiChecker.checkAccess(user, apiName);
} catch (final Exception ex) {
isAllowed = false;
}
}
if (isAllowed) {
responseList.add(s_apiNameDiscoveryResponseMap.get(apiName));
}
}
}
response.setResponses(responseList);
return response;
}
use of com.cloud.api.response.ApiDiscoveryResponse 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.ApiDiscoveryResponse in project cosmic by MissionCriticalCloud.
the class ApiDiscoveryTest method verifyListApis.
@Test
public void verifyListApis() throws Exception {
final ListResponse<ApiDiscoveryResponse> responses = (ListResponse<ApiDiscoveryResponse>) s_discoveryService.listApis(testUser, null);
if (responses != null) {
assertTrue("No. of response items > 1", responses.getCount().intValue() == 1);
for (final ApiDiscoveryResponse response : responses.getResponses()) {
assertFalse("API name is empty", response.getName().isEmpty());
assertFalse("API description is empty", response.getDescription().isEmpty());
}
}
}
use of com.cloud.api.response.ApiDiscoveryResponse 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;
}
Aggregations