@Override public PrismObjectDefinition determineDefinitionFromClass(Class compileTimeClass) { PrismObjectDefinition def = findObjectDefinitionByCompileTimeClass(compileTimeClass); if (def != null) { return def; } Class<?> superclass = compileTimeClass.getSuperclass(); if (superclass == null || superclass == Object.class) { return null; } return determineDefinitionFromClass(superclass); }
@NotNull @Override public <T extends Objectable> PrismObject<T> createObject(@NotNull Class<T> clazz) throws SchemaException { PrismObjectDefinition<T> definition = schemaRegistry.findObjectDefinitionByCompileTimeClass(clazz); if (definition == null) { throw new SchemaException("Definition for prism object holding " + clazz + " couldn't be found"); } return definition.instantiate(); }
@Override public <T extends ItemDefinition> T findItemDefinitionByFullPath(Class<? extends Objectable> objectClass, Class<T> defClass, QName... itemNames) throws SchemaException { PrismObjectDefinition objectDefinition = findObjectDefinitionByCompileTimeClass(objectClass); if (objectDefinition == null) { throw new SchemaException("No object definition for " + objectClass); } return (T) ((ItemDefinition) objectDefinition).findItemDefinition(ItemPath.create(itemNames), defClass); }
@Test public void testUserExtensionSchemaSchemaRegistry() throws SAXException, IOException, SchemaException { System.out.println("===[ testUserExtensionSchemaAsObjectSchema ]==="); PrismContext context = constructPrismContext(); SchemaRegistryImpl reg = (SchemaRegistryImpl) context.getSchemaRegistry(); reg.registerPrismSchemasFromDirectory(EXTRA_SCHEMA_DIR); context.initialize(); PrismObjectDefinition<UserType> userDef = reg.findObjectDefinitionByType(USER_TYPE_QNAME); System.out.println("User definition:"); System.out.println(userDef.debugDump()); assertUserDefinition(userDef); PrismObjectDefinition<UserType> usedDefByClass = reg.findObjectDefinitionByCompileTimeClass(UserType.class); assertUserDefinition(usedDefByClass); PrismObjectDefinition<UserType> userDefByElement = reg.findObjectDefinitionByElementName(USER_QNAME); assertUserDefinition(userDefByElement); }