public boolean hasFocusOfType(QName focusType) { PrismContext prismContext = getModelContext().getPrismContext(); if (prismContext == null) { throw new IllegalStateException("No prismContext in model context"); } PrismContainerDefinition pcd = prismContext.getSchemaRegistry().findContainerDefinitionByType(focusType); if (pcd == null) { LOGGER.warn("Couldn't find definition for type " + focusType); return false; } Class expectedClass = pcd.getCompileTimeClass(); if (expectedClass == null) { LOGGER.warn("Couldn't find class for type " + focusType); return false; } return hasFocusOfType(expectedClass); }
public <O extends ObjectType> ObjectTreeDeltas<O> extractTreeDeltasFromModelContext(ModelContext<O> modelContext) { ObjectTreeDeltas<O> objectTreeDeltas = new ObjectTreeDeltas<>(modelContext.getPrismContext()); if (modelContext.getFocusContext() != null && modelContext.getFocusContext().getPrimaryDelta() != null) { objectTreeDeltas.setFocusChange(modelContext.getFocusContext().getPrimaryDelta().clone()); } for (ModelProjectionContext projectionContext : modelContext.getProjectionContexts()) { if (projectionContext.getPrimaryDelta() != null) { objectTreeDeltas.addProjectionChange(projectionContext.getResourceShadowDiscriminator(), projectionContext.getPrimaryDelta()); } } return objectTreeDeltas; }
@SuppressWarnings("unchecked") private ObjectDelta<? extends FocusType> assignmentToDelta(ModelContext<?> modelContext, AssignmentType assignmentType, String objectOid) { PrismObject<FocusType> focus = (PrismObject<FocusType>) modelContext.getFocusContext().getObjectNew(); PrismContainerDefinition<AssignmentType> prismContainerDefinition = focus.getDefinition().findContainerDefinition(FocusType.F_ASSIGNMENT); ItemDelta<PrismContainerValue<AssignmentType>,PrismContainerDefinition<AssignmentType>> addRoleDelta = prismContext.deltaFactory().container().create( ItemPath.EMPTY_PATH, FocusType.F_ASSIGNMENT, prismContainerDefinition); PrismContainerValue<AssignmentType> assignmentValue = assignmentType.asPrismContainerValue().clone(); addRoleDelta.addValueToAdd(assignmentValue); Class focusClass = primaryChangeAspectHelper.getFocusClass(modelContext); return modelContext.getPrismContext().deltaFactory().object().createModifyDelta(objectOid, addRoleDelta, focusClass ); }