public IdItemPathSegment clone() { IdItemPathSegment clone = new IdItemPathSegment(); clone.id = this.id; return clone; }
public static boolean isNullId(Object o) { return o == null || o instanceof IdItemPathSegment && ((IdItemPathSegment) o).getId() == null; }
@Override public boolean equivalent(Object obj) { return equals(obj); }
@Override public String toString() { return "[" + ( isWildcard() ? "*" : id ) + "]"; }
public UniformItemPath append(Long id) { return append(new IdItemPathSegment(id)); }
public static Long toId(Object o, boolean failOnError) { if (o instanceof IdItemPathSegment) { return ((IdItemPathSegment) o).getId(); } else if (o == null || o instanceof Long) { return (Long) o; } else if (o instanceof Integer) { return ((Integer) o).longValue(); } else { if (failOnError) { throw new IllegalArgumentException("Not an ID: " + o); } else { return null; } } }
/** * Makes the path "normal" by inserting null Id segments where they were omitted. */ public UniformItemPathImpl normalize() { UniformItemPathImpl normalizedPath = new UniformItemPathImpl(); ItemPathSegment lastSegment = null; Iterator<ItemPathSegment> iterator = segments.iterator(); while (iterator.hasNext()) { ItemPathSegment origSegment = iterator.next(); if (lastSegment != null && !(lastSegment instanceof IdItemPathSegment) && !(origSegment instanceof IdItemPathSegment)) { normalizedPath.segments.add(new IdItemPathSegment()); } normalizedPath.segments.add(origSegment); lastSegment = origSegment; } if (lastSegment != null && !(lastSegment instanceof IdItemPathSegment) && // Make sure we do not insert the Id segment as a last one. That is not correct and it would spoil comparing paths iterator.hasNext()) { normalizedPath.segments.add(new IdItemPathSegment()); } return normalizedPath; }
xsegment = new PathHolderSegment(idToString(((IdItemPathSegment) segment).getId())); } else if (segment instanceof ObjectReferencePathSegment) { xsegment = new PathHolderSegment(PrismConstants.T_OBJECT_REFERENCE, false);
private void add(Object object) { if (object instanceof UniformItemPathImpl) { segments.addAll(((UniformItemPathImpl) object).segments); } else if (object instanceof ItemPath) { addAll(((ItemPath) object).getSegments()); } else if (object instanceof ItemPathSegment) { add((ItemPathSegment) object); } else if (object instanceof QName) { add((QName) object); } else if (object instanceof String) { add(stringToQName((String) object)); } else if (object == null || object instanceof Long) { this.segments.add(new IdItemPathSegment((Long) object)); } else if (object instanceof Integer) { this.segments.add(new IdItemPathSegment(((Integer) object).longValue())); } else if (object instanceof Collection) { addAll((Collection<?>) object); } else if (object instanceof Object[]) { // todo what about other kinds of array ? addAll((Object[]) object); } else { throw new IllegalArgumentException("Invalid item path segment value: " + object); } }
@NotNull public UniformItemPath toItemPath() { List<PathHolderSegment> xsegments = toSegments(); List<ItemPathSegment> segments = new ArrayList<>(xsegments.size()); for (PathHolderSegment segment : xsegments) { if (segment.isIdValueFilter()) { segments.add(new IdItemPathSegment(idToLong(segment.getValue()))); } else { QName qName = segment.getQName(); boolean variable = segment.isVariable(); segments.add(UniformItemPathImpl.createSegment(qName, variable)); } } UniformItemPath path = new UniformItemPathImpl(segments); path.setNamespaceMap(explicitNamespaceDeclarations); return path; } //endregion