public static JoinCondition replaceReferencesToRemovedSource( QueryContext context,
JoinCondition joinCondition,
Map<SelectorName, SelectorName> rewrittenSelectors ) {
if (joinCondition instanceof EquiJoinCondition) {
EquiJoinCondition condition = (EquiJoinCondition)joinCondition;
SelectorName replacement1 = rewrittenSelectors.get(condition.getSelector1Name());
SelectorName replacement2 = rewrittenSelectors.get(condition.getSelector2Name());
if (replacement1 == condition.getSelector1Name() && replacement2 == condition.getSelector2Name()) return condition;
return new EquiJoinCondition(replacement1, condition.getProperty1Name(), replacement2, condition.getProperty2Name());
}
if (joinCondition instanceof SameNodeJoinCondition) {
SameNodeJoinCondition condition = (SameNodeJoinCondition)joinCondition;
SelectorName replacement1 = rewrittenSelectors.get(condition.getSelector1Name());
SelectorName replacement2 = rewrittenSelectors.get(condition.getSelector2Name());
if (replacement1 == condition.getSelector1Name() && replacement2 == condition.getSelector2Name()) return condition;
return new SameNodeJoinCondition(replacement1, replacement2, condition.getSelector2Path());
}
if (joinCondition instanceof ChildNodeJoinCondition) {
ChildNodeJoinCondition condition = (ChildNodeJoinCondition)joinCondition;
SelectorName childSelector = rewrittenSelectors.get(condition.getChildSelectorName());
SelectorName parentSelector = rewrittenSelectors.get(condition.getParentSelectorName());
if (childSelector == condition.getChildSelectorName() && parentSelector == condition.getParentSelectorName()) return condition;
return new ChildNodeJoinCondition(parentSelector, childSelector);
}
if (joinCondition instanceof DescendantNodeJoinCondition) {
DescendantNodeJoinCondition condition = (DescendantNodeJoinCondition)joinCondition;
SelectorName ancestor = rewrittenSelectors.get(condition.getAncestorSelectorName());
SelectorName descendant = rewrittenSelectors.get(condition.getDescendantSelectorName());
if (ancestor == condition.getAncestorSelectorName() && descendant == condition.getDescendantSelectorName()) return condition;
return new ChildNodeJoinCondition(ancestor, descendant);
}
return joinCondition;
}