private <T> boolean isValueAllowed(T realValue, PrismPropertyDefinition<T> definition) throws SchemaException { if (definition == null || CollectionUtils.isEmpty(definition.getAllowedValues())) { return true; } if (realValue == null) { return true; // TODO: ok? } String serializedForm; if (realValue instanceof Enum) { PrimitiveXNodeImpl<String> prim = (PrimitiveXNodeImpl<String>) getBeanMarshaller().marshall(realValue); serializedForm = prim.getValue(); } else { serializedForm = null; } return definition.getAllowedValues().stream() .anyMatch(displayableValue -> realValue.equals(displayableValue.getValue()) || serializedForm != null && serializedForm.equals(displayableValue.getValue()) ); }
@Test public void test500EnumerationExtension() throws Exception { final String TEST_NAME = "test500EnumerationExtension"; displayTestTitle(TEST_NAME); PrismObjectDefinition<UserType> userDef = prismContext.getSchemaRegistry().findObjectDefinitionByCompileTimeClass(UserType.class); PrismPropertyDefinition<String> markDef = userDef.findPropertyDefinition(ItemPath.create(UserType.F_EXTENSION, PIRACY_MARK)); // WHEN TestUtil.assertSetEquals("Wrong allowedValues in mark", MiscUtil.getValuesFromDisplayableValues(markDef.getAllowedValues()), "pegLeg","noEye","hook","tatoo","scar","bravery"); for (DisplayableValue<String> disp: markDef.getAllowedValues()) { if (disp.getValue().equals("pegLeg")) { assertEquals("Wrong pegLeg label", "Peg Leg", disp.getLabel()); } } }
Iterator<? extends DisplayableValue<String>> iterator = markDef.getAllowedValues().iterator(); DisplayableValue<String> braveryValue = null; while (iterator.hasNext()) { assertEquals("Bad mark", null, markProp.getRealValue()); ((Collection) markDef.getAllowedValues()).add(braveryValue); // because of the following test
pc.warnOrThrow(LOGGER, "Unknown (not allowed) value of type " + typeName + ". Value: " + realValue + ". Allowed values: " + definition.getAllowedValues()); return null;