@Override public ObjectClassComplexTypeDefinition findObjectClassDefinition(QName objectClassQName) { return resourceSchema.findObjectClassDefinition(objectClassQName); }
@Override public List<? extends RefinedObjectClassDefinition> getRefinedDefinitions() { return resourceSchema.getDefinitions(RefinedObjectClassDefinition.class); }
@Override public ObjectClassComplexTypeDefinition findDefaultObjectClassDefinition(ShadowKindType kind) { return resourceSchema.findDefaultObjectClassDefinition(kind); }
ObjectClassComplexTypeDefinition findObjectClassDefinition(ShadowKindType kind, String intent);
private RefinedResourceSchemaImpl(@NotNull ResourceSchema originalResourceSchema) { this.originalResourceSchema = originalResourceSchema; this.resourceSchema = new ResourceSchemaImpl(originalResourceSchema.getNamespace(), originalResourceSchema.getPrismContext()); }
ObjectClassComplexTypeDefinition accountDef = resourceSchema.findDefaultObjectClassDefinition(ShadowKindType.ACCOUNT); assertNotNull("No ACCOUNT kind definition", accountDef); ObjectClassComplexTypeDefinition groupObjectClass = resourceSchema.findObjectClassDefinition(SchemaTestConstants.GROUP_OBJECT_CLASS_LOCAL_NAME); assertNotNull("No group objectClass", groupObjectClass); assertTrue("No members read", membersDef.canRead()); assertEquals("Unexpected number of schema definitions in "+getName()+" dummy resource", dummyResource.getNumberOfObjectclasses(), resourceSchema.getDefinitions().size()); for (Definition def: resourceSchema.getDefinitions()) { if (def instanceof RefinedObjectClassDefinition) { AssertJUnit.fail("Refined definition sneaked into resource schema of "+getName()+" dummy resource: "+def);
System.out.println(resourceSchema.debugDump()); Document xsdSchema = resourceSchema.serializeToXsd(); .findObjectClassDefinition(new QName(ResourceTypeUtil.getResourceNamespace(resourceType), OpenDJController.OBJECT_CLASS_INETORGPERSON_NAME)); AssertJUnit.assertNotNull(accountDefinition); AssertJUnit.assertNotNull(uidDefinition); for (Definition def : resourceSchema.getDefinitions()) { if (def instanceof ResourceAttributeContainerDefinition) { ResourceAttributeContainerDefinition rdef = (ResourceAttributeContainerDefinition) def;
public void assertDummyResourceSchemaSanityExtended(ResourceSchema resourceSchema, ResourceType resourceType, boolean checkDisplayOrder, int numberOfAccountDefinitions) { assertDummyResourceSchemaSanity(resourceSchema, resourceType, checkDisplayOrder); ObjectClassComplexTypeDefinition accountDef = resourceSchema.findDefaultObjectClassDefinition(ShadowKindType.ACCOUNT); assertNotNull("No default account definition", accountDef); ObjectClassComplexTypeDefinition accountObjectClassDef = resourceSchema.findObjectClassDefinition(SchemaTestConstants.ICF_ACCOUNT_OBJECT_CLASS_LOCAL_NAME); assertNotNull("No AccountObjectClass definition", accountObjectClassDef); assertTrue("Default account definition is not same as AccountObjectClass", accountDef == accountObjectClassDef); assertEquals("Unexpected number of definitions", numberOfAccountDefinitions, accountDef.getDefinitions().size()); ResourceAttributeDefinition<String> treasureDef = accountDef.findAttributeDefinition(DUMMY_ACCOUNT_ATTRIBUTE_TREASURE_NAME); assertFalse("Treasure IS returned by default and should not be", treasureDef.isReturnedByDefault()); // MID-4751 ResourceAttributeDefinition<XMLGregorianCalendar> enlistTimestampDef = accountDef.findAttributeDefinition(DUMMY_ACCOUNT_ATTRIBUTE_ENLIST_TIMESTAMP_NAME); PrismAsserts.assertDefinition(enlistTimestampDef, new QName(ResourceTypeUtil.getResourceNamespace(resourceType), DUMMY_ACCOUNT_ATTRIBUTE_ENLIST_TIMESTAMP_NAME), DOMUtil.XSD_DATETIME, 0, 1); assertEquals("Unexpected kind in account definition", ShadowKindType.ACCOUNT, accountDef.getKind()); assertTrue("Account definition in not default", accountDef.isDefaultInAKind()); assertNull("Non-null intent in account definition", accountDef.getIntent()); assertFalse("Account definition is deprecated", accountDef.isDeprecated()); assertFalse("Account definition is auxiliary", accountDef.isAuxiliary()); }
System.out.println(newSchema.debugDump()); System.out.println(); ObjectClassComplexTypeDefinition newObjectClassDef = newSchema.findObjectClassDefinition(new ItemName(SCHEMA_NS,"AccountObjectClass")); assertEquals(new ItemName(SCHEMA_NS,"AccountObjectClass"),newObjectClassDef.getTypeName()); assertEquals(ShadowKindType.ACCOUNT, newObjectClassDef.getKind());
@Test public void test031ResourceSchemaAccountObjectClass() throws Exception { final String TEST_NAME = "test031ResourceSchemaAccountObjectClass"; TestUtil.displayTestTitle(TEST_NAME); OperationResult result = new OperationResult(TestUcfDummy.class + "." + TEST_NAME); cc = connectorFactory.createConnectorInstance(connectorType, ResourceTypeUtil.getResourceNamespace(resourceType), "dummy", "description of dummy test connector instance"); assertNotNull("Failed to instantiate connector", cc); PrismContainerValue<ConnectorConfigurationType> configContainer = resourceType.getConnectorConfiguration().asPrismContainerValue(); display("Configuration container", configContainer); cc.configure(configContainer, result); List<QName> objectClassesToGenerate = new ArrayList<>(); QName accountObjectClass = new QName(resource.asObjectable().getNamespace(), "AccountObjectClass"); objectClassesToGenerate.add(accountObjectClass); // WHEN resourceSchema = cc.fetchResourceSchema(objectClassesToGenerate, result); // THEN display("Generated resource schema", resourceSchema); assertEquals("Unexpected number of definitions", 1, resourceSchema.getDefinitions().size()); assertEquals("Unexpected number of object class definitions", 1, resourceSchema.getObjectClassDefinitions().size()); display("RESOURCE SCHEMA DEFINITION" + resourceSchema.getDefinitions().iterator().next().getTypeName()); }
@Test public void test030ResourceSchema() throws Exception { final String TEST_NAME = "test030ResourceSchema"; TestUtil.displayTestTitle(TEST_NAME); OperationResult result = new OperationResult(TestUcfDummy.class + "." + TEST_NAME); cc = connectorFactory.createConnectorInstance(connectorType, ResourceTypeUtil.getResourceNamespace(resourceType), "dummy", "description of dummy test connector instance"); assertNotNull("Failed to instantiate connector", cc); PrismContainerValue<ConnectorConfigurationType> configContainer = resourceType.getConnectorConfiguration().asPrismContainerValue(); display("Configuration container", configContainer); cc.configure(configContainer, result); // WHEN resourceSchema = cc.fetchResourceSchema(null, result); // THEN display("Generated resource schema", resourceSchema); assertEquals("Unexpected number of definitions", 4, resourceSchema.getDefinitions().size()); dummyResourceCtl.assertDummyResourceSchemaSanityExtended(resourceSchema, resourceType, true); Document xsdSchemaDom = resourceSchema.serializeToXsd(); assertNotNull("No serialized resource schema", xsdSchemaDom); display("Serialized XSD resource schema", DOMUtil.serializeDOMToString(xsdSchemaDom)); // Try to re-parse ResourceSchema reparsedResourceSchema = ResourceSchemaImpl.parse(DOMUtil.getFirstChildElement(xsdSchemaDom), "serialized schema", PrismTestUtil.getPrismContext()); display("Re-parsed resource schema", reparsedResourceSchema); assertEquals("Unexpected number of definitions in re-parsed schema", 4, reparsedResourceSchema.getDefinitions().size()); dummyResourceCtl.assertDummyResourceSchemaSanityExtended(reparsedResourceSchema, resourceType, true); }
System.out.println(schema.debugDump()); System.out.println(); Document xsd = schema.serializeToXsd(); System.out.println(unSchema.debugDump());
if (resourceSchema == null || resourceSchema.isEmpty()) { } else if (resourceSchema.isEmpty()) { LOGGER.warn("Empty resource schema fetched from {}", resource); } else { LOGGER.debug("Fetched resource schema for {}: {} definitions", resource, resourceSchema.getDefinitions().size()); fetchedSchema = true;
@Override @NotNull public Document serializeToXsd() throws SchemaException { return resourceSchema.serializeToXsd(); }
public static ObjectClassComplexTypeDefinition getConcreteObjectClassDefinition(ObjectClassComplexTypeDefinition def, ResourceSchema schema) { if (def == null) { // Return definition from any structural object class. If there is no specific object class definition then // the UID definition must be the same in all structural object classes and that means that we can use // definition from any structural object class. for (ObjectClassComplexTypeDefinition objectClassDefinition: schema.getObjectClassDefinitions()) { if (!objectClassDefinition.isAuxiliary()) { return objectClassDefinition; } } return null; } else { return def; } }
display("Parsed schema", parsedSchema); ComplexTypeDefinition accountDef = parsedSchema.findComplexTypeDefinition( new QName(parsedSchema.getNamespace(),SchemaConstants.ACCOUNT_OBJECT_CLASS_LOCAL_NAME)); assertNotNull("No account definition in schema after parsing", accountDef); PrismAsserts.assertPropertyDefinition(accountDef,
public void setResourceSchema(ResourceSchema resourceSchema) { this.resourceSchema = resourceSchema; if (resourceSchema != null) { resourceSchemaNamespace = resourceSchema.getNamespace(); } }
@Override public String debugDump() { return resourceSchema.debugDump(); }
assertNotNull("No resource schema in "+resourceType, resorceSchema); QName objectClassQname = new QName(ResourceTypeUtil.getResourceNamespace(resourceType), "AccountObjectClass"); ObjectClassComplexTypeDefinition accountDefinition = resorceSchema.findObjectClassDefinition(objectClassQname); assertNotNull("No object class definition for "+objectClassQname+" in resource schema", accountDefinition); ObjectClassComplexTypeDefinition accountDef1 = resorceSchema.findDefaultObjectClassDefinition(ShadowKindType.ACCOUNT); assertTrue("Mismatched account definition: "+accountDefinition+" <-> "+accountDef1, accountDefinition == accountDef1); ObjectClassComplexTypeDefinition accountDef = resorceSchema.findDefaultObjectClassDefinition(ShadowKindType.ACCOUNT); assertNotNull("No ACCOUNT kind definition", accountDef); ObjectClassComplexTypeDefinition groupObjectClass = resorceSchema.findObjectClassDefinition(SchemaTestConstants.GROUP_OBJECT_CLASS_LOCAL_NAME); assertNotNull("No group objectClass", groupObjectClass); assertTrue("No members read", membersDef.canRead()); assertEquals("Unexpected number of schema definitions in "+dummyResourceSchemalessCtl.getName()+" dummy resource", dummyResourceStaticSchema.getNumberOfObjectclasses(), resorceSchema.getDefinitions().size()); for (Definition def: resorceSchema.getDefinitions()) { if (def instanceof RefinedObjectClassDefinition) { AssertJUnit.fail("Refined definition sneaked into resource schema of "+dummyResourceSchemalessCtl.getName()+" dummy resource: "+def);
public static void assertIcfResourceSchemaSanity(ResourceSchema resourceSchema, ResourceType resourceType) { assertNotNull("No resource schema in "+resourceType, resourceSchema); QName objectClassQname = new QName(ResourceTypeUtil.getResourceNamespace(resourceType), "AccountObjectClass"); ObjectClassComplexTypeDefinition accountDefinition = resourceSchema.findObjectClassDefinition(objectClassQname); assertNotNull("No object class definition for "+objectClassQname+" in resource schema", accountDefinition); ObjectClassComplexTypeDefinition accountDef = resourceSchema.findDefaultObjectClassDefinition(ShadowKindType.ACCOUNT); assertTrue("Mismatched account definition: "+accountDefinition+" <-> "+accountDef, accountDefinition == accountDef);