@Override public void handle(ChainReduceVertex vertex, String[] params) throws IOException { final Text parentForwardLabel = textFromConfig(vertex, parentForwardLabelKey); final Text parentReverseLabel = textFromConfig(vertex, parentReverseLabelKey); final Text nextCandidateLabel = textFromConfig(vertex, nextCandidateLabelKey); final Text prevCandidateLabel = textFromConfig(vertex, prevCandidateLabelKey); final Text src = new Text(params[1]); Text pTargetId = findEdgeByValue(vertex, parentForwardLabel); if (pTargetId != null) { Text candidate = methodFromConfig(vertex, deriveEquivalentVertexKey, Text.class) .calculate(vertex, src, pTargetId); vertex.addEdgeRequest(src, new Edge<Text, Text>(candidate, nextCandidateLabel)); vertex.addEdgeRequest(candidate, new Edge<Text, Text>(src, prevCandidateLabel)); nudge(vertex, new Text(candidate)); } else { vertex.addEdgeRequest(src, new Edge<Text, Text>(DUMMY_VERTEX, nextCandidateLabel)); } Text rTargetId = findEdgeByValue(vertex, parentReverseLabel); if (rTargetId != null) { Text candidate = methodFromConfig(vertex, deriveEquivalentVertexKey, Text.class) .calculate(vertex, src, rTargetId); vertex.addEdgeRequest(src, new Edge<Text, Text>(candidate, prevCandidateLabel)); vertex.addEdgeRequest(candidate, new Edge<Text, Text>(src, nextCandidateLabel)); nudge(vertex, new Text(candidate)); } else { vertex.addEdgeRequest(src, new Edge<Text, Text>(DUMMY_VERTEX, prevCandidateLabel)); } nudge(vertex, new Text(src)); }