// region Finalizing the processing @Override public void onProcessEnd(ProcessEvent event, Job job, OperationResult result) throws SchemaException, ObjectAlreadyExistsException, ObjectNotFoundException { Task task = job.getTask(); // we simply put model context back into parent task // (or if it is null, we set the task to skip model context processing) // it is safe to directly access the parent, because (1) it is in waiting state, (2) we are its // only child Task rootTask = task.getParentTask(result); SerializationSafeContainer<LensContextType> contextContainer = (SerializationSafeContainer<LensContextType>) event.getVariable(GcpProcessVariableNames.VARIABLE_MODEL_CONTEXT); LensContextType lensContextType = null; if (contextContainer != null) { contextContainer.setPrismContext(prismContext); lensContextType = contextContainer.getValue(); } if (lensContextType == null) { LOGGER.debug( GcpProcessVariableNames.VARIABLE_MODEL_CONTEXT + " not present in process, this means we should stop processing. Task = {}", rootTask); wfTaskUtil.setSkipModelContextProcessingProperty(rootTask, true, result); } else { LOGGER.debug( "Putting (changed or unchanged) value of {} into the task {}", GcpProcessVariableNames.VARIABLE_MODEL_CONTEXT, rootTask); wfTaskUtil.storeModelContext( rootTask, lensContextType.asPrismContainerValue().getContainer()); } rootTask.savePendingModifications(result); LOGGER.trace("onProcessEnd ending for task {}", task); }