diff --git a/dspace/jsp/submit/edit-metadata.jsp b/dspace/jsp/submit/edit-metadata.jsp
new file mode 100644
index 0000000000..9dd0f74871
--- /dev/null
+++ b/dspace/jsp/submit/edit-metadata.jsp
@@ -0,0 +1,868 @@
+<%--
+ - edit-metadata.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.
+ --%>
+
+<%--
+ - Edit metadata form
+ -
+ - Attributes to pass in to this page:
+ - submission.info - the SubmissionInfo object
+ - submission.inputs - the DCInputSet
+ - submission.page - the step in submission
+ --%>
+
+<%@ page contentType="text/html;charset=UTF-8" %>
+
+<%@ page import="java.util.HashMap" %>
+<%@ page import="java.util.Iterator" %>
+<%@ page import="java.util.List" %>
+<%@ page import="java.util.Map" %>
+<%@ page import="java.net.URLEncoder" %>
+<%@ page import="javax.servlet.ServletException" %>
+
+<%@ page import="org.dspace.app.webui.jsptag.PopupTag" %>
+<%@ page import="org.dspace.app.webui.util.DCInput" %>
+<%@ page import="org.dspace.app.webui.util.DCInputSet" %>
+<%@ page import="org.dspace.app.webui.servlet.SubmitServlet" %>
+<%@ page import="org.dspace.app.webui.util.JSPManager" %>
+<%@ page import="org.dspace.app.webui.util.SubmissionInfo" %>
+<%@ page import="org.dspace.app.webui.util.UIUtil" %>
+<%@ page import="org.dspace.content.DCDate" %>
+<%@ page import="org.dspace.content.DCLanguage" %>
+<%@ page import="org.dspace.content.DCPersonName" %>
+<%@ page import="org.dspace.content.DCSeriesNumber" %>
+<%@ page import="org.dspace.content.DCValue" %>
+<%@ page import="org.dspace.content.Item" %>
+
+<%@ taglib uri="http://www.dspace.org/dspace-tags.tld" prefix="dspace" %>
+
+<%!
+
+ void doPersonalName(javax.servlet.jsp.JspWriter out, Item item,
+ String fieldName, String element, String qualifier, boolean repeatable,
+ int fieldCountIncr, String label)
+ throws java.io.IOException
+ {
+
+ DCValue[] defaults = item.getDC(element, qualifier, Item.ANY);
+ int fieldCount = defaults.length + fieldCountIncr;
+ StringBuffer headers = new StringBuffer();
+ StringBuffer sb = new StringBuffer();
+ org.dspace.content.DCPersonName dpn;
+ StringBuffer name = new StringBuffer();
+ StringBuffer first = new StringBuffer();
+ StringBuffer last = new StringBuffer();
+
+ if (fieldCount == 0)
+ fieldCount = 1;
+
+ //Width hints used here to affect whole table
+ headers.append("
")
+ .append("
")
+ .append("Last name e.g. Smith
")
+ .append("
")
+ .append("First name(s) + \"Jr\" e.g. Donald Jr
")
+ .append("
")
+ .append("
");
+ out.write(headers.toString());
+
+
+ for (int i = 0; i < fieldCount; i++)
+ {
+ first.setLength(0);
+ first.append(fieldName).append("_first");
+ if (repeatable)
+ first.append('_').append(i);
+
+ last.setLength(0);
+ last.append(fieldName).append("_last");
+ if (repeatable)
+ last.append('_').append(i);
+
+ if (i == 0)
+ sb.append("
")
+ .append(label)
+ .append("
");
+ else
+ sb.append("
");
+
+ if (i < defaults.length)
+ dpn = new org.dspace.content.DCPersonName(defaults[i].value);
+ else
+ dpn = new org.dspace.content.DCPersonName();
+
+ sb.append("
\n
\n");
+
+ if (repeatable && i < defaults.length)
+ {
+ name.setLength(0);
+ name.append(dpn.getLastName())
+ .append(' ')
+ .append(dpn.getFirstNames());
+ // put a remove button next to filled in values
+ sb.append("
");
+ }
+ else if (repeatable && i == fieldCount - 1)
+ {
+ // put a 'more' button next to the last space
+ sb.append("
");
+ }
+ else
+ {
+ // put a blank if nothing else
+ sb.append("
");
+ }
+ }
+
+ out.write(sb.toString());
+ }
+
+ void doDate(javax.servlet.jsp.JspWriter out, Item item,
+ String fieldName, String element, String qualifier, boolean repeatable,
+ int fieldCountIncr, String label)
+ throws java.io.IOException
+ {
+
+ DCValue[] defaults = item.getDC(element, qualifier, Item.ANY);
+ int fieldCount = defaults.length + fieldCountIncr;
+ StringBuffer sb = new StringBuffer();
+ org.dspace.content.DCDate dateIssued;
+
+ if (fieldCount == 0)
+ fieldCount = 1;
+
+ for (int i = 0; i < fieldCount; i++)
+ {
+ if (i == 0)
+ sb.append("
")
+ .append(label)
+ .append("
");
+ else
+ sb.append("
");
+
+ if (i < defaults.length)
+ dateIssued = new org.dspace.content.DCDate(defaults[i].value);
+ else
+ dateIssued = new org.dspace.content.DCDate("");
+
+ sb.append("
\n");
+
+ if (repeatable && i < defaults.length)
+ {
+ // put a remove button next to filled in values
+ sb.append("
");
+ }
+ else if (repeatable && i == fieldCount - 1)
+ {
+ // put a 'more' button next to the last space
+ sb.append("
");
+ }
+ else
+ {
+ // put a blank if nothing else
+ sb.append("
");
+ }
+ }
+
+ out.write(sb.toString());
+ }
+
+ void doSeriesNumber(javax.servlet.jsp.JspWriter out, Item item,
+ String fieldName, String element, String qualifier, boolean repeatable,
+ int fieldCountIncr, String label)
+ throws java.io.IOException
+ {
+
+ DCValue[] defaults = item.getDC(element, qualifier, Item.ANY);
+ int fieldCount = defaults.length + fieldCountIncr;
+ StringBuffer sb = new StringBuffer();
+ org.dspace.content.DCSeriesNumber sn;
+
+ if (fieldCount == 0)
+ fieldCount = 1;
+
+ for (int i = 0; i < fieldCount; i++)
+ {
+ if (i == 0)
+ sb.append("
")
+ .append(label)
+ .append("
");
+ else
+ sb.append("
");
+
+ if (i < defaults.length)
+ sn = new org.dspace.content.DCSeriesNumber(defaults[i].value);
+ else
+ sn = new org.dspace.content.DCSeriesNumber();
+
+ sb.append("
\n
\n");
+
+ if (repeatable && i < defaults.length)
+ {
+ // put a remove button next to filled in values
+ sb.append("
");
+ }
+ else if (repeatable && i == fieldCount - 1)
+ {
+ // put a 'more' button next to the last space
+ sb.append("
");
+ }
+ else
+ {
+ // put a blank if nothing else
+ sb.append("
");
+ }
+ }
+
+ out.write(sb.toString());
+ }
+
+ void doTextArea(javax.servlet.jsp.JspWriter out, Item item,
+ String fieldName, String element, String qualifier, boolean repeatable,
+ int fieldCountIncr, String label)
+ throws java.io.IOException
+ {
+
+ DCValue[] defaults = item.getDC(element, qualifier, Item.ANY);
+ int fieldCount = defaults.length + fieldCountIncr;
+ StringBuffer sb = new StringBuffer();
+ String val;
+
+ if (fieldCount == 0)
+ fieldCount = 1;
+
+ for (int i = 0; i < fieldCount; i++)
+ {
+ if (i == 0)
+ sb.append("
")
+ .append(label)
+ .append("
");
+ else
+ sb.append("
");
+
+ if (i < defaults.length)
+ val = defaults[i].value;
+ else
+ val = "";
+
+ sb.append("
\n");
+
+ if (repeatable && i < defaults.length)
+ {
+ // put a remove button next to filled in values
+ sb.append("
");
+ }
+ else if (repeatable && i == fieldCount - 1)
+ {
+ // put a 'more' button next to the last space
+ sb.append("
");
+ }
+ else
+ {
+ // put a blank if nothing else
+ sb.append("
");
+ }
+ }
+
+ out.write(sb.toString());
+ }
+
+ void doOneBox(javax.servlet.jsp.JspWriter out, Item item,
+ String fieldName, String element, String qualifier, boolean repeatable,
+ int fieldCountIncr, String label)
+ throws java.io.IOException
+ {
+
+ DCValue[] defaults = item.getDC(element, qualifier, Item.ANY);
+ int fieldCount = defaults.length + fieldCountIncr;
+ StringBuffer sb = new StringBuffer();
+ String val;
+
+ if (fieldCount == 0)
+ fieldCount = 1;
+
+ for (int i = 0; i < fieldCount; i++)
+ {
+ if (i == 0)
+ sb.append("
")
+ .append(label)
+ .append("
");
+ else
+ sb.append("
");
+
+ if (i < defaults.length)
+ val = defaults[i].value;
+ else
+ val = "";
+
+ sb.append("
\n");
+
+ if (repeatable && i < defaults.length)
+ {
+ // put a remove button next to filled in values
+ sb.append("
");
+ }
+ else if (repeatable && i == fieldCount - 1)
+ {
+ // put a 'more' button next to the last space
+ sb.append("
");
+ }
+ else
+ {
+ // put a blank if nothing else
+ sb.append("
");
+ out.write(sb.toString());
+ }
+%>
+
+<%
+ SubmissionInfo si =
+ (SubmissionInfo) request.getAttribute("submission.info");
+
+ Item item = si.submission.getItem();
+
+ final int halfWidth = 23;
+ final int fullWidth = 50;
+ final int twothirdsWidth = 34;
+
+ DCInputSet inputSet =
+ (DCInputSet) request.getAttribute("submission.inputs");
+
+ Integer pageNumStr =
+ (Integer) request.getAttribute("submission.page");
+ int pageNum = pageNumStr.intValue();
+%>
+
+
+
+
+
+
diff --git a/dspace/jsp/submit/progressbar.jsp b/dspace/jsp/submit/progressbar.jsp
index ab64dd231d..449ce88c00 100644
--- a/dspace/jsp/submit/progressbar.jsp
+++ b/dspace/jsp/submit/progressbar.jsp
@@ -52,6 +52,8 @@
- It can also be "-1" - in this case, the progress bar
- is in "Workflow Item" mode - i.e. the "license" and
- "complete" stages aren't shown
+ - md_pages: The number of pages used for metadata input/edit.
+ - Configurable on a per-collection basis
--%>
<%@ page contentType="text/html;charset=UTF-8" %>
@@ -67,8 +69,7 @@
{
"select",
"describe",
- "describe",
- "describe",
+ "describe", // all metadata edit steps mapped to this string
"upload",
"verify",
"license",
@@ -81,8 +82,7 @@
{
"Select",
"Describe",
- "Describe",
- "Describe",
+ "Describe", // all metadata edit steps mapped to this string
"Upload",
"Verify",
"License",
@@ -92,7 +92,8 @@
int step = Integer.parseInt(request.getParameter("current_stage"));
int stageReached = Integer.parseInt(request.getParameter("stage_reached"));
-
+ int mdPages = Integer.parseInt(request.getParameter("md_pages"));
+
// Are we in workflow mode?
boolean workflowMode = false;
if (stageReached == -1)
@@ -101,34 +102,65 @@
stageReached = SubmitServlet.REVIEW_SUBMISSION;
}
%>
+
+<%!
+ int gap = SubmitServlet.EDIT_METADATA_2 - SubmitServlet.EDIT_METADATA_1;
+
+ String step2Name(int step, String[] names)
+ {
+ if (step < SubmitServlet.EDIT_METADATA_1)
+ {
+ return names[step];
+ }
+ if (step > SubmitServlet.EDIT_METADATA_2)
+ {
+ return names[step-gap];
+ }
+ // map all metadata steps to one
+ return names[SubmitServlet.EDIT_METADATA_1];
+ }
+%>
-<%
+<%
+ int lastMDStep = SubmitServlet.EDIT_METADATA_1 + mdPages - 1;
+ int idx = SubmitServlet.INITIAL_QUESTIONS; // don't show prior selection step
// Show previous (done by definition!) steps
- for (int i = 1; i < step; i++)
+ while( idx < step )
{
// Hack for skipping CC step if not enabled
- if (!CreativeCommons.isEnabled() && i==SubmitServlet.CC_LICENSE)
+ if (!CreativeCommons.isEnabled() && idx==SubmitServlet.CC_LICENSE)
{
- continue;
+ idx++;
+ continue;
}
+
// If the step has been done, and we're not on the final step,
// the user can jump back
if (step != SubmitServlet.SUBMISSION_COMPLETE)
{
%>
<%-- HACK: border=0 for non-CSS compliant Netscape 4.x --%>
-
+
<%
}
else
{
// User has reached final step, cannot jump back
%>
-
+
<%
}
+ // skip unused metadata edit steps
+ if (idx == lastMDStep)
+ {
+ idx = SubmitServlet.EDIT_METADATA_2 + 1;
+ }
+ else
+ {
+ idx++;
+ }
}
// Show current step, but only if it's not the select collection step,
@@ -136,37 +168,54 @@
if (step > 0)
{
%>
-
+
<%
}
// We only go up to the "verify" step if we're on a workflow item
int lastStep = (workflowMode ? SubmitServlet.REVIEW_SUBMISSION+1
- : stepNames.length);
+ : SubmitServlet.SUBMISSION_COMPLETE+1);
+
+ // skip unused metadata edit steps
+ if ( step == lastMDStep )
+ {
+ step = SubmitServlet.EDIT_METADATA_2;
+ }
// Show next steps (some of which may have been done)
- for (int i = step + 1; i < lastStep; i++)
+ idx = step + 1;
+ while( idx < lastStep)
{
// Hack for skipping CC step if not enabled
- if (!CreativeCommons.isEnabled() && i==SubmitServlet.CC_LICENSE)
+ if (!CreativeCommons.isEnabled() && idx==SubmitServlet.CC_LICENSE)
{
- continue;
+ idx++;
+ continue;
}
- if (i <= stageReached)
+ if (idx <= stageReached)
{
// Stage has been previously accessed, so user may jump to it
%>
<%-- HACK: border=0 for non-CSS compliant Netscape 4.x --%>
-
+
<%
}
else
{
// Stage hasn't been reached yet (can't be jumped to)
%>
-