code: @Override
      public List<MaxOnline> buildConstraint(BtrPlaceTree t, List<BtrpOperand> args) {
          if (checkConformance(t, args)) {
            @SuppressWarnings("unchecked")
            List<Node> ns = (List<Node>) params[0].transform(this, t, args.get(0));
              if (ns == null) {
                  return Collections.emptyList();
              }
              Set<Node> s = new HashSet<>(ns);
              if (s.size() != ns.size()) {                //Prevent duplicates
                  return Collections.emptyList();
              }
  
              BtrpNumber n = (BtrpNumber) args.get(1);
              if (!n.isInteger()) {
                  t.ignoreError("Parameter '" + params[1].getName() + "' expects an integer");
                  return Collections.emptyList();
              }
              int v = n.getIntValue();
              if (v < 0) {
                  t.ignoreError("Parameter '" + params[1].getName() + "' expects a positive integer (" + v + " given)");
                  return Collections.emptyList();
              }
  
              return Collections.singletonList(new MaxOnline(new HashSet<>(ns), v, true));
          }
          return Collections.emptyList();
      }
docs: Build an online constraint.
  
  @param args must be 1 set of nodes. The set must not be empty
  @return a constraint