@NotNull private ItemPath skipFirstId(@NotNull ItemPath path) { if (path.startsWithName()) { return path; } else if (path.startsWithId()) { return path.rest(); } else { throw new IllegalArgumentException("Unexpected path segment in "+path); } }
private ItemPath stripFirstIds(ItemPath itemPath) { while (!itemPath.isEmpty() && itemPath.startsWithId()) { itemPath = itemPath.rest(); } return itemPath; }
@Override public <IV extends PrismValue,ID extends ItemDefinition,I extends Item<IV,ID>> I findCreateItem(ItemPath itemPath, Class<I> type, ID itemDefinition, boolean create) throws SchemaException { if (ItemPath.isEmpty(itemPath)) { throw new IllegalArgumentException("Empty path specified"); } Long id = itemPath.firstToIdOrNull(); PrismContainerValue<C> cval = findValue(id); if (cval == null) { return null; } // descent to the correct value ItemPath rest = itemPath.startsWithId() ? itemPath.rest() : itemPath; return ((PrismContainerValueImpl<C>) cval).findCreateItem(rest, type, itemDefinition, create); }
@Override public Object find(ItemPath path) { if (ItemPath.isEmpty(path)) { return this; } Long id = path.firstToIdOrNull(); PrismContainerValue<C> cval = findValue(id); if (cval == null) { return null; } // descent to the correct value ItemPath rest = path.startsWithId() ? path.rest() : path; return cval.find(rest); }
@Override public <IV extends PrismValue,ID extends ItemDefinition> PartiallyResolvedItem<IV,ID> findPartial(ItemPath path) { if (ItemPath.isEmpty(path)) { return new PartiallyResolvedItem<>((Item<IV, ID>) this, null); } Long id = path.firstToIdOrNull(); PrismContainerValue<C> cval = findValue(id); if (cval == null) { return null; } // descent to the correct value ItemPath rest = path.startsWithId() ? path.rest() : path; return cval.findPartial(rest); }
@Override public ItemDelta<?,?> getSubDelta(ItemPath path) { if (path.isEmpty()) { return this; } Long id = null; if (path.startsWithId()) { id = path.firstToIdOrNull(); path = path.rest(); } ItemDefinition itemDefinition = getDefinition().findItemDefinition(path); if (itemDefinition == null) { throw new IllegalStateException("No definition of " + path + " in " + getDefinition()); } ItemDelta<?,?> itemDelta = itemDefinition.createEmptyDelta(getPath().append(path)); itemDelta.addValuesToAdd(findItemValues(id, path, getValuesToAdd())); itemDelta.addValuesToDelete(findItemValues(id, path, getValuesToDelete())); itemDelta.setValuesToReplace(findItemValues(id, path, getValuesToReplace())); if (itemDelta.isEmpty()) { return null; } return itemDelta; }
Long id; ItemPath rest; if (path.startsWithId()) { id = path.firstToId(); rest = path.rest();