private boolean hasMetadata(PrismContainerValue<R> cVal) { for (Item<?, ?> item : cVal.getItems()) { QName itemName = item.getElementName(); if (itemName.equals(AbstractCredentialType.F_METADATA)) { return true; } } return false; }
public static String prettyPrint(PrismContainerValue<?> pcv) { return pcv.getItems().stream() .map(item -> PrettyPrinter.prettyPrint(item)) .collect(Collectors.joining(", ")); }
public <I extends Item<?,?>> List<I> getItems(Class<I> type) { return this.getValue().getItems(type); }
private String presentItemNames() { StringBuilder sb = new StringBuilder(); Iterator<Item<?, ?>> iterator = getPrismValue().getItems().iterator(); while (iterator.hasNext()) { sb.append(PrettyPrinter.prettyPrint(iterator.next().getElementName())); if (iterator.hasNext()) { sb.append(", "); } } return sb.toString(); }
private String presentAttributeNames() { StringBuilder sb = new StringBuilder(); Iterator<Item<?, ?>> iterator = getAttributes().getItems().iterator(); while (iterator.hasNext()) { sb.append(PrettyPrinter.prettyPrint(iterator.next().getElementName())); if (iterator.hasNext()) { sb.append(", "); } } return sb.toString(); }
public static void assertItems(PrismContainer<?> object, int expectedNumberOfItems) { List<PrismContainerValue> values = (List)object.getValues(); if (expectedNumberOfItems == 0) { if (values.isEmpty()) { return; } } if (values.size() > 1) { fail("More than one value in "+object); } PrismContainerValue cval = values.get(0); assertEquals("Wrong number of items in "+object, expectedNumberOfItems, cval.getItems().size()); }
private boolean hasValueChange(PrismContainerValue<R> cVal) { for (Item<?, ?> item : cVal.getItems()) { QName itemName = item.getElementName(); if (isValueElement(itemName)) { return true; } } return false; }
@Override public Object remove(int index) { if (isSchemaless()) { throw new UnsupportedOperationException("Definition-less containers are not supported any more."); } else { for (Item<?,?> item: containerValue.getItems()) { if (index < item.getValues().size()) { ((ItemImpl) item).remove(index); } else { index -= item.getValues().size(); } } throw new IndexOutOfBoundsException(); } }
@SuppressWarnings("unchecked") public void mergeContent(PrismContainerValue<?> other, List<QName> overwrite) throws SchemaException { List<ItemName> remainingToOverwrite = overwrite.stream().map(ItemName::fromQName).collect(Collectors.toList()); if (other.getItems() != null) { for (Item<?, ?> otherItem : other.getItems()) { Item<?, ?> existingItem = findItem(otherItem.getElementName()); if (QNameUtil.remove(remainingToOverwrite, otherItem.getElementName()) || existingItem != null && existingItem.isSingleValue()) { remove(existingItem); } merge(otherItem.clone()); } } remainingToOverwrite.forEach(name -> removeItem(name, Item.class)); }
protected void assertNumberOfAttributes(PrismObject<ShadowType> shadow, Integer expectedNumberOfAttributes) { PrismContainer<Containerable> attributesContainer = shadow.findContainer(ShadowType.F_ATTRIBUTES); assertNotNull("No attributes in repo shadow "+shadow, attributesContainer); List<Item<?,?>> attributes = attributesContainer.getValue().getItems(); assertFalse("Empty attributes in repo shadow "+shadow, attributes.isEmpty()); if (expectedNumberOfAttributes != null) { assertEquals("Unexpected number of attributes in repo shadow "+shadow, (int)expectedNumberOfAttributes, attributes.size()); } }
private PrismValue fixEmptyContainerValue(PrismContainerValue pcv, ItemPath path, PrismObject objectOld) { if (pcv.getId() == null || CollectionUtils.isNotEmpty(pcv.getItems())) { return pcv; } PrismContainer oldContainer = objectOld.findContainer(path); if (oldContainer == null) { return pcv; } PrismContainerValue oldValue = oldContainer.getValue(pcv.getId()); return oldValue != null ? oldValue : pcv; }
protected void assertNumberOfAttributes(PrismObject<ShadowType> shadow, Integer expectedNumberOfAttributes) { PrismContainer<Containerable> attributesContainer = shadow.findContainer(ShadowType.F_ATTRIBUTES); assertNotNull("No attributes in repo shadow "+shadow, attributesContainer); List<Item<?,?>> attributes = attributesContainer.getValue().getItems(); assertFalse("Empty attributes in repo shadow "+shadow, attributes.isEmpty()); if (expectedNumberOfAttributes != null) { assertEquals("Unexpected number of attributes in repo shadow "+shadow, (int)expectedNumberOfAttributes, attributes.size()); } }
public static void mergeExtension(PrismContainerValue<?> dstExtensionContainerValue, PrismContainerValue<?> srcExtensionContainerValue) throws SchemaException { for (Item<?,?> srcExtensionItem: emptyIfNull(srcExtensionContainerValue.getItems())) { Item<?,?> magicItem = dstExtensionContainerValue.findItem(srcExtensionItem.getElementName()); if (magicItem == null) { //noinspection unchecked dstExtensionContainerValue.add(srcExtensionItem.clone()); } } }
@Test public void testEmptyItemsOnGet() throws Exception { System.out.println("===[ testEmptyItemsOnGet ]==="); // GIVEN UserType user = new UserType(getPrismContext()); System.out.println("User before:\n" + user.asPrismObject().debugDump()); assertEquals("Wrong # of user sub-items before 'get' operations", 0, CollectionUtils.emptyIfNull(user.asPrismContainerValue().getItems()).size()); // WHEN user.getAssignment(); user.getLinkRef(); user.getEmployeeType(); // THEN System.out.println("User after:\n" + user.asPrismObject().debugDump()); assertEquals("Wrong # of user sub-items after 'get' operations", 0, CollectionUtils.emptyIfNull(user.asPrismContainerValue().getItems()).size()); }
private void handleObjectExtensionWholeContainer(RObject object, ItemDelta delta, PrismIdentifierGenerator idGenerator) { RObjectExtensionType extType = computeObjectExtensionType(delta); if (!delta.isAdd()) { clearExtension(object, extType); } if (delta.isDelete()) { return; } PrismContainerValue extension = (PrismContainerValue) delta.getAnyValue(); for (Item item : (List<Item>) extension.getItems()) { ItemDelta itemDelta = item.createDelta(); itemDelta.setValuesToReplace(item.getClonedValues()); processAnyExtensionDeltaValues(itemDelta, object, extType, null, null, idGenerator); } }
@Test public void testEmptyItemsOnParse() throws Exception { System.out.println("===[ testEmptyItemsOnParse ]==="); // GIVEN UserType user = new UserType(getPrismContext()); user.setName(PolyStringType.fromOrig("jack")); System.out.println("User before:\n" + user.asPrismObject().debugDump()); assertEquals("Wrong # of user sub-items before serialization/reparsing", 1, CollectionUtils.emptyIfNull(user.asPrismContainerValue().getItems()).size()); // WHEN String xml = getPrismContext().xmlSerializer().serialize(user.asPrismObject()); user = (UserType) getPrismContext().parserFor(xml).parse().asObjectable(); // THEN System.out.println("User after:\n" + user.asPrismObject().debugDump()); assertEquals("Wrong # of user sub-items after serialization/reparsing", 1, CollectionUtils.emptyIfNull(user.asPrismContainerValue().getItems()).size()); }
public PrismContainerValueAsserter<C,RA> assertItems(QName... expectedItems) { for (QName expectedItem: expectedItems) { Item<PrismValue,ItemDefinition> item = getPrismValue().findItem(ItemName.fromQName(expectedItem)); if (item == null) { fail("Expected item "+expectedItem+" in "+desc()+" but there was none. Items present: "+presentItemNames()); } } for (Item<?, ?> existingItem : getPrismValue().getItems()) { if (!QNameUtil.contains(expectedItems, existingItem.getElementName())) { fail("Unexpected item "+existingItem.getElementName()+" in "+desc()+". Expected items: "+QNameUtil.prettyPrint(expectedItems)); } } return this; }
public static void checkRepoShadow(PrismObject<ShadowType> repoShadow, ShadowKindType kind, Integer expectedNumberOfAttributes) { ShadowType repoShadowType = repoShadow.asObjectable(); assertNotNull("No OID in repo shadow "+repoShadow, repoShadowType.getOid()); assertNotNull("No name in repo shadow "+repoShadow, repoShadowType.getName()); assertNotNull("No objectClass in repo shadow "+repoShadow, repoShadowType.getObjectClass()); assertEquals("Wrong kind in repo shadow "+repoShadow, kind, repoShadowType.getKind()); PrismContainer<Containerable> attributesContainer = repoShadow.findContainer(ShadowType.F_ATTRIBUTES); assertNotNull("No attributes in repo shadow "+repoShadow, attributesContainer); List<Item<?,?>> attributes = attributesContainer.getValue().getItems(); assertFalse("Empty attributes in repo shadow "+repoShadow, attributes.isEmpty()); if (expectedNumberOfAttributes != null) { assertEquals("Unexpected number of attributes in repo shadow "+repoShadow, (int)expectedNumberOfAttributes, attributes.size()); } }