public ArbitraryLengthPathNode(final TermNode left,final TermNode right,final VarNode tVarLeft,final VarNode tVarRight,final PathMod mod){
  this(new BOp[]{new JoinGroupNode()},NV.asMap(new NV(Annotations.LEFT_TERM,left),new NV(Annotations.RIGHT_TERM,right),new NV(Annotations.TRANSITIVITY_VAR_LEFT,tVarLeft),new NV(Annotations.TRANSITIVITY_VAR_RIGHT,tVarRight),new NV(Annotations.LOWER_BOUND,mod == PathMod.ONE_OR_MORE ? 1L : 0L),new NV(Annotations.UPPER_BOUND,mod == PathMod.ZERO_OR_ONE ? 1L : Long.MAX_VALUE)));
  final Set<VarNode> dropVars=new LinkedHashSet<>();
  dropVars.add(tVarLeft);
  dropVars.add(tVarRight);
  setProperty(Annotations.DROP_VARS,dropVars);
}

public ArbitraryLengthPathNode ( final TermNode left , final TermNode right , final VarNode tVarLeft , final VarNode tVarRight , final PathMod mod ) { this ( new BOp [ ] { new JoinGroupNode ( ) } , NV . asMap ( new NV ( Annotations . LEFT_TERM , left ) , new NV ( Annotations . RIGHT_TERM , right ) , new NV ( Annotations . TRANSITIVITY_VAR_LEFT , tVarLeft ) , new NV ( Annotations . TRANSITIVITY_VAR_RIGHT , tVarRight ) , new NV ( Annotations . LOWER_BOUND , mod == PathMod . ONE_OR_MORE ? 1L : 0L ) , new NV ( Annotations . UPPER_BOUND , mod == PathMod . ZERO_OR_ONE ? 1L : Long . MAX_VALUE ) ) ) ; final Set < VarNode > dropVars = new LinkedHashSet < > ( ) ; dropVars . add ( tVarLeft ) ; dropVars . add ( tVarRight ) ; setProperty ( Annotations . DROP_VARS , dropVars ) ; }
fully construct an arbitrary length path node with all required annotations .
