/**
* 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.swordclient;
import org.apache.cocoon.environment.ObjectModelHelper;
import org.apache.cocoon.environment.Request;
import org.apache.log4j.Logger;
import org.dspace.app.xmlui.cocoon.AbstractDSpaceTransformer;
import org.dspace.app.xmlui.utils.UIException;
import org.dspace.app.xmlui.wing.Message;
import org.dspace.app.xmlui.wing.WingException;
import org.dspace.app.xmlui.wing.element.*;
import org.dspace.authorize.AuthorizeException;
import org.dspace.sword.client.ServiceDocumentHelper;
import org.purl.sword.base.Collection;
import org.purl.sword.base.ServiceDocument;
import org.xml.sax.SAXException;
import java.io.IOException;
import java.sql.SQLException;
/**
* User: Robin Taylor
* Date: 21-Sep-2010
* Time: 13:44:28
*/
public class SelectCollectionTransformer extends AbstractDSpaceTransformer {
private static Logger log = Logger.getLogger(SelectCollectionTransformer.class);
private static final Message T_dspace_home = message("xmlui.general.dspace_home");
private static final Message T_title = message("xmlui.swordclient.SelectCollection.title");
private static final Message T_SwordCopy_trail = message("xmlui.swordclient.general.SwordCopy_trail");
private static final Message T_trail = message("xmlui.swordclient.SelectCollection.trail");
private static final Message T_main_head = message("xmlui.swordclient.general.main_head");
private static final Message T_collection_head = message("xmlui.swordclient.SelectCollection.collection_head");
private static final Message T_collection_title = message("xmlui.swordclient.SelectCollection.collection_title");
private static final Message T_collection_policy = message("xmlui.swordclient.SelectCollection.collection policy");
private static final Message T_collection_mediation = message("xmlui.swordclient.SelectCollection.collection_mediation");
private static final Message T_collection_file_types = message("xmlui.swordclient.SelectCollection.collection_file_types");
private static final Message T_collection_package_formats = message("xmlui.swordclient.SelectCollection.collection_package_formats");
private static final Message T_collection_deposit_button = message("xmlui.swordclient.SelectCollection.collection_deposit_button");
private static final Message T_sub_service_target = message("xmlui.swordclient.SelectCollection.sub_service_target");
private static final Message T_sub_service_target_button = message("xmlui.swordclient.SelectCollection.sub_service_target_button");
private static final Message T_submit_cancel = message("xmlui.general.cancel");
/**
* Add a page title and trail links
*/
public void addPageMeta(PageMeta pageMeta) throws SAXException, WingException, UIException, SQLException, IOException, AuthorizeException {
pageMeta.addMetadata("title").addContent(T_title);
pageMeta.addTrailLink(contextPath + "/", T_dspace_home);
pageMeta.addTrail().addContent(T_SwordCopy_trail);
pageMeta.addTrail().addContent(T_trail);
}
public void addBody(Body body) throws SAXException, WingException, UIException, SQLException, IOException, AuthorizeException {
String handle = parameters.getParameter("handle", null);
Division main = body.addDivision("main");
main.setHead(T_main_head.parameterize(handle));
Request request = ObjectModelHelper.getRequest(objectModel);
ServiceDocument serviceDoc = (ServiceDocument) request.getAttribute("serviceDoc");
java.util.List<Collection> collections = ServiceDocumentHelper.getCollections(serviceDoc);
for (Collection collection : collections)
{
Division collectionDiv = main.addInteractiveDivision("collection", contextPath + "/swordclient", Division.METHOD_POST, "");
// Add a header for each individual collection.
collectionDiv.setHead(T_collection_head.parameterize(collection.getLocation()));
// Now add another list of the remaining collection parameters.
List paramsList = collectionDiv.addList(collection + "Params", List.TYPE_BULLETED);
paramsList.addItem().addContent(T_collection_title.parameterize(collection.getTitle()));
paramsList.addItem().addContent(T_collection_policy.parameterize(collection.getCollectionPolicy()));
paramsList.addItem().addContent(T_collection_mediation.parameterize(Boolean.toString(collection.getMediation())));
String[] fileTypes = collection.getAccepts();
String fileTypesString = arrayToString(fileTypes);
paramsList.addItem().addContent(T_collection_file_types.parameterize(fileTypesString));
String[] packageFormats = ServiceDocumentHelper.getPackageFormats(collection);
String packageFormatsString = arrayToString(packageFormats);
paramsList.addItem().addContent(T_collection_package_formats.parameterize(packageFormatsString));
// Assuming there are available file types and package formats then add a deposit button.
if ((fileTypes.length > 0 ) && (packageFormats.length > 0))
{
collectionDiv.addPara().addButton("deposit").setValue(T_collection_deposit_button);
collectionDiv.addHidden("location").setValue(collection.getLocation());
collectionDiv.addHidden("swordclient-continue").setValue(knot.getId());
}
// If the collection contains a reference to a 'sub service' then allow the user to select
// the service doc for that sub service.
if ((collection.getService() != null) && (collection.getService().length() > 0))
{
collectionDiv.addPara(T_sub_service_target + collection.getService());
collectionDiv.addPara().addButton("sub-service").setValue(T_sub_service_target_button);
collectionDiv.addHidden("sub-service").setValue(collection.getService());
collectionDiv.addHidden("swordclient-continue").setValue(knot.getId());
}
}
Division buttons = main.addInteractiveDivision("buttons", contextPath + "/swordclient", Division.METHOD_POST, "");
Para buttonList = buttons.addPara();
buttonList.addButton("submit_cancel").setValue(T_submit_cancel);
buttons.addHidden("swordclient-continue").setValue(knot.getId());
}
private String arrayToString(String[] strings)
{
if (strings.length == 0)
{
return "none";
}
else
{
StringBuffer text = new StringBuffer("");
for (String string : strings)
{
text.append(string).append(", ");
}
text.delete(text.length() - 2, text.length() - 1);
return text.toString();
}
}
}