org.dspace.app.webui.jsptag.AccessSettingTag.java Source code

Java tutorial

Introduction

Here is the source code for org.dspace.app.webui.jsptag.AccessSettingTag.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.jsptag;

import org.apache.commons.lang.time.DateFormatUtils;
import org.apache.log4j.Logger;
import org.dspace.app.util.SubmissionInfo;
import org.dspace.app.webui.util.UIUtil;
import org.dspace.authorize.AuthorizeManager;
import org.dspace.authorize.ResourcePolicy;
import org.dspace.content.DSpaceObject;
import org.dspace.core.ConfigurationManager;
import org.dspace.core.Context;
import org.dspace.eperson.Group;

import java.util.ArrayList;
import java.util.List;
import java.io.IOException;
import java.sql.SQLException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.jstl.fmt.LocaleSupport;
import javax.servlet.jsp.tagext.TagSupport;

/**
 * Tag to display embargo settings
 *
 * @author Keiji Suzuki
 * @version $Revision$
 */
public class AccessSettingTag extends TagSupport {
    /** log4j category */
    private static Logger log = Logger.getLogger(AccessSettingTag.class);

    /** is advanced form enabled? */
    private static final boolean advanced = ConfigurationManager
            .getBooleanProperty("webui.submission.restrictstep.enableAdvancedForm", false);

    /** Name of the restricted group */
    private static final String restrictedGroup = ConfigurationManager
            .getProperty("webui.submission.restrictstep.groups");

    /** the SubmittionInfo */
    private transient SubmissionInfo subInfo = null;

    /** the target DSpaceObject */
    private transient DSpaceObject dso = null;

    /** the target ResourcePolicy */
    private transient ResourcePolicy rp = null;

    /** disable the radio button for open/embargo access */
    private boolean embargo = false;

    /** hide the embargo date and reason fields */
    private boolean hidden = false;

    /** add the policy button */
    private boolean addpolicy = false;

    public AccessSettingTag() {
        super();
    }

    public int doStartTag() throws JspException {
        String legend = LocaleSupport.getLocalizedMessage(pageContext,
                "org.dspace.app.webui.jsptag.access-setting.legend");
        String label_name = LocaleSupport.getLocalizedMessage(pageContext,
                "org.dspace.app.webui.jsptag.access-setting.label_name");
        String label_group = LocaleSupport.getLocalizedMessage(pageContext,
                "org.dspace.app.webui.jsptag.access-setting.label_group");
        String label_embargo = LocaleSupport.getLocalizedMessage(pageContext,
                "org.dspace.app.webui.jsptag.access-setting.label_embargo");
        String label_date = LocaleSupport.getLocalizedMessage(pageContext,
                "org.dspace.app.webui.jsptag.access-setting.label_date");
        String radio0 = LocaleSupport.getLocalizedMessage(pageContext,
                "org.dspace.app.webui.jsptag.access-setting.radio0");
        String radio1 = LocaleSupport.getLocalizedMessage(pageContext,
                "org.dspace.app.webui.jsptag.access-setting.radio1");
        String radio_help = LocaleSupport.getLocalizedMessage(pageContext,
                "org.dspace.app.webui.jsptag.access-setting.radio_help");
        String label_reason = LocaleSupport.getLocalizedMessage(pageContext,
                "org.dspace.app.webui.jsptag.access-setting.label_reason");
        String button_confirm = LocaleSupport.getLocalizedMessage(pageContext,
                "org.dspace.app.webui.jsptag.access-setting.button_confirm");

        String help_name = LocaleSupport.getLocalizedMessage(pageContext,
                "org.dspace.app.webui.jsptag.access-setting.name_help");
        String help_reason = LocaleSupport.getLocalizedMessage(pageContext,
                "org.dspace.app.webui.jsptag.access-setting.reason_help");

        JspWriter out = pageContext.getOut();
        StringBuffer sb = new StringBuffer();

        try {
            HttpServletRequest hrq = (HttpServletRequest) pageContext.getRequest();
            Context context = UIUtil.obtainContext(hrq);

            // get startDate and reason of the resource policy of the target DSpaceObject
            List<ResourcePolicy> policies = null;
            if (!advanced && dso != null) {
                policies = AuthorizeManager.findPoliciesByDSOAndType(context, dso, ResourcePolicy.TYPE_CUSTOM);
            } else if (rp != null) {
                policies = new ArrayList<ResourcePolicy>();
                policies.add(rp);
            }

            String name = "";
            int group_id = 0;
            String startDate = "";
            String reason = "";
            String radio0Checked = " checked=\"checked\"";
            String radio1Checked = "";
            String disabled = " disabled=\"disabled\"";
            if (policies != null && policies.size() > 0) {
                ResourcePolicy rp = policies.get(0);
                name = (rp.getRpName() == null ? "" : rp.getRpName());
                group_id = rp.getGroup().getID();
                startDate = (rp.getStartDate() != null ? DateFormatUtils.format(rp.getStartDate(), "yyyy-MM-dd")
                        : "");
                reason = (rp.getRpDescription() == null ? "" : rp.getRpDescription());
                if (!startDate.equals("")) {
                    radio0Checked = "";
                    radio1Checked = " checked=\"checked\"";
                    disabled = "";
                }
            }

            // if advanced embargo is disabled, embargo date and reason fields are always enabled
            if (!advanced) {
                disabled = "";
            }

            if (embargo) {
                // Name
                sb.append("<div class=\"form-group\">");
                sb.append(label_name).append("\n");
                sb.append("<p class=\"help-block\">").append(help_name).append("</p>").append("\n");
                sb.append(
                        "<input class=\"form-control\" name=\"name\" id=\"policy_name\" type=\"text\" maxlength=\"30\" value=\"")
                        .append(name).append("\" />\n");
                sb.append("</div>");

                // Group
                sb.append("<div class=\"form-group\">");
                sb.append(label_group).append("\n");
                sb.append("<select class=\"form-control\" name=\"group_id\" id=\"select_group\">\n");

                Group[] groups = getGroups(context, hrq, subInfo);
                if (groups != null) {
                    for (Group group : groups) {
                        sb.append("<option value=\"").append(group.getID()).append("\"");
                        if (group_id == group.getID()) {
                            sb.append(" selected=\"selected\"");
                        }
                        sb.append(">").append(group.getName()).append("</option>\n");
                    }
                } else {
                    sb.append("<option value=\"0\" selected=\"selected\">Anonymous</option>\n");
                }
                sb.append("</select>\n");
                sb.append("</div>");
                // Select open or embargo
                sb.append(label_embargo).append("\n");
                sb.append("<div class=\"radio\">");
                sb.append("<label><input name=\"open_access_radios\" type=\"radio\" value=\"0\"")
                        .append(radio0Checked).append(" />").append(radio0).append("</label>\n");
                sb.append("</div>");
                sb.append("<div class=\"radio\">");
                sb.append("<label><input name=\"open_access_radios\" type=\"radio\" value=\"1\"")
                        .append(radio1Checked).append(" />").append(radio1).append("</label>\n");
                sb.append("</div>");

            }

            // Embargo Date
            if (hidden) {
                sb.append(
                        "<input name=\"embargo_until_date\" id=\"embargo_until_date_hidden\" type=\"hidden\" value=\"")
                        .append(startDate).append("\" />\n");
                ;
                sb.append("<input name=\"reason\" id=\"reason_hidden\" type=\"hidden\" value=\"").append(reason)
                        .append("\" />\n");
            } else {
                sb.append("<div class=\"form-group col-md-12\">");
                sb.append("<div class=\"col-md-2\">");
                sb.append(label_date);
                sb.append("</div>");
                sb.append("<div class=\"col-md-2\">");
                sb.append(
                        "<input class=\"form-control\" name=\"embargo_until_date\" id=\"embargo_until_date\" maxlength=\"10\" size=\"10\" type=\"text\" value=\"")
                        .append(startDate).append("\"").append(disabled).append(" />\n");
                sb.append("</div>");
                sb.append("<div class=\"col-md-8\">");
                sb.append("<span class=\"help-block\">" + radio_help + "</span>");
                sb.append("</div>");
                sb.append("</div>");
                // Reason                
                sb.append("<div class=\"form-group col-md-12\">");
                sb.append("<div class=\"col-md-12\">");
                sb.append(label_reason).append("\n");
                sb.append("</div>");
                sb.append("<div class=\"col-md-12\">");
                sb.append("<p class=\"help-block\">").append(help_reason).append("</p>").append("\n");
                sb.append("</div>");
                sb.append("<div class=\"col-md-12\">");
                sb.append("<textarea class=\"form-control\" name=\"reason\" id=\"reason\" cols=\"30\" rows=\"5\"")
                        .append(disabled).append(">").append(reason).append("</textarea>\n");
                sb.append("</div>");
                sb.append("</div>");
            }

            // Add policy button
            if (addpolicy) {

                sb.append(
                        "<input class=\"btn btn-success col-md-offset-5\" name=\"submit_add_policy\" type=\"submit\" value=\"")
                        .append(button_confirm).append("\" />\n");

            }

            out.println(sb.toString());
        } catch (IOException ie) {
            throw new JspException(ie);
        } catch (SQLException e) {
            throw new JspException(e);
        }

        return SKIP_BODY;
    }

    /**
     * Get the browseInfo
     *
     * @return the browseInfo
     */
    public SubmissionInfo getSubInfo() {
        return subInfo;
    }

    /**
     * Set the browseInfo
     *
     * @param browseInfo
     *            the browseInfo
     */
    public void setSubInfo(SubmissionInfo subInfo) {
        this.subInfo = subInfo;
    }

    /**
     * Get the dso
     *
     * @return the dso
     */
    public DSpaceObject getDso() {
        return dso;
    }

    /**
     * Set the the dso
     *
     * @param the dso
     *            the dso
     */
    public void setDso(DSpaceObject dso) {
        this.dso = dso;
    }

    /**
     * Get the rp
     *
     * @return the rp
     */
    public ResourcePolicy getRp() {
        return rp;
    }

    /**
     * Set the the rp
     *
     * @param the rp
     *            the rp
     */
    public void setRp(ResourcePolicy rp) {
        this.rp = rp;
    }

    /**
     * Get the display open/embargo setting radio flag
     *
     * @return radio
     */
    public boolean getEmbargo() {
        return embargo;
    }

    /**
     * Set the display open/embargo setting radio flag
     *
     * @param embargo
     *            boolean
     */
    public void setEmbargo(boolean embargo) {
        this.embargo = embargo;
    }

    /**
     * Get the hidden flag
     *
     * @return hidden
     */
    public boolean getHidden() {
        return hidden;
    }

    /**
     * Set the hidden flag
     *
     * @param hidden
     *            boolean
     */
    public void setHidden(boolean hidden) {
        this.hidden = hidden;
    }

    /**
     * Set the add_policy button flag
     *
     * @param addpolicy
     *            boolean
     */
    public void setAddpolicy(boolean addpolicy) {
        this.addpolicy = addpolicy;
    }

    /**
     * Get the add_policy button flag
     *
     * @return addpolicy
     */
    public boolean getAddpolicy() {
        return addpolicy;
    }

    public void release() {
        dso = null;
        subInfo = null;
        rp = null;
        embargo = false;
        hidden = false;
        addpolicy = false;
    }

    private Group[] getGroups(Context context, HttpServletRequest request, SubmissionInfo subInfo)
            throws SQLException {
        Group[] groups = null;
        // retrieve groups
        if (restrictedGroup != null) {
            Group uiGroup = Group.findByName(context, restrictedGroup);
            if (uiGroup != null) {
                groups = uiGroup.getMemberGroups();
            }
        }

        if (groups == null || groups.length == 0) {
            groups = Group.findAll(context, Group.NAME);
        }

        return groups;
    }

}