use of eu.bcvsolutions.idm.vs.connector.api.VsVirtualConnector in project CzechIdMng by bcvsolutions.
the class DefaultVsRequestService method getVirtualConnector.
/**
* Get virtual connector by vs request
*
* @param request
* @return
*/
private VsVirtualConnector getVirtualConnector(VsRequestDto request) {
IcConnectorInfo connectorInfo = //
czechIdMConfigurationService.getAvailableLocalConnectors().stream().filter(//
info -> request.getConnectorKey().equals(info.getConnectorKey().getFullName())).findFirst().orElse(null);
if (connectorInfo == null) {
throw new IcException(MessageFormat.format("We cannot found connector info by connector key [{0}] from virtual system request!", request.getConnectorKey()));
}
IcConnectorInstance connectorKeyInstance = new IcConnectorInstanceImpl(null, connectorInfo.getConnectorKey(), false);
IcConnector connectorInstance = czechIdMConnectorService.getConnectorInstance(connectorKeyInstance, request.getConfiguration());
if (!(connectorInstance instanceof VsVirtualConnector)) {
throw new IcException("Found connector instance is not virtual system connector!");
}
VsVirtualConnector virtualConnector = (VsVirtualConnector) connectorInstance;
return virtualConnector;
}
use of eu.bcvsolutions.idm.vs.connector.api.VsVirtualConnector in project CzechIdMng by bcvsolutions.
the class DefaultVsRequestService method internalExecute.
@Override
public IcUidAttribute internalExecute(VsRequestDto request) {
request.setState(VsRequestState.REALIZED);
Assert.notNull(request.getConfiguration(), "Request have to contains connector configuration!");
Assert.notNull(request.getConnectorKey(), "Request have to contains connector key!");
// Find connector by request
VsVirtualConnector virtualConnector = getVirtualConnector(request);
IcUidAttribute result = null;
// Save the request
this.save(request);
switch(request.getOperationType()) {
case CREATE:
{
result = virtualConnector.internalCreate(request.getConnectorObject().getObjectClass(), request.getConnectorObject().getAttributes());
break;
}
case UPDATE:
{
VsAccountDto account = accountService.findByUidSystem(request.getUid(), request.getSystem());
if (account == null) {
throw new VsException(VsResultCode.VS_REQUEST_UPDATING_ACCOUNT_NOT_EXIST, ImmutableMap.of("uid", request.getUid()));
}
result = virtualConnector.internalUpdate(new IcUidAttributeImpl(null, request.getUid(), null), request.getConnectorObject().getObjectClass(), request.getConnectorObject().getAttributes());
break;
}
case DELETE:
{
VsAccountDto account = accountService.findByUidSystem(request.getUid(), request.getSystem());
if (account == null) {
throw new VsException(VsResultCode.VS_REQUEST_DELETING_ACCOUNT_NOT_EXIST, ImmutableMap.of("uid", request.getUid()));
}
virtualConnector.internalDelete(new IcUidAttributeImpl(null, request.getUid(), null), request.getConnectorObject().getObjectClass());
// All unresolved request created before this delete request will be
// canceled
VsRequestFilter filter = new VsRequestFilter();
filter.setCreatedBefore(request.getCreated());
filter.setUid(request.getUid());
filter.setSystemId(request.getSystem());
filter.setState(VsRequestState.IN_PROGRESS);
// Unresolved request created before this request
List<VsRequestDto> beforeRequests = this.find(filter, null).getContent();
beforeRequests.forEach(beforeRequest -> {
String reason = MessageFormat.format("Request [{0}] was canceled (by SYSTEM), because 'after' delete request [{1}] was realized!", beforeRequest.getId(), request.getId());
this.cancel(beforeRequest, reason);
LOG.info(reason);
});
break;
}
default:
throw new IcException(MessageFormat.format("Unsupported operation type [{0}]", request.getOperationType()));
}
return result;
}
use of eu.bcvsolutions.idm.vs.connector.api.VsVirtualConnector in project CzechIdMng by bcvsolutions.
the class DefaultVsSystemService method getVirtualConnector.
@Transactional
@Override
public VsVirtualConnector getVirtualConnector(UUID systemId, String connectorKey) {
Assert.notNull(systemId, "System identifier is required.");
Assert.notNull(connectorKey, "Connector key is required.");
IcConnectorInfo connectorInfo = this.getConnectorInfo(connectorKey);
if (connectorInfo == null) {
throw new IcException(MessageFormat.format("We cannot found connector info by connector key [{0}] from virtual system request!", connectorKey));
}
IcConnector connectorInstance = this.getConnectorInstance(systemId, connectorInfo);
if (!(connectorInstance instanceof VsVirtualConnector)) {
throw new IcException("Found connector instance is not virtual system connector!");
}
VsVirtualConnector virtualConnector = (VsVirtualConnector) connectorInstance;
return virtualConnector;
}
use of eu.bcvsolutions.idm.vs.connector.api.VsVirtualConnector in project CzechIdMng by bcvsolutions.
the class DefaultVsSystemService method create.
@Transactional
@Override
public SysSystemDto create(VsSystemDto vsSystem) {
Assert.notNull(vsSystem, "Vs system dto cannot be null (for create new virtual system)");
Assert.notNull(vsSystem.getName(), "Vs system name cannot be null (for create new virtual system)");
LOG.info("Create new virtual system with name [{}].", vsSystem.getName());
SysSystemDto system = new SysSystemDto();
// Find connector for VS
Class<? extends VsVirtualConnector> defaultVirtualConnector = BasicVirtualConnector.class;
IcConnectorClass connectorAnnotation = defaultVirtualConnector.getAnnotation(IcConnectorClass.class);
IcConnectorInfo info = CzechIdMIcConvertUtil.convertConnectorClass(connectorAnnotation, (Class<? extends IcConnector>) defaultVirtualConnector);
// Set connector key for VS
system.setConnectorKey(new SysConnectorKeyDto(info.getConnectorKey()));
system.setName(vsSystem.getName());
// Create system
system = this.systemService.save(system, IdmBasePermission.CREATE);
// Find and update attribute for implementers
IdmFormDefinitionDto connectorFormDef = this.systemService.getConnectorFormDefinition(system);
IdmFormAttributeDto implementersFormAttr = connectorFormDef.getMappedAttributeByCode(IMPLEMENTERS_PROPERTY);
formService.saveValues(system, implementersFormAttr, new ArrayList<>(vsSystem.getImplementers()));
// Find and update attribute for implementers by roles
IdmFormAttributeDto implementerRolesFormAttr = connectorFormDef.getMappedAttributeByCode(IMPLEMENTER_ROLES_PROPERTY);
formService.saveValues(system, implementerRolesFormAttr, new ArrayList<>(vsSystem.getImplementerRoles()));
// Find and update attribute for properties
IdmFormAttributeDto attributesFormAttr = connectorFormDef.getMappedAttributeByCode(ATTRIBUTES_PROPERTY);
if (!vsSystem.getAttributes().isEmpty()) {
formService.saveValues(system, attributesFormAttr, new ArrayList<>(vsSystem.getAttributes()));
} else {
List<Serializable> defaultAttributes = Lists.newArrayList((Serializable[]) BasicVirtualConfiguration.DEFAULT_ATTRIBUTES);
defaultAttributes.add(RIGHTS_ATTRIBUTE);
formService.saveValues(system, attributesFormAttr, defaultAttributes);
}
// Update virtual system configuration (implementers and definition)
VsVirtualConnector virtualConnector = this.getVirtualConnector(system.getId(), system.getConnectorKey().getFullName());
Assert.notNull(virtualConnector, "Connector is required.");
this.updateSystemConfiguration(virtualConnector.getConfiguration(), virtualConnector.getClass());
system = systemService.get(system.getId());
// Search attribute definition for rights and set him to multivalue
String virtualSystemKey = createVsFormDefinitionKey(system);
String type = VsAccount.class.getName();
IdmFormDefinitionDto definition = this.formService.getDefinition(type, virtualSystemKey);
IdmFormAttributeDto rightsFormAttr = formAttributeService.findAttribute(type, definition.getCode(), RIGHTS_ATTRIBUTE);
if (rightsFormAttr != null) {
rightsFormAttr.setMultiple(true);
formService.saveAttribute(rightsFormAttr);
}
// Update virtual system configuration (rights attribute ... multivalued)
virtualConnector = this.getVirtualConnector(system.getId(), system.getConnectorKey().getFullName());
this.updateSystemConfiguration(virtualConnector.getConfiguration(), virtualConnector.getClass());
this.systemService.checkSystem(system);
// Generate schema
List<SysSchemaObjectClassDto> schemas = this.systemService.generateSchema(system);
SysSchemaObjectClassDto schemaAccount = schemas.stream().filter(schema -> IcObjectClassInfo.ACCOUNT.equals(schema.getObjectClassName())).findFirst().orElse(null);
Assert.notNull(schemaAccount, "We cannot found schema for ACCOUNT!");
// Create mapping by default attributes
SysSystemMappingDto defaultMapping = this.createDefaultMapping(system, schemaAccount, vsSystem);
// Create mapping for Connection
SysSystemMappingDto foundMapping = createMapping(system, schemaAccount.getId());
Assert.notNull(foundMapping, "Mapping not found!");
SysSystemAttributeMappingDto attributeMapping = createAttributeMapping(foundMapping.getId(), schemaAccount.getId());
Assert.notNull(attributeMapping, "Attribute Mapping not found!");
// Create default role
IdmRoleDto role = createRoleAndConnectToSystem(vsSystem, system, defaultMapping.getId());
SysSyncIdentityConfigDto synchronization = createReconciliationConfig(attributeMapping.getId(), foundMapping.getId(), system.getId(), role == null ? null : role.getId());
Assert.notNull(synchronization, "Synchronization not found!");
return this.systemService.get(system.getId());
}
use of eu.bcvsolutions.idm.vs.connector.api.VsVirtualConnector in project CzechIdMng by bcvsolutions.
the class SystemSaveProcessor method process.
@Override
public EventResult<SysSystemDto> process(EntityEvent<SysSystemDto> event) {
SysSystemDto system = event.getContent();
Assert.notNull(system, "System is required.");
UUID systemId = system.getId();
Assert.notNull(systemId, "System identifier is required.");
SysConnectorKeyDto connectorKey = system.getConnectorKey();
Assert.notNull(connectorKey, "Connector key is required.");
VsVirtualConnector virtualConnector = vsSystemService.getVirtualConnector(systemId, connectorKey.getFullName());
Assert.notNull(virtualConnector, "Connector is required.");
// Update configuration (implementers, definition)
vsSystemService.updateSystemConfiguration(virtualConnector.getConfiguration(), virtualConnector.getClass());
return new DefaultEventResult<>(event, this);
}
Aggregations