org.dspace.app.webui.servlet.SuggestServlet.java Source code

Java tutorial

Introduction

Here is the source code for org.dspace.app.webui.servlet.SuggestServlet.java

Source

/**
 * The contents of this file are subject to the license and copyright
 * detailed in the LICENSE and NOTICE files at the root of the source
 * tree and available online at
 *
 * http://www.dspace.org/license/
 */
package org.dspace.app.webui.servlet;

import java.io.IOException;
import java.net.InetAddress;
import java.sql.SQLException;
import java.util.MissingResourceException;
import javax.mail.MessagingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;

import org.dspace.app.webui.util.JSPManager;
import org.dspace.authorize.AuthorizeException;
import org.dspace.core.ConfigurationManager;
import org.dspace.core.Context;
import org.dspace.core.Email;
import org.dspace.core.I18nUtil;
import org.dspace.core.LogManager;
import org.dspace.eperson.EPerson;
import org.dspace.handle.HandleManager;
import org.dspace.content.Item;
import org.dspace.content.Collection;
import org.dspace.content.DCValue;

/**
 * Servlet for handling user email recommendations
 *
 * @author  Arnaldo Dantas
 * @version $Revision$
 */
public class SuggestServlet extends DSpaceServlet {
    /** log4j category */
    private static Logger log = Logger.getLogger(SuggestServlet.class);

    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();
        }

        // Obtain information from request
        String handle = request.getParameter("handle");

        // Lookup Item title & collection
        String title = null;
        String collName = null;
        if (handle != null && !handle.equals("")) {
            Item item = (Item) HandleManager.resolveToObject(context, handle);
            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", 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 (StringUtils.isEmpty(senderAddr) && authEmail != null) {
                // use authEmail if available
                senderAddr = authEmail;
            }
            String itemUri = HandleManager.getCanonicalForm(handle);
            String itemUrl = HandleManager.resolveToURL(context, handle);
            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 handle URI
                email.addArgument(itemUrl); // 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 
        }
    }

    protected void doDSPost(Context context, HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException, SQLException, AuthorizeException {
        // Treat as a GET
        doDSGet(context, request, response);
    }
}