code: @Override
      public void visit(Constant constant) {
          Constant copy = new Constant(constant.getId(), this.uniqueId != null ? this.uniqueId : constant.getUniqueId());
          copy.setCreateDate(this.createDate != null ? this.createDate : constant.getCreateDate());
          copy.setUpdateDate(this.updateDate != null ? this.updateDate : constant.getUpdateDate());
          copy.setDeleteDate(this.deleteDate != null ? this.deleteDate : constant.getDeleteDate());
          copy.setDownloadDate(this.downloadDate != null ? this.downloadDate : constant.getDownloadDate());
          copy.setSourceSystem(this.sourceSystem != null ? this.sourceSystem : constant.getSourceSystem());
          if (this.references != null) {
              for (String refName : this.references.keySet()) {
                  copy.setReferences(refName, this.references.get(refName));
              }
          } else {
              for (String refName : constant.getReferenceNames()) {
                  copy.setReferences(refName, constant.getReferences(refName));
              }
          }
          if (this.properties != null) {
              for (String propName : this.properties.keySet()) {
                  copy.setProperty(propName, this.properties.get(propName));
              }
          } else {
              for (String propName : constant.getPropertyNames()) {
                  copy.setProperty(propName, constant.getProperty(propName));
              }
          }
          this.theCopy = copy;
      }
docs: Copies a {@link Constant} proposition. Retrieve it by subsequently
  calling {@link #getCopy() }.
  
  @param constant the constant to copy. Cannot be <code>null</code>.