diff --git a/dspace/etc/dspace-web.xml b/dspace/etc/dspace-web.xml index 743cd003fb..fec503547b 100644 --- a/dspace/etc/dspace-web.xml +++ b/dspace/etc/dspace-web.xml @@ -167,6 +167,11 @@ org.dspace.app.webui.servlet.X509CertificateServlet + + collection-wizard + org.dspace.app.webui.servlet.admin.CollectionWizardServlet + + community-list org.dspace.app.webui.servlet.CommunityListServlet @@ -197,6 +202,11 @@ org.dspace.app.webui.servlet.admin.EditItemServlet + + eperson-list + org.dspace.app.webui.servlet.admin.EPersonListServlet + + feedback org.dspace.app.webui.servlet.FeedbackServlet @@ -338,6 +348,11 @@ /community-list + + collection-wizard + /dspace-admin/collection-wizard + + dc-registry /dspace-admin/dc-registry @@ -358,6 +373,11 @@ /tools/edit-item + + eperson-list + /dspace-admin/eperson-list + + feedback /feedback diff --git a/dspace/jsp/dspace-admin/edit-collection.jsp b/dspace/jsp/dspace-admin/edit-collection.jsp index 3c230b7c61..5a1b99e17e 100644 --- a/dspace/jsp/dspace-admin/edit-collection.jsp +++ b/dspace/jsp/dspace-admin/edit-collection.jsp @@ -131,7 +131,7 @@

Edit Collection <%= collection.getHandle() %>

<% } %> -
+ <%-- =========================================================== Basic metadata diff --git a/dspace/jsp/dspace-admin/eperson-list.jsp b/dspace/jsp/dspace-admin/eperson-list.jsp new file mode 100644 index 0000000000..eb6a7f5aa7 --- /dev/null +++ b/dspace/jsp/dspace-admin/eperson-list.jsp @@ -0,0 +1,183 @@ +<%-- + - eperson-list.jsp + - + - Version: $Revision$ + - + - Date: $Date$ + - + - Copyright (c) 2002, Hewlett-Packard Company and Massachusetts + - Institute of Technology. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions are + - met: + - + - - Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - + - - Redistributions in binary form must reproduce the above copyright + - notice, this list of conditions and the following disclaimer in the + - documentation and/or other materials provided with the distribution. + - + - - Neither the name of the Hewlett-Packard Company nor the name of the + - Massachusetts Institute of Technology nor the names of their + - contributors may be used to endorse or promote products derived from + - this software without specific prior written permission. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + - HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + - INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + - BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + - OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + - TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + - USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + - DAMAGE. + --%> + + +<%-- + - Display list of E-people, with pagination + - + - Attributes: + - + - epeople - EPerson[] - all epeople to browse + - sortby - Integer - field to sort by (constant from EPerson.java) + - first - Integer - index of first eperson to display + --%> + +<%@ page contentType="text/html;charset=UTF-8" %> + +<%@ taglib uri="http://www.dspace.org/dspace-tags.tld" prefix="dspace" %> + +<%@ page import="org.dspace.eperson.EPerson" %> + +<% + int PAGESIZE = 50; + + EPerson[] epeople = + (EPerson[]) request.getAttribute("epeople"); + int sortBy = ((Integer)request.getAttribute("sortby" )).intValue(); + int first = ((Integer)request.getAttribute("first")).intValue(); + + // Make sure we won't run over end of list + int last = first + PAGESIZE; + if (last >= epeople.length) last = epeople.length - 1; + + // Index of first eperson on last page + int jumpEnd = ((epeople.length - 1) / PAGESIZE) * PAGESIZE; + + // Now work out values for next/prev page buttons + int jumpFiveBack = first - PAGESIZE * 5; + if (jumpFiveBack < 0) jumpFiveBack = 0; + + int jumpOneBack = first - PAGESIZE; + if (jumpOneBack < 0) jumpOneBack = 0; + + int jumpOneForward = first + PAGESIZE; + if (jumpOneForward > epeople.length) jumpOneForward = first; + + int jumpFiveForward = first + PAGESIZE * 5; + if (jumpFiveForward > epeople.length) jumpFiveForward = jumpEnd; + + // What's the link? + String sortByParam = "lastname"; + if (sortBy == EPerson.EMAIL) sortByParam = "email"; + if (sortBy == EPerson.ID) sortByParam = "id"; + + String jumpLink = request.getContextPath() + "/dspace-admin/eperson-list?sortby=" + sortByParam + "&first="; + String sortLink = request.getContextPath() + "/dspace-admin/eperson-list?first=" + first + "&sortby="; +%> + + + + + Select E-people + + + + + + + + +

