/**
   * Can the users contained in this object's member SwordContext make a successful submission to
   * the selected collection.
   *
   * <p>See javadocs for individual canSubmitTo methods to see the conditions which are applied in
   * each situation
   *
   * @return true if yes, false if not
   * @throws DSpaceSwordException
   */
  public boolean canSubmit(SwordContext swordContext, DSpaceObject dso, VerboseDescription msg)
      throws DSpaceSwordException, SwordError {
    // determine if we can submit
    boolean submit = this.canSubmitTo(swordContext, dso);

    if (submit) {
      msg.append("User is authorised to submit to collection");
    } else {
      msg.append("User is not authorised to submit to collection");
    }

    return submit;
  }
  /**
   * Add the current date to the item metadata. This looks up the field in which to store this
   * metadata in the configuration sword.updated.field
   *
   * @param item
   * @throws DSpaceSwordException
   */
  protected void setUpdatedDate(Item item, VerboseDescription verboseDescription)
      throws DSpaceSwordException {
    String field = ConfigurationManager.getProperty("swordv2-server", "updated.field");
    if (field == null || "".equals(field)) {
      throw new DSpaceSwordException(
          "No configuration, or configuration is invalid for: sword.updated.field");
    }

    MDValue dc = this.configToDC(field, null);
    item.clearMetadata(dc.getSchema(), dc.getElement(), dc.getQualifier(), MDValue.ANY);
    item.addMetadata(
        dc.getSchema(), dc.getElement(), dc.getQualifier(), null, Utils.asISO8601(new Date()));

    verboseDescription.append("Updated date added to response from item metadata where available");
  }
  /**
   * Store the given slug value (which is used for suggested identifiers, and which DSpace ignores)
   * in the item metadata. This looks up the field in which to store this metadata in the
   * configuration sword.slug.field
   *
   * @param item
   * @param slugVal
   * @throws DSpaceSwordException
   */
  protected void setSlug(Item item, String slugVal, VerboseDescription verboseDescription)
      throws DSpaceSwordException {
    // if there isn't a slug value, don't set it
    if (slugVal == null) {
      return;
    }

    String field = ConfigurationManager.getProperty("swordv2-server", "slug.field");
    if (field == null || "".equals(field)) {
      throw new DSpaceSwordException(
          "No configuration, or configuration is invalid for: sword.slug.field");
    }

    MDValue dc = this.configToDC(field, null);
    item.clearMetadata(dc.getSchema(), dc.getElement(), dc.getQualifier(), MDValue.ANY);
    item.addMetadata(dc.getSchema(), dc.getElement(), dc.getQualifier(), null, slugVal);

    verboseDescription.append("Slug value set in response where available");
  }