/** * 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.xmlui.aspect.submission.submit; import org.apache.commons.lang.time.DateFormatUtils; import org.dspace.app.xmlui.cocoon.AbstractDSpaceTransformer; import org.dspace.app.xmlui.wing.Message; import org.dspace.authorize.AuthorizeManager; import org.dspace.authorize.ResourcePolicy; import org.dspace.content.*; import org.dspace.content.Item; import org.dspace.core.Context; import org.dspace.app.xmlui.wing.WingException; import org.dspace.app.xmlui.wing.element.*; import org.dspace.core.ConfigurationManager; import org.dspace.eperson.Group; import org.dspace.submit.step.AccessStep; import org.dspace.submit.step.UploadWithEmbargoStep; import java.sql.SQLException; /** * This class represents a query which the discovery backend can use * * @author Fabio Bolognesi (fabio at atmire dot com) * @author Mark Diggory (markd at atmire dot com) * @author Ben Bosman (ben at atmire dot com) * */ public class AccessStepUtil extends AbstractDSpaceTransformer { Context context=null; protected static final Message T_name =message("xmlui.Submission.submit.AccessStep.name"); protected static final Message T_name_help = message("xmlui.Submission.submit.AccessStep.name_help"); protected static final Message T_reason = message("xmlui.Submission.submit.AccessStep.reason"); protected static final Message T_reason_help = message("xmlui.Submission.submit.AccessStep.reason_help"); protected static final Message T_radios_embargo = message("xmlui.Submission.submit.AccessStep.embargo_visible"); protected static final Message T_groups = message("xmlui.Submission.submit.AccessStep.list_assigned_groups"); protected static final Message T_item_will_be_visible = message("xmlui.Submission.submit.AccessStep.open_access"); protected static final Message T_item_embargoed = message("xmlui.Submission.submit.AccessStep.embargo"); protected static final Message T_error_date_format = message("xmlui.Submission.submit.AccessStep.error_format_date"); protected static final Message T_error_missing_date = message("xmlui.Submission.submit.AccessStep.error_missing_date"); protected static final Message T_error_duplicated_policy = message("xmlui.Submission.submit.AccessStep.error_duplicated_policy"); // Policies Table protected static final Message T_no_policies = message("xmlui.Submission.submit.AccessStep.no_policies"); protected static final Message T_head_policies_table = message("xmlui.Submission.submit.AccessStep.table_policies"); protected static final Message T_policies_help = message("xmlui.Submission.submit.AccessStep.policies_help"); protected static final Message T_column0 =message("xmlui.Submission.submit.AccessStep.column0"); protected static final Message T_column1 =message("xmlui.Submission.submit.AccessStep.column1"); protected static final Message T_column2 =message("xmlui.Submission.submit.AccessStep.column2"); protected static final Message T_column3 =message("xmlui.Submission.submit.AccessStep.column3"); protected static final Message T_column4 =message("xmlui.Submission.submit.AccessStep.column4"); protected static final Message T_table_submit_edit =message("xmlui.Submission.submit.AccessStep.table_edit_button"); protected static final Message T_table_submit_delete =message("xmlui.Submission.submit.AccessStep.table_delete_button"); protected static final Message T_policy = message("xmlui.Submission.submit.AccessStep.review_policy_line"); private static final Message T_label_date_help = message("xmlui.administrative.authorization.AccessStep.label_date_help"); public static final int RADIO_OPEN_ACCESS_ITEM_VISIBLE=0; public static final int RADIO_OPEN_ACCESS_ITEM_EMBARGOED=1; //public static final int CB_EMBARGOED=10; private String globalReason = null; private boolean isAdvancedFormEnabled=false; public AccessStepUtil(Context c){ isAdvancedFormEnabled=ConfigurationManager.getBooleanProperty("webui.submission.restrictstep.enableAdvancedForm", false); context=c; } public void addName(String name_, List form, int errorFlag) throws WingException { if(isAdvancedFormEnabled){ Text name = form.addItem().addText("name"); name.setSize(0, 30); name.setLabel(T_name); name.setHelp(T_name_help); if(name_!=null && errorFlag != org.dspace.submit.step.AccessStep.STATUS_COMPLETE) name.setValue(name_); } } public void addReason(String reason_, List form, int errorFlag) throws WingException { TextArea reason = form.addItem("reason", null).addTextArea("reason"); reason.setLabel(T_reason); reason.setHelp(T_reason_help); if(!isAdvancedFormEnabled){ if(globalReason!=null) reason.setValue(globalReason); } else{ if(reason_!=null && errorFlag != org.dspace.submit.step.AccessStep.STATUS_COMPLETE) reason.setValue(reason_); } } public void addListGroups(String groupID, List form, int errorFlag, Collection owningCollection) throws WingException, SQLException { if(isAdvancedFormEnabled){ // currently set group form.addLabel(T_groups); Select groupSelect = form.addItem().addSelect("group_id"); groupSelect.setMultiple(false); Group[] loadedGroups = null; // retrieve groups String name = ConfigurationManager.getProperty("webui.submission.restrictstep.groups"); if(name!=null){ Group uiGroup = Group.findByName(context, name); if(uiGroup!=null) loadedGroups= uiGroup.getMemberGroups(); } if(loadedGroups==null || loadedGroups.length ==0){ loadedGroups = Group.findAll(context, Group.NAME); } // if no group selected for default set anonymous if(groupID==null || groupID.equals("")) groupID= "0"; // when we're just loading the main step, also default to anonymous if (errorFlag == AccessStep.STATUS_COMPLETE) { groupID = "0"; } for (Group group : loadedGroups){ boolean selectGroup = Integer.parseInt(groupID) == group.getID(); groupSelect.addOption(selectGroup, group.getID(), group.getName()); } if (errorFlag == AccessStep.STATUS_DUPLICATED_POLICY || errorFlag == AccessStep.EDIT_POLICY_STATUS_DUPLICATED_POLICY || errorFlag == UploadWithEmbargoStep.STATUS_EDIT_POLICIES_DUPLICATED_POLICY || errorFlag == UploadWithEmbargoStep.STATUS_EDIT_POLICY_DUPLICATED_POLICY){ groupSelect.addError(T_error_duplicated_policy); } } } public void addAccessRadios(String selectedRadio, String date, List form, int errorFlag, DSpaceObject dso) throws WingException, SQLException { if(!isAdvancedFormEnabled){ addEmbargoDateSimpleForm(dso, form, errorFlag); } else{ org.dspace.app.xmlui.wing.element.Item radiosAndDate = form.addItem(); Radio openAccessRadios = radiosAndDate.addRadio("open_access_radios"); openAccessRadios.setLabel(T_radios_embargo); if(selectedRadio!=null && Integer.parseInt(selectedRadio)==RADIO_OPEN_ACCESS_ITEM_EMBARGOED && errorFlag != org.dspace.submit.step.AccessStep.STATUS_COMPLETE){ openAccessRadios.addOption(RADIO_OPEN_ACCESS_ITEM_VISIBLE, T_item_will_be_visible); openAccessRadios.addOption(true, RADIO_OPEN_ACCESS_ITEM_EMBARGOED, T_item_embargoed); } else{ openAccessRadios.addOption(true, RADIO_OPEN_ACCESS_ITEM_VISIBLE, T_item_will_be_visible); openAccessRadios.addOption(RADIO_OPEN_ACCESS_ITEM_EMBARGOED, T_item_embargoed); } // Date Text startDate = radiosAndDate.addText("embargo_until_date"); startDate.setLabel(""); startDate.setHelp(T_label_date_help); if (errorFlag == org.dspace.submit.step.AccessStep.STATUS_ERROR_FORMAT_DATE){ startDate.addError(T_error_date_format); } else if (errorFlag == org.dspace.submit.step.AccessStep.STATUS_ERROR_MISSING_DATE){ startDate.addError(T_error_missing_date); } if(date!=null && errorFlag != org.dspace.submit.step.AccessStep.STATUS_COMPLETE){ startDate.setValue(date); } } } public void addEmbargoDateSimpleForm(DSpaceObject dso, List form, int errorFlag) throws SQLException, WingException { String date=null; if(dso!=null){ java.util.List<ResourcePolicy> policies = AuthorizeManager.findPoliciesByDSOAndType(context, dso, ResourcePolicy.TYPE_CUSTOM); if(policies.size() > 0){ ResourcePolicy rp = policies.get(0); if(rp.getStartDate() != null) { date = DateFormatUtils.format(rp.getStartDate(), "yyyy-MM-dd"); } globalReason = rp.getRpDescription(); } } // CheckBox privateCheckbox = form.addItem().addCheckBox("emabrgo_option"); // privateCheckbox.setLabel(T_item_embargoed); // if(date!=null){ // privateCheckbox.addOption(true, CB_EMBARGOED, ""); // } // else{ // privateCheckbox.addOption(false, CB_EMBARGOED, ""); // } // Date Text startDate = form.addItem().addText("embargo_until_date"); startDate.setLabel(T_item_embargoed); if (errorFlag == org.dspace.submit.step.AccessStep.STATUS_ERROR_FORMAT_DATE){ startDate.addError(T_error_date_format); } else if (errorFlag == org.dspace.submit.step.AccessStep.STATUS_ERROR_MISSING_DATE){ startDate.addError(T_error_missing_date); } if(date!=null){ startDate.setValue(date); } startDate.setHelp(T_label_date_help); } public void addTablePolicies(Division parent, DSpaceObject dso, Collection owningCollection) throws WingException, SQLException { if (!isAdvancedFormEnabled) { return; } Division div = parent.addDivision("access-existing-policies"); div.setHead(T_head_policies_table); div.addPara(T_policies_help.parameterize(owningCollection)); java.util.List<ResourcePolicy> resourcePolicies = AuthorizeManager.findPoliciesByDSOAndType(context, dso, ResourcePolicy.TYPE_CUSTOM); if (resourcePolicies.isEmpty()) { div.addPara(T_no_policies); return; } int cols = resourcePolicies.size(); if(cols==0) cols=1; Table policies = div.addTable("policies", 6, cols); Row header = policies.addRow(Row.ROLE_HEADER); header.addCellContent(T_column0); // name header.addCellContent(T_column1); // action header.addCellContent(T_column2); // group header.addCellContent(T_column3); // start_date header.addCellContent(T_column4); // end_date for (ResourcePolicy rp : resourcePolicies){ int id = rp.getID(); String name = ""; if(rp.getRpName()!=null) name=rp.getRpName(); String action = rp.getActionText(); // if it is the default policy for the Submitter don't show it. if(dso instanceof org.dspace.content.Item){ org.dspace.content.Item item = (org.dspace.content.Item)dso; if(rp.getEPersonID()!=-1 && rp.getEPersonID()!=0){ if(item.getSubmitter().getID()==rp.getEPersonID()) continue; } } String group = ""; if(rp.getGroup()!=null) group = rp.getGroup().getName(); Row row = policies.addRow(); row.addCellContent(name); row.addCellContent(action); row.addCellContent(group); // start String startDate = ""; if(rp.getStartDate() != null){ startDate = DateFormatUtils.format(rp.getStartDate(), "yyyy-MM-dd"); } row.addCellContent(startDate); // endDate String endDate = ""; if(rp.getEndDate() != null){ endDate = DateFormatUtils.format(rp.getEndDate(), "yyyy-MM-dd"); } row.addCellContent(endDate); Button edit = row.addCell().addButton("submit_edit_edit_policies_"+id); edit.setValue(T_table_submit_edit); Button delete = row.addCell().addButton("submit_delete_edit_policies_"+id); delete.setValue(T_table_submit_delete); } } public void addListPolicies(List parent, DSpaceObject dso, Collection owningCollection) throws WingException, SQLException { if (!isAdvancedFormEnabled) { return; } parent.addLabel(T_head_policies_table); java.util.List<ResourcePolicy> resourcePolicies = AuthorizeManager.findPoliciesByDSOAndType(context, dso, ResourcePolicy.TYPE_CUSTOM); if (resourcePolicies.isEmpty()) { parent.addItem(T_no_policies); return; } for (ResourcePolicy rp : resourcePolicies){ int id = rp.getID(); String name = ""; if(rp.getRpName()!=null) name=rp.getRpName(); String action = rp.getActionText(); // if it is the default policy for the Submitter don't show it. if(dso instanceof org.dspace.content.Item){ org.dspace.content.Item item = (org.dspace.content.Item)dso; if(rp.getEPersonID()!=-1 && rp.getEPersonID()!=0){ if(item.getSubmitter().getID()==rp.getEPersonID()) continue; } } String group = ""; if(rp.getGroup()!=null) group = rp.getGroup().getName(); // start String startDate = ""; if(rp.getStartDate() != null){ startDate = DateFormatUtils.format(rp.getStartDate(), "yyyy-MM-dd"); } // endDate String endDate = ""; if(rp.getEndDate() != null){ endDate = DateFormatUtils.format(rp.getEndDate(), "yyyy-MM-dd"); } parent.addItem(T_policy.parameterize(name, action, group, startDate, endDate)); } } }