/**
* 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.administrative.authorization;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collections;
import org.apache.cocoon.environment.ObjectModelHelper;
import org.apache.cocoon.environment.Request;
import org.dspace.app.xmlui.cocoon.AbstractDSpaceTransformer;
import org.dspace.app.xmlui.wing.Message;
import org.dspace.app.xmlui.wing.WingException;
import org.dspace.app.xmlui.wing.element.*;
import org.dspace.content.Collection;
import org.dspace.core.Constants;
import org.dspace.eperson.Group;
/**
* @author Alexey Maslov
*/
public class AdvacedAuthorizationsForm extends AbstractDSpaceTransformer
{
private static final Message T_title =
message("xmlui.administrative.authorization.AdvacedAuthorizationsForm.title");
private static final Message T_trail =
message("xmlui.administrative.authorization.AdvacedAuthorizationsForm.trail");
private static final Message T_authorize_trail =
message("xmlui.administrative.authorization.general.authorize_trail");
private static final Message T_main_head =
message("xmlui.administrative.authorization.AdvacedAuthorizationsForm.main_head");
private static final Message T_main_para =
message("xmlui.administrative.authorization.AdvacedAuthorizationsForm.main_para");
private static final Message T_actions_groupSentence =
message("xmlui.administrative.authorization.AdvacedAuthorizationsForm.actions_groupSentence");
private static final Message T_actions_actionSentence =
message("xmlui.administrative.authorization.AdvacedAuthorizationsForm.actions_actionSentence");
private static final Message T_actions_resourceSentence =
message("xmlui.administrative.authorization.AdvacedAuthorizationsForm.actions_resourceSentence");
private static final Message T_actions_collectionSentence =
message("xmlui.administrative.authorization.AdvacedAuthorizationsForm.actions_collectionSentence");
private static final Message T_actions_policyGroup =
message("xmlui.administrative.authorization.AdvacedAuthorizationsForm.actions_policyGroup");
private static final Message T_actions_policyAction =
message("xmlui.administrative.authorization.AdvacedAuthorizationsForm.actions_policyAction");
private static final Message T_actions_policyResource =
message("xmlui.administrative.authorization.AdvacedAuthorizationsForm.actions_policyResource");
private static final Message T_actions_policyCollections =
message("xmlui.administrative.authorization.AdvacedAuthorizationsForm.actions_policyCollections");
private static final Message T_actions_description =
message("xmlui.administrative.authorization.AdvancedAuthorizationsForm.actions_description");
private static final Message T_actions_start_date =
message("xmlui.administrative.authorization.AdvancedAuthorizationsForm.actions_start_date");
private static final Message T_actions_end_date =
message("xmlui.administrative.authorization.AdvancedAuthorizationsForm.actions_end_date");
private static final Message T_submit_add =
message("xmlui.administrative.authorization.AdvacedAuthorizationsForm.submit_add");
private static final Message T_submit_remove_all =
message("xmlui.administrative.authorization.AdvacedAuthorizationsForm.submit_remove_all");
private static final Message T_submit_return =
message("xmlui.general.return");
private static final Message T_dspace_home =
message("xmlui.general.dspace_home");
private static final Message T_label_date_help =
message("xmlui.administrative.authorization.AdvacedAuthorizationsForm.label_date_help");
private static final Message T_error_groupIds = message("xmlui.administrative.authorization.AdvancedAuthorizationsForm.error_groupIds");
private static final Message T_error_collectionIds = message("xmlui.administrative.authorization.AdvancedAuthorizationsForm.error_collectionIds");
private static final Message T_error_date_format = message("xmlui.administrative.authorization.AdvancedAuthorizationsForm.error_date_format");
private static final Message T_error_start_date_greater_than_end_date = message("xmlui.administrative.authorization.AdvancedAuthorizationsForm.error_start_date_greater_than_end_date");
public void addPageMeta(PageMeta pageMeta) throws WingException
{
pageMeta.addMetadata("title").addContent(T_title);
pageMeta.addTrailLink(contextPath + "/", T_dspace_home);
pageMeta.addTrailLink(contextPath + "/admin/authorize", T_authorize_trail);
pageMeta.addTrail().addContent(T_trail);
pageMeta.addMetadata("javascript", "static").addContent("static/js/advancedAuthorizationsForm.js");
}
public void addBody(Body body) throws WingException, SQLException
{
int resourceID = parameters.getParameterAsInteger("resource_id", -1);
int actionID = parameters.getParameterAsInteger("action_id",-1);
String rpDescription = parameters.getParameter("description", null);
String rpStartDate = parameters.getParameter("startDate", null);
String rpEndDate = parameters.getParameter("endDate", null);
Request request = ObjectModelHelper.getRequest(objectModel);
String[] groupIDs = null;
if(request.getAttribute("groupIDs")!=null){
groupIDs = (String[])request.getAttribute("groupIDs");
}
String[] collectionIDs = null;
if(request.getAttribute("collectionIDs")!=null){
collectionIDs = (String[])request.getAttribute("collectionIDs");
}
ArrayList<String> errors = getListOfValues(parameters.getParameter("errors",null));
Division main = body.addInteractiveDivision("advanced-authorization",contextPath+"/admin/authorize",Division.METHOD_POST,"primary administrative authorization");
main.setHead(T_main_head);
main.addPara(T_main_para);
List actionsList = main.addList("actions","form");
// description
Text description = actionsList.addItem().addText("description");
description.setLabel(T_actions_description);
description.setValue(rpDescription);
// For all of the selected groups...
actionsList.addItem().addContent(T_actions_groupSentence);
actionsList.addLabel(T_actions_policyGroup);
Select groupSelect = actionsList.addItem().addSelect("group_id");
groupSelect.setMultiple(true);
groupSelect.setSize(15);
if (errors.contains("groupIDs")){
groupSelect.addError(T_error_groupIds);
}
for (Group group : Group.findAll(context, Group.NAME))
{
if(wasElementSelected(group.getID(), groupIDs)){
groupSelect.addOption(true, group.getID(), group.getName());
}else{
groupSelect.addOption(false, group.getID(), group.getName());
}
}
// Grant the ability to perform the following action...
actionsList.addItem().addContent(T_actions_actionSentence);
actionsList.addLabel(T_actions_policyAction);
Select actionSelect = actionsList.addItem().addSelect("action_id");
for( int i = 0; i < Constants.actionText.length; i++ )
{
if (actionID == i){
actionSelect.addOption(true, i, Constants.actionText[i]);
}else{
actionSelect.addOption(i, Constants.actionText[i]);
}
}
// For all following object types...
actionsList.addItem().addContent(T_actions_resourceSentence);
actionsList.addLabel(T_actions_policyResource);
Select resourceSelect = actionsList.addItem().addSelect("resource_id");
if(resourceID==Constants.BITSTREAM ){
resourceSelect.addOption(false, Constants.ITEM, "item");
resourceSelect.addOption(true, Constants.BITSTREAM, "bitstream");
}else{ // default
resourceSelect.addOption(true, Constants.ITEM, "item");
resourceSelect.addOption(false, Constants.BITSTREAM, "bitstream");
}
// Across the following collections...
actionsList.addItem().addContent(T_actions_collectionSentence);
actionsList.addLabel(T_actions_policyCollections);
Select collectionsSelect = actionsList.addItem().addSelect("collection_id");
collectionsSelect.setMultiple(true);
collectionsSelect.setSize(15);
if (errors.contains("collectionIDs")){
collectionsSelect.addError(T_error_collectionIds);
}
for (Collection collection : Collection.findAll(context))
{
if(wasElementSelected(collection.getID(), collectionIDs)){
collectionsSelect.addOption(true, collection.getID(), collection.getMetadata("name"));
}else{
collectionsSelect.addOption(false, collection.getID(), collection.getMetadata("name"));
}
}
// start date
Text startDate = actionsList.addItem().addText("start_date");
startDate.setLabel(T_actions_start_date);
startDate.setHelp(T_label_date_help);
startDate.setValue(rpStartDate);
if (errors.contains("startDate"))
startDate.addError(T_error_date_format);
else if (errors.contains("startDateGreaterThenEndDate"))
startDate.addError(T_error_start_date_greater_than_end_date);
// end date
Text endDate = actionsList.addItem().addText("end_date");
endDate.setLabel(T_actions_end_date);
endDate.setHelp(T_label_date_help);
endDate.setValue(rpEndDate);
if (errors.contains("endDate"))
endDate.addError(T_error_date_format);
Para buttons = main.addPara();
buttons.addButton("submit_add").setValue(T_submit_add);
buttons.addButton("submit_remove_all").setValue(T_submit_remove_all);
buttons.addButton("submit_return").setValue(T_submit_return);
main.addHidden("administrative-continue").setValue(knot.getId());
}
private ArrayList<String> getListOfValues(String input) {
ArrayList<String> values = new ArrayList<String>();
if (input != null){
Collections.addAll(values, input.split(","));
}
return values;
}
private boolean wasElementSelected(int element, String[] elements){
if(elements!=null){
for(String s : elements){
if(Integer.parseInt(s) == element)
return true;
}
}
return false;
}
}