E-people <%= first + 1 %>-<%= last + 1 %> of <%= epeople.length %>

+ +<%-- Controls for jumping around list--%> +
+ + + + + + + + +
First< 5 Pages< 1 Page1 Page >5 Pages >Last
+ + <%-- Will never actually be posted, it's just so buttons will appear --%> + + + + + + + + + + +<% + String row = "even"; + for (int i = first; i <= last; i++) + { + EPerson e = epeople[i]; + // Make sure no quotes in full name will mess up our Javascript + String fullname = e.getFullName().replace('\'', ' '); +%> + + + + + + + +<% + row = (row.equals("odd") ? "even" : "odd"); + } +%> +
 <%= sortBy == EPerson.ID ? "ID ↑" : "ID" %><%= sortBy == EPerson.EMAIL ? "E-mail ↑" : "E-mail" %><%= sortBy == EPerson.LASTNAME ? "Last Name ↑" : "Last Name" %>First Name
<%= e.getID() %><%= e.getEmail() %> + <%= (e.getLastName() == null ? "" : e.getLastName()) %> + + <%= (e.getFirstName() == null ? "" : e.getFirstName()) %> +
+ +<%-- Controls for jumping around list--%> + + + + + + + + + +
First< 5 Pages< 1 Page1 Page >5 Pages >Last
+ +

+ +
+ + + diff --git a/dspace/jsp/dspace-admin/wizard-basicinfo.jsp b/dspace/jsp/dspace-admin/wizard-basicinfo.jsp new file mode 100644 index 0000000000..b730105b91 --- /dev/null +++ b/dspace/jsp/dspace-admin/wizard-basicinfo.jsp @@ -0,0 +1,178 @@ +<%-- + - wizard-questions.jsp + - + - Version: $Revision$ + - + - Date: $Date$ + - + - Copyright (c) 2002, Hewlett-Packard Company and Massachusetts + - Institute of Technology. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions are + - met: + - + - - Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - + - - Redistributions in binary form must reproduce the above copyright + - notice, this list of conditions and the following disclaimer in the + - documentation and/or other materials provided with the distribution. + - + - - Neither the name of the Hewlett-Packard Company nor the name of the + - Massachusetts Institute of Technology nor the names of their + - contributors may be used to endorse or promote products derived from + - this software without specific prior written permission. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + - HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + - INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + - BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + - OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + - TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + - USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + - DAMAGE. + --%> + +<%-- + - basic info for collection creation wizard + - + - attributes: + - collection - collection we're creating + --%> + +<%@ page import="org.dspace.app.webui.servlet.admin.CollectionWizardServlet" %> +<%@ page import="org.dspace.content.Collection" %> + +<%@ page contentType="text/html;charset=UTF-8" %> + +<%@ taglib uri="http://www.dspace.org/dspace-tags.tld" prefix="dspace" %> + +<% Collection collection = (Collection) request.getAttribute("collection"); %> + + + +

Describe the Collection

+ +
+ + + + + + +<%-- Hints about table width --%> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Name:

   
+ Shown in list on community home page +

Short Description:

 
+ HTML, shown in center of collection home page. Be sure to enclose in <P> </P> tags! +

Introductory text:

 
+ Plain text, shown at bottom of collection home page +

Copyright text:

 
+ HTML, shown on right-hand side of collection home page. Be sure to enclose in <P> </P> tags! +

Side bar text:

 
+ License that submitters must grant. Leave this blank to use the default license. +

