private void fixKindIntentForShadow(PrismObject<ShadowType> resourceShadow, PrismObject<ResourceType> resource, boolean newShadow) { ResourceObjectShadowChangeDescription shadowChangeDescription = new ResourceObjectShadowChangeDescription(); shadowChangeDescription.setResource(resource); shadowChangeDescription.setOldShadow(newShadow ? null : resourceShadow); shadowChangeDescription.setCurrentShadow(resourceShadow); shadowChangeDescription.setSourceChannel(SchemaConstants.CHANGE_CHANNEL_DISCOVERY_URI); shadowChangeDescription.setUnrelatedChange(true); Task task = taskManager.createTaskInstance(); notifyResourceObjectChangeListeners(shadowChangeDescription, task, task.getResult()); }
@Override public void notifyChange(ResourceObjectShadowChangeDescription change, Task task, OperationResult parentResult) { Validate.notNull(change, "Change description of resource object shadow must not be null."); if (LOGGER.isTraceEnabled()) { LOGGER.trace("SYNCHRONIZATION change notification\n{} ", change.debugDump()); } if (InternalsConfig.consistencyChecks) change.checkConsistence(); if ((null != changeListeners) && (!changeListeners.isEmpty())) { for (ResourceObjectChangeListener listener : new ArrayList<>(changeListeners)) { // sometimes there is registration/deregistration from within //LOGGER.trace("Listener: {}", listener.getClass().getSimpleName()); try { listener.notifyChange(change, task, parentResult); } catch (RuntimeException e) { LOGGER.error("Exception {} thrown by object change listener {}: {}", e.getClass(), listener.getName(), e.getMessage(), e); parentResult.createSubresult(CLASS_NAME_WITH_DOT + "notifyChange") .recordWarning("Change listener has thrown unexpected exception", e); throw e; } } } else { LOGGER.warn("Change notification received but listener list is empty, there is nobody to get the message"); } }
private String getOidFromChange(ResourceObjectShadowChangeDescription change) { if (change.getCurrentShadow() != null && StringUtils.isNotEmpty(change.getCurrentShadow().getOid())) { return change.getCurrentShadow().getOid(); } if (change.getOldShadow() != null && StringUtils.isNotEmpty(change.getOldShadow().getOid())) { return change.getOldShadow().getOid(); } if (change.getObjectDelta() == null || StringUtils.isEmpty(change.getObjectDelta().getOid())) { throw new IllegalArgumentException( "Oid was not defined in change (not in current, old shadow, delta)."); } return change.getObjectDelta().getOid(); }
private PrismObject<ShadowType> getShadowFromChange(ResourceObjectShadowChangeDescription change) { if (change.getCurrentShadow() != null) { return change.getCurrentShadow(); } if (change.getOldShadow() != null) { return change.getOldShadow(); } return null; }
@Override public void notifyChange(ResourceObjectShadowChangeDescription change, Task task, OperationResult parentResult) { cache.invalidate(change.getResource(), change.getCurrentShadow()); }
ResourceObjectShadowChangeDescription change = new ResourceObjectShadowChangeDescription(); change.setCurrentShadow(accountShadowCalypso); change.setResource(getDummyResourceObject());
ResourceObjectShadowChangeDescription change = new ResourceObjectShadowChangeDescription(); change.setSourceChannel(QNameUtil.qNameToUri(sourceChannel)); change.setResource(getResourceWorkingCopy().asPrismObject()); if (getStageType() != null && ReconciliationTaskHandler.SIMULATE_URI.equals(getStageType().getStage())) { change.setSimulate(true); shadowDelta.setObjectToAdd(shadowToAdd); shadowDelta.setOid(newShadowType.getOid()); change.setObjectDelta(shadowDelta); change.setCurrentShadow(accountShadow); change.setCurrentShadow(accountShadow); change.checkConsistence(); } catch (RuntimeException ex) { if (LOGGER.isTraceEnabled()) { LOGGER.trace("Check consistence failed: {}\nChange:\n{}", ex, change.debugDump());
LOGGER.trace("SYNCHRONIZATION: received change notification\n:{}", change.debugDump(1)); } else { if (logDebug) { PrismObject<ShadowType> currentShadow = change.getCurrentShadow(); PrismObject<ShadowType> applicableShadow = currentShadow; if (applicableShadow == null) { applicableShadow = change.getOldShadow(); change.getSourceChannel(), task); SynchronizationContext<F> syncCtx = loadSynchronizationContext(applicableShadow, currentShadow, change.getResource(), change.getSourceChannel(), configuration, task, subResult); syncCtx.setUnrelatedChange(change.isUnrelatedChange()); change.setCurrentShadow(newCurrentShadow); syncCtx.setCurrentShadow(newCurrentShadow);
assertNotNull("No resource", change.getResource()); assertNotNull("No parent result", parentResult); assertTrue("Either current shadow or delta must be present", change.getCurrentShadow() != null || change.getObjectDelta() != null); if (change.isUnrelatedChange() || isDryRun(task) || (change.getCurrentShadow() != null && change.getCurrentShadow().asObjectable().isProtectedObject() == Boolean.TRUE)){ return; if (change.getCurrentShadow() != null) { ShadowType currentShadowType = change.getCurrentShadow().asObjectable(); if (currentShadowType != null) { assertNotNull("Current shadow does not have an OID", change.getCurrentShadow().getOid()); assertNotNull("Current shadow does not have resourceRef", currentShadowType.getResourceRef()); assertNotNull("Current shadow has null attributes", currentShadowType.getAttributes()); if (change.getCurrentShadow().asObjectable().getKind() == ShadowKindType.ACCOUNT) { ShadowType account = change.getCurrentShadow().asObjectable(); if (ShadowUtil.isExists(account)) { if (supportActivation) { if (change.getOldShadow() != null) { assertNotNull("Old shadow does not have an OID", change.getOldShadow().getOid()); assertNotNull("Old shadow does not have an resourceRef", change.getOldShadow().asObjectable() .getResourceRef()); if (change.getObjectDelta() != null) { assertNotNull("Delta has null OID", change.getObjectDelta().getOid());
PrismObject<? extends ShadowType> resourceShadow = change.getCurrentShadow(); ObjectDelta<ShadowType> syncDelta = change.getObjectDelta(); if (resourceShadow == null && syncDelta != null && ChangeType.ADD.equals(syncDelta.getChangeType())) { LOGGER.trace("Trying to compute current shadow from change delta add."); PrismObject<ShadowType> shadow = syncDelta.computeChangedObject(syncDelta.getObjectToAdd()); resourceShadow = shadow; change.setCurrentShadow(shadow); ResourceType resource = change.getResource().asObjectable(); validateResourceInShadow(resourceShadow.asObjectable(), resource);
private void validate(ResourceObjectShadowChangeDescription change) { Validate.notNull(change, "Resource object shadow change description must not be null."); Validate.isTrue(change.getCurrentShadow() != null || change.getObjectDelta() != null, "Object delta and current shadow are null. At least one must be provided."); Validate.notNull(change.getResource(), "Resource in change must not be null."); if (consistencyChecks) { if (change.getCurrentShadow() != null) { change.getCurrentShadow().checkConsistence(); ShadowUtil.checkConsistence(change.getCurrentShadow(), "current shadow in change description"); } if (change.getObjectDelta() != null) { change.getObjectDelta().checkConsistence(); } } }
@Override public String debugDump() { return debugDump(0); }
context.setOptions(options); ResourceType resource = change.getResource().asObjectable(); if (ModelExecuteOptions.isLimitPropagation(options)) { context.setTriggeredResource(resource); ObjectDelta<? extends ShadowType> delta = change.getObjectDelta(); if (delta != null) { projectionContext.setSyncDelta((ObjectDelta<ShadowType>) delta);
/** * @param change * @return method checks change type in object delta if available, otherwise * returns {@link ChangeType#ADD} */ private ChangeType getModificationType(ResourceObjectShadowChangeDescription change) { if (change.getObjectDelta() != null) { return change.getObjectDelta().getChangeType(); } return ChangeType.ADD; }
public ResourceObjectShadowChangeDescriptionAsserter assertNoOldShadow() { assertNull("Unexpected old shadow in change notificaiton", changeDesc.getOldShadow()); return this; }
if (change.getObjectDelta() == null) { doReconciliation = true; if (change.isSimulate()) { clockwork.previewChanges(lensContext, null, task, parentResult); } else {
public ResourceObjectShadowChangeDescriptionAsserter assertNoCurrentShadow() { assertNull("Unexpected current shadow in change notificaiton", changeDesc.getCurrentShadow()); return this; }
getDummyResource().addAccount(dummyAccount); ResourceObjectShadowChangeDescription change = new ResourceObjectShadowChangeDescription(); change.setCurrentShadow(accountShadowCalypso); change.setResource(getDummyResourceObject());
PrismObject<? extends ShadowType> currentShadow = lastChange.getCurrentShadow(); assertNotNull("No current shadow in change notification", currentShadow); assertNotNull("No old shadow in change notification", lastChange.getOldShadow());
public ResourceObjectShadowChangeDescriptionAsserter assertNoDelta() { assertNull("Unexpected object delta in change notificaiton", changeDesc.getObjectDelta()); return this; }