@Override public ImmutableSubjectData addParent( Set<Entry<String, String>> segments, String type, String ident) { Segment entry = getSegmentOrNew(segments); final SubjectRef parentIdent = SubjectRef.unresolved(type, ident); if (entry.getParents() != null && entry.getParents().contains(parentIdent)) { return this; } return newWithUpdated(segments, entry.withAddedParent(parentIdent)); }
@Override public ImmutableSubjectData setParents( Set<Entry<String, String>> segments, List<Entry<String, String>> parents) { Segment entry = getSegmentOrNew(segments); return newWithUpdated( segments, entry.withParents( Lists.transform( parents, ent -> ent instanceof SubjectRef ? (SubjectRef) ent : SubjectRef.unresolved(ent.getKey(), ent.getValue())))); }
@Override public ImmutableSubjectData removeParent( Set<Entry<String, String>> segments, String type, String identifier) { Segment ent = this.segments.get(segments); if (ent == null) { return this; } final SubjectRef parentIdent = SubjectRef.unresolved(type, identifier); if (ent.getParents() == null || !ent.getParents().contains(parentIdent)) { return this; } return newWithUpdated(segments, ent.withRemovedParent(parentIdent)); }