private void applySchemaExtensions() throws SchemaException { for (Entry<QName,ComplexTypeDefinition> entry: extensionSchemas.entrySet()) { QName typeQName = entry.getKey(); ComplexTypeDefinition extensionCtd = entry.getValue(); ComplexTypeDefinition primaryCtd = findComplexTypeDefinition(typeQName); PrismContainerDefinition extensionContainer = primaryCtd.findContainerDefinition( new ItemName(primaryCtd.getTypeName().getNamespaceURI(), PrismConstants.EXTENSION_LOCAL_NAME)); if (extensionContainer == null) { throw new SchemaException("Attempt to extend type "+typeQName+" with "+extensionCtd.getTypeClass()+" but the original type does not have extension container"); } extensionContainer.toMutable().setComplexTypeDefinition(extensionCtd.clone()); extensionContainer.toMutable().setTypeName(extensionCtd.getTypeName()); } }
/** * Returns parsed connector schema */ public static PrismSchema parseConnectorSchema(ConnectorType connectorType, PrismContext prismContext) throws SchemaException { Element connectorSchemaElement = ConnectorTypeUtil.getConnectorXsdSchema(connectorType); if (connectorSchemaElement == null) { return null; } PrismSchema connectorSchema = PrismSchemaImpl.parse(connectorSchemaElement, true, "schema for " + connectorType, prismContext); // Make sure that the config container definition has a correct compile-time class name QName configContainerQName = new QName(connectorType.getNamespace(), ResourceType.F_CONNECTOR_CONFIGURATION.getLocalPart()); PrismContainerDefinition<ConnectorConfigurationType> configurationContainerDefinition = connectorSchema.findContainerDefinitionByElementName(configContainerQName); configurationContainerDefinition.toMutable().setCompileTimeClass(ConnectorConfigurationType.class); return connectorSchema; }
private S_ValuesEntry getDeltaItemFragment(PrismContainerValue<AssignmentType> cval) throws SchemaException { PrismContainerDefinition<AssignmentType> definition = cval.getParent() != null ? cval.getParent().getDefinition() : null; if (definition == null) { // we use custom definition, if available; if not, we find the standard one definition = prismContext.getSchemaRegistry().findObjectDefinitionByCompileTimeClass(AssignmentHolderType.class) .findItemDefinition(AssignmentHolderType.F_ASSIGNMENT); } definition = definition.clone(); definition.toMutable().setMaxOccurs(1); return prismContext.deltaFor(AssignmentHolderType.class) .item(AssignmentHolderType.F_ASSIGNMENT, definition); }
@Test public void testSubtractAssignmentFromAddDelta() throws Exception { final String TEST_NAME = "testSubtractAssignmentFromAddDelta"; displayTestTile(TEST_NAME); // GIVEN PrismObject<UserType> user = PrismTestUtil.parseObject(USER_BILL_FILE); ObjectDelta<UserType> addDelta = DeltaFactory.Object.createAddDelta(user); // WHEN PrismContainerDefinition<AssignmentType> assignmentDef = PrismTestUtil.getSchemaRegistry() .findContainerDefinitionByCompileTimeClass(AssignmentType.class).clone(); assignmentDef.toMutable().setMaxOccurs(1); PrismContainer<AssignmentType> assignmentContainer = assignmentDef.instantiate(); PrismContainerValue<AssignmentType> assignmentValue = ObjectTypeUtil.createAssignmentTo("00000001-d34d-b33f-f00d-000000000002", ObjectTypes.ROLE, getPrismContext()) .asPrismContainerValue(); assignmentContainer.add(assignmentValue); System.out.println("Delta before operation:\n" + addDelta.debugDump() + "\n"); System.out.println("Assignment to subtract:\n" + assignmentValue.debugDump() + "\n"); boolean removed = addDelta.subtract(ItemPath.create(SchemaConstants.PATH_ASSIGNMENT), assignmentValue, false, false); // THEN System.out.println("Delta after operation:\n" + addDelta.debugDump() + "\n"); System.out.println("Removed: " + removed + "\n"); assertTrue("Not removed", removed); assertTrue("Remaining delta is not an ADD delta", addDelta.isAdd()); assertEquals("Wrong # of remaining assignments", 2, addDelta.getObjectToAdd().asObjectable().getAssignment().size()); }
assignmentDef.toMutable().setMaxOccurs(1); PrismContainer<AssignmentType> assignmentContainer = assignmentDef.instantiate();
PrismContainerDefinition<?> containerDefinition = createPropertyContainerDefinition( xsType, p, null, containerAnnotation, false); containerDefinition.toMutable().setInherited(particleInherited); ctd.add(containerDefinition); } else { containerDefinition.toMutable().setInherited(particleInherited); ctd.add(containerDefinition);
PrismObjectDefinition userDef = registry.findObjectDefinitionByCompileTimeClass(UserType.class); PrismContainerDefinition assignmentDef = userDef.findContainerDefinition(F_ASSIGNMENT); PrismPropertyDefinition propDef = assignmentDef.toMutable().createPropertyDefinition( SKIP_AUTOGENERATION_QNAME, DOMUtil.XSD_BOOLEAN);