public IdItemPathSegment clone() { IdItemPathSegment clone = new IdItemPathSegment(); clone.id = this.id; return clone; }
public UniformItemPath append(Long id) { return append(new IdItemPathSegment(id)); }
/** * 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; }
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