for (ItemDefinition def : getDefinitions()) { sb.append("\n"); sb.append(def.debugDump(indent + 1)); extendDumpDefinition(sb, def);
private static boolean isIndexed(ItemDefinition definition, QName elementName, boolean indexAlsoDynamics, PrismContext prismContext) throws SchemaException { if (definition instanceof PrismContainerDefinition) { return false; } if (definition instanceof PrismReferenceDefinition) { return true; // TODO make reference indexing configurable } if (!(definition instanceof PrismPropertyDefinition)) { throw new UnsupportedOperationException("Unknown definition type '" + definition + "', can't say if '" + elementName + "' is indexed or not."); } PrismPropertyDefinition pDefinition = (PrismPropertyDefinition) definition; Boolean isIndexed = pDefinition.isIndexed(); if (definition.isDynamic() && !indexAlsoDynamics && BooleanUtils.isNotTrue(isIndexed)) { return false; } if (isIndexed != null) { if (isIndexed && !isIndexedByDefault(definition, prismContext)) { throw new SchemaException("Item is marked as indexed (definition " + definition.debugDump() + ") but definition type (" + definition.getTypeName() + ") doesn't support indexing"); } return isIndexed; } return isIndexedByDefault(definition, prismContext); }
@Test public void testReferenceInExtension() throws SchemaException, SAXException, IOException { MidPointPrismContextFactory factory = getContextFactory(); PrismContext context = factory.createInitializedPrismContext(); SchemaRegistry schemaRegistry = context.getSchemaRegistry(); // Common schema should be parsed during creation of the context ((SchemaRegistryImpl) schemaRegistry).loadPrismSchemaResource("schema/extension.xsd"); // Check that the extension schema was loaded PrismSchema extensionSchema = schemaRegistry.findSchemaByNamespace(EXTENSION_SCHEMA_NAMESPACE); assertNotNull("Extension schema not parsed", extensionSchema); ItemDefinition itemDefinition = schemaRegistry.findItemDefinitionByElementName(TestConstants.EXTENSION_USER_REF_ELEMENT); assertNotNull("userRef element definition was not found", itemDefinition); System.out.println("UserRef definition:"); System.out.println(itemDefinition.debugDump()); assertTrue("Wrong userRef definition class: " + itemDefinition.getClass(), itemDefinition instanceof PrismReferenceDefinition); }
@Test public void testComplexMatch() throws Exception { PrismObject<UserType> user = PrismTestUtil.parseObject(PrismInternalTestUtil.USER_JACK_FILE_XML); // System.out.println("user given name" + user.asObjectable().getGivenName()); System.out.println("definition: " +user.findItem(UserType.F_FAMILY_NAME).getDefinition().debugDump()); ObjectFilter filter = getPrismContext().queryFor(UserType.class) .item(UserType.F_FAMILY_NAME).eq("Sparrow") .and().item(UserType.F_FULL_NAME).contains("arr") .and() .block() .item(UserType.F_GIVEN_NAME).eq("Jack") .or().item(UserType.F_GIVEN_NAME).eq("Jackie") .endBlock() .buildFilter(); boolean match = ObjectQuery.match(user, filter, matchingRuleRegistry); AssertJUnit.assertTrue("filter does not match object", match); }