sb.append(" def("); sb.append(PrettyPrinter.prettyPrint(def.getTypeName())); if (def.isRuntimeSchema()) { sb.append(",runtime");
if (containerDefinition.isRuntimeSchema()) {
@Override public void checkConsistenceInternal(Itemable rootItem, boolean requireDefinitions, boolean prohibitRaw, ConsistencyCheckScope scope) { checkIds(); if (scope.isThorough()) { // Containers that are from run-time schema cannot have compile-time class. if (getDefinition() != null && !getDefinition().isRuntimeSchema()) { if (getCompileTimeClass() == null) { throw new IllegalStateException("No compile-time class in "+this+" ("+getPath()+" in "+rootItem+")"); } } } super.checkConsistenceInternal(rootItem, requireDefinitions, prohibitRaw, scope); }
@Test public void testResourceConfigurationDefinition() { System.out.println("===[ testResourceConfigurationDefinition ]==="); // GIVEN PrismContext prismContext = PrismTestUtil.getPrismContext(); SchemaRegistry schemaRegistry = prismContext.getSchemaRegistry(); // WHEN PrismContainerDefinition<?> configurationPropertiesDefinition = schemaRegistry.findContainerDefinitionByElementName( SchemaConstantsGenerated.ICF_C_CONFIGURATION_PROPERTIES); assertNotNull("No configurationProperties definition", configurationPropertiesDefinition); System.out.println("configurationProperties definition:"); System.out.println(configurationPropertiesDefinition.debugDump()); assertTrue("configurationProperties definition is NOT marked as runtime", configurationPropertiesDefinition.isRuntimeSchema()); // assertNull("Unexpected compile-time class in configurationProperties definition", configurationPropertiesDefinition.getCompileTimeClass()); // assertTrue("configurationProperties definition is NOT marked as wildcard", configurationPropertiesDefinition.isWildcard()); // TODO }
public <X> PrismProperty<X> createProperty(QName propertyName) throws SchemaException { checkMutability(); PrismPropertyDefinition propertyDefinition = determineItemDefinition(propertyName, getComplexTypeDefinition()); if (propertyDefinition == null) { // container has definition, but there is no property definition. This is either runtime schema // or an error if (getParent() != null && getDefinition() != null && !getDefinition().isRuntimeSchema()) { // TODO clean this up throw new IllegalArgumentException("No definition for property "+propertyName+" in "+complexTypeDefinition); } } PrismProperty<X> property; if (propertyDefinition == null) { property = new PrismPropertyImpl<>(propertyName, prismContext); // Definitionless } else { property = propertyDefinition.instantiate(); } add(property, false); return property; }
private void checkExtension(PrismContainer<Containerable> extensionContainer, String sourceDescription) { assertNotNull("No extension container in "+sourceDescription+" (prism)", extensionContainer); assertNotNull("No extension definition in "+sourceDescription+" (prism)", extensionContainer.getDefinition()); assertTrue("Not runtime in definition in "+sourceDescription+" (prism)", extensionContainer.getDefinition().isRuntimeSchema()); }
@Test public void testIcfSchema() { System.out.println("===[ testIcfSchema ]==="); // WHEN // The context should have parsed common schema and also other midPoint schemas PrismContext prismContext = PrismTestUtil.getPrismContext(); assertNotNull("No prism context", prismContext); SchemaRegistry schemaRegistry = prismContext.getSchemaRegistry(); assertNotNull("No schema registry in context", schemaRegistry); System.out.println("Schema registry:"); System.out.println(schemaRegistry.debugDump()); PrismSchema icfSchema = schemaRegistry.findSchemaByNamespace(NS_ICFC); assertNotNull("No ICF schema", icfSchema); System.out.println("ICF schema:"); System.out.println(icfSchema.debugDump()); PrismContainerDefinition configurationPropertiesContainerDef = icfSchema.findContainerDefinitionByElementName(ICFC_CONFIGURATION_PROPERTIES); PrismAsserts.assertDefinition(configurationPropertiesContainerDef, ICFC_CONFIGURATION_PROPERTIES, ICFC_CONFIGURATION_PROPERTIES_TYPE, 0, 1); assertTrue("configurationPropertiesContainer definition is NOT marked as runtime", configurationPropertiesContainerDef.isRuntimeSchema()); assertTrue("configurationPropertiesContainer definition is NOT marked as dynamic", configurationPropertiesContainerDef.isDynamic()); }
@Test public void testCommonSchemaAccountType() throws SchemaException, SAXException, IOException { MidPointPrismContextFactory factory = getContextFactory(); PrismContext context = factory.createInitializedPrismContext(); SchemaRegistry schemaRegistry = context.getSchemaRegistry(); PrismObjectDefinition<ShadowType> accountDef = schemaRegistry.findObjectDefinitionByCompileTimeClass(ShadowType.class); assertNotNull("No account definition", accountDef); System.out.println("testCommonSchemaAccountType:"); System.out.println(accountDef.debugDump()); PrismPropertyDefinition nameDef = accountDef.findPropertyDefinition(ShadowType.F_NAME); assertNotNull("No name definition", nameDef); PrismContainerDefinition extensionDef = accountDef.findContainerDefinition(ShadowType.F_EXTENSION); assertNotNull("No 'extension' definition", extensionDef); assertTrue("'extension' definition is not marked as runtime", extensionDef.isRuntimeSchema()); PrismContainerDefinition attributesDef = accountDef.findContainerDefinition(ShadowType.F_ATTRIBUTES); assertNotNull("No 'attributes' definition", attributesDef); assertTrue("'attributes' definition is not marked as runtime", attributesDef.isRuntimeSchema()); }
private void assertAccountDefinition(PrismObjectDefinition<AccountType> accountDefinition) { assertEquals("Wrong compile-time class in account definition", AccountType.class, accountDefinition.getCompileTimeClass()); PrismAsserts.assertPropertyDefinition(accountDefinition, ACCOUNT_NAME_QNAME, PolyStringType.COMPLEX_TYPE, 0, 1); PrismAsserts.assertPropertyDefinition(accountDefinition, ACCOUNT_DESCRIPTION_QNAME, DOMUtil.XSD_STRING, 0, 1); assertFalse("Account definition is marked as runtime", accountDefinition.isRuntimeSchema()); PrismContainerDefinition attributesContainer = accountDefinition.findContainerDefinition(ACCOUNT_ATTRIBUTES_QNAME); PrismAsserts.assertDefinition(attributesContainer, ACCOUNT_ATTRIBUTES_QNAME, ATTRIBUTES_TYPE_QNAME, 0, 1); assertTrue("Attributes is NOT runtime", attributesContainer.isRuntimeSchema()); }
@Test public void testAccountDefinition() { System.out.println("===[ testAccountDefinition ]==="); // GIVEN PrismContext prismContext = PrismTestUtil.getPrismContext(); SchemaRegistry schemaRegistry = prismContext.getSchemaRegistry(); // WHEN PrismObjectDefinition<ShadowType> accountDefinition = schemaRegistry.findObjectDefinitionByElementName( SchemaConstants.C_SHADOW); assertNotNull("No account definition", accountDefinition); System.out.println("Account definition:"); System.out.println(accountDefinition.debugDump()); PrismObjectDefinition<ShadowType> accountDefinitionByClass = schemaRegistry.findObjectDefinitionByCompileTimeClass(ShadowType.class); assertTrue("Different account def", accountDefinition == accountDefinitionByClass); assertEquals("Wrong compile-time class in account definition", ShadowType.class, accountDefinition.getCompileTimeClass()); PrismAsserts.assertPropertyDefinition(accountDefinition, ShadowType.F_NAME, PolyStringType.COMPLEX_TYPE, 0, 1); PrismAsserts.assertPropertyDefinition(accountDefinition, ShadowType.F_DESCRIPTION, DOMUtil.XSD_STRING, 0, 1); assertFalse("Account definition is marked as runtime", accountDefinition.isRuntimeSchema()); PrismContainerDefinition attributesContainer = accountDefinition.findContainerDefinition(ShadowType.F_ATTRIBUTES); PrismAsserts.assertDefinition(attributesContainer, ShadowType.F_ATTRIBUTES, ShadowAttributesType.COMPLEX_TYPE, 0, 1); assertTrue("Attributes is NOT runtime", attributesContainer.isRuntimeSchema()); assertEquals("Wrong attributes compile-time class", ShadowAttributesType.class, attributesContainer.getCompileTimeClass()); }
assertTrue("Extension is NOT runtime", extensionContainer.isRuntimeSchema()); assertTrue("Extension is NOT dynamic", extensionContainer.isDynamic()); assertEquals("Extension size", 0, extensionContainer.getDefinitions().size()); assertFalse("Activation is runtime", activationContainer.isRuntimeSchema()); assertEquals("Activation size", 12, activationContainer.getDefinitions().size()); PrismAsserts.assertPropertyDefinition(activationContainer, ActivationType.F_ADMINISTRATIVE_STATUS, SchemaConstants.C_ACTIVATION_STATUS_TYPE, 0, 1); assertFalse("Assignment is runtime", assignmentContainer.isRuntimeSchema()); assertEquals("Assignment definition size", 24, assignmentContainer.getDefinitions().size()); assertFalse("Construction is runtime", constructionContainer.isRuntimeSchema()); assertFalse("Metadata is runtime", metadataContainer.isRuntimeSchema()); assertFalse("Metadata is dynamic", metadataContainer.isDynamic()); assertTrue("Metadata is NOT operational", metadataContainer.isOperational());
assertFalse("Schema is runtime", schemaContainerDef.isRuntimeSchema()); assertEquals("Wrong compile-time class for <schema> in resource definition", XmlSchemaType.class, schemaContainerDef.getCompileTimeClass()); assertEquals("Unexpected number of definitions in <schema>", 3, schemaContainerDef.getDefinitions().size());
@Test public void testRoleType() throws Exception { MidPointPrismContextFactory factory = getContextFactory(); PrismContext context = factory.createInitializedPrismContext(); SchemaRegistry schemaRegistry = context.getSchemaRegistry(); PrismObjectDefinition<RoleType> roleDefinition = schemaRegistry.findObjectDefinitionByCompileTimeClass(RoleType.class); assertNotNull("No role definition", roleDefinition); assertFalse("Role definition is marked as runtime", roleDefinition.isRuntimeSchema()); PrismPropertyDefinition nameDef = roleDefinition.findPropertyDefinition(ObjectType.F_NAME); assertNotNull("No name definition", nameDef); PrismContainerDefinition extensionDef = roleDefinition.findContainerDefinition(ObjectType.F_EXTENSION); assertNotNull("No 'extension' definition", extensionDef); assertTrue("Extension definition is NOT marked as runtime", extensionDef.isRuntimeSchema()); PrismPropertyDefinition identifierDef = roleDefinition.findPropertyDefinition(RoleType.F_IDENTIFIER); assertNotNull("No identifier definition", identifierDef); // Just make sure this does not end with NPE or stack overflow PrismObjectDefinition<RoleType> shallowClone = roleDefinition.clone(); PrismObjectDefinition<RoleType> deepClone = roleDefinition.deepClone(false, null); PrismObjectDefinition<RoleType> ultraDeepClone = roleDefinition.deepClone(true, null); }
private void checkExtension(ExtensionType extension, String sourceDescription) throws SchemaException { PrismContainerValue<ExtensionType> extensionValueFromJaxb = extension.asPrismContainerValue(); assertNotNull("No extension container in "+sourceDescription+" (jaxb)", extensionValueFromJaxb); assertNotNull("No extension definition in "+sourceDescription+" (jaxb)", extensionValueFromJaxb.getParent().getDefinition()); assertTrue("Not runtime in definition in "+sourceDescription+" (jaxb)", extensionValueFromJaxb.getParent().getDefinition().isRuntimeSchema()); PrismProperty<Integer> intProperty = extensionValueFromJaxb.findOrCreateProperty(EXTENSION_INT_TYPE_ELEMENT); PrismAsserts.assertDefinition(intProperty.getDefinition(), EXTENSION_INT_TYPE_ELEMENT, DOMUtil.XSD_INT, 0, -1); intProperty.setRealValue(15); PrismProperty<String> stringProperty = extensionValueFromJaxb.findOrCreateItem(EXTENSION_STRING_TYPE_ELEMENT, PrismProperty.class); PrismAsserts.assertDefinition(stringProperty.getDefinition(), EXTENSION_STRING_TYPE_ELEMENT, DOMUtil.XSD_STRING, 0, -1); stringProperty.setRealValue("fifteen men on a dead man chest"); }
@Test public void testUserType() throws Exception { MidPointPrismContextFactory factory = getContextFactory(); PrismContext context = factory.createInitializedPrismContext(); SchemaRegistry schemaRegistry = context.getSchemaRegistry(); PrismObjectDefinition<UserType> userDefinition = schemaRegistry.findObjectDefinitionByCompileTimeClass(UserType.class); assertNotNull("No user definition", userDefinition); System.out.println("testUserType:"); System.out.println(userDefinition.debugDump()); assertFalse("User definition is marked as runtime", userDefinition.isRuntimeSchema()); PrismPropertyDefinition<PolyString> nameDef = userDefinition.findPropertyDefinition(ObjectType.F_NAME); assertNotNull("No name definition", nameDef); PrismContainerDefinition extensionDef = userDefinition.findContainerDefinition(UserType.F_EXTENSION); assertNotNull("No 'extension' definition", extensionDef); assertTrue("Extension definition is NOT marked as runtime", extensionDef.isRuntimeSchema()); PrismPropertyDefinition<PolyString> givenNameDef = userDefinition.findPropertyDefinition(UserType.F_GIVEN_NAME); assertNotNull("No givenName definition", givenNameDef); PrismPropertyDefinition<String> preferredLanguageDef = userDefinition.findPropertyDefinition(UserType.F_PREFERRED_LANGUAGE); assertNotNull("No preferredLanguage definition", preferredLanguageDef); PrismReferenceValue preferredLanguageValueEnumerationRef = preferredLanguageDef.getValueEnumerationRef(); assertNotNull("No valueEnumerationRef in preferredLanguage definition", preferredLanguageValueEnumerationRef); assertEquals("Wrong OID in valueEnumerationRef in preferredLanguage definition", SystemObjectsType.LOOKUP_LANGUAGES.value(), preferredLanguageValueEnumerationRef.getOid()); assertEquals("Wrong type in valueEnumerationRef in preferredLanguage definition", LookupTableType.COMPLEX_TYPE, preferredLanguageValueEnumerationRef.getTargetType()); // Just make sure this does not end with NPE or stack overflow PrismObjectDefinition<UserType> shallowClone = userDefinition.clone(); PrismObjectDefinition<UserType> deepClone = userDefinition.deepClone(false, null); PrismObjectDefinition<UserType> ultraDeepClone = userDefinition.deepClone(true, null); }
assertTrue("Extension is not runtime", extensionContainer.isRuntimeSchema()); assertTrue("Extension is not empty", extensionContainer.getDefinitions().isEmpty()); PrismAsserts.assertItemDefinitionDisplayName(userDefinition, USER_EXTENSION_QNAME, "ObjectType.extension"); assertFalse("Activation is runtime", activationContainer.isRuntimeSchema()); assertTrue("Activation is NOT operational", activationContainer.isOperational()); assertEquals("Activation size", 3, activationContainer.getDefinitions().size()); assertFalse("Assignment is runtime", assignmentContainer.isRuntimeSchema()); assertEquals("Wrong compile time class for assignment container", AssignmentType.class, assignmentContainer.getCompileTimeClass()); assertEquals("Assignment size", 4, assignmentContainer.getDefinitions().size());
@Test public void testExtensionSchema() throws SchemaException, SAXException, IOException { System.out.println("===[ testExtensionSchema ]==="); // GIVEN PrismContext prismContext = constructInitializedPrismContext(); assertNotNull("No prism context", prismContext); SchemaRegistry schemaRegistry = prismContext.getSchemaRegistry(); assertNotNull("No schema registry in context", schemaRegistry); PrismPropertyDefinition ignoredTypeDef = schemaRegistry.findPropertyDefinitionByElementName(EXTENSION_IGNORED_TYPE_ELEMENT); PrismAsserts.assertDefinition(ignoredTypeDef, EXTENSION_IGNORED_TYPE_ELEMENT, DOMUtil.XSD_STRING, 0, -1); assertTrue("Element "+EXTENSION_IGNORED_TYPE_ELEMENT+" is NOT ignored", ignoredTypeDef.isIgnored()); PrismPropertyDefinition stringTypeDef = schemaRegistry.findPropertyDefinitionByElementName(EXTENSION_STRING_TYPE_ELEMENT); PrismAsserts.assertDefinition(stringTypeDef, EXTENSION_STRING_TYPE_ELEMENT, DOMUtil.XSD_STRING, 0, -1); assertFalse("Element "+EXTENSION_STRING_TYPE_ELEMENT+" is ignored", stringTypeDef.isIgnored()); PrismPropertyDefinition singleStringTypeDef = schemaRegistry.findPropertyDefinitionByElementName(EXTENSION_SINGLE_STRING_TYPE_ELEMENT); PrismAsserts.assertDefinition(singleStringTypeDef, EXTENSION_SINGLE_STRING_TYPE_ELEMENT, DOMUtil.XSD_STRING, 0, 1); assertFalse("Element "+EXTENSION_SINGLE_STRING_TYPE_ELEMENT+" is ignored", singleStringTypeDef.isIgnored()); PrismPropertyDefinition intTypeDef = schemaRegistry.findPropertyDefinitionByElementName(EXTENSION_INT_TYPE_ELEMENT); PrismAsserts.assertDefinition(intTypeDef, EXTENSION_INT_TYPE_ELEMENT, DOMUtil.XSD_INT, 0, -1); assertFalse("Element "+EXTENSION_INT_TYPE_ELEMENT+" is ignored", intTypeDef.isIgnored()); PrismContainerDefinition meleeContextDefinition = schemaRegistry.findContainerDefinitionByElementName(EXTENSION_MELEE_CONTEXT_ELEMENT); PrismAsserts.assertDefinition(meleeContextDefinition, EXTENSION_MELEE_CONTEXT_ELEMENT, EXTENSION_MELEE_CONTEXT_TYPE_QNAME, 0, 1); assertTrue("Melee context container is NOT marked as runtime", meleeContextDefinition.isRuntimeSchema()); PrismReferenceDefinition opponentRefDef = meleeContextDefinition.findReferenceDefinition(EXTENSION_MELEE_CONTEXT_OPPONENT_REF_ELEMENT); assertTrue("opponentRef definition is NOT composite", opponentRefDef.isComposite()); }
System.out.println(extDef.debugDump()); assertTrue("Extension is not dynamic", extDef.isRuntimeSchema()); assertTrue("Wrong extension type "+extDef.getTypeName(), USER_EXTENSION_TYPE_QNAME.equals(extDef.getTypeName()) || USER_2_EXTENSION_TYPE_QNAME.equals(extDef.getTypeName()));
PrismAsserts.assertDefinition(assignmentExtensionValueFromJaxb.getParent().getDefinition(), AssignmentType.F_EXTENSION, ExtensionType.COMPLEX_TYPE, 0, 1); assertTrue("assignment extension definition is not runtime", assignmentExtensionValueFromJaxb.getParent().getDefinition().isRuntimeSchema()); assertTrue("assignment extension definition is not dynamic", assignmentExtensionValueFromJaxb.getParent().getDefinition().isDynamic()); PrismAsserts.assertDefinition(intProperty.getDefinition(), EXTENSION_INT_TYPE_ELEMENT, DOMUtil.XSD_INT, 0, -1);