use of io.apiman.gateway.engine.beans.Api in project apiman by apiman.
the class ActionResourceImpl method retireApi.
/**
* Retires an API that is currently published to the Gateway.
* @param action
*/
private void retireApi(ActionBean action) throws ActionException, NotAuthorizedException {
securityContext.checkPermissions(PermissionType.apiAdmin, action.getOrganizationId());
ApiVersionBean versionBean;
try {
versionBean = orgs.getApiVersion(action.getOrganizationId(), action.getEntityId(), action.getEntityVersion());
} catch (ApiVersionNotFoundException e) {
// $NON-NLS-1$
throw ExceptionFactory.actionException(Messages.i18n.format("ApiNotFound"));
}
// Validate that it's ok to perform this action - API must be Published.
if (versionBean.getStatus() != ApiStatus.Published) {
// $NON-NLS-1$
throw ExceptionFactory.actionException(Messages.i18n.format("InvalidApiStatus"));
}
Api gatewayApi = new Api();
gatewayApi.setOrganizationId(versionBean.getApi().getOrganization().getId());
gatewayApi.setApiId(versionBean.getApi().getId());
gatewayApi.setVersion(versionBean.getVersion());
// Retire the API from all relevant gateways
try {
storage.beginTx();
Set<ApiGatewayBean> gateways = versionBean.getGateways();
if (gateways == null) {
// $NON-NLS-1$
throw new PublishingException("No gateways specified for API!");
}
for (ApiGatewayBean apiGatewayBean : gateways) {
IGatewayLink gatewayLink = createGatewayLink(apiGatewayBean.getGatewayId());
gatewayLink.retireApi(gatewayApi);
gatewayLink.close();
}
versionBean.setStatus(ApiStatus.Retired);
versionBean.setRetiredOn(new Date());
ApiBean api = storage.getApi(action.getOrganizationId(), action.getEntityId());
if (api == null) {
// $NON-NLS-1$ //$NON-NLS-2$
throw new PublishingException("Error: could not find API - " + action.getOrganizationId() + "=>" + action.getEntityId());
}
if (api.getNumPublished() == null || api.getNumPublished() == 0) {
api.setNumPublished(0);
} else {
api.setNumPublished(api.getNumPublished() - 1);
}
storage.updateApi(api);
storage.updateApiVersion(versionBean);
storage.createAuditEntry(AuditUtils.apiRetired(versionBean, securityContext));
storage.commitTx();
} catch (PublishingException e) {
storage.rollbackTx();
// $NON-NLS-1$
throw ExceptionFactory.actionException(Messages.i18n.format("RetireError"), e);
} catch (Exception e) {
storage.rollbackTx();
// $NON-NLS-1$
throw ExceptionFactory.actionException(Messages.i18n.format("RetireError"), e);
}
log.debug(// $NON-NLS-1$
String.format(// $NON-NLS-1$
"Successfully retired API %s on specified gateways: %s", versionBean.getApi().getName(), versionBean.getApi()));
}
Aggregations