@Override public HookOperationMode processModelInvocation(@NotNull ModelContext<?> context, WfConfigurationType wfConfigurationType, @NotNull Task taskFromModel, @NotNull OperationResult result) throws SchemaException, ObjectNotFoundException, ExpressionEvaluationException, CommunicationException, ConfigurationException, SecurityViolationException { if (context.getState() != PRIMARY) { return null; } return previewOrProcessModelInvocation(context, wfConfigurationType, false, null, taskFromModel, result); }
@Override public <F extends ObjectType> void projectorStart(ModelContext<F> context) { recordStateTime(projectorTimes, context.getState(), System.currentTimeMillis(), null); }
@Override public <F extends ObjectType> void clockworkStateSwitch(ModelContext<F> contextBefore, ModelState newState) { long now = System.currentTimeMillis(); recordStateTime(clockworkStateTimes, contextBefore.getState(), null, now); recordStateTime(clockworkStateTimes, newState, now, null); currentState = newState; }
private void logOperationInformation(ModelContext context) { if (LOGGER.isTraceEnabled()) { @SuppressWarnings({"unchecked", "raw"}) LensContext<?> lensContext = (LensContext<?>) context; try { medic.traceContext(LOGGER, "WORKFLOW (" + context.getState() + ")", "workflow processing", true, lensContext, false); } catch (SchemaException e) { throw new IllegalStateException("SchemaException when tracing model context: " + e.getMessage(), e); } } }
@Override void assertsAfterClockworkRun(ModelContext context, Task task, OperationResult result) throws Exception { assertEquals("Unexpected state of the context", ModelState.SECONDARY, context.getState()); }
@Override void assertsAfterClockworkRun(ModelContext context, Task task, OperationResult result) throws Exception { assertEquals("Unexpected state of the context", ModelState.PRIMARY, context.getState()); }
@Override void assertsAfterClockworkRun(ModelContext context, Task task, OperationResult result) throws Exception { assertEquals("Unexpected state of the context", ModelState.SECONDARY, context.getState()); }
@Override public <O extends ObjectType> HookOperationMode invoke(@NotNull ModelContext<O> context, @NotNull Task task, @NotNull OperationResult result) { if (context.getState() != ModelState.FINAL) { return HookOperationMode.FOREGROUND; } LensElementContext<O> focusContext = (LensElementContext<O>) context.getFocusContext(); if (focusContext == null || !FocusType.class.isAssignableFrom(focusContext.getObjectTypeClass())) { return HookOperationMode.FOREGROUND; } List<CertificationPolicyActionType> actions = new ArrayList<>(); actions.addAll(getFocusCertificationActions(context)); actions.addAll(getAssignmentCertificationActions(context)); try { certificationManager.startAdHocCertifications(focusContext.getObjectAny(), actions, task, result); } catch (CommonException e) { throw new SystemException("Couldn't start ad-hoc campaign(s): " + e.getMessage(), e); } return HookOperationMode.FOREGROUND; }
private <O extends ObjectType> void recordChanges(ChangesByState rv, LensContextType modelOperationContext, ModelInteractionService modelInteractionService, Task task, OperationResult result) throws ObjectNotFoundException, SchemaException { if (modelOperationContext == null) { return; } ModelContext<O> modelContext = ModelContextUtil.unwrapModelContext(modelOperationContext, modelInteractionService, task, result); ObjectTreeDeltas<O> deltas = baseModelInvocationProcessingHelper.extractTreeDeltasFromModelContext(modelContext); ObjectTreeDeltas<O> target; switch (modelContext.getState()) { case INITIAL: case PRIMARY: target = rv.getWaitingToBeApplied(); break; case SECONDARY: target = rv.getBeingApplied(); break; case EXECUTION: // TODO reconsider this after EXECUTION and POSTEXECUTION states are really used case POSTEXECUTION: case FINAL: target = rv.getApplied(); break; default: throw new IllegalStateException("Illegal model state: " + modelContext.getState()); } target.merge(deltas); }
@Override public HookOperationMode invoke(@NotNull ModelContext context, @NotNull Task task, @NotNull OperationResult result) { assertTrue("Unexpected INITIAL state of the context in the hook", context.getState() != ModelState.INITIAL); // OK to rely on implementation here. This is an implementation test. if (!(context instanceof LensContext)) { throw new IllegalArgumentException("WHOOPS! The context is of type "+context.getClass()+" which we haven't expected"); } LensContext lensContext = (LensContext)context; if (record) { contexts.add(lensContext.clone()); } if (asynchronous) { lastAsyncContext = lensContext; return HookOperationMode.BACKGROUND; } return HookOperationMode.FOREGROUND; }
@Override public <F extends ObjectType> void projectorFinish(ModelContext<F> context) { recordStateTime(projectorTimes, context.getState(), null, System.currentTimeMillis()); String desc = null; if (context.getFocusContext() != null) { changes = allDeltas.size(); long projectorEtime = projectorTimes.get(context.getState()).etime(); LOGGER.trace("Projector {} finished ({}), {} changes, etime: {} ms ({} mapping evaluated, {} ms total)", context.getState(), desc, changes, projectorEtime, projectorMappingTotalCount, projectorMappingTotalMillis);
@Override public HookOperationMode invoke(@NotNull ModelContext context, @NotNull Task task, @NotNull OperationResult result) { // todo in the future we should perhaps act in POSTEXECUTION state, but currently the clockwork skips this state if (context.getState() != ModelState.FINAL) { return HookOperationMode.FOREGROUND; } if (notificationManager.isDisabled()) { LOGGER.trace("Notifications are temporarily disabled, exiting the hook."); return HookOperationMode.FOREGROUND; } if (LOGGER.isTraceEnabled()) { LOGGER.trace("Notification change hook called with model context: " + context.debugDump()); } if (context.getFocusContext() == null) { if (LOGGER.isTraceEnabled()) { LOGGER.trace("Focus context is null, exiting the hook."); } return HookOperationMode.FOREGROUND; } emitModelEvent(context, task, result); emitPolicyRulesEvents(context, task, result); return HookOperationMode.FOREGROUND; }
result.addArbitraryObjectAsContext("model state", context.getState()); try { WfConfigurationType wfConfigurationType = baseConfigurationHelper.getWorkflowConfiguration(context, result);
ModelState state = context.getState(); if (state != ModelState.FINAL) { if (LOGGER.isTraceEnabled()) {
boolean reduced = taskModelContext.getState() == ModelState.PRIMARY; task.setModelOperationContext(((LensContext) taskModelContext).toLensContextType(reduced));