use of org.wso2.carbon.apimgt.impl.gatewayartifactsynchronizer.environmentspecificproperty.Environment in project carbon-apimgt by wso2.
the class SolaceSubscriptionsNotifier method crateSubscription.
/**
* Create subscriptions to Solace APIs
*
* @param event SubscriptionEvent to create Solace API subscriptions
* @throws NotifierException if error occurs when creating subscription for Solace APIs
*/
private void crateSubscription(SubscriptionEvent event) throws NotifierException {
String apiUUID = event.getApiUUID();
String applicationUUID = event.getApplicationUUID();
try {
APIProvider apiProvider = APIManagerFactory.getInstance().getAPIProvider(CarbonContext.getThreadLocalCarbonContext().getUsername());
API api = apiProvider.getAPIbyUUID(apiUUID, apiMgtDAO.getOrganizationByAPIUUID(apiUUID));
APIConsumer apiConsumer = APIManagerFactory.getInstance().getAPIConsumer(CarbonContext.getThreadLocalCarbonContext().getUsername());
Application application = apiMgtDAO.getApplicationByUUID(applicationUUID);
Set<APIKey> consumerKeys = apiConsumer.getApplicationKeysOfApplication(application.getId());
for (APIKey apiKey : consumerKeys) {
application.addKey(apiKey);
}
// Check whether the subscription is belongs to an API deployed in Solace
if (SolaceConstants.SOLACE_ENVIRONMENT.equals(api.getGatewayVendor())) {
ArrayList<String> solaceApiProducts = new ArrayList<>();
List<Environment> deployedSolaceEnvironments = SolaceNotifierUtils.getDeployedSolaceEnvironmentsFromRevisionDeployments(api);
String applicationOrganizationName = SolaceNotifierUtils.getSolaceOrganizationName(deployedSolaceEnvironments);
if (applicationOrganizationName != null) {
try {
boolean apiProductDeployedIntoSolace = SolaceNotifierUtils.checkApiProductAlreadyDeployedIntoSolaceEnvironments(api, deployedSolaceEnvironments);
if (apiProductDeployedIntoSolace) {
for (Environment environment : deployedSolaceEnvironments) {
solaceApiProducts.add(SolaceNotifierUtils.generateApiProductNameForSolaceBroker(api, environment.getName()));
}
SolaceNotifierUtils.deployApplicationToSolaceBroker(application, solaceApiProducts, applicationOrganizationName);
}
} catch (IOException e) {
log.error(e.getMessage());
}
} else {
if (log.isDebugEnabled()) {
log.error("Cannot create solace application " + application.getName() + "with API product " + "deployed in different organizations...");
}
throw new APIManagementException("Cannot create solace application " + application.getName() + "with API product deployed in different organizations...");
}
}
} catch (APIManagementException e) {
throw new NotifierException(e.getMessage());
}
}
use of org.wso2.carbon.apimgt.impl.gatewayartifactsynchronizer.environmentspecificproperty.Environment in project carbon-apimgt by wso2.
the class SolaceEnvironmentImpl method getExternalEndpointURLs.
/**
* Get endpoint URLs of the Solace environment
*
* @return List of protocol endpoint URLs map of Solace
*/
@Override
public List<AsyncProtocolEndpoint> getExternalEndpointURLs(Environment environment) {
SolaceAdminApis solaceAdminApis = new SolaceAdminApis(environment.getServerURL(), environment.getUserName(), environment.getPassword(), environment.getAdditionalProperties().get(SolaceConstants.SOLACE_ENVIRONMENT_DEV_NAME));
HttpResponse response = solaceAdminApis.environmentGET(environment.getAdditionalProperties().get(SolaceConstants.SOLACE_ENVIRONMENT_ORGANIZATION), environment.getName());
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
String responseString = null;
try {
responseString = EntityUtils.toString(response.getEntity());
} catch (IOException e) {
log.error(e.getMessage());
}
JSONObject jsonObject = new JSONObject(responseString);
if (jsonObject.has("messagingProtocols")) {
JSONArray protocols = jsonObject.getJSONArray("messagingProtocols");
List<AsyncProtocolEndpoint> asyncProtocolEndpoints = new ArrayList<>();
for (int i = 0; i < protocols.length(); i++) {
JSONObject protocolDetails = protocols.getJSONObject(i);
String protocolName = protocolDetails.getJSONObject("protocol").getString("name");
String endpointURI = protocolDetails.getString("uri");
AsyncProtocolEndpoint asyncProtocolEndpoint = new AsyncProtocolEndpoint();
asyncProtocolEndpoint.setProtocol(protocolName);
asyncProtocolEndpoint.setProtocolUrl(endpointURI);
asyncProtocolEndpoints.add(asyncProtocolEndpoint);
}
return asyncProtocolEndpoints;
}
}
return null;
}
use of org.wso2.carbon.apimgt.impl.gatewayartifactsynchronizer.environmentspecificproperty.Environment in project carbon-apimgt by wso2.
the class SolaceStoreUtils method getSolaceDeployedEnvsInfo.
/**
* Get SolaceDeployedEnvironmentDTO using admin APIs and map into DTOs to parse Devportal
*
* @param solaceEnvironment Solace environment Object
* @param solaceOrganization Solace broker organization name
* @param applicationUuid Subscribed Application UUID
* @return List of SolaceDeployedEnvironmentDTO to use in Devportal
* @throws APIManagementException if error occurred when creating SolaceDeployedEnvironmentDTO
*/
public static List<SolaceDeployedEnvironmentDTO> getSolaceDeployedEnvsInfo(Environment solaceEnvironment, String solaceOrganization, String applicationUuid) throws APIManagementException {
Map<String, Environment> gatewayEnvironmentMap = APIUtil.getReadOnlyGatewayEnvironments();
// Create solace admin APIs instance
SolaceAdminApis solaceAdminApis = new SolaceAdminApis(solaceEnvironment.getServerURL(), solaceEnvironment.getUserName(), solaceEnvironment.getPassword(), solaceEnvironment.getAdditionalProperties().get(SolaceConstants.SOLACE_ENVIRONMENT_DEV_NAME));
HttpResponse response = solaceAdminApis.applicationGet(solaceOrganization, applicationUuid, "default");
List<SolaceDeployedEnvironmentDTO> solaceEnvironments = new ArrayList<>();
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
try {
String responseString = EntityUtils.toString(response.getEntity());
org.json.JSONObject jsonObject = new org.json.JSONObject(responseString);
// Get solace environments attached with the Solace application
if (jsonObject.getJSONArray("environments") != null) {
JSONArray environmentsArray = jsonObject.getJSONArray("environments");
for (int i = 0; i < environmentsArray.length(); i++) {
SolaceDeployedEnvironmentDTO solaceDeployedEnvironmentsDTO = new SolaceDeployedEnvironmentDTO();
org.json.JSONObject environmentObject = environmentsArray.getJSONObject(i);
// Get details of Solace environment attached to the solace application
if (environmentObject.getString("name") != null) {
String environmentName = environmentObject.getString("name");
Environment gatewayEnvironment = gatewayEnvironmentMap.get(environmentName);
if (gatewayEnvironment != null) {
// Set Solace environment details
solaceDeployedEnvironmentsDTO.setEnvironmentName(gatewayEnvironment.getName());
solaceDeployedEnvironmentsDTO.setEnvironmentDisplayName(gatewayEnvironment.getDisplayName());
solaceDeployedEnvironmentsDTO.setOrganizationName(gatewayEnvironment.getAdditionalProperties().get(SolaceConstants.SOLACE_ENVIRONMENT_ORGANIZATION));
boolean containsMQTTProtocol = false;
// Get messaging protocols from the response body
if (environmentObject.getJSONArray("messagingProtocols") != null) {
List<SolaceURLsDTO> endpointUrls = new ArrayList<>();
JSONArray protocolsArray = environmentObject.getJSONArray("messagingProtocols");
for (int j = 0; j < protocolsArray.length(); j++) {
SolaceURLsDTO solaceURLsDTO = new SolaceURLsDTO();
String protocol = protocolsArray.getJSONObject(j).getJSONObject("protocol").getString("name");
if (SolaceConstants.MQTT_TRANSPORT_PROTOCOL_NAME.equalsIgnoreCase(protocol)) {
containsMQTTProtocol = true;
}
String uri = protocolsArray.getJSONObject(j).getString("uri");
solaceURLsDTO.setProtocol(protocol);
solaceURLsDTO.setEndpointURL(uri);
endpointUrls.add(solaceURLsDTO);
}
solaceDeployedEnvironmentsDTO.setSolaceURLs(endpointUrls);
}
// Get topic permissions from the solace application response body
if (environmentObject.getJSONObject("permissions") != null) {
org.json.JSONObject permissionsObject = environmentObject.getJSONObject("permissions");
SolaceTopicsObjectDTO solaceTopicsObjectDTO = new SolaceTopicsObjectDTO();
populateSolaceTopics(solaceTopicsObjectDTO, permissionsObject, "default");
// Handle the special case of MQTT protocol
if (containsMQTTProtocol) {
HttpResponse responseForMqtt = solaceAdminApis.applicationGet(solaceOrganization, applicationUuid, SolaceConstants.MQTT_TRANSPORT_PROTOCOL_NAME.toUpperCase());
org.json.JSONObject permissionsObjectForMqtt = extractPermissionsFromSolaceApplicationGetResponse(responseForMqtt, i, gatewayEnvironmentMap);
if (permissionsObjectForMqtt != null) {
populateSolaceTopics(solaceTopicsObjectDTO, permissionsObjectForMqtt, SolaceConstants.MQTT_TRANSPORT_PROTOCOL_NAME.toUpperCase());
}
}
solaceDeployedEnvironmentsDTO.setSolaceTopicsObject(solaceTopicsObjectDTO);
}
}
}
solaceEnvironments.add(solaceDeployedEnvironmentsDTO);
}
}
} catch (IOException e) {
log.error(e.getMessage());
}
return solaceEnvironments;
} else {
throw new APIManagementException("Solace Environment configurations are not provided properly");
}
}
use of org.wso2.carbon.apimgt.impl.gatewayartifactsynchronizer.environmentspecificproperty.Environment in project carbon-apimgt by wso2.
the class SolaceStoreUtils method extractPermissionsFromSolaceApplicationGetResponse.
/**
* Populate Solace permissions related to Topics from the response body
*
* @param response Response of the admin request
* @param environmentIndex index value of registered environment
* @param gatewayEnvironmentMap registered gateway envs map
* @return org.json.JSONObject of permissions
*/
private static org.json.JSONObject extractPermissionsFromSolaceApplicationGetResponse(HttpResponse response, int environmentIndex, Map<String, Environment> gatewayEnvironmentMap) throws IOException {
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
String responseString = EntityUtils.toString(response.getEntity());
org.json.JSONObject jsonObject = new org.json.JSONObject(responseString);
if (jsonObject.getJSONArray("environments") != null) {
JSONArray environmentsArray = jsonObject.getJSONArray("environments");
org.json.JSONObject environmentObject = environmentsArray.getJSONObject(environmentIndex);
if (environmentObject.getString("name") != null) {
String environmentName = environmentObject.getString("name");
Environment gatewayEnvironment = gatewayEnvironmentMap.get(environmentName);
if (gatewayEnvironment != null) {
if (environmentObject.getJSONObject("permissions") != null) {
return environmentObject.getJSONObject("permissions");
}
}
}
}
}
return null;
}
use of org.wso2.carbon.apimgt.impl.gatewayartifactsynchronizer.environmentspecificproperty.Environment in project carbon-apimgt by wso2.
the class SolaceApplicationNotifier method removeSolaceApplication.
/**
* Remove applications from Solace broker
*
* @param event ApplicationEvent to remove Solace applications
* @throws NotifierException if error occurs when removing applications from Solace broker
*/
private void removeSolaceApplication(ApplicationEvent event) throws NotifierException {
// get list of subscribed APIs in the application
Subscriber subscriber = new Subscriber(event.getSubscriber());
try {
Set<SubscribedAPI> subscriptions = apiMgtDAO.getSubscribedAPIs(subscriber, event.getApplicationName(), event.getGroupId());
List<SubscribedAPI> subscribedApiList = new ArrayList<>(subscriptions);
boolean hasSubscribedAPIDeployedInSolace = false;
String organizationNameOfSolaceDeployment = null;
Map<String, Environment> gatewayEnvironments = APIUtil.getReadOnlyGatewayEnvironments();
labelOne: for (SubscribedAPI api : subscribedApiList) {
List<APIRevisionDeployment> deployments = apiMgtDAO.getAPIRevisionDeploymentByApiUUID(api.getUUID());
for (APIRevisionDeployment deployment : deployments) {
if (gatewayEnvironments.containsKey(deployment.getDeployment())) {
if (SolaceConstants.SOLACE_ENVIRONMENT.equalsIgnoreCase(gatewayEnvironments.get(deployment.getDeployment()).getProvider())) {
hasSubscribedAPIDeployedInSolace = true;
organizationNameOfSolaceDeployment = gatewayEnvironments.get(deployment.getDeployment()).getAdditionalProperties().get(SolaceConstants.SOLACE_ENVIRONMENT_ORGANIZATION);
break labelOne;
}
}
}
}
boolean applicationFoundInSolaceBroker = false;
if (hasSubscribedAPIDeployedInSolace) {
SolaceAdminApis solaceAdminApis = SolaceNotifierUtils.getSolaceAdminApis();
// check existence of application in Solace Broker
CloseableHttpResponse response1 = solaceAdminApis.applicationGet(organizationNameOfSolaceDeployment, event.getUuid(), "default");
if (response1.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
applicationFoundInSolaceBroker = true;
if (log.isDebugEnabled()) {
log.info("Found application '" + event.getApplicationName() + "' in Solace broker");
log.info("Waiting until application removing workflow gets finished");
}
} else if (response1.getStatusLine().getStatusCode() == HttpStatus.SC_NOT_FOUND) {
throw new NotifierException("Application '" + event.getApplicationName() + "' cannot be found in " + "Solace Broker");
} else {
if (log.isDebugEnabled()) {
log.error("Error while searching for application '" + event.getApplicationName() + "'" + " in Solace Broker. : " + response1.getStatusLine().toString());
}
throw new NotifierException("Error while searching for application '" + event.getApplicationName() + "' in Solace Broker");
}
}
if (applicationFoundInSolaceBroker) {
log.info("Deleting application from Solace Broker");
// delete application from solace
SolaceAdminApis solaceAdminApis = SolaceNotifierUtils.getSolaceAdminApis();
CloseableHttpResponse response2 = solaceAdminApis.deleteApplication(organizationNameOfSolaceDeployment, event.getUuid());
if (response2.getStatusLine().getStatusCode() == HttpStatus.SC_NO_CONTENT) {
log.info("Successfully deleted application '" + event.getApplicationName() + "' " + "in Solace Broker");
} else {
if (log.isDebugEnabled()) {
log.error("Error while deleting application " + event.getApplicationName() + " in Solace. :" + response2.getStatusLine().toString());
}
throw new NotifierException("Error while deleting application '" + event.getApplicationName() + "' in Solace");
}
}
} catch (APIManagementException e) {
throw new NotifierException(e.getMessage());
}
}
Aggregations