@Override public BaseResult updateUsers(String instanceId, List<User> users, User requestingUser) { logger.info("Update users for service instance {}.", instanceId); ServiceInstance instance = null; try { instance = instanceDAO.getInstanceById(instanceId); checkInstanceAvailability(instance); final APPlatformController controller = APPlatformControllerFactory.getInstance(instance.getControllerId()); final ProvisioningSettings settings = configService.getProvisioningSettings(instance, UserMapper.toServiceUser(requestingUser)); // Forward request final InstanceStatus status = controller.updateUsers(instance.getInstanceId(), settings, mapToServiceUsers(users)); if (status != null) { // forward call to provisioning service on application instance if (status.isInstanceProvisioningRequested()) { final ProvisioningService provisioning = provisioningFactory.getInstance(instance); final BaseResult result = provisioning.updateUsers(instanceId, users, requestingUser); if (provResult.isError(result)) { return result; } } // If everything worked well we will save all changed parameters instance.setInstanceParameters(status.getChangedParameters()); } instance.setProvisioningStatus(ProvisioningStatus.WAITING_FOR_USER_MODIFICATION); em.persist(instance); timerService.initTimers(); return provResult.newOkBaseResult(); } catch (Exception e) { logger.warn(e.getMessage(), e); return provResult.getErrorResult( BaseResult.class, e, getLocale(requestingUser), instance, instanceId); } }