protected void doDSGet(Context context, HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException, SQLException, AuthorizeException {
    // Obtain information from request
    // The page where the user came from
    String fromPage = request.getHeader("Referer");

    // Prevent spammers and splogbots from poisoning the feedback page
    String host = ConfigurationManager.getProperty("dspace.hostname");

    String basicHost = "";
    if (host.equals("localhost")
        || host.equals("127.0.0.1")
        || host.equals(InetAddress.getLocalHost().getHostAddress())) basicHost = host;
    else {
      // cut off all but the hostname, to cover cases where more than one URL
      // arrives at the installation; e.g. presence or absence of "www"
      int lastDot = host.lastIndexOf(".");
      basicHost = host.substring(host.substring(0, lastDot).lastIndexOf("."));
    }

    if (fromPage == null || fromPage.indexOf(basicHost) == -1) {
      throw new AuthorizeException();
    }

    // The email address they provided
    String formEmail = request.getParameter("email");

    // Browser
    String userAgent = request.getHeader("User-Agent");

    // Session id
    String sessionID = request.getSession().getId();

    // User email from context
    EPerson currentUser = context.getCurrentUser();
    String authEmail = null;

    if (currentUser != null) {
      authEmail = currentUser.getEmail();
    }

    // Has the user just posted their feedback?
    if (request.getParameter("submit") != null) {
      EmailValidator ev = EmailValidator.getInstance();
      String feedback = request.getParameter("feedback");

      // Check all data is there
      if ((formEmail == null)
          || formEmail.equals("")
          || (feedback == null)
          || feedback.equals("")
          || !ev.isValid(formEmail)) {
        log.info(LogManager.getHeader(context, "show_feedback_form", "problem=true"));
        request.setAttribute("feedback.problem", new Boolean(true));
        JSPManager.showJSP(request, response, "/feedback/form.jsp");

        return;
      }

      // All data is there, send the email
      try {
        Email email =
            ConfigurationManager.getEmail(
                I18nUtil.getEmailFilename(context.getCurrentLocale(), "feedback"));
        email.addRecipient(ConfigurationManager.getProperty("feedback.recipient"));

        email.addArgument(new Date()); // Date
        email.addArgument(formEmail); // Email
        email.addArgument(authEmail); // Logged in as
        email.addArgument(fromPage); // Referring page
        email.addArgument(userAgent); // User agent
        email.addArgument(sessionID); // Session ID
        email.addArgument(feedback); // The feedback itself

        // Replying to feedback will reply to email on form
        email.setReplyTo(formEmail);

        email.send();

        log.info(LogManager.getHeader(context, "sent_feedback", "from=" + formEmail));

        JSPManager.showJSP(request, response, "/feedback/acknowledge.jsp");
      } catch (MessagingException me) {
        log.warn(LogManager.getHeader(context, "error_mailing_feedback", ""), me);

        JSPManager.showInternalError(request, response);
      }
    } else {
      // Display feedback form
      log.info(LogManager.getHeader(context, "show_feedback_form", "problem=false"));
      request.setAttribute("authenticated.email", authEmail);
      JSPManager.showJSP(request, response, "/feedback/form.jsp");
    }
  }
  protected void doDSGet(Context context, HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException, SQLException, AuthorizeException {
    ExternalIdentifierDAO identifierDAO = ExternalIdentifierDAOFactory.getInstance(context);

    // Obtain information from request
    String uri = request.getParameter("uri");
    ExternalIdentifier identifier = identifierDAO.retrieve(uri);
    ObjectIdentifier oi = identifier.getObjectIdentifier();

    // Lookup Item title & collection
    Item item = null;
    String link = "";
    String title = null;
    String collName = null;
    if (identifier != null) {
      item = (Item) oi.getObject(context);
      link = item.getIdentifier().getURL().toString();
      request.setAttribute("link", link);

      if (item != null) {
        DCValue[] titleDC = item.getDC("title", null, Item.ANY);
        if (titleDC != null || titleDC.length > 0) {
          title = titleDC[0].value;
        }
        Collection[] colls = item.getCollections();
        collName = colls[0].getMetadata("name");
      }
    } else {
      String path = request.getPathInfo();
      log.info(LogManager.getHeader(context, "invalid_id", "path=" + path));
      JSPManager.showInvalidIDError(request, response, path, -1);
      return;
    }
    if (title == null) {
      title = "";
    }
    if (collName == null) {
      collName = "";
    }
    request.setAttribute("suggest.title", title);

    // User email from context
    EPerson currentUser = context.getCurrentUser();
    String authEmail = null;
    String userName = null;

    if (currentUser != null) {
      authEmail = currentUser.getEmail();
      userName = currentUser.getFullName();
    }

    if (request.getParameter("submit") != null) {
      String recipAddr = request.getParameter("recip_email");
      // the only required field is recipient email address
      if (recipAddr == null || recipAddr.equals("")) {
        log.info(LogManager.getHeader(context, "show_suggest_form", "problem=true"));
        request.setAttribute("suggest.problem", new Boolean(true));
        JSPManager.showJSP(request, response, "/suggest/suggest.jsp");
        return;
      }
      String recipName = request.getParameter("recip_name");
      if (recipName == null || "".equals(recipName)) {
        try {
          recipName =
              I18nUtil.getMessage("org.dspace.app.webui.servlet.SuggestServlet.recipient", context);
        } catch (MissingResourceException e) {
          log.warn(
              LogManager.getHeader(
                  context,
                  "show_suggest_form",
                  "Missing Resource: org.dspace.app.webui.servlet.SuggestServlet.sender"));
          recipName = "colleague";
        }
      }
      String senderName = request.getParameter("sender_name");
      if (senderName == null || "".equals(senderName)) {
        // use userName if available
        if (userName != null) {
          senderName = userName;
        } else {
          try {
            senderName =
                I18nUtil.getMessage("org.dspace.app.webui.servlet.SuggestServlet.sender", context);
          } catch (MissingResourceException e) {
            log.warn(
                LogManager.getHeader(
                    context,
                    "show_suggest_form",
                    "Missing Resource: org.dspace.app.webui.servlet.SuggestServlet.sender"));
            senderName = "A DSpace User";
          }
        }
      }
      String senderAddr = request.getParameter("sender_email");
      if (senderAddr == null || "".equals(senderAddr)) {
        // use authEmail if available
        if (authEmail != null) {
          senderAddr = authEmail;
        }
      }
      String itemUri = identifier.getURI().toString();
      String message = request.getParameter("message");
      String siteName = ConfigurationManager.getProperty("dspace.name");

      // All data is there, send the email
      try {
        Email email =
            ConfigurationManager.getEmail(
                I18nUtil.getEmailFilename(context.getCurrentLocale(), "suggest"));
        email.addRecipient(recipAddr); // recipient address
        email.addArgument(recipName); // 1st arg - recipient name
        email.addArgument(senderName); // 2nd arg - sender name
        email.addArgument(siteName); // 3rd arg - repository name
        email.addArgument(title); // 4th arg - item title
        email.addArgument(itemUri); // 5th arg - item identifier URI
        email.addArgument(link); // 6th arg - item local URL
        email.addArgument(collName); // 7th arg - collection name
        email.addArgument(message); // 8th arg - user comments

        // Set sender's address as 'reply-to' address if supplied
        if (senderAddr != null && !"".equals(senderAddr)) {
          email.setReplyTo(senderAddr);
        }

        // Only actually send the email if feature is enabled
        if (ConfigurationManager.getBooleanProperty("webui.suggest.enable", false)) {
          email.send();
        } else {
          throw new MessagingException(
              "Suggest item email not sent - webui.suggest.enable = false");
        }

        log.info(LogManager.getHeader(context, "sent_suggest", "from=" + senderAddr));

        JSPManager.showJSP(request, response, "/suggest/suggest_ok.jsp");
      } catch (MessagingException me) {
        log.warn(LogManager.getHeader(context, "error_mailing_suggest", ""), me);
        JSPManager.showInternalError(request, response);
      }
    } else {
      // Display suggest form
      log.info(LogManager.getHeader(context, "show_suggest_form", "problem=false"));
      request.setAttribute("authenticated.email", authEmail);
      request.setAttribute("eperson.name", userName);
      JSPManager.showJSP(request, response, "/suggest/suggest.jsp"); // asd
    }
  }