License:

 
+ Plain text, any provenance information about this collection. Not shown on collection pages. +

Provenance:

 
+ Choose a JPEG or GIF logo for the collection home page. Should be quite small. +

Logo:

+ +

 

+ +<%-- Hidden fields needed for servlet to know which collection and page to deal with --%> + > + > + +
+ + + + + +
+   + + +
+
+
+ +
diff --git a/dspace/jsp/dspace-admin/wizard-permissions.jsp b/dspace/jsp/dspace-admin/wizard-permissions.jsp new file mode 100644 index 0000000000..bd907376d8 --- /dev/null +++ b/dspace/jsp/dspace-admin/wizard-permissions.jsp @@ -0,0 +1,188 @@ +<%-- + - wizard-permissions.jsp + - + - Version: $Revision$ + - + - Date: $Date$ + - + - Copyright (c) 2002, Hewlett-Packard Company and Massachusetts + - Institute of Technology. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions are + - met: + - + - - Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - + - - Redistributions in binary form must reproduce the above copyright + - notice, this list of conditions and the following disclaimer in the + - documentation and/or other materials provided with the distribution. + - + - - Neither the name of the Hewlett-Packard Company nor the name of the + - Massachusetts Institute of Technology nor the names of their + - contributors may be used to endorse or promote products derived from + - this software without specific prior written permission. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + - HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + - INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + - BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + - OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + - TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + - USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + - DAMAGE. + --%> + +<%-- + - set up a group with particular permissions + - + - attributes: + - collection - collection we're creating + - permission - one of the constants starting PERM_ at the top of + - org.dspace.app.webui.servlet.admin.CollectionWizardServlet + --%> + +<%@ page import="org.dspace.app.webui.servlet.admin.CollectionWizardServlet" %> +<%@ page import="org.dspace.content.Collection" %> + +<%@ page contentType="text/html;charset=UTF-8" %> + +<%@ taglib uri="http://www.dspace.org/dspace-tags.tld" prefix="dspace" %> + +<% + Collection collection = (Collection) request.getAttribute("collection"); + int perm = ((Integer) request.getAttribute("permission")).intValue(); + boolean mitGroup = (request.getAttribute("mitgroup") != null); +%> + + + +<% + switch (perm) + { + case CollectionWizardServlet.PERM_READ: +%> +

Authorization to Read

+ +

Who has (by default) permission to read new items submitted to this collection?

+<% + break; + + case CollectionWizardServlet.PERM_SUBMIT: +%> +

Authorization to Submit

+ +

Who has permission to submit new items to this collection?

+<% + break; + + case CollectionWizardServlet.PERM_WF1: +%> +

Workflow Reviewers

+ +

Who are the workflow reviews for this collection? They be able to accept or reject +incoming submissions. They will not be able to edit item metadata, however.

+<% + break; + + case CollectionWizardServlet.PERM_WF2: +%> +

Workflow Approvers

+ +

Who are the workflow approvers for this collection? They be able to accept or reject +incoming submissions, and edit item metadata.

+<% + break; + + case CollectionWizardServlet.PERM_WF3: +%> +

Workflow Metadata Editors

+ +

Who are the workflow metadata editors for this collection? They be able to edit item metadata of +incoming submissions, but will not be able to reject them.

+<% + break; + } +%> + +

You can change this later using the relevant sections of the DSpace admin UI.

+ +
+ +
+ +<% + // MIT group checkbox - only if there's an MIT group and on the READ and SUBMIT pages + // (Sorry, everyone who isn't running DSpace at MIT, I know this isn't very elegant!) + + if (mitGroup && + (perm == CollectionWizardServlet.PERM_READ || perm == CollectionWizardServlet.PERM_SUBMIT)) + { +%> + + + + + + + + + + + + + +<% + } +%> + +<%-- width=40% centres table nicely --%> + + + + + + + + + + + + + +
 All MIT users +
 
OR
 
+ Click on the 'Add E-people' button to start adding to the list.
+ +
+ + +
+
+ +<%-- Hidden fields needed for servlet to know which collection and page to deal with --%> + > + > + > + +
+ + + + + +
+   + + +
+
+
+ +
diff --git a/dspace/jsp/dspace-admin/wizard-questions.jsp b/dspace/jsp/dspace-admin/wizard-questions.jsp new file mode 100644 index 0000000000..69286f97c1 --- /dev/null +++ b/dspace/jsp/dspace-admin/wizard-questions.jsp @@ -0,0 +1,142 @@ +<%-- + - wizard-questions.jsp + - + - Version: $Revision$ + - + - Date: $Date$ + - + - Copyright (c) 2002, Hewlett-Packard Company and Massachusetts + - Institute of Technology. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions are + - met: + - + - - Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - + - - Redistributions in binary form must reproduce the above copyright + - notice, this list of conditions and the following disclaimer in the + - documentation and/or other materials provided with the distribution. + - + - - Neither the name of the Hewlett-Packard Company nor the name of the + - Massachusetts Institute of Technology nor the names of their + - contributors may be used to endorse or promote products derived from + - this software without specific prior written permission. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + - HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + - INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + - BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + - OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + - TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + - USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + - DAMAGE. + --%> + +<%-- + - initial questions page for collection creation wizard + - + - attributes: + - collection - collection we're creating + --%> + +<%@ page import="org.dspace.app.webui.servlet.admin.CollectionWizardServlet" %> +<%@ page import="org.dspace.content.Collection" %> + +<%@ page contentType="text/html;charset=UTF-8" %> + +<%@ taglib uri="http://www.dspace.org/dspace-tags.tld" prefix="dspace" %> + +<% Collection collection = (Collection) request.getAttribute("collection"); %> + + + +

Describe the Collection

+ +
+ +

Please check the boxes next to the statements that apply to the collection.

+ +
+ + + + + + + + + + + + + + + + +
+ + + + + +
New items should be publicly readable
+
+ + + + + +
Some users will be able to submit to this collection
+
+ + + + + +
This collection will have reviewers
+
+ + + + + +
This collection will have approvers
+
+ + + + + +
This collection will have metadata editors
+
+
+ +

 

+ +<%-- Hidden fields needed for servlet to know which collection and page to deal with --%> + > + > + +
+ + + + + +
+   + + +
+
+
+ +
+ + \ No newline at end of file diff --git a/dspace/jsp/layout/header-default.jsp b/dspace/jsp/layout/header-default.jsp index b36ffbc3bc..d1c9fffb78 100644 --- a/dspace/jsp/layout/header-default.jsp +++ b/dspace/jsp/layout/header-default.jsp @@ -63,6 +63,63 @@ + <%-- HACK: leftmargin, topmargin: for non-CSS compliant Microsoft IE browser --%> diff --git a/dspace/src/org/dspace/app/webui/servlet/admin/CollectionWizardServlet.java b/dspace/src/org/dspace/app/webui/servlet/admin/CollectionWizardServlet.java new file mode 100644 index 0000000000..6ca253f208 --- /dev/null +++ b/dspace/src/org/dspace/app/webui/servlet/admin/CollectionWizardServlet.java @@ -0,0 +1,578 @@ +/* + * EditItemServlet.java + * + * Version: $Revision$ + * + * Date: $Date$ + * + * Copyright (c) 2002, Hewlett-Packard Company and Massachusetts + * Institute of Technology. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of the Hewlett-Packard Company nor the name of the + * Massachusetts Institute of Technology nor the names of their + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ + +package org.dspace.app.webui.servlet.admin; + +import java.io.BufferedInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.InputStream; +import java.io.IOException; +import java.sql.SQLException; +import java.util.Collections; +import java.util.Enumeration; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.StringTokenizer; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.log4j.Logger; + +import org.dspace.administer.DCType; +import org.dspace.app.webui.servlet.DSpaceServlet; +import org.dspace.app.webui.util.FileUploadRequest; +import org.dspace.app.webui.util.JSPManager; +import org.dspace.app.webui.util.UIUtil; +import org.dspace.authorize.AuthorizeException; +import org.dspace.authorize.AuthorizeManager; +import org.dspace.content.Bitstream; +import org.dspace.content.BitstreamFormat; +import org.dspace.content.Bundle; +import org.dspace.content.Community; +import org.dspace.content.Collection; +import org.dspace.content.FormatIdentifier; +import org.dspace.content.Item; +import org.dspace.content.DSpaceObject; +import org.dspace.core.ConfigurationManager; +import org.dspace.core.Constants; +import org.dspace.core.Context; +import org.dspace.core.LogManager; +import org.dspace.eperson.EPerson; +import org.dspace.eperson.Group; +import org.dspace.handle.HandleManager; + +/** + * Collection creation wizard UI + * + * @author Robert Tansley + * @version $Revision$ + */ +public class CollectionWizardServlet extends DSpaceServlet +{ + /** Initial questions page */ + public final static int INITIAL_QUESTIONS = 1; + + /** Basic information page */ + public final static int BASIC_INFO = 2; + + /** Permissions pages */ + public final static int PERMISSIONS = 3; + + /** Default item page */ + public final static int DEFAULT_ITEM = 4; + + /** Summary page */ + public final static int SUMMARY = 5; + + /** Permissions page for who gets read permissions on new items */ + public final static int PERM_READ = 10; + + /** Permissions page for submitters */ + public final static int PERM_SUBMIT = 11; + + /** Permissions page for workflow step 1 */ + public final static int PERM_WF1 = 12; + + /** Permissions page for workflow step 2 */ + public final static int PERM_WF2 = 13; + + /** Permissions page for workflow step 3 */ + public final static int PERM_WF3 = 14; + + /** Logger */ + private static Logger log = Logger.getLogger(CollectionWizardServlet.class); + + + protected void doDSPost(Context context, + HttpServletRequest request, + HttpServletResponse response) + throws ServletException, IOException, SQLException, AuthorizeException + { + /* + * For POST, we expect from the form: + * + * community_id DB ID if it was a 'create a new collection' + * button press + * + * OR + * + * collection_id DB ID of collection we're dealing with + * stage Stage we're at (from constants above) + */ + + // First, see if we have a multipart request + // (the 'basic info' page which might include uploading a logo) + String contentType = request.getContentType(); + + if (contentType != null && + contentType.indexOf("multipart/form-data") != -1) + { + // This is a multipart request, so it's a file upload + processBasicInfo(context, request, response); + return; + } + + int communityID = UIUtil.getIntParameter(request, "community_id"); + + if (communityID > -1) + { + // We have a community ID, "create new collection" button pressed + Community c = Community.find(context, communityID); + + if (c == null) + { + log.warn(LogManager.getHeader(context, + "integrity_error", + UIUtil.getRequestLogInfo(request))); + JSPManager.showIntegrityError(request, response); + return; + } + + // Create the collection + Collection newCollection = c.createCollection(); + Group g = newCollection.createSubmitters(); + request.setAttribute("collection", newCollection); + JSPManager.showJSP(request, response, "/dspace-admin/wizard-questions.jsp"); + context.complete(); + } + else + { + // Collection already created, dealing with one of the wizard pages + int collectionID = UIUtil.getIntParameter(request, "collection_id"); + int stage = UIUtil.getIntParameter(request, "stage"); + + // Get the collection + Collection collection = Collection.find(context, collectionID); + + // Put it in request attributes, as most JSPs will need it + request.setAttribute("collection", collection); + + if (collection == null) + { + log.warn(LogManager.getHeader(context, + "integrity_error", + UIUtil.getRequestLogInfo(request))); + JSPManager.showIntegrityError(request, response); + return; + } + + // All pages will need this attribute + request.setAttribute("collection.id", String.valueOf(collection.getID())); + + switch (stage) + { + case INITIAL_QUESTIONS: + processInitialQuestions(context, request, response, collection); + break; + + case PERMISSIONS: + processPermissions(context, request, response, collection); + break; + + case DEFAULT_ITEM: + //processDefaultItem(context, request, response, collection); + break; + + default: + log.warn(LogManager.getHeader(context, + "integrity_error", + UIUtil.getRequestLogInfo(request))); + JSPManager.showIntegrityError(request, response); + } + } + } + + /** + * Process input from initial questions page + * + * @param context DSpace context + * @param request HTTP request + * @param response HTTP response + * @param collection Collection we're editing + */ + private void processInitialQuestions(Context context, + HttpServletRequest request, + HttpServletResponse response, + Collection collection) + throws SQLException, ServletException, IOException, AuthorizeException + { + Group anonymousGroup = Group.find(context, 0); + + // "Public read" checkbox. Only need to do anything + // if it's not checked. + if (!UIUtil.getBoolParameter(request, "public_read")) + { + // Remove anonymous default policies for new items + AuthorizeManager.removePoliciesActionFilter( + context, collection, Constants.DEFAULT_ITEM_READ); + AuthorizeManager.removePoliciesActionFilter( + context, collection, Constants.DEFAULT_BITSTREAM_READ); + } + + // Some people authorised to submit + if (UIUtil.getBoolParameter(request, "submitters")) + { + // Create submitters group + Group g = collection.createSubmitters(); + + // Give them ADD permission + AuthorizeManager.addPolicy(context, collection, Constants.ADD, g); + } + + // Check for the workflow steps + for (int i = 1; i <= 3; i++) + { + if (UIUtil.getBoolParameter(request, "workflow" + i)) + { + // should have workflow step i + Group g = collection.createWorkflowGroup(i); + + // FIXME: Might need to do some authorisation stuff? + } + } + + // Default item stuff? + if (UIUtil.getBoolParameter(request, "default.item")) + { + collection.createTemplateItem(); + } + + // Need to set a name so that the indexer won't throw an exception + collection.setMetadata("name", ""); + collection.update(); + + // Now display "basic info" screen + JSPManager.showJSP(request, response, "/dspace-admin/wizard-basicinfo.jsp"); + context.complete(); + } + + + /** + * Process input from one of the permissions pages + * + * @param context DSpace context + * @param request HTTP request + * @param response HTTP response + * @param collection Collection we're editing + */ + private void processPermissions(Context context, + HttpServletRequest request, + HttpServletResponse response, + Collection collection) + throws SQLException, ServletException, IOException, AuthorizeException + { + // Which permission are we dealing with? + int permission = UIUtil.getIntParameter(request, "permission"); + + // First, we deal with the special case of the MIT group... + if (UIUtil.getBoolParameter(request, "mitgroup")) + { + Group mitGroup = Group.findByName(context, "MIT Users"); + int action; + + if (permission == PERM_READ) + { + AuthorizeManager.addPolicy(context, collection, Constants.READ, mitGroup); + } + else + { + // Must be submit + AuthorizeManager.addPolicy(context, collection, Constants.ADD, mitGroup); + } + } + + //We need to add the selected people to the group. + // First, get the relevant group + Group g = null; + + switch (permission) + { + case PERM_READ: + // Actually need to create a group for this. + g = Group.create(context); + // Name it according to our conventions + g.setName("COLLECTION_" + collection.getID() + "_READ"); + // Give it the needed permission + AuthorizeManager.addPolicy(context, collection, Constants.READ, g); + break; + + case PERM_SUBMIT: + g = collection.getSubmitters(); + break; + + case PERM_WF1: + g = collection.getWorkflowGroup(1); + break; + + case PERM_WF2: + g = collection.getWorkflowGroup(2); + break; + + case PERM_WF3: + g = collection.getWorkflowGroup(3); + break; + } + + // Add people from the form to the group + int[] ids = UIUtil.getIntParameters(request, "epersonList"); + + if (ids != null) + { + for (int i = 0; i < ids.length; i++) + { + EPerson eperson = EPerson.find(context, ids[i]); + + if (eperson != null) + { + g.addMember(eperson); + } + } + } + + // Update group + g.update(); + + showNextPage(context, request, response, collection, permission); + + context.complete(); + } + + /** + * process input from basic info page + * + * @param context + * @param request + * @param response + * @param collection + * @throws SQLException + * @throws ServletException + * @throws IOException + * @throws AuthorizeException + */ + private void processBasicInfo(Context context, + HttpServletRequest request, + HttpServletResponse response) + throws SQLException, ServletException, IOException, AuthorizeException + { + // Wrap multipart request to get the submission info + FileUploadRequest wrapper = new FileUploadRequest(request); + + Collection collection = Collection.find(context, + UIUtil.getIntParameter(wrapper, "collection_id")); + + if (collection == null) + { + log.warn(LogManager.getHeader(context, + "integrity_error", + UIUtil.getRequestLogInfo(wrapper))); + JSPManager.showIntegrityError(request, response); + return; + } + + // Get metadata + collection.setMetadata("name", wrapper.getParameter("name")); + collection.setMetadata("short_description", + wrapper.getParameter("short_description")); + collection.setMetadata("introductory_text", + wrapper.getParameter("introductory_text")); + collection.setMetadata("copyright_text", + wrapper.getParameter("copyright_text")); + collection.setMetadata("side_bar_text", + wrapper.getParameter("side_bar_text")); + collection.setMetadata("provenance_description", + wrapper.getParameter("provenance_description")); + + // Need to be more careful about license -- make sure it's null if + // nothing was entered + String license = wrapper.getParameter("license"); + if (license != null) + { + collection.setLicense(null); + } + + File temp = wrapper.getFile("file"); + + if (temp != null) + { + // Read the temp file as logo + InputStream is = new BufferedInputStream(new FileInputStream( + temp)); + Bitstream logoBS = collection.setLogo(is); + + // Strip all but the last filename. It would be nice + // to know which OS the file came from. + String noPath = wrapper.getFilesystemName("file"); + while (noPath.indexOf('/') > -1) + { + noPath = noPath.substring( + noPath.indexOf('/') + 1); + } + while (noPath.indexOf('\\') > -1) + { + noPath = noPath.substring( + noPath.indexOf('\\') + 1); + } + + logoBS.setName(noPath); + logoBS.setSource(wrapper.getFilesystemName("file")); + + // Identify the format + BitstreamFormat bf = FormatIdentifier.guessFormat(context, logoBS); + logoBS.setFormat(bf); + logoBS.update(); + + // Remove temp file + temp.delete(); + } + + collection.update(); + + // Now work out what next page is + showNextPage(context, request, response, collection, BASIC_INFO); + + context.complete(); + } + + + /** + * Work out which page to show next, and show it + * + * @param context + * @param request + * @param response + * @param collection + * @param stage the stage the user just finished, or if PERMISSIONS, the + * particular permissions page + * @throws SQLException + * @throws ServletException + * @throws IOException + * @throws AuthorizeException + */ + private void showNextPage(Context context, + HttpServletRequest request, + HttpServletResponse response, + Collection collection, + int stage) + throws SQLException, ServletException, IOException, AuthorizeException + { + // Put collection in request attributes, as most JSPs will need it + request.setAttribute("collection", collection); + + // FIXME: Not a nice hack -- do we show the MIT users checkbox? + if (Group.findByName(context, "MIT Users") != null) + { + request.setAttribute("mitgroup", new Boolean(true)); + } + + log.debug(LogManager.getHeader(context, "nextpage", "stage=" + stage)); + + switch(stage) + { + case BASIC_INFO: + // Next page is 'permission to read' page iff ITEM_DEFAULT_READ + // for anonymous group is NOT there + List anonReadPols = AuthorizeManager.getPoliciesActionFilter( + context, collection, Constants.DEFAULT_ITEM_READ); + // At this stage, if there's any ITEM_DEFAULT_READ, it can only + // be an anonymous one. + if (anonReadPols.size() == 0) + { + request.setAttribute("permission", new Integer(PERM_READ)); + JSPManager.showJSP(request, response, "/dspace-admin/wizard-permissions.jsp"); + break; + } + + case PERM_READ: + // Next page is 'permission to submit' iff there's a submit group defined + if (collection.getSubmitters() != null) + { + request.setAttribute("permission", new Integer(PERM_SUBMIT)); + JSPManager.showJSP(request, response, "/dspace-admin/wizard-permissions.jsp"); + break; + } + + + case PERM_SUBMIT: + // Next page is 'workflow step 1' iff there's a wf step 1 group defined + if (collection.getWorkflowGroup(1) != null) + { + request.setAttribute("permission", new Integer(PERM_WF1)); + JSPManager.showJSP(request, response, "/dspace-admin/wizard-permissions.jsp"); + break; + } + + case PERM_WF1: + // Next page is 'workflow step 2' iff there's a wf step 2 group defined + if (collection.getWorkflowGroup(2) != null) + { + request.setAttribute("permission", new Integer(PERM_WF2)); + JSPManager.showJSP(request, response, "/dspace-admin/wizard-permissions.jsp"); + break; + } + + case PERM_WF2: + // Next page is 'workflow step 3' iff there's a wf step 2 group defined + if (collection.getWorkflowGroup(3) != null) + { + request.setAttribute("permission", new Integer(PERM_WF3)); + JSPManager.showJSP(request, response, "/dspace-admin/wizard-permissions.jsp"); + break; + } + + case PERM_WF3: + // Next page is 'default item' iff there's a default item + if (collection.getTemplateItem() != null) + { + JSPManager.showJSP(request, response, "/dspace-admin/wizard-default-item.jsp"); + break; + } + + case DEFAULT_ITEM: + // Next page is 'summary page (the last page) + + JSPManager.showJSP(request, response, "/dspace-admin/edit-collection.jsp"); + break; + } + } +} diff --git a/dspace/src/org/dspace/app/webui/servlet/admin/EPersonListServlet.java b/dspace/src/org/dspace/app/webui/servlet/admin/EPersonListServlet.java new file mode 100644 index 0000000000..6244ab757d --- /dev/null +++ b/dspace/src/org/dspace/app/webui/servlet/admin/EPersonListServlet.java @@ -0,0 +1,101 @@ +/* + * EPeopleList.java + * + * Version: $Revision$ + * + * Date: $Date$ + * + * Copyright (c) 2002, Hewlett-Packard Company and Massachusetts + * Institute of Technology. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of the Hewlett-Packard Company nor the name of the + * Massachusetts Institute of Technology nor the names of their + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ + +package org.dspace.app.webui.servlet.admin; + +import java.io.IOException; +import java.sql.SQLException; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.log4j.Logger; + +import org.dspace.app.webui.servlet.DSpaceServlet; +import org.dspace.app.webui.util.JSPManager; +import org.dspace.app.webui.util.UIUtil; +import org.dspace.authorize.AuthorizeException; +import org.dspace.core.Context; +import org.dspace.core.LogManager; +import org.dspace.eperson.EPerson; + +/** + * Servlet browsing through e-people and selecting them + * + * @author Robert Tansley + * @version $Revision$ + */ +public class EPersonListServlet extends DSpaceServlet +{ + protected void doDSGet(Context context, + HttpServletRequest request, + HttpServletResponse response) + throws ServletException, IOException, SQLException, AuthorizeException + { + // What are we sorting by. Lastname is default + int sortBy = EPerson.LASTNAME; + + String sbParam = request.getParameter("sortby"); + + if (sbParam != null && sbParam.equals("lastname")) + { + sortBy = EPerson.LASTNAME; + } + else if (sbParam != null && sbParam.equals("email")) + { + sortBy = EPerson.EMAIL; + } + + // What's the index of the first eperson to show? Default is 0 + int first = UIUtil.getIntParameter(request, "first"); + if (first == -1) first = 0; + + // Retrieve the e-people in the specified order + EPerson[] epeople = EPerson.findAll(context, sortBy); + + // Set attributes for JSP + request.setAttribute("sortby", new Integer(sortBy)); + request.setAttribute("first", new Integer(first)); + request.setAttribute("epeople", epeople); + + JSPManager.showJSP(request, response, "/dspace-admin/eperson-list.jsp"); + } +}