code: @Override
    @SuppressWarnings("unchecked")
    public void visit(Visitable visitable) {
      if (visitable instanceof Auditable) {
        Auditable<USER, PROCESS, ?> auditable = (Auditable<USER, PROCESS, ?>) visitable;
  
        if (auditable.isNew() || isCreatedUnset(auditable)) {
          auditable.setCreatedBy(getUser());
          auditable.setCreatedOn(getDateTime());
          auditable.setCreatedWith(getProcess());
        }
  
        if (auditable.isModified()) {
          auditable.setModifiedBy(getUser());
          auditable.setModifiedOn(getDateTime());
          auditable.setModifiedWith(getProcess());
        }
      }
    }
docs: Visits Auditable objects in an object graph/hierarchy setting auditable information (created/modified
  by/date-time/process).
  
  @param visitable the Visitable object visited by this Visitor.
  @see org.cp.elements.lang.Auditable