public static void assertConnectorSchemaSanity(PrismSchema schema, String connectorDescription, boolean expectConnIdSchema) { assertNotNull("Cannot parse connector schema of "+connectorDescription,schema); assertFalse("Empty connector schema in "+connectorDescription,schema.isEmpty()); display("Parsed connector schema of "+connectorDescription,schema); // Local schema namespace is used here. PrismContainerDefinition configurationDefinition = schema.findItemDefinition(ResourceType.F_CONNECTOR_CONFIGURATION.getLocalPart(), PrismContainerDefinition.class); assertNotNull("Definition of <configuration> property container not found in connector schema of "+connectorDescription, configurationDefinition); assertFalse("Empty definition of <configuration> property container in connector schema of "+connectorDescription, configurationDefinition.isEmpty()); if (expectConnIdSchema) { // ICFC schema is used on other elements PrismContainerDefinition configurationPropertiesDefinition = configurationDefinition.findContainerDefinition(SchemaConstants.CONNECTOR_SCHEMA_CONFIGURATION_PROPERTIES_ELEMENT_QNAME); assertNotNull("Definition of <configurationProperties> property container not found in connector schema of "+connectorDescription, configurationPropertiesDefinition); assertFalse("Empty definition of <configurationProperties> property container in connector schema of "+connectorDescription, configurationPropertiesDefinition.isEmpty()); assertFalse("No definitions in <configurationProperties> in "+connectorDescription, configurationPropertiesDefinition.getDefinitions().isEmpty()); // TODO: other elements } }
for (ItemDefinition itemDef: containerDefinition.getDefinitions()) { ItemName elementName = itemDef.getName(); Item<?,?> item = containerVal.findItem(elementName);
if (itemDefinition instanceof PrismContainerDefinition<?> && !thisWasSeen) { PrismContainerDefinition<?> containerDefinition = (PrismContainerDefinition<?>)itemDefinition; List<? extends ItemDefinition> subDefinitions = ((PrismContainerDefinition<?>)containerDefinition).getDefinitions(); for (ItemDefinition subDef: subDefinitions) { ItemPath subPath = ItemPath.create(nameOnlyItemPath, subDef.getName());
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()); PrismAsserts.assertPropertyDefinition(schemaContainerDef, XmlSchemaType.F_CACHING_METADATA, CachingMetadataType.COMPLEX_TYPE, 0, 1);
assertTrue("Extension is NOT runtime", extensionContainer.isRuntimeSchema()); assertTrue("Extension is NOT dynamic", extensionContainer.isDynamic()); assertEquals("Extension size", 0, extensionContainer.getDefinitions().size()); PrismAsserts.assertItemDefinitionDisplayName(complexTypeDefinition, UserType.F_EXTENSION, "ObjectType.extension"); PrismAsserts.assertItemDefinitionDisplayOrder(complexTypeDefinition, UserType.F_EXTENSION, 1000); PrismAsserts.assertDefinition(activationContainer, UserType.F_ACTIVATION, ActivationType.COMPLEX_TYPE, 0, 1); 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); PrismAsserts.assertDefinition(assignmentContainer, UserType.F_ASSIGNMENT, AssignmentType.COMPLEX_TYPE, 0, -1); assertFalse("Assignment is runtime", assignmentContainer.isRuntimeSchema()); assertEquals("Assignment definition size", 24, assignmentContainer.getDefinitions().size()); assertFalse("Metadata is dynamic", metadataContainer.isDynamic()); assertTrue("Metadata is NOT operational", metadataContainer.isOperational()); assertEquals("Metadata size", 23, metadataContainer.getDefinitions().size());
PrismAsserts.assertDefinition(extensionContainer, USER_EXTENSION_QNAME, DOMUtil.XSD_ANY, 0, 1); assertTrue("Extension is not runtime", extensionContainer.isRuntimeSchema()); assertTrue("Extension is not empty", extensionContainer.getDefinitions().isEmpty()); PrismAsserts.assertItemDefinitionDisplayName(userDefinition, USER_EXTENSION_QNAME, "ObjectType.extension"); PrismAsserts.assertItemDefinitionDisplayOrder(userDefinition, USER_EXTENSION_QNAME, 1000); assertFalse("Activation is runtime", activationContainer.isRuntimeSchema()); assertTrue("Activation is NOT operational", activationContainer.isOperational()); assertEquals("Activation size", 3, activationContainer.getDefinitions().size()); PrismAsserts.assertPropertyDefinition(activationContainer, USER_ENABLED_QNAME, DOMUtil.XSD_BOOLEAN, 0, 1); PrismAsserts.assertPropertyDefinition(activationContainer, USER_VALID_FROM_QNAME, DOMUtil.XSD_DATETIME, 0, 1); 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()); PrismAsserts.assertPropertyDefinition(assignmentContainer, USER_DESCRIPTION_QNAME, DOMUtil.XSD_STRING, 0, 1); PrismAsserts.assertPropertyDefinition(assignmentContainer, USER_ACCOUNT_CONSTRUCTION_QNAME, ACCOUNT_CONSTRUCTION_TYPE_QNAME, 0, 1);