Skip to content

Commit

Permalink
Add delta to delete resource object case and set shadow OID for modif…
Browse files Browse the repository at this point in the history
…y/delete cases
  • Loading branch information
bpowers1215 committed Oct 16, 2017
1 parent 756bf6d commit dfaf6d4
Show file tree
Hide file tree
Showing 8 changed files with 47 additions and 33 deletions.
Expand Up @@ -229,23 +229,24 @@ private void initLayout() {
}

private void initDeltaPanel(Form mainForm){
// DeltaDto deltaDto = new DeltaDto(DeltaConvertor.toObjectDelta(caseDtoModel.getObject().getObjectChange()));
CaseDto caseDto = caseDtoModel.getObject();
String shadowName = caseDto.getTargetName();
ObjectDeltaType deltaType = caseDtoModel.getObject().getObjectChange();
deltaType.setOid(shadowName);
ObjectDeltaOperationType delta = new ObjectDeltaOperationType().objectDelta(deltaType).resourceOid(caseDtoModel.getObject().getObjectOid());
delta.setResourceName(new PolyStringType(caseDtoModel.getObject().getObjectName()));
delta.setObjectName(new PolyStringType(shadowName));
OperationResultType result = new OperationResultType();
result.setStatus(OperationResultStatusType.IN_PROGRESS);
delta.setExecutionResult(result);
ObjectDeltaType deltaType = caseDto.getObjectChange();
RepeatingView deltaScene = new RepeatingView(ID_DELTA_PANEL);

ObjectDeltaOperationPanel deltaPanel = new ObjectDeltaOperationPanel(deltaScene.newChildId(), Model.of(delta), this);
deltaPanel.setOutputMarkupId(true);
deltaScene.add(deltaPanel);
if (deltaType != null) {
//deltaType.setOid(shadowName);
ObjectDeltaOperationType delta = new ObjectDeltaOperationType().objectDelta(deltaType).resourceOid(caseDtoModel.getObject().getObjectOid());
delta.setResourceName(new PolyStringType(caseDtoModel.getObject().getObjectName()));
delta.setObjectName(new PolyStringType(shadowName));
OperationResultType result = new OperationResultType();
result.setStatus(OperationResultStatusType.IN_PROGRESS);
delta.setExecutionResult(result);

ObjectDeltaOperationPanel deltaPanel = new ObjectDeltaOperationPanel(deltaScene.newChildId(), Model.of(delta), this);
deltaPanel.setOutputMarkupId(true);
deltaScene.add(deltaPanel);
}
mainForm.add(deltaScene);
}

Expand Down
Expand Up @@ -1492,6 +1492,9 @@ PageCaseWorkItems.table.name=Name
PageCaseWorkItems.table.objectName=Object
PageCaseWorkItems.table.actors=Actor(s)
PageCaseWorkItems.table.description=Description
PageCaseWorkItems.table.openTimestamp=Created
PageCaseWorkItems.table.closeTimestamp=Closed
PageCaseWorkItems.table.state=State
PageDashboard.accounts=My accounts
PageDashboard.activeTasks=Active Tasks
PageDashboard.activeUsers=Active Users
Expand Down
Expand Up @@ -416,7 +416,7 @@ public AsynchronousOperationResult deleteResourceObject(ProvisioningContext ctx,
throw e;
}

connector.deleteObject(ctx.getObjectClassDefinition(), additionalOperations, identifiers, ctx, result);
connector.deleteObject(ctx.getObjectClassDefinition(), additionalOperations, shadow, identifiers, ctx, result);

computeResultStatus(result);
LOGGER.debug("PROVISIONING DELETE: {}", result.getStatus());
Expand Down Expand Up @@ -568,7 +568,7 @@ public AsynchronousOperationReturnValue<Collection<PropertyDelta<PrismPropertyVa
}

// Execute primary ICF operation on this shadow
sideEffectOperations = executeModify(ctx, preReadShadow, identifiers, operations, result);
sideEffectOperations = executeModify(ctx, (preReadShadow == null ? repoShadow.clone() : preReadShadow), identifiers, operations, result);

} else {
// We have to check BEFORE we add script operations, otherwise the check would be pointless
Expand Down Expand Up @@ -766,7 +766,7 @@ private Collection<PropertyModificationOperation> executeModify(ProvisioningCont
operationsWave = convertToReplace(ctx, operationsWave, currentShadow);
}
if (!operationsWave.isEmpty()) {
AsynchronousOperationReturnValue<Collection<PropertyModificationOperation>> ret = connector.modifyObject(objectClassDefinition, identifiersWorkingCopy, operationsWave, ctx, parentResult);
AsynchronousOperationReturnValue<Collection<PropertyModificationOperation>> ret = connector.modifyObject(objectClassDefinition, currentShadow, identifiersWorkingCopy, operationsWave, ctx, parentResult);
Collection<PropertyModificationOperation> sideEffects = ret.getReturnValue();
if (sideEffects != null) {
sideEffectChanges.addAll(sideEffects);
Expand Down
Expand Up @@ -261,12 +261,12 @@ AsynchronousOperationReturnValue<Collection<ResourceAttribute<?>>> addObject(Pri
* @throws SchemaException
* @throws ObjectAlreadyExistsException in case that the modified object conflicts with another existing object (e.g. while renaming an object)
*/
AsynchronousOperationReturnValue<Collection<PropertyModificationOperation>> modifyObject(ObjectClassComplexTypeDefinition objectClass, Collection<? extends ResourceAttribute<?>> identifiers, Collection<Operation> changes, StateReporter reporter,
AsynchronousOperationReturnValue<Collection<PropertyModificationOperation>> modifyObject(ObjectClassComplexTypeDefinition objectClass, PrismObject<ShadowType> shadow, Collection<? extends ResourceAttribute<?>> identifiers, Collection<Operation> changes, StateReporter reporter,
OperationResult parentResult)
throws ObjectNotFoundException, CommunicationException, GenericFrameworkException, SchemaException,
SecurityViolationException, ObjectAlreadyExistsException, ConfigurationException;

AsynchronousOperationResult deleteObject(ObjectClassComplexTypeDefinition objectClass, Collection<Operation> additionalOperations, Collection<? extends ResourceAttribute<?>> identifiers, StateReporter reporter,
AsynchronousOperationResult deleteObject(ObjectClassComplexTypeDefinition objectClass, Collection<Operation> additionalOperations, PrismObject<ShadowType> shadow, Collection<? extends ResourceAttribute<?>> identifiers, StateReporter reporter,
OperationResult parentResult)
throws ObjectNotFoundException, CommunicationException, GenericFrameworkException, SchemaException, ConfigurationException;

Expand Down
Expand Up @@ -93,12 +93,12 @@ protected abstract String createTicketAdd(PrismObject<? extends ShadowType> obje
GenericFrameworkException, SchemaException, ObjectAlreadyExistsException, ConfigurationException;

protected abstract String createTicketModify(ObjectClassComplexTypeDefinition objectClass,
Collection<? extends ResourceAttribute<?>> identifiers, String resourceOid, Collection<Operation> changes,
PrismObject<ShadowType> shadow, Collection<? extends ResourceAttribute<?>> identifiers, String resourceOid, Collection<Operation> changes,
OperationResult result) throws ObjectNotFoundException, CommunicationException, GenericFrameworkException, SchemaException,
ObjectAlreadyExistsException, ConfigurationException;

protected abstract String createTicketDelete(ObjectClassComplexTypeDefinition objectClass,
Collection<? extends ResourceAttribute<?>> identifiers, String resourceOid, OperationResult result)
PrismObject<ShadowType> shadow, Collection<? extends ResourceAttribute<?>> identifiers, String resourceOid, OperationResult result)
throws ObjectNotFoundException, CommunicationException, GenericFrameworkException, SchemaException,
ConfigurationException;

Expand Down Expand Up @@ -133,7 +133,7 @@ public AsynchronousOperationReturnValue<Collection<ResourceAttribute<?>>> addObj

@Override
public AsynchronousOperationReturnValue<Collection<PropertyModificationOperation>> modifyObject(
ObjectClassComplexTypeDefinition objectClass,
ObjectClassComplexTypeDefinition objectClass, PrismObject<ShadowType> shadow,
Collection<? extends ResourceAttribute<?>> identifiers, Collection<Operation> changes,
StateReporter reporter, OperationResult parentResult)
throws ObjectNotFoundException, CommunicationException, GenericFrameworkException,
Expand All @@ -145,7 +145,7 @@ public AsynchronousOperationReturnValue<Collection<PropertyModificationOperation

try {

ticketIdentifier = createTicketModify(objectClass, identifiers, reporter.getResourceOid(), changes, result);
ticketIdentifier = createTicketModify(objectClass, shadow, identifiers, reporter.getResourceOid(), changes, result);

} catch (ObjectNotFoundException | CommunicationException | GenericFrameworkException | SchemaException |
ObjectAlreadyExistsException | ConfigurationException | RuntimeException | Error e) {
Expand All @@ -164,7 +164,7 @@ public AsynchronousOperationReturnValue<Collection<PropertyModificationOperation

@Override
public AsynchronousOperationResult deleteObject(ObjectClassComplexTypeDefinition objectClass,
Collection<Operation> additionalOperations,
Collection<Operation> additionalOperations, PrismObject<ShadowType> shadow,
Collection<? extends ResourceAttribute<?>> identifiers, StateReporter reporter,
OperationResult parentResult) throws ObjectNotFoundException, CommunicationException,
GenericFrameworkException, SchemaException, ConfigurationException {
Expand All @@ -175,7 +175,7 @@ public AsynchronousOperationResult deleteObject(ObjectClassComplexTypeDefinition

try {

ticketIdentifier = createTicketDelete(objectClass, identifiers, reporter.getResourceOid(), result);
ticketIdentifier = createTicketDelete(objectClass, shadow, identifiers, reporter.getResourceOid(), result);

} catch (ObjectNotFoundException | CommunicationException | GenericFrameworkException | SchemaException |
ConfigurationException | RuntimeException | Error e) {
Expand Down
Expand Up @@ -51,8 +51,8 @@
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
import com.evolveum.prism.xml.ns._public.types_3.ObjectDeltaType;
import com.evolveum.prism.xml.ns._public.types_3.PolyStringType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType;
import com.evolveum.prism.xml.ns._public.types_3.*;

/**
* @author Radovan Semancik
Expand Down Expand Up @@ -118,7 +118,7 @@ protected String createTicketAdd(PrismObject<? extends ShadowType> object,

@Override
protected String createTicketModify(ObjectClassComplexTypeDefinition objectClass,
Collection<? extends ResourceAttribute<?>> identifiers, String resourceOid, Collection<Operation> changes,
PrismObject<ShadowType> shadow, Collection<? extends ResourceAttribute<?>> identifiers, String resourceOid, Collection<Operation> changes,
OperationResult result) throws ObjectNotFoundException, CommunicationException,
GenericFrameworkException, SchemaException, ObjectAlreadyExistsException, ConfigurationException {
LOGGER.debug("Creating case to modify account {}:\n{}", identifiers, DebugUtil.debugDump(changes, 1));
Expand All @@ -133,6 +133,7 @@ protected String createTicketModify(ObjectClassComplexTypeDefinition objectClass
.collect(Collectors.toList());
ObjectDelta<? extends ShadowType> objectDelta = ObjectDelta.createModifyDelta("", changeDeltas, ShadowType.class, getPrismContext());
ObjectDeltaType objectDeltaType = DeltaConvertor.toObjectDeltaType(objectDelta);
objectDeltaType.setOid(shadow.getOid());
String shadowName = getShadowIdentifier(identifiers);
String description = "Please modify resource account: "+shadowName;
PrismObject<CaseType> acase = addCase(description, resourceOid, shadowName, objectDeltaType, result);
Expand All @@ -141,15 +142,24 @@ protected String createTicketModify(ObjectClassComplexTypeDefinition objectClass

@Override
protected String createTicketDelete(ObjectClassComplexTypeDefinition objectClass,
Collection<? extends ResourceAttribute<?>> identifiers, String resourceOid, OperationResult result)
PrismObject<ShadowType> shadow, Collection<? extends ResourceAttribute<?>> identifiers, String resourceOid, OperationResult result)
throws ObjectNotFoundException, CommunicationException, GenericFrameworkException,
SchemaException, ConfigurationException {
LOGGER.debug("Creating case to delete account {}", identifiers);
String shadowName = getShadowIdentifier(identifiers);
String description = "Please delete resource account: "+shadowName;
ObjectDeltaType objectDeltaType = new ObjectDeltaType();
objectDeltaType.setChangeType(ChangeTypeType.DELETE);
objectDeltaType.setObjectType(ShadowType.COMPLEX_TYPE);
ItemDeltaType itemDeltaType = new ItemDeltaType();
itemDeltaType.setPath(new ItemPathType("kind"));
itemDeltaType.setModificationType(ModificationTypeType.DELETE);
objectDeltaType.setOid(shadow.getOid());

objectDeltaType.getItemDelta().add(itemDeltaType);
PrismObject<CaseType> acase;
try {
acase = addCase(description, resourceOid, shadowName, null, result);
acase = addCase(description, resourceOid, shadowName, objectDeltaType, result);
} catch (ObjectAlreadyExistsException e) {
// should not happen
throw new SystemException(e.getMessage(), e);
Expand Down
Expand Up @@ -1470,7 +1470,7 @@ private void validateShadow(PrismObject<? extends ShadowType> shadow, String ope
// (other identifiers are ignored on input and output of this method)

@Override
public AsynchronousOperationReturnValue<Collection<PropertyModificationOperation>> modifyObject(ObjectClassComplexTypeDefinition objectClassDef, Collection<? extends ResourceAttribute<?>> identifiers, Collection<Operation> changes, StateReporter reporter,
public AsynchronousOperationReturnValue<Collection<PropertyModificationOperation>> modifyObject(ObjectClassComplexTypeDefinition objectClassDef, PrismObject<ShadowType> shadow, Collection<? extends ResourceAttribute<?>> identifiers, Collection<Operation> changes, StateReporter reporter,
OperationResult parentResult) throws ObjectNotFoundException, CommunicationException,
GenericFrameworkException, SchemaException, SecurityViolationException, ObjectAlreadyExistsException {

Expand Down Expand Up @@ -1925,7 +1925,7 @@ private String dumpAttributes(Set<Attribute> attributes) {
}

@Override
public AsynchronousOperationResult deleteObject(ObjectClassComplexTypeDefinition objectClass, Collection<Operation> additionalOperations, Collection<? extends ResourceAttribute<?>> identifiers, StateReporter reporter,
public AsynchronousOperationResult deleteObject(ObjectClassComplexTypeDefinition objectClass, Collection<Operation> additionalOperations, PrismObject<ShadowType> shadow, Collection<? extends ResourceAttribute<?>> identifiers, StateReporter reporter,
OperationResult parentResult)
throws ObjectNotFoundException, CommunicationException, GenericFrameworkException, SchemaException {
Validate.notNull(objectClass, "No objectclass");
Expand Down
Expand Up @@ -317,7 +317,7 @@ public void test100AddDeleteObject() throws Exception {

ObjectClassComplexTypeDefinition accountDefinition = resourceSchema.findObjectClassDefinition(OpenDJController.OBJECT_CLASS_INETORGPERSON_NAME);

cc.deleteObject(accountDefinition, null, identifiers, null, result);
cc.deleteObject(accountDefinition, null, null, identifiers, null, result);

ResourceObjectIdentification identification = ResourceObjectIdentification.createFromAttributes(
accountDefinition, identifiers);
Expand Down Expand Up @@ -350,7 +350,7 @@ public void test110ChangeModifyObject() throws Exception {

ObjectClassComplexTypeDefinition accountDefinition = resourceSchema.findObjectClassDefinition(OpenDJController.OBJECT_CLASS_INETORGPERSON_NAME);

cc.modifyObject(accountDefinition, identifiers, changes, null, result);
cc.modifyObject(accountDefinition, null, identifiers, changes, null, result);

ResourceObjectIdentification identification = ResourceObjectIdentification.createFromAttributes(
accountDefinition, identifiers);
Expand Down Expand Up @@ -751,7 +751,7 @@ public void test610ChangePassword() throws Exception {

// PasswordChangeOperation passwordChange = new PasswordChangeOperation(passPs);
// changes.add(passwordChange);
cc.modifyObject(accountDefinition, identifiers, changes, null, result);
cc.modifyObject(accountDefinition, null, identifiers, changes, null, result);

// THEN

Expand Down

0 comments on commit dfaf6d4

Please sign in to comment.