@Override public TargetAtom getTargetAtom(DistinctVariableOnlyDataAtom projectionAtom, ImmutableSubstitution<ImmutableTerm> substitution) { return new TargetAtomImpl(projectionAtom, substitution); }
@Override public Optional<IRI> getPredicateIRI() { return Optional.of(atom.getPredicate()) .filter(p -> p instanceof RDFAtomPredicate) .map(p -> (RDFAtomPredicate) p) .flatMap(p -> p.getPredicateIRI(getSubstitutedTerms())); }
@Override public TargetAtom changeSubstitution(ImmutableSubstitution<ImmutableTerm> newSubstitution) { return new TargetAtomImpl(atom, newSubstitution); }
@Override public TargetAtom getTripleTargetAtom(ImmutableTerm subject, ImmutableTerm pred, ImmutableTerm object) { DistinctVariableOnlyDataAtom projectionAtom = atomFactory.getDistinctTripleAtom( (subject instanceof Variable) ? (Variable) subject : s, (pred instanceof Variable) && (!pred.equals(subject)) ? (Variable) pred : p, (object instanceof Variable) && (!object.equals(subject)) && (!object.equals(pred)) ? (Variable) object : o); ImmutableList<ImmutableTerm> initialTerms = ImmutableList.of(subject, pred, object); ImmutableSubstitution<ImmutableTerm> substitution = substitutionFactory.getSubstitution( IntStream.range(0, 3) .boxed() .map(i -> Maps.immutableEntry(projectionAtom.getTerm(i), initialTerms.get(i))) .filter(e -> !e.getKey().equals(e.getValue())) .collect(ImmutableCollectors.toMap())); return new TargetAtomImpl(projectionAtom, substitution); }
@Override public TargetAtom rename(InjectiveVar2VarSubstitution renamingSubstitution) { return new TargetAtomImpl(renamingSubstitution.applyToDistinctVariableOnlyDataAtom(atom), renamingSubstitution.applyRenaming(substitution)); }