@Override public BaseResult asyncCreateInstance(InstanceRequest request, User requestingUser) { logger.info( "Create instance for organization {} for subscription {}.", request.getOrganizationId(), request.getSubscriptionId()); ServiceInstance instance = null; try { final InstanceDescription descr = getInstanceDescription(request, requestingUser); instance = createPersistentServiceInstance(request, descr); timerService.initTimers(); List<LocalizedText> descriptions = descr.getDescription(); String successMsg = null; if (descriptions != null) { for (LocalizedText description : descriptions) { if (description.getLocale().equals(getLocale(requestingUser))) { successMsg = description.getText(); } } } return provResult.getSuccesfulResult(BaseResult.class, successMsg); } catch (Exception e) { logger.warn(e.getMessage(), e); return provResult.getErrorResult( BaseResult.class, e, getLocale(requestingUser), instance, null); } }
InstanceDescription getInstanceDescription(InstanceRequest request, User requestingUser) throws APPlatformException, BadResultException { final HashMap<String, String> parameters = createParameterMap(request.getParameterValue()); String controllerId = parameters.get(InstanceParameter.CONTROLLER_ID); if (controllerId == null) { logger.warn("The technical service does not define a controller implementation"); throw new BadResultException(Messages.get(request.getDefaultLocale(), "error_configuration")); } HashMap<String, String> controllerSettings = configService.getControllerConfigurationSettings(controllerId); final ProvisioningSettings settings = new ProvisioningSettings(parameters, controllerSettings, request.getDefaultLocale()); settings.setOrganizationId(request.getOrganizationId()); settings.setOrganizationName(request.getOrganizationName()); settings.setSubscriptionId(request.getSubscriptionId()); settings.setBesLoginUrl(request.getLoginUrl()); ServiceInstance si = new ServiceInstance(); si.setInstanceParameters(createParameters(si, parameters)); si.setControllerId(controllerId); settings.setAuthentication( configService.getAuthenticationForBESTechnologyManager(controllerId, si, null)); configService.copyCredentialsFromControllerSettings(settings, controllerSettings); settings.setRequestingUser(UserMapper.toServiceUser(requestingUser)); final APPlatformController controller = APPlatformControllerFactory.getInstance(controllerId); final InstanceDescription descr = controller.createInstance(settings); // Check whether instanceId is filled and unique if (Strings.isEmpty(descr.getInstanceId())) { logger.error("Instance ID not specified by controller."); throw new BadResultException( Messages.get(request.getDefaultLocale(), "error_instanceid_empty")); } if (instanceDAO.exists(descr.getInstanceId())) { logger.error("Instance ID " + descr.getInstanceId() + " already used by another instance."); throw new BadResultException( Messages.get( request.getDefaultLocale(), "error_instanceid_exists", descr.getInstanceId())); } return descr; }
ServiceInstance createPersistentServiceInstance( InstanceRequest request, InstanceDescription descr) throws BadResultException { final HashMap<String, String> parameters = createParameterMap(request.getParameterValue()); String controllerId = parameters.get(InstanceParameter.CONTROLLER_ID); ServiceInstance si = new ServiceInstance(); si.setOrganizationId(request.getOrganizationId()); si.setOrganizationName(request.getOrganizationName()); si.setSubscriptionId(request.getSubscriptionId()); si.setDefaultLocale(request.getDefaultLocale()); si.setProvisioningStatus(ProvisioningStatus.WAITING_FOR_SYSTEM_CREATION); si.setControllerId(controllerId); si.setBesLoginURL(request.getLoginUrl()); si.setRequestTime(System.currentTimeMillis()); si.setInstanceParameters(createParameters(si, descr.getChangedParameters())); si.setServiceBaseURL(descr.getBaseUrl()); si.setInstanceId(descr.getInstanceId()); em.persist(si); return si; }