/** * 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; } }