use of org.wso2.carbon.apimgt.rest.api.service.catalog.dto.ServiceInfoDTO in project carbon-apimgt by wso2.
the class ServicesApiServiceImpl method importService.
@Override
public Response importService(InputStream fileInputStream, Attachment fileDetail, Boolean overwrite, String verifier, MessageContext messageContext) throws APIManagementException {
String userName = RestApiCommonUtil.getLoggedInUsername();
int tenantId = APIUtil.getTenantId(userName);
String tempDirPath = FileBasedServicesImportExportManager.createDir(RestApiConstants.JAVA_IO_TMPDIR);
List<ServiceInfoDTO> serviceList;
HashMap<String, ServiceEntry> serviceEntries;
HashMap<String, String> newResourcesHash;
List<ServiceEntry> serviceListToImport = new ArrayList<>();
List<ServiceEntry> serviceListToIgnore = new ArrayList<>();
List<ServiceEntry> servicesWithInvalidDefinition = new ArrayList<>();
// unzip the uploaded zip
try {
FileBasedServicesImportExportManager importExportManager = new FileBasedServicesImportExportManager(tempDirPath);
importExportManager.importService(fileInputStream);
} catch (APIMgtResourceAlreadyExistsException e) {
RestApiUtil.handleResourceAlreadyExistsError("Error while importing Service", e, log);
}
newResourcesHash = Md5HashGenerator.generateHash(tempDirPath);
serviceEntries = ServiceEntryMappingUtil.fromDirToServiceEntryMap(tempDirPath);
Map<String, Boolean> validationResults = new HashMap<>();
if (overwrite && StringUtils.isNotEmpty(verifier)) {
validationResults = validateVerifier(verifier, tenantId);
}
try {
for (Map.Entry<String, ServiceEntry> entry : serviceEntries.entrySet()) {
String key = entry.getKey();
serviceEntries.get(key).setMd5(newResourcesHash.get(key));
ServiceEntry service = serviceEntries.get(key);
byte[] definitionFileByteArray = getDefinitionFromInput(service.getEndpointDef());
if (validateAndRetrieveServiceDefinition(definitionFileByteArray, service.getDefUrl(), service.getDefinitionType()).isValid() || (ServiceEntry.DefinitionType.WSDL1.equals(service.getDefinitionType()) && APIMWSDLReader.validateWSDLFile(definitionFileByteArray).isValid())) {
service.setEndpointDef(new ByteArrayInputStream(definitionFileByteArray));
} else {
servicesWithInvalidDefinition.add(service);
}
if (overwrite) {
if (StringUtils.isNotEmpty(verifier) && validationResults.containsKey(service.getKey()) && !validationResults.get(service.getKey())) {
serviceListToIgnore.add(service);
} else {
serviceListToImport.add(service);
}
} else {
serviceListToImport.add(service);
}
}
} catch (IOException e) {
RestApiUtil.handleInternalServerError("Error when reading the service definition content", log);
}
if (servicesWithInvalidDefinition.size() > 0) {
serviceList = ServiceEntryMappingUtil.fromServiceListToDTOList(servicesWithInvalidDefinition);
String errorMsg = "The Service import has been failed as invalid service definition provided";
return Response.status(Response.Status.BAD_REQUEST).entity(getErrorDTO(RestApiConstants.STATUS_BAD_REQUEST_MESSAGE_DEFAULT, 400L, errorMsg, new JSONArray(serviceList).toString())).build();
}
if (serviceListToIgnore.size() > 0) {
serviceList = ServiceEntryMappingUtil.fromServiceListToDTOList(serviceListToIgnore);
String errorMsg = "The Service import has been failed since to verifier validation fails";
return Response.status(Response.Status.BAD_REQUEST).entity(getErrorDTO(RestApiConstants.STATUS_BAD_REQUEST_MESSAGE_DEFAULT, 400L, errorMsg, new JSONArray(serviceList).toString())).build();
} else {
List<ServiceEntry> importedServiceList = new ArrayList<>();
List<ServiceEntry> retrievedServiceList = new ArrayList<>();
try {
if (serviceListToImport.size() > 0) {
importedServiceList = serviceCatalog.importServices(serviceListToImport, tenantId, userName, overwrite);
}
} catch (APIManagementException e) {
if (ExceptionCodes.SERVICE_IMPORT_FAILED_WITHOUT_OVERWRITE.getErrorCode() == e.getErrorHandler().getErrorCode()) {
RestApiUtil.handleBadRequest("Cannot update existing services when overwrite is false", log);
} else {
RestApiUtil.handleInternalServerError("Error when importing services to service catalog", e, log);
}
}
if (importedServiceList == null) {
RestApiUtil.handleBadRequest("Cannot update the name or version or key or definition type of an " + "existing service", log);
}
for (ServiceEntry service : importedServiceList) {
retrievedServiceList.add(serviceCatalog.getServiceByKey(service.getKey(), tenantId));
}
serviceList = ServiceEntryMappingUtil.fromServiceListToDTOList(retrievedServiceList);
return Response.ok().entity(ServiceEntryMappingUtil.fromServiceInfoDTOToServiceInfoListDTO(serviceList)).build();
}
}
use of org.wso2.carbon.apimgt.rest.api.service.catalog.dto.ServiceInfoDTO in project carbon-apimgt by wso2.
the class APIMappingUtil method fromDTOtoAPI.
public static API fromDTOtoAPI(APIDTO dto, String provider) throws APIManagementException {
String providerEmailDomainReplaced = APIUtil.replaceEmailDomain(provider);
// The provider name that is coming from the body is not honored for now.
// Later we can use it by checking admin privileges of the user.
APIIdentifier apiId = new APIIdentifier(providerEmailDomainReplaced, dto.getName(), dto.getVersion());
API model = new API(apiId);
String context = dto.getContext();
final String originalContext = context;
if (context.endsWith("/" + RestApiConstants.API_VERSION_PARAM)) {
context = context.replace("/" + RestApiConstants.API_VERSION_PARAM, "");
}
context = context.startsWith("/") ? context : ("/" + context);
String providerDomain = MultitenantUtils.getTenantDomain(provider);
if (!MultitenantConstants.SUPER_TENANT_DOMAIN_NAME.equalsIgnoreCase(providerDomain) && dto.getId() == null && !context.contains("/t/" + providerDomain)) {
// Create tenant aware context for API
context = "/t/" + providerDomain + context;
}
// This is to support the pluggable version strategy
// if the context does not contain any {version} segment, we use the default version strategy.
context = checkAndSetVersionParam(context);
model.setContextTemplate(context);
context = updateContextWithVersion(dto.getVersion(), originalContext, context);
model.setContext(context);
model.setDescription(dto.getDescription());
if (dto.getEndpointConfig() != null) {
ObjectMapper mapper = new ObjectMapper();
try {
model.setEndpointConfig(mapper.writeValueAsString(dto.getEndpointConfig()));
} catch (IOException e) {
handleException("Error while converting endpointConfig to json", e);
}
}
model.setImplementation(dto.getEndpointImplementationType().toString());
model.setType(dto.getType().toString());
if (dto.getLifeCycleStatus() != null) {
model.setStatus((dto.getLifeCycleStatus() != null) ? dto.getLifeCycleStatus().toUpperCase() : null);
}
if (dto.isIsDefaultVersion() != null) {
model.setAsDefaultVersion(dto.isIsDefaultVersion());
}
if (dto.isEnableSchemaValidation() != null) {
model.setEnableSchemaValidation(dto.isEnableSchemaValidation());
}
model.setEnableStore(true);
if (dto.getAdvertiseInfo() != null) {
AdvertiseInfoDTO advertiseInfoDTO = dto.getAdvertiseInfo();
model.setAdvertiseOnly(advertiseInfoDTO.isAdvertised());
model.setApiExternalProductionEndpoint(advertiseInfoDTO.getApiExternalProductionEndpoint());
model.setApiExternalSandboxEndpoint(advertiseInfoDTO.getApiExternalSandboxEndpoint());
model.setRedirectURL(advertiseInfoDTO.getOriginalDevPortalUrl());
model.setApiOwner(advertiseInfoDTO.getApiOwner());
model.setAdvertiseOnlyAPIVendor(dto.getAdvertiseInfo().getVendor().value());
}
if (dto.isResponseCachingEnabled() != null && dto.isResponseCachingEnabled()) {
model.setResponseCache(APIConstants.ENABLED);
} else {
model.setResponseCache(APIConstants.DISABLED);
}
if (dto.getCacheTimeout() != null) {
model.setCacheTimeout(dto.getCacheTimeout());
} else {
model.setCacheTimeout(APIConstants.API_RESPONSE_CACHE_TIMEOUT);
}
if (dto.getMediationPolicies() != null) {
List<MediationPolicyDTO> policies = dto.getMediationPolicies();
// validate whether provided sequences are available
for (MediationPolicyDTO policy : policies) {
if (APIConstants.API_CUSTOM_SEQUENCE_TYPE_IN.equalsIgnoreCase(policy.getType())) {
model.setInSequence(policy.getName());
} else if (APIConstants.API_CUSTOM_SEQUENCE_TYPE_OUT.equalsIgnoreCase(policy.getType())) {
model.setOutSequence(policy.getName());
} else {
model.setFaultSequence(policy.getName());
}
}
}
if (dto.getSubscriptionAvailability() != null) {
model.setSubscriptionAvailability(mapSubscriptionAvailabilityFromDTOtoAPI(dto.getSubscriptionAvailability()));
}
if (dto.getSubscriptionAvailableTenants() != null) {
model.setSubscriptionAvailableTenants(StringUtils.join(dto.getSubscriptionAvailableTenants(), ","));
}
Set<Scope> scopes = getScopes(dto);
model.setScopes(scopes);
// URI Templates
// No default topics for AsyncAPIs. Therefore set URITemplates only for non-AsyncAPIs.
Set<URITemplate> uriTemplates = getURITemplates(model, dto.getOperations());
model.setUriTemplates(uriTemplates);
// wsUriMapping
if (dto.getType().toString().equals(APIConstants.API_TYPE_WS)) {
Map<String, String> wsUriMapping = new HashMap<>();
for (APIOperationsDTO operationsDTO : dto.getOperations()) {
wsUriMapping.put(operationsDTO.getVerb() + "_" + operationsDTO.getTarget(), operationsDTO.getUriMapping());
}
model.setWsUriMapping(wsUriMapping);
}
if (dto.getTags() != null) {
Set<String> apiTags = new HashSet<>(dto.getTags());
model.addTags(apiTags);
}
Set<Tier> apiTiers = new HashSet<>();
List<String> tiersFromDTO = dto.getPolicies();
for (String tier : tiersFromDTO) {
apiTiers.add(new Tier(tier));
}
model.addAvailableTiers(apiTiers);
model.setApiLevelPolicy(dto.getApiThrottlingPolicy());
String transports = StringUtils.join(dto.getTransport(), ',');
model.setTransports(transports);
if (dto.getVisibility() != null) {
model.setVisibility(mapVisibilityFromDTOtoAPI(dto.getVisibility()));
}
if (dto.getVisibleRoles() != null) {
String visibleRoles = StringUtils.join(dto.getVisibleRoles(), ',');
model.setVisibleRoles(visibleRoles);
}
if (dto.getVisibleTenants() != null) {
if (APIUtil.isCrossTenantSubscriptionsEnabled()) {
String visibleTenants = StringUtils.join(dto.getVisibleTenants(), ',');
model.setVisibleTenants(visibleTenants);
}
}
List<String> accessControlRoles = dto.getAccessControlRoles();
if (accessControlRoles == null || accessControlRoles.isEmpty()) {
model.setAccessControl(APIConstants.NO_ACCESS_CONTROL);
model.setAccessControlRoles("null");
} else {
model.setAccessControlRoles(StringUtils.join(accessControlRoles, ',').toLowerCase());
model.setAccessControl(APIConstants.API_RESTRICTED_VISIBILITY);
}
List<APIInfoAdditionalPropertiesDTO> additionalProperties = dto.getAdditionalProperties();
if (additionalProperties != null) {
for (APIInfoAdditionalPropertiesDTO property : additionalProperties) {
if (property.isDisplay()) {
model.addProperty(property.getName() + APIConstants.API_RELATED_CUSTOM_PROPERTIES_SURFIX, property.getValue());
} else {
model.addProperty(property.getName(), property.getValue());
}
}
}
Map<String, APIInfoAdditionalPropertiesMapDTO> additionalPropertiesMap = dto.getAdditionalPropertiesMap();
if (additionalPropertiesMap != null && !additionalPropertiesMap.isEmpty()) {
for (Map.Entry<String, APIInfoAdditionalPropertiesMapDTO> entry : additionalPropertiesMap.entrySet()) {
if (entry.getValue().isDisplay()) {
model.addProperty(entry.getKey() + APIConstants.API_RELATED_CUSTOM_PROPERTIES_SURFIX, entry.getValue().getValue());
} else {
model.addProperty(entry.getKey(), entry.getValue().getValue());
}
}
}
ObjectMapper objectMapper = new ObjectMapper();
APIBusinessInformationDTO apiBusinessInformationDTO = objectMapper.convertValue(dto.getBusinessInformation(), APIBusinessInformationDTO.class);
if (apiBusinessInformationDTO != null) {
model.setBusinessOwner(apiBusinessInformationDTO.getBusinessOwner());
model.setBusinessOwnerEmail(apiBusinessInformationDTO.getBusinessOwnerEmail());
model.setTechnicalOwner(apiBusinessInformationDTO.getTechnicalOwner());
model.setTechnicalOwnerEmail(apiBusinessInformationDTO.getTechnicalOwnerEmail());
}
APICorsConfigurationDTO apiCorsConfigurationDTO = dto.getCorsConfiguration();
CORSConfiguration corsConfiguration;
if (apiCorsConfigurationDTO != null) {
corsConfiguration = new CORSConfiguration(apiCorsConfigurationDTO.isCorsConfigurationEnabled(), apiCorsConfigurationDTO.getAccessControlAllowOrigins(), apiCorsConfigurationDTO.isAccessControlAllowCredentials(), apiCorsConfigurationDTO.getAccessControlAllowHeaders(), apiCorsConfigurationDTO.getAccessControlAllowMethods());
} else {
corsConfiguration = APIUtil.getDefaultCorsConfiguration();
}
model.setCorsConfiguration(corsConfiguration);
setMaxTpsFromApiDTOToModel(dto, model);
model.setAuthorizationHeader(dto.getAuthorizationHeader());
model.setApiSecurity(getSecurityScheme(dto.getSecurityScheme()));
if (dto.getType().toString().equals(APIConstants.API_TYPE_WEBSUB)) {
WebsubSubscriptionConfigurationDTO websubSubscriptionConfigurationDTO = dto.getWebsubSubscriptionConfiguration();
WebsubSubscriptionConfiguration websubSubscriptionConfiguration;
if (websubSubscriptionConfigurationDTO != null) {
websubSubscriptionConfiguration = new WebsubSubscriptionConfiguration(websubSubscriptionConfigurationDTO.isEnable(), websubSubscriptionConfigurationDTO.getSecret(), websubSubscriptionConfigurationDTO.getSigningAlgorithm(), websubSubscriptionConfigurationDTO.getSignatureHeader());
} else {
websubSubscriptionConfiguration = getDefaultWebsubSubscriptionConfiguration();
}
model.setWebsubSubscriptionConfiguration(websubSubscriptionConfiguration);
}
// attach api categories to API model
setAPICategoriesToModel(dto, model, provider);
if (dto.getKeyManagers() instanceof List) {
model.setKeyManagers((List<String>) dto.getKeyManagers());
} else if (dto.getKeyManagers() == null) {
model.setKeyManagers(Collections.singletonList(APIConstants.KeyManager.API_LEVEL_ALL_KEY_MANAGERS));
} else {
throw new APIManagementException("KeyManagers value need to be an array");
}
APIServiceInfoDTO serviceInfoDTO = dto.getServiceInfo();
if (serviceInfoDTO != null) {
ObjectMapper mapper = new ObjectMapper();
JSONParser parser = new JSONParser();
JSONObject serviceInfoJson;
String tenantDomain = RestApiCommonUtil.getLoggedInUserTenantDomain();
try {
int tenantId = ServiceReferenceHolder.getInstance().getRealmService().getTenantManager().getTenantId(tenantDomain);
serviceInfoJson = (JSONObject) parser.parse(mapper.writeValueAsString(serviceInfoDTO));
ServiceCatalogImpl serviceCatalog = new ServiceCatalogImpl();
ServiceEntry service = serviceCatalog.getServiceByKey(dto.getServiceInfo().getKey(), tenantId);
// Set the md5 of the service which is already available in the system to the API model
if (service == null) {
if (log.isDebugEnabled()) {
log.debug("A service with key" + dto.getServiceInfo().getKey() + " referenced in the API " + "information is not available in the service catalog");
}
} else {
serviceInfoJson.put("md5", service.getMd5());
}
model.setServiceInfo(serviceInfoJson);
} catch (JsonProcessingException | ParseException e) {
String msg = "Error while getting json representation of APIServiceInfo";
handleException(msg, e);
} catch (UserStoreException e) {
String msg = "Error while getting tenantId from the given tenant domain " + tenantDomain;
handleException(msg, e);
}
}
if (dto.getAudience() != null) {
model.setAudience(dto.getAudience().toString());
}
if (dto.getGatewayVendor() != null) {
model.setGatewayVendor(dto.getGatewayVendor());
}
if (dto.getAsyncTransportProtocols() != null) {
String asyncTransports = StringUtils.join(dto.getAsyncTransportProtocols(), ',');
model.setAsyncTransportProtocols(asyncTransports);
}
return model;
}
use of org.wso2.carbon.apimgt.rest.api.service.catalog.dto.ServiceInfoDTO in project carbon-apimgt by wso2.
the class ServiceEntryMappingUtil method fromServiceInfoDTOToServiceInfoListDTO.
/**
* Convert list of ServiceInfoDTO objects to ServiceInfoListDTO object
*
* @param servicesList list of ServiceInfoDTO objects
* @return build the ServiceInfoListDTO DTO object
*/
public static ServiceInfoListDTO fromServiceInfoDTOToServiceInfoListDTO(List<ServiceInfoDTO> servicesList) {
ServiceInfoListDTO serviceInfoListDTO = new ServiceInfoListDTO();
serviceInfoListDTO.setCount(servicesList.size());
serviceInfoListDTO.setList(servicesList);
return serviceInfoListDTO;
}
use of org.wso2.carbon.apimgt.rest.api.service.catalog.dto.ServiceInfoDTO in project carbon-apimgt by wso2.
the class ServiceEntryMappingUtil method fromServiceEntryToServiceInfoDTO.
/**
* Converts ServiceEntry object to ServiceInfoDTO object
*
* @param serviceEntry ServiceEntry model object
* @return Converted ServiceInfoDTO object
*/
public static ServiceInfoDTO fromServiceEntryToServiceInfoDTO(ServiceEntry serviceEntry) {
ServiceInfoDTO serviceInfoDTO = new ServiceInfoDTO();
serviceInfoDTO.setId(serviceEntry.getUuid());
serviceInfoDTO.setName(serviceEntry.getName());
serviceInfoDTO.setKey(serviceEntry.getKey());
serviceInfoDTO.setVersion(serviceEntry.getVersion());
serviceInfoDTO.setMd5(serviceEntry.getMd5());
return serviceInfoDTO;
}
use of org.wso2.carbon.apimgt.rest.api.service.catalog.dto.ServiceInfoDTO in project carbon-apimgt by wso2.
the class ServiceEntryMappingUtil method getServicesResponsePayloadBuilder.
/**
* Convert list of ServiceInfoDTO objects to ServiceInfoListDTO object
*
* @param servicesList metadata list of services provided in zip
* @return build the ServiceInfoListDTO object
*/
public static ServiceInfoListDTO getServicesResponsePayloadBuilder(List<ServiceInfoDTO> servicesList) {
ServiceInfoListDTO serviceInfoListDTO = new ServiceInfoListDTO();
serviceInfoListDTO.setCount(servicesList.size());
serviceInfoListDTO.setList(servicesList);
return serviceInfoListDTO;
}
Aggregations