use of com.evolveum.icf.dummy.resource.ConflictException in project midpoint by Evolveum.
the class DummyConnector method create.
/******************
* SPI Operations
*
* Implement the following operations using the contract and
* description found in the Javadoc for these methods.
******************/
/**
* {@inheritDoc}
*/
/**
* {@inheritDoc}
*/
public Uid create(final ObjectClass objectClass, final Set<Attribute> createAttributes, final OperationOptions options) {
log.info("create::begin attributes {0}", createAttributes);
validate(objectClass);
DummyObject newObject;
try {
if (ObjectClass.ACCOUNT.is(objectClass.getObjectClassValue())) {
// Convert attributes to account
DummyAccount newAccount = convertToAccount(createAttributes);
log.ok("Adding dummy account:\n{0}", newAccount.debugDump());
resource.addAccount(newAccount);
newObject = newAccount;
} else if (ObjectClass.GROUP.is(objectClass.getObjectClassValue())) {
DummyGroup newGroup = convertToGroup(createAttributes);
log.ok("Adding dummy group:\n{0}", newGroup.debugDump());
resource.addGroup(newGroup);
newObject = newGroup;
} else if (objectClass.is(OBJECTCLASS_PRIVILEGE_NAME)) {
DummyPrivilege newPriv = convertToPriv(createAttributes);
log.ok("Adding dummy privilege:\n{0}", newPriv.debugDump());
resource.addPrivilege(newPriv);
newObject = newPriv;
} else if (objectClass.is(OBJECTCLASS_ORG_NAME)) {
DummyOrg newOrg = convertToOrg(createAttributes);
log.ok("Adding dummy org:\n{0}", newOrg.debugDump());
resource.addOrg(newOrg);
newObject = newOrg;
} else {
throw new ConnectorException("Unknown object class " + objectClass);
}
} catch (ObjectAlreadyExistsException e) {
// The framework should deal with it ... somehow
throw new AlreadyExistsException(e.getMessage(), e);
} catch (ConnectException e) {
throw new ConnectionFailedException(e.getMessage(), e);
} catch (FileNotFoundException e) {
throw new ConnectorIOException(e.getMessage(), e);
} catch (SchemaViolationException e) {
throw new InvalidAttributeValueException(e);
} catch (ConflictException e) {
throw new AlreadyExistsException(e);
}
String id;
if (configuration.getUidMode().equals(DummyConfiguration.UID_MODE_NAME)) {
id = newObject.getName();
} else if (configuration.getUidMode().equals(DummyConfiguration.UID_MODE_UUID)) {
id = newObject.getId();
} else {
throw new IllegalStateException("Unknown UID mode " + configuration.getUidMode());
}
Uid uid = new Uid(id);
log.info("create::end");
return uid;
}
use of com.evolveum.icf.dummy.resource.ConflictException in project midpoint by Evolveum.
the class DummyConnectorLegacyUpdate method update.
/**
* {@inheritDoc}
*/
@Override
public Uid update(ObjectClass objectClass, Uid uid, Set<Attribute> replaceAttributes, OperationOptions options) {
LOG.info("update::begin");
validate(objectClass);
validate(uid);
try {
if (ObjectClass.ACCOUNT.is(objectClass.getObjectClassValue())) {
final DummyAccount account;
if (configuration.isUidBoundToName()) {
account = resource.getAccountByUsername(uid.getUidValue(), false);
} else if (configuration.isUidSeparateFromName()) {
account = resource.getAccountById(uid.getUidValue(), false);
} else {
throw new IllegalStateException("Unknown UID mode " + configuration.getUidMode());
}
if (account == null) {
throw new UnknownUidException("Account with UID " + uid + " does not exist on resource");
}
applyModifyMetadata(account, options);
// we do this before setting attribute values, in case when description itself would be changed
resource.changeDescriptionIfNeeded(account);
for (Attribute attr : replaceAttributes) {
if (attr.is(Name.NAME)) {
String newName = (String) attr.getValue().get(0);
try {
resource.renameAccount(account.getId(), account.getName(), newName);
} catch (ObjectDoesNotExistException e) {
throw new org.identityconnectors.framework.common.exceptions.UnknownUidException(e.getMessage(), e);
} catch (ObjectAlreadyExistsException e) {
throw new org.identityconnectors.framework.common.exceptions.AlreadyExistsException(e.getMessage(), e);
} catch (SchemaViolationException e) {
throw new org.identityconnectors.framework.common.exceptions.InvalidAttributeValueException("Schema exception: " + e.getMessage(), e);
}
// We need to change the returned uid here (only if the mode is not set to NAME)
if (configuration.isUidBoundToName()) {
uid = new Uid(newName);
}
} else if (attr.is(OperationalAttributes.PASSWORD_NAME)) {
changePassword(account, attr);
} else if (attr.is(OperationalAttributes.ENABLE_NAME)) {
account.setEnabled(getBoolean(attr));
} else if (attr.is(OperationalAttributes.ENABLE_DATE_NAME)) {
account.setValidFrom(getDate(attr));
} else if (attr.is(OperationalAttributes.DISABLE_DATE_NAME)) {
account.setValidTo(getDate(attr));
} else if (attr.is(OperationalAttributes.LOCK_OUT_NAME)) {
account.setLockout(getBooleanMandatory(attr));
} else if (PredefinedAttributes.AUXILIARY_OBJECT_CLASS_NAME.equalsIgnoreCase(attr.getName())) {
account.replaceAuxiliaryObjectClassNames(attr.getValue());
} else {
String name = attr.getName();
try {
account.replaceAttributeValues(name, attr.getValue());
} catch (SchemaViolationException e) {
// The framework should deal with it ... somehow
throw new InvalidAttributeValueException(e.getMessage(), e);
}
}
}
} else if (ObjectClass.GROUP.is(objectClass.getObjectClassValue())) {
final DummyGroup group;
if (configuration.isUidBoundToName()) {
group = resource.getGroupByName(uid.getUidValue(), false);
} else if (configuration.isUidSeparateFromName()) {
group = resource.getGroupById(uid.getUidValue(), false);
} else {
throw new IllegalStateException("Unknown UID mode " + configuration.getUidMode());
}
if (group == null) {
throw new UnknownUidException("Group with UID " + uid + " does not exist on resource");
}
applyModifyMetadata(group, options);
for (Attribute attr : replaceAttributes) {
if (attr.is(Name.NAME)) {
String newName = (String) attr.getValue().get(0);
try {
resource.renameGroup(group.getId(), group.getName(), newName);
} catch (ObjectDoesNotExistException e) {
throw new org.identityconnectors.framework.common.exceptions.UnknownUidException(e.getMessage(), e);
} catch (ObjectAlreadyExistsException e) {
throw new org.identityconnectors.framework.common.exceptions.AlreadyExistsException(e.getMessage(), e);
}
// We need to change the returned uid here (only if the mode is not set to NAME)
if (configuration.isUidBoundToName()) {
uid = new Uid(newName);
}
} else if (attr.is(OperationalAttributes.PASSWORD_NAME)) {
throw new InvalidAttributeValueException("Attempt to change password on group");
} else if (attr.is(OperationalAttributes.ENABLE_NAME)) {
group.setEnabled(getBooleanMandatory(attr));
} else {
String name = attr.getName();
List<Object> values = attr.getValue();
if (attr.is(DummyGroup.ATTR_MEMBERS_NAME) && values != null && configuration.getUpCaseName()) {
List<Object> newValues = new ArrayList<>(values.size());
for (Object val : values) {
newValues.add(StringUtils.upperCase((String) val));
}
values = newValues;
}
try {
group.replaceAttributeValues(name, values);
} catch (SchemaViolationException e) {
throw new InvalidAttributeValueException(e.getMessage(), e);
}
}
}
} else if (objectClass.is(OBJECTCLASS_PRIVILEGE_NAME)) {
final DummyPrivilege priv;
if (configuration.isUidBoundToName()) {
priv = resource.getPrivilegeByName(uid.getUidValue(), false);
} else if (configuration.isUidSeparateFromName()) {
priv = resource.getPrivilegeById(uid.getUidValue(), false);
} else {
throw new IllegalStateException("Unknown UID mode " + configuration.getUidMode());
}
if (priv == null) {
throw new UnknownUidException("Privilege with UID " + uid + " does not exist on resource");
}
applyModifyMetadata(priv, options);
for (Attribute attr : replaceAttributes) {
if (attr.is(Name.NAME)) {
String newName = (String) attr.getValue().get(0);
try {
resource.renamePrivilege(priv.getId(), priv.getName(), newName);
} catch (ObjectDoesNotExistException e) {
throw new org.identityconnectors.framework.common.exceptions.UnknownUidException(e.getMessage(), e);
} catch (ObjectAlreadyExistsException e) {
throw new org.identityconnectors.framework.common.exceptions.AlreadyExistsException(e.getMessage(), e);
}
// We need to change the returned uid here (only if the mode is not set to NAME)
if (configuration.isUidBoundToName()) {
uid = new Uid(newName);
}
} else if (attr.is(OperationalAttributes.PASSWORD_NAME)) {
throw new InvalidAttributeValueException("Attempt to change password on privilege");
} else if (attr.is(OperationalAttributes.ENABLE_NAME)) {
throw new InvalidAttributeValueException("Attempt to change enable on privilege");
} else {
String name = attr.getName();
try {
priv.replaceAttributeValues(name, attr.getValue());
} catch (SchemaViolationException e) {
throw new InvalidAttributeValueException(e.getMessage(), e);
}
}
}
} else if (objectClass.is(OBJECTCLASS_ORG_NAME)) {
final DummyOrg org;
if (configuration.isUidBoundToName()) {
org = resource.getOrgByName(uid.getUidValue(), false);
} else if (configuration.isUidSeparateFromName()) {
org = resource.getOrgById(uid.getUidValue(), false);
} else {
throw new IllegalStateException("Unknown UID mode " + configuration.getUidMode());
}
if (org == null) {
throw new UnknownUidException("Org with UID " + uid + " does not exist on resource");
}
applyModifyMetadata(org, options);
for (Attribute attr : replaceAttributes) {
if (attr.is(Name.NAME)) {
String newName = (String) attr.getValue().get(0);
try {
resource.renameOrg(org.getId(), org.getName(), newName);
} catch (ObjectDoesNotExistException e) {
throw new org.identityconnectors.framework.common.exceptions.UnknownUidException(e.getMessage(), e);
} catch (ObjectAlreadyExistsException e) {
throw new org.identityconnectors.framework.common.exceptions.AlreadyExistsException(e.getMessage(), e);
}
// We need to change the returned uid here (only if the mode is not set to NAME)
if (configuration.isUidBoundToName()) {
uid = new Uid(newName);
}
} else if (attr.is(OperationalAttributes.PASSWORD_NAME)) {
throw new InvalidAttributeValueException("Attempt to change password on org");
} else if (attr.is(OperationalAttributes.ENABLE_NAME)) {
throw new InvalidAttributeValueException("Attempt to change enable on org");
} else {
String name = attr.getName();
try {
org.replaceAttributeValues(name, attr.getValue());
} catch (SchemaViolationException e) {
throw new InvalidAttributeValueException(e.getMessage(), e);
}
}
}
} else {
throw new ConnectorException("Unknown object class " + objectClass);
}
} catch (ConnectException e) {
LOG.info("update::exception " + e);
throw new ConnectionFailedException(e.getMessage(), e);
} catch (FileNotFoundException e) {
LOG.info("update::exception " + e);
throw new ConnectorIOException(e.getMessage(), e);
} catch (SchemaViolationException e) {
LOG.info("update::exception " + e);
throw new InvalidAttributeValueException(e.getMessage(), e);
} catch (ConflictException e) {
LOG.info("update::exception " + e);
throw new AlreadyExistsException(e);
} catch (InterruptedException e) {
LOG.info("update::exception " + e);
throw new OperationTimeoutException(e);
}
LOG.info("update::end");
return uid;
}
Aggregations