public static List<ObjectDeltaOperation<ShadowType>> findProjectionDeltasInCollection(Collection<ObjectDeltaOperation<? extends ObjectType>> odos) { List<ObjectDeltaOperation<ShadowType>> projectionDeltas = new ArrayList<>(); for (ObjectDeltaOperation<? extends ObjectType> odo : odos) { Class<? extends ObjectType> objectTypeClass = odo.getObjectDelta().getObjectTypeClass(); if (ShadowType.class.equals(objectTypeClass)) { projectionDeltas.add((ObjectDeltaOperation<ShadowType>) odo); } } return projectionDeltas; }
public static void toObjectDeltaOperationType(ObjectDeltaOperation delta, ObjectDeltaOperationType odo, DeltaConversionOptions options) throws SchemaException { odo.setObjectDelta(DeltaConvertor.toObjectDeltaType(delta.getObjectDelta(), options)); if (delta.getExecutionResult() != null){ odo.setExecutionResult(delta.getExecutionResult().createOperationResultType()); } if (delta.getObjectName() != null) { odo.setObjectName(new PolyStringType(delta.getObjectName())); } odo.setResourceOid(delta.getResourceOid()); if (delta.getResourceName() != null) { odo.setResourceName(new PolyStringType(delta.getResourceName())); } }
public static ObjectDeltaOperation createObjectDeltaOperation(ObjectDeltaOperationType objectDeltaOperationType, PrismContext prismContext) throws SchemaException { ObjectDeltaOperation retval = new ObjectDeltaOperation(createObjectDelta(objectDeltaOperationType.getObjectDelta(), prismContext)); if (objectDeltaOperationType.getExecutionResult() != null) { retval.setExecutionResult(OperationResult.createOperationResult(objectDeltaOperationType.getExecutionResult())); } if (objectDeltaOperationType.getObjectName() != null) { retval.setObjectName(objectDeltaOperationType.getObjectName().toPolyString()); } retval.setResourceOid(objectDeltaOperationType.getResourceOid()); if (objectDeltaOperationType.getResourceName() != null) { retval.setObjectName(objectDeltaOperationType.getResourceName().toPolyString()); } return retval; }
public ObjectDeltaOperation<O> clone() { ObjectDeltaOperation<O> clone = new ObjectDeltaOperation<>(); copyToClone(clone); return clone; }
private void checkNamesArePresent(Collection<ObjectDeltaOperation<? extends ObjectType>> deltas, PrismObject<? extends ObjectType> primaryObject) { if (primaryObject != null) { for (ObjectDeltaOperation<? extends ObjectType> delta : deltas) { if (delta.getObjectName() == null) { delta.setObjectName(primaryObject.getName()); } } } }
public static String findFocusDeltaOidInCollection(Collection<ObjectDeltaOperation<? extends ObjectType>> odos) { ObjectDeltaOperation<? extends ObjectType> odo = findFocusDeltaInCollection(odos); if (odo == null) { return null; } return odo.getObjectDelta().getOid(); }
@Override public List<ShadowType> getShadowsToActivate(Collection<? extends ModelElementContext> projectionContexts) { List<ShadowType> shadows = new ArrayList<>(); for (ModelElementContext<ShadowType> projectionCtx : projectionContexts) { List<? extends ObjectDeltaOperation> executedShadowDelas = projectionCtx.getExecutedDeltas(); for (ObjectDeltaOperation<ShadowType> shadowDelta : executedShadowDelas) { if (shadowDelta.getExecutionResult().getStatus() == OperationResultStatus.SUCCESS && shadowDelta.getObjectDelta().getChangeType() == ChangeType.ADD) { PrismObject<ShadowType> shadow = shadowDelta.getObjectDelta().getObjectToAdd(); PrismProperty<String> pLifecycleState = shadow.findProperty(ShadowType.F_LIFECYCLE_STATE); if (pLifecycleState != null && !pLifecycleState.isEmpty() && SchemaConstants.LIFECYCLE_PROPOSED .equals(pLifecycleState.getRealValue())) { shadows.add(shadow.asObjectable()); } } } } return shadows; }
if (LOGGER.isTraceEnabled()) { LOGGER.trace("findLastRelatedDelta returned:\n{}", lastRelated != null ? lastRelated.shorterDebugDump(1) : " (null)"); if (lastRelated.getExecutionResult().isSuccess() && lastRelated.containsDelta(objectDelta)) { return null; // case 1 - exact match found with SUCCESS result, if (lastRelated.getObjectDelta().isDelete()) { return objectDelta; // we can (and should) apply the ADD delta as a if (!lastRelated.getObjectDelta().isAdd()) { return objectDelta; // this will probably fail, but ... PrismObject<T> alreadyAdded = lastRelated.getObjectDelta().getObjectToAdd(); PrismObject<T> toBeAddedNow = objectDelta.getObjectToAdd(); return alreadyAdded.diff(toBeAddedNow);
public static ObjectDeltaOperation fromRepo(RObjectDeltaOperation operation, PrismContext prismContext, boolean useUtf16) throws DtoTranslationException { ObjectDeltaOperation odo = new ObjectDeltaOperation(); try { if (operation.getDelta() != null) { byte[] data = operation.getDelta(); String xmlDelta = RUtil.getXmlFromByteArray(data, true, useUtf16); ObjectDeltaType delta = prismContext.parserFor(xmlDelta).parseRealValue(ObjectDeltaType.class); odo.setObjectDelta(DeltaConvertor.createObjectDelta(delta, prismContext)); } if (operation.getFullResult() != null) { byte[] data = operation.getFullResult(); String xmlResult = RUtil.getXmlFromByteArray(data, true, useUtf16); OperationResultType resultType = prismContext.parserFor(xmlResult).parseRealValue(OperationResultType.class); odo.setExecutionResult(OperationResult.createOperationResult(resultType)); } odo.setObjectName(RPolyString.fromRepo(operation.getObjectName())); odo.setResourceOid(operation.getResourceOid()); odo.setResourceName(RPolyString.fromRepo(operation.getResourceName())); } catch (Exception ex) { throw new DtoTranslationException(ex.getMessage(), ex); } return odo; } }
private ObjectDeltaOperation<UserType> createObjectDeltaOperation(int i) throws Exception { ObjectDelta<UserType> delta = prismContext.deltaFor(UserType.class) .item(UserType.F_DESCRIPTION).replace("d" + i) .asObjectDeltaCast("oid-" + i); ObjectDeltaOperation<UserType> odo = new ObjectDeltaOperation<>(); odo.setObjectDelta(delta); odo.setExecutionResult(new OperationResult("asdf")); return odo; } }
public static <O extends ObjectType> String findAddDeltaOid(Collection<ObjectDeltaOperation<? extends ObjectType>> executedChanges, PrismObject<O> object) { ObjectDeltaOperation<O> odo = findAddDelta(executedChanges, object); if (odo == null) { return null; } return odo.getObjectDelta().getOid(); }
auditRecord.addDeltas(ObjectDeltaOperation.cloneDeltaCollection(deltas)); auditRecord.setTarget(ModelImplUtils.determineAuditTarget(deltas, prismContext)); } finally { // to have a record with the failed delta as well result1.computeStatus(); ObjectDeltaOperation<? extends ObjectType> odoToAudit = new ObjectDeltaOperation<>(delta, result1); if (objectToDetermineDetailsForAudit != null) { odoToAudit.setObjectName(objectToDetermineDetailsForAudit.getName()); if (objectToDetermineDetailsForAudit.asObjectable() instanceof ShadowType) { ShadowType shadow = (ShadowType) objectToDetermineDetailsForAudit.asObjectable(); odoToAudit.setResourceOid(ShadowUtil.getResourceOid(shadow)); odoToAudit.setResourceName(ShadowUtil.getResourceName(shadow));
ObjectDeltaOperation<ShadowType> auditShadowDelta = dummyAuditService.assertHasDelta(ChangeType.MODIFY, ShadowType.class); assertEquals("Unexpected number of modifications in shadow audit delta: "+auditShadowDelta.debugDump(), 8, auditShadowDelta.getObjectDelta().getModifications().size());
public static List<String> findProjectionDeltaOidsInCollection(Collection<ObjectDeltaOperation<? extends ObjectType>> executeChanges) { return findProjectionDeltasInCollection(executeChanges).stream() .map(odo -> odo.getObjectDelta().getOid()) .distinct() .collect(Collectors.toList()); }
@Override public boolean isStatusType(EventStatusType eventStatusType) { boolean allSuccess = true, anySuccess = false, allFailure = true, anyFailure = false, anyInProgress = false; for (ObjectDeltaOperation objectDeltaOperation : getAllExecutedDeltas()) { if (objectDeltaOperation.getExecutionResult() != null) { switch (objectDeltaOperation.getExecutionResult().getStatus()) { case SUCCESS: anySuccess = true; allFailure = false; break; case FATAL_ERROR: allSuccess = false; anyFailure = true; break; case WARNING: anySuccess = true; allFailure = false; break; case HANDLED_ERROR: anySuccess = true; allFailure = false; break; case IN_PROGRESS: allSuccess = false; allFailure = false; anyInProgress = true; break; case NOT_APPLICABLE: break; case PARTIAL_ERROR: allSuccess = false; anyFailure = true; break; case UNKNOWN: allSuccess = false; allFailure = false; break; default: LOGGER.warn("Unknown execution result: " + objectDeltaOperation.getExecutionResult().getStatus()); } } else { allSuccess = false; allFailure = false; anyInProgress = true; } } switch (eventStatusType) { case ALSO_SUCCESS: return anySuccess; case SUCCESS: return allSuccess; case FAILURE: return anyFailure; case ONLY_FAILURE: return allFailure; case IN_PROGRESS: return anyInProgress; default: throw new IllegalStateException("Invalid eventStatusType: " + eventStatusType); } }
public static Collection<ObjectDeltaOperation<? extends ObjectType>> cloneDeltaCollection( Collection<ObjectDelta<? extends ObjectType>> origCollection) { Collection<ObjectDeltaOperation<? extends ObjectType>> clonedCollection = new ArrayList<>(origCollection.size()); for (ObjectDelta<? extends ObjectType> origDelta: origCollection) { ObjectDeltaOperation<? extends ObjectType> clonedDeltaOp = new ObjectDeltaOperation(origDelta.clone()); clonedCollection.add(clonedDeltaOp); } return clonedCollection; }
@Override public String debugDump(int indent) { StringBuilder sb = new StringBuilder(); debugDump(sb, indent, true); return sb.toString(); }
@Test public void testAudit() { AuditEventRecord record = new AuditEventRecord(); record.setChannel("http://midpoint.evolveum.com/xml/ns/public/provisioning/channels-3#import"); record.setEventIdentifier("1511974895961-0-1"); record.setEventStage(AuditEventStage.EXECUTION); record.setEventType(AuditEventType.ADD_OBJECT); ObjectDeltaOperation delta = new ObjectDeltaOperation(); delta.setObjectDelta(prismContext.deltaFactory().object().createModificationAddReference(UserType.class, "1234", UserType.F_LINK_REF, "123")); record.getDeltas().add(delta); delta = new ObjectDeltaOperation(); delta.setObjectDelta(prismContext.deltaFactory().object().createModificationAddReference(UserType.class, "1234", UserType.F_LINK_REF, "124")); record.getDeltas().add(delta); auditService.audit(record, new SimpleTaskAdapter()); }
@Override public <T extends ObjectType> String addObject(PrismObject<T> newObject, ModelExecuteOptions options) throws ObjectAlreadyExistsException, ObjectNotFoundException, SchemaException, ExpressionEvaluationException, CommunicationException, ConfigurationException, PolicyViolationException, SecurityViolationException { ObjectDelta<T> delta = DeltaFactory.Object.createAddDelta(newObject); Collection<ObjectDelta<? extends ObjectType>> deltaCollection = MiscSchemaUtil.createCollection(delta); Collection<ObjectDeltaOperation<? extends ObjectType>> executedChanges = modelService.executeChanges(deltaCollection, options, getCurrentTask(), getCurrentResult()); String oid = ObjectDeltaOperation.findAddDeltaOid(executedChanges, newObject); newObject.setOid(oid); return oid; }
private <O extends ObjectType> String executePersonaDelta(ObjectDelta<O> delta, String ownerOid, Task task, OperationResult result) throws SchemaException, ObjectNotFoundException, CommunicationException, ConfigurationException, PolicyViolationException, ExpressionEvaluationException, ObjectAlreadyExistsException, SecurityViolationException, PreconditionViolationException { Collection<ObjectDelta<? extends ObjectType>> deltas = MiscSchemaUtil.createCollection(delta); LensContext<? extends ObjectType> context = contextFactory.createContext(deltas, null, task, result); // Persona changes are all "secondary" changes, trigerred by roles and policies. We do not want to authorize // them as REQUEST. Assignment of the persona role was REQUEST. Changes in persona itself is all EXECUTION. context.setExecutionPhaseOnly(true); context.setOwnerOid(ownerOid); clockwork.run(context, task, result); return ObjectDeltaOperation.findFocusDeltaOidInCollection(context.getExecutedDeltas()); }