Added support for customizable submission

git-svn-id: http://scm.dspace.org/svn/repo/trunk@1096 9c30dcfa-912a-0410-8fc2-9e0234be79fd
This commit is contained in:
Richard Rodgers
2005-02-07 22:01:03 +00:00
parent 6d5cf6d2c6
commit adef4e64d2
8 changed files with 1045 additions and 276 deletions

View File

@@ -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("<tr><td width=\"40%\">&nbsp;</td>")
.append("<td class=\"submitFormDateLabel\" width=\"5%\">")
.append("Last name<br>e.g. <strong>Smith</strong></td>")
.append("<td class=\"submitFormDateLabel\" width=\"5%\">")
.append("First name(s) + \"Jr\"<br> e.g. <strong>Donald Jr</strong></td>")
.append("<td width=\"40%\">&nbsp;</td>")
.append("</tr>");
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("<tr><td class=\"submitFormLabel\">")
.append(label)
.append("</td>");
else
sb.append("<tr><td>&nbsp;</td>");
if (i < defaults.length)
dpn = new org.dspace.content.DCPersonName(defaults[i].value);
else
dpn = new org.dspace.content.DCPersonName();
sb.append("<td><input type=text name=\"")
.append(last.toString())
.append("\" size=23 value=\"")
.append(dpn.getLastName())
.append("\"></td>\n<td><input type=text name=\"")
.append(first.toString())
.append("\" size=23 value=\"")
.append(dpn.getFirstNames()).append("\"></td>\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("<td><input type=submit name=\"submit_")
.append(fieldName)
.append("_remove_")
.append(i)
.append("\" value=\"Remove This Entry\"> </td></tr>");
}
else if (repeatable && i == fieldCount - 1)
{
// put a 'more' button next to the last space
sb.append("<td><input type=submit name=\"submit_")
.append(fieldName)
.append("_more\" value=\"Add More\"> </td></tr>");
}
else
{
// put a blank if nothing else
sb.append("<td>&nbsp;</td></tr>");
}
}
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("<tr><td class=\"submitFormLabel\">")
.append(label)
.append("</td>");
else
sb.append("<tr><td>&nbsp;</td>");
if (i < defaults.length)
dateIssued = new org.dspace.content.DCDate(defaults[i].value);
else
dateIssued = new org.dspace.content.DCDate("");
sb.append("<td colspan=2 nowrap class=\"submitFormDateLabel\">")
.append("Month:<select name=\"")
.append(fieldName)
.append("_month");
if (repeatable)
sb.append('_').append(i);
sb.append("\"><option value=\"-1\"")
.append((dateIssued.getMonth() == -1 ? " SELECTED" : ""))
.append(">(No month)</option>");
for (int j = 1; j < 13; j++)
{
sb.append("<option value=\"")
.append(j)
.append((dateIssued.getMonth() == j ? "\" SELECTED" : "\"" ))
.append(">")
.append(org.dspace.content.DCDate.getMonthName(j))
.append("</option>");
}
sb.append("</select>")
.append("Day:<input type=text name=\"")
.append(fieldName)
.append("_day");
if (repeatable)
sb.append("_").append(i);
sb.append("\" size=2 maxlength=2 value=\"")
.append((dateIssued.getDay() > 0 ?
String.valueOf(dateIssued.getDay()) : "" ))
.append("\">Year:<input type=text name=\"")
.append(fieldName)
.append("_year");
if (repeatable)
sb.append("_").append(i);
sb.append("\" size=4 maxlength=4 value=\"")
.append((dateIssued.getYear() > 0 ?
String.valueOf(dateIssued.getYear()) : "" ))
.append("\"></td>\n");
if (repeatable && i < defaults.length)
{
// put a remove button next to filled in values
sb.append("<td><input type=submit name=\"submit_")
.append(fieldName)
.append("_remove_")
.append(i)
.append("\" value=\"Remove This Entry\"> </td></tr>");
}
else if (repeatable && i == fieldCount - 1)
{
// put a 'more' button next to the last space
sb.append("<td><input type=submit name=\"submit_")
.append(fieldName)
.append("_more\" value=\"Add More\"> </td></tr>");
}
else
{
// put a blank if nothing else
sb.append("<td>&nbsp;</td></tr>");
}
}
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("<tr><td class=\"submitFormLabel\">")
.append(label)
.append("</td>");
else
sb.append("<tr><td>&nbsp;</td>");
if (i < defaults.length)
sn = new org.dspace.content.DCSeriesNumber(defaults[i].value);
else
sn = new org.dspace.content.DCSeriesNumber();
sb.append("<td><input type=text name=\"")
.append(fieldName)
.append("_series");
if (repeatable)
sb.append("_").append(i);
sb.append("\" size=23 value=\"")
.append(sn.getSeries())
.append("\"></td>\n<td><input type=text name=\"")
.append(fieldName)
.append("_number");
if (repeatable)
sb.append("_").append(i);
sb.append("\" size=23 value=\"")
.append(sn.getNumber())
.append("\"></td>\n");
if (repeatable && i < defaults.length)
{
// put a remove button next to filled in values
sb.append("<td><input type=submit name=\"submit_")
.append(fieldName)
.append("_remove_")
.append(i)
.append("\" value=\"Remove This Entry\"> </td></tr>");
}
else if (repeatable && i == fieldCount - 1)
{
// put a 'more' button next to the last space
sb.append("<td><input type=submit name=\"submit_")
.append(fieldName)
.append("_more\" value=\"Add More\"> </td></tr>");
}
else
{
// put a blank if nothing else
sb.append("<td>&nbsp;</td></tr>");
}
}
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("<tr><td class=\"submitFormLabel\">")
.append(label)
.append("</td>");
else
sb.append("<tr><td>&nbsp;</td>");
if (i < defaults.length)
val = defaults[i].value;
else
val = "";
sb.append("<td colspan=2><textarea name=\"")
.append(fieldName);
if (repeatable)
sb.append("_").append(i);
sb.append("\" rows=4 cols=45 wrap=soft>")
.append(val)
.append("</textarea></td>\n");
if (repeatable && i < defaults.length)
{
// put a remove button next to filled in values
sb.append("<td><input type=submit name=\"submit_")
.append(fieldName)
.append("_remove_")
.append(i)
.append("\" value=\"Remove This Entry\"> </td></tr>");
}
else if (repeatable && i == fieldCount - 1)
{
// put a 'more' button next to the last space
sb.append("<td><input type=submit name=\"submit_")
.append(fieldName)
.append("_more\" value=\"Add More\"> </td></tr>");
}
else
{
// put a blank if nothing else
sb.append("<td>&nbsp;</td></tr>");
}
}
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("<tr><td class=\"submitFormLabel\">")
.append(label)
.append("</td>");
else
sb.append("<tr><td>&nbsp;</td>");
if (i < defaults.length)
val = defaults[i].value;
else
val = "";
sb.append("<td colspan=2><input type=text name=\"")
.append(fieldName);
if (repeatable)
sb.append("_").append(i);
sb.append("\" size=50 value=\"")
.append(val)
.append("\"></td>\n");
if (repeatable && i < defaults.length)
{
// put a remove button next to filled in values
sb.append("<td><input type=submit name=\"submit_")
.append(fieldName)
.append("_remove_")
.append(i)
.append("\" value=\"Remove This Entry\"> </td></tr>");
}
else if (repeatable && i == fieldCount - 1)
{
// put a 'more' button next to the last space
sb.append("<td><input type=submit name=\"submit_")
.append(fieldName)
.append("_more\" value=\"Add More\"> </td></tr>");
}
else
{
// put a blank if nothing else
sb.append("<td>&nbsp;</td></tr>");
}
}
out.write(sb.toString());
}
void doTwoBox(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();
StringBuffer headers = new StringBuffer();
if (element.equals("relation") && qualifier.equals("ispartofseries"))
{
//Width hints used here to affect whole table
headers.append("<tr><td width=\"40%\">&nbsp;</td>")
.append("<td class=\"submitFormDateLabel\" width=\"5%\">")
.append("Series Name</td>")
.append("<td class=\"submitFormDateLabel\" width=\"5%\">")
.append("Report or Paper No.</td>")
.append("<td width=\"40%\">&nbsp;</td>")
.append("</tr>");
out.write(headers.toString());
}
if (fieldCount == 0)
fieldCount = 1;
for (int i = 0; i < fieldCount; i++)
{
if (i == 0)
sb.append("<tr><td class=\"submitFormLabel\">")
.append(label)
.append("</td>");
else
sb.append("<tr><td>&nbsp;</td>");
if (i < defaults.length)
sb.append("<td align=\"left\"><input type=text name=\"")
.append(fieldName)
.append("_").append(i)
.append("\" size=\"15\" value=\"")
.append(defaults[i].value)
.append("\">&nbsp;<input type=submit name=\"submit_")
.append(fieldName)
.append("_remove_")
.append(i)
.append("\" value=\"Remove\"></td>\n");
else
{
sb.append("<td align=\"left\"><input type=text name=\"")
.append(fieldName)
.append("_").append(i)
.append("\" size=\"15\"></td>\n");
}
i++;
if (i < defaults.length)
sb.append("<td align=\"left\"><input type=text name=\"")
.append(fieldName)
.append("_").append(i)
.append("\" size=\"15\" value=\"")
.append(defaults[i].value)
.append("\">&nbsp;<input type=submit name=\"submit_")
.append(fieldName)
.append("_remove_")
.append(i)
.append("\" value=\"Remove\"></td></tr>\n");
else
{
sb.append("<td align=\"left\"><input type=text name=\"")
.append(fieldName)
.append("_").append(i)
.append("\" size=\"15\">");
if (i+1 >= fieldCount)
{
sb.append("<td><input type=submit name=\"submit_")
.append(fieldName)
.append("_more\" value=\"Add More\"></td>\n");
}
else
{
sb.append("</td>");
}
sb.append("<td>&nbsp;</td></tr>");
}
}
out.write(sb.toString());
}
void doQualdropValue(javax.servlet.jsp.JspWriter out, Item item,
String fieldName, String element, boolean repeatable,
int fieldCountIncr, List qualMap, String label)
throws java.io.IOException
{
DCValue[] defaults = item.getDC(element, Item.ANY, Item.ANY);
int fieldCount = defaults.length + fieldCountIncr;
StringBuffer sb = new StringBuffer();
String q, v, currentQual, currentVal;
if (fieldCount == 0)
fieldCount = 1;
for (int j = 0; j < fieldCount; j++)
{
if (j < defaults.length)
{
currentQual = defaults[j].qualifier;
currentVal = defaults[j].value;
}
else
{
currentQual = "";
currentVal = "";
}
if (j == 0)
sb.append("<tr><td class=\"submitFormLabel\">")
.append(label)
.append("</td>");
else
sb.append("<tr><td>&nbsp;</td>");
// do the dropdown box
sb.append("<td colspan=2><select name=\"")
.append(fieldName)
.append("_qualifier");
if (repeatable)
sb.append("_").append(j);
sb.append("\">");
for (int i = 0; i < qualMap.size(); i+=2)
{
q = (String)qualMap.get(i);
v = (String)qualMap.get(i+1);
sb.append("<option")
.append((v.equals(currentQual) ? " SELECTED ": "" ))
.append(" VALUE=\"")
.append(v)
.append("\">")
.append(q)
.append("</option>");
}
// do the input box
sb.append("</select>&nbsp;<input type=text name=\"")
.append(fieldName)
.append("_value");
if (repeatable)
sb.append("_").append(j);
sb.append("\" size=34 value=\"")
.append(currentVal)
.append("\"></td>\n");
if (repeatable && j < defaults.length)
{
// put a remove button next to filled in values
sb.append("<td><input type=submit name=\"submit_")
.append(fieldName)
.append("_remove_")
.append(j)
.append("\" value=\"Remove This Entry\"> </td></tr>");
}
else if (repeatable && j == fieldCount - 1)
{
// put a 'more' button next to the last space
sb.append("<td><input type=submit name=\"submit_")
.append(fieldName)
.append("_more\" value=\"Add More\"> </td></tr>");
}
else
{
// put a blank if nothing else
sb.append("<td>&nbsp;</td></tr>");
}
}
out.write(sb.toString());
}
void doDropDown(javax.servlet.jsp.JspWriter out, Item item,
String fieldName, String element, String qualifier, boolean repeatable,
List valueList, String label)
throws java.io.IOException
{
DCValue[] defaults = item.getDC(element, qualifier, Item.ANY);
StringBuffer sb = new StringBuffer();
Iterator vals;
String display, value;
int j;
sb.append("<tr><td class=\"submitFormLabel\">")
.append(label)
.append("</td>");
sb.append("<td colspan=2>")
.append("<select name=\"")
.append(fieldName)
.append("\"");
if (repeatable)
sb.append(" size=6 multiple");
sb.append(">");
for (int i = 0; i < valueList.size(); i += 2)
{
display = (String)valueList.get(i);
value = (String)valueList.get(i+1);
for (j = 0; j < defaults.length; j++)
{
if (value.equals(defaults[j].value))
break;
}
sb.append("<option ")
.append(j < defaults.length ? " selected " : "")
.append("value=\"")
.append(value)
.append("\">")
.append(display)
.append("</option>");
}
sb.append("</select></td></tr>");
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();
%>
<dspace:layout locbar="off" navbar="off" title="Describe Your Item">
<form action="<%= request.getContextPath() %>/submit#<%= si.jumpToField%>" method=post>
<jsp:include page="/submit/progressbar.jsp">
<jsp:param name="current_stage" value="<%= pageNum %>"/>
<jsp:param name="stage_reached" value="<%= SubmitServlet.getStepReached(si) %>"/>
<jsp:param name="md_pages" value="<%= si.numMetadataPages %>"/>
</jsp:include>
<H1>Submit: Describe Your Item</H1>
<%
if (pageNum == SubmitServlet.EDIT_METADATA_1)
{
%>
<P>Please fill in the requested information about your submission below. In
most browsers, you can use the tab key to move the cursor to the next input
box or button, to save you having to use the mouse each time.
<dspace:popup page="/help/index.html#describe2">(More Help...)</dspace:popup></P>
<%
}
else
{
%>
<P>Please fill further information about your submission below.
<dspace:popup page="/help/index.html#describe3">(More Help...)</dspace:popup></P>
<%
}
%>
<%-- HACK: a <center> tag seems to be the only way to convince certain --%>
<%-- browsers to center the table. --%>
<center>
<table>
<%
int pageIdx = pageNum - SubmitServlet.EDIT_METADATA_1;
DCInput[] inputs = inputSet.getPageRows(pageIdx, si.submission.hasMultipleTitles(),
si.submission.isPublishedBefore() );
for (int z = 0; z < inputs.length; z++)
{
String dcElement = inputs[z].getElement();
String dcQualifier = inputs[z].getQualifier();
String fieldName;
int fieldCountIncr;
boolean repeatable;
if (dcQualifier != null && !dcQualifier.equals("*"))
fieldName = dcElement + '_' + dcQualifier;
else
fieldName = dcElement;
//if (inputs[z].isRequired()) {
// si.jumpToField = fieldName;
//}
StringBuffer sb;
if ((si.missingFields != null) && (si.missingFields.contains(new Integer(z))))
{
String req = inputs[z].getWarning();
int anchor = req.indexOf("</td>");
sb = new StringBuffer(req);
sb.insert(anchor, "<a name=\""+fieldName+"\"></a>");
}
else
{
sb = new StringBuffer(inputs[z].getHints());
}
out.write(sb.toString());
repeatable = inputs[z].getRepeatable();
fieldCountIncr = 0;
if (repeatable)
{
fieldCountIncr = 1;
if (si.moreBoxesFor != null && si.moreBoxesFor.equals(fieldName))
{
fieldCountIncr = 2;
}
}
String inputType = inputs[z].getInputType();
String label = inputs[z].getLabel();
if (inputType.equals("name"))
{
doPersonalName(out, item, fieldName, dcElement, dcQualifier,
repeatable, fieldCountIncr, label);
}
else if (inputType.equals("date"))
{
doDate(out, item, fieldName, dcElement, dcQualifier,
repeatable, fieldCountIncr, label);
}
else if (inputType.equals("series"))
{
doSeriesNumber(out, item, fieldName, dcElement, dcQualifier,
repeatable, fieldCountIncr, label);
}
else if (inputType.equals("qualdrop_value"))
{
doQualdropValue(out, item, fieldName, dcElement, repeatable,
fieldCountIncr, inputs[z].getPairs(), label);
}
else if (inputType.equals("textarea"))
{
doTextArea(out, item, fieldName, dcElement, dcQualifier,
repeatable, fieldCountIncr, label);
}
else if (inputType.equals("dropdown"))
{
doDropDown(out, item, fieldName, dcElement, dcQualifier,
repeatable, inputs[z].getPairs(), label);
}
else if (inputType.equals("twobox"))
{
doTwoBox(out, item, fieldName, dcElement, dcQualifier,
repeatable, fieldCountIncr, label);
}
else
{
doOneBox(out, item, fieldName, dcElement, dcQualifier,
repeatable, fieldCountIncr, label);
}
%>
<%-- HACK: Using this line to give the browser hints as to the widths of cells --%>
<tr>
<td width="40%">&nbsp;</td>
<td colspan=2 width=5%>&nbsp;</td>
<td width="40%">&nbsp;</td>
</tr>
<%
} // end of 'for rows'
%>
</table>
</center>
<%-- HACK: Need a space - is there a nicer way to do this than <BR> or a --%>
<%-- blank <P>? --%>
<P>&nbsp;</P>
<%-- Hidden fields needed for submit servlet to know which item to deal with --%>
<%= SubmitServlet.getSubmissionParameters(si) %>
<input type=hidden name="step" value="<%= pageNum %>">
<center>
<table border=0 width=80%>
<tr>
<td width="100%">&nbsp;</td>
<td>
<input type=submit name="submit_prev" value="&lt; Previous">
</td>
<td>
<input type=submit name="submit_next" value="Next &gt;">
</td>
<td>&nbsp;&nbsp;&nbsp;</td>
<td align=right>
<input type=submit name="submit_cancel" value="Cancel/Save">
</td>
</tr>
</table>
</center>
</form>
</dspace:layout>

View File

@@ -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];
}
%>
<center>
<table class=submitProgressTable border=0 cellspacing=0 cellpadding=0>
<tr>
<%
<%
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 --%>
<td><input class="submitProgressButton" border=0 type=image name="submit_jump_<%= i %>" src="<%= request.getContextPath() %>/image/submit/<%= imageNames[i] %>-done.gif" value=" <%= stepNames[i] %> (Done) - " alt=" <%= stepNames[i] %> (Done) - "></td>
<td><input class="submitProgressButton" border=0 type=image name="submit_jump_<%= idx %>" src="<%= request.getContextPath() %>/image/submit/<%= step2Name(idx,imageNames) %>-done.gif" value=" <%= step2Name(idx,stepNames) %> (Done) - " alt=" <%= step2Name(idx,stepNames) %> (Done) - "></td>
<%
}
else
{
// User has reached final step, cannot jump back
%>
<td><IMG SRC="<%= request.getContextPath() %>/image/submit/<%= imageNames[i] %>-done.gif" ALT=" <%= stepNames[i] %> (Done) - "></td>
<td><IMG SRC="<%= request.getContextPath() %>/image/submit/<%= step2Name(idx,imageNames) %>-done.gif" ALT=" <%= step2Name(idx,stepNames) %> (Done) - "></td>
<%
}
// 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)
{
%>
<td><IMG SRC="<%= request.getContextPath() %>/image/submit/<%= imageNames[step] %>-current.gif" ALT=" <%= stepNames[step] %> (Current) - "></td>
<td><IMG SRC="<%= request.getContextPath() %>/image/submit/<%= step2Name(step,imageNames) %>-current.gif" ALT=" <%= step2Name(step,stepNames) %> (Current) - "></td>
<%
}
// 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 --%>
<td><input class="submitProgressButton" border=0 type=image name="submit_jump_<%= i %>" src="<%= request.getContextPath() %>/image/submit/<%= imageNames[i] %>-done.gif" value=" <%= stepNames[i] %> (Done) - " alt=" <%= stepNames[i] %> (Done) - "></td>
<td><input class="submitProgressButton" border=0 type=image name="submit_jump_<%= idx %>" src="<%= request.getContextPath() %>/image/submit/<%= step2Name(idx,imageNames) %>-done.gif" value=" <%= step2Name(idx,stepNames) %> (Done) - " alt=" <%= step2Name(idx,stepNames) %> (Done) - "></td>
<%
}
else
{
// Stage hasn't been reached yet (can't be jumped to)
%>
<td><IMG SRC="<%= request.getContextPath() %>/image/submit/<%= imageNames[i] %>-notdone.gif" ALT=" <%= stepNames[i] %> (Not Done) - "></td>
<td><IMG SRC="<%= request.getContextPath() %>/image/submit/<%= step2Name(idx,imageNames) %>-notdone.gif" ALT=" <%= step2Name(idx,stepNames) %> (Not Done) - "></td>
<%
}
// skip unused metadata edit steps
if (idx == lastMDStep)
{
idx = SubmitServlet.EDIT_METADATA_2 + 1;
}
else
{
idx++;
}
}
%>
</tr>

View File

@@ -43,15 +43,19 @@
-
- Attributes to pass in to this page:
- submission.info - the SubmissionInfo object
- submission.inputs - the DCInputSet object
--%>
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ page import="java.util.HashMap" %>
<%@ page import="java.util.Map" %>
<%@ page import="java.io.IOException" %>
<%@ page import="org.dspace.app.webui.servlet.SubmitServlet" %>
<%@ page import="org.dspace.app.webui.util.SubmissionInfo" %>
<%@ page import="org.dspace.content.InProgressSubmission" %>
<%@ page import="org.dspace.app.webui.util.UIUtil" %>
<%@ page import="org.dspace.app.webui.util.DCInputSet" %>
<%@ page import="org.dspace.app.webui.util.DCInput" %>
<%@ page import="org.dspace.content.Bitstream" %>
<%@ page import="org.dspace.content.BitstreamFormat" %>
<%@ page import="org.dspace.content.DCDate" %>
@@ -67,15 +71,90 @@
(SubmissionInfo) request.getAttribute("submission.info");
Item item = si.submission.getItem();
DCInputSet inputSet =
(DCInputSet) request.getAttribute("submission.inputs");
%>
// Names of each identifier type
Map identifierQualNames = new HashMap();
identifierQualNames.put( "govdoc", "Gov't Doc #" );
identifierQualNames.put( "uri", "URI" );
identifierQualNames.put( "isbn", "ISBN" );
identifierQualNames.put( "issn", "ISSN" );
identifierQualNames.put( "ismn", "ISMN" );
identifierQualNames.put( "other", "Other" );
<%!
void layoutSection(HttpServletRequest request,
javax.servlet.jsp.JspWriter out,
DCInputSet inputSet,
SubmissionInfo si,
Item item, int pageNum)
throws ServletException, IOException
{
InProgressSubmission ip = si.submission;
DCInput[] inputs = inputSet.getPageRows(pageNum,
ip.hasMultipleTitles(),
ip.isPublishedBefore());
for (int z = 0; z < inputs.length; z++)
{
String inputType = inputs[z].getInputType();
String pairsName = inputs[z].getPairsType();
String value;
DCValue[] values;
StringBuffer row = new StringBuffer();
row.append("<tr>");
row.append("<td class=metadataFieldLabel>");
row.append(inputs[z].getLabel());
row.append("</td>");
row.append("<td class=metadataFieldValue>");
if (inputType.equals("qualdrop_value"))
{
values = item.getDC(inputs[z].getElement(), Item.ANY, Item.ANY);
}
else
{
values = item.getDC(inputs[z].getElement(), inputs[z].getQualifier(), Item.ANY);
}
if (values.length == 0)
{
row.append("<em>None</em>").append("</td>").append("</tr>");
}
else
{
for (int i = 0; i < values.length; i++)
{
if (inputType.equals("date"))
{
DCDate date = new DCDate(values[i].value);
row.append(UIUtil.displayDate(date, false, true));
}
else if (inputType.equals("dropdown"))
{
String storedVal = values[i].value;
String displayVal = inputs[z].getDisplayString(pairsName,
storedVal);
row.append(Utils.addEntities(displayVal));
}
else if (inputType.equals("qualdrop_value"))
{
String qual = values[i].qualifier;
String displayQual = inputs[z].getDisplayString(pairsName,
qual);
String displayValue = Utils.addEntities(values[i].value);
if (displayQual != null)
{
row.append(displayQual + ":" + displayValue);
}
}
else
{
row.append(Utils.addEntities(values[i].value));
}
row.append("<br />");
}
}
row.append("</td>");
row.append("</tr>");
out.write(row.toString());
}
}
%>
<dspace:layout locbar="off" navbar="off" title="Verify Submission" nocache="true">
@@ -84,6 +163,7 @@
<jsp:include page="/submit/progressbar.jsp">
<jsp:param name="current_stage" value="<%= SubmitServlet.REVIEW_SUBMISSION %>"/>
<jsp:param name="stage_reached" value="<%= SubmitServlet.getStepReached(si) %>"/>
<jsp:param name="md_pages" value="<%= si.numMetadataPages %>"/>
</jsp:include>
<H1>Submit: Verify Submission</H1>
@@ -134,278 +214,44 @@
</tr>
<%-- ====================================================== --%>
<%-- DESCRIBE ITEM PAGE 1 ELEMENTS --%>
<%-- DESCRIBE ITEM ELEMENTS --%>
<%-- ====================================================== --%>
<%
for ( int i = 0; i < inputSet.getNumberPages(); i++ )
{
%>
<tr>
<td class="evenRowOddCol">
<table>
<tr>
<td width=100%>
<table>
<tr>
<td class=metadataFieldLabel>Authors:</td>
<td class=metadataFieldValue>
<%
DCValue[] authors = item.getDC("contributor", "author", Item.ANY);
if (authors.length == 0)
{
%>
<em>None</em>
<%
}
else
{
for (int i = 0; i < authors.length; i++)
{
%>
<%= Utils.addEntities(authors[i].value) %><br>
<%
}
}
%>
</td>
</tr>
<%
DCValue[] titles = item.getDC("title", null, Item.ANY);
String title = "<em>None</em>";
if (titles.length > 0)
{
title = titles[0].value;
}
%>
<tr>
<td class=metadataFieldLabel>Title:</td>
<td class=metadataFieldValue>
<%= Utils.addEntities(title) %>
</td>
</tr>
<%
if (si.submission.hasMultipleTitles())
{
DCValue[] altTitles = item.getDC("title", "alternative", Item.ANY);
%>
<tr>
<td class=metadataFieldLabel>Alternative Titles:</td>
<td class=metadataFieldValue>
<%
if (altTitles.length == 0)
{
%>
<em>None</em>
<%
}
else
{
for(int i = 0; i < altTitles.length ; i++)
{
%>
<%= Utils.addEntities(altTitles[i].value) %><br>
<%
}
}
%>
</td>
</tr>
<%
}
if (si.submission.isPublishedBefore())
{
DCValue[] dateIssued = item.getDC("date", "issued", Item.ANY);
<%
layoutSection(request, out, inputSet, si, item, i);
%>
<tr>
<td class=metadataFieldLabel>Date Issued:</td>
<td class=metadataFieldValue>
<%
if (dateIssued.length == 0)
{
%>
<em>None</em>
<%
}
else
{
%>
<dspace:date date="<%= new DCDate(dateIssued[0].value) %>" />
<%
}
%>
</td>
</tr>
<%
DCValue[] publisher = item.getDC("publisher", null, Item.ANY);
%>
<tr>
<td class=metadataFieldLabel>Publisher:</td>
<td class=metadataFieldValue>
<%
if (publisher.length == 0)
{
%>
<em>None</em>
<%
}
else
{
%>
<%= Utils.addEntities(publisher[0].value) %>
<%
}
%>
</td>
</tr>
<%
DCValue[] citation = item.getDC("identifier", "citation", Item.ANY);
%>
<tr>
<td class=metadataFieldLabel>Citation:</td>
<td class=metadataFieldValue>
<%
if (citation.length == 0)
{
%>
<em>None</em>
<%
}
else
{
%>
<%= Utils.addEntities(citation[0].value) %>
<%
}
%>
</td>
</tr>
<%
}
%>
<tr>
<td class=metadataFieldLabel>Series/Report&nbsp;No:</td>
<td class=metadataFieldValue>
<%
DCValue[] seriesNumbers = item.getDC("relation","ispartofseries", Item.ANY);
if (seriesNumbers.length == 0)
{
%>
<em>None</em>
<%
}
else
{
for (int i = 0; i < seriesNumbers.length ; i++)
{
%>
<%= Utils.addEntities(seriesNumbers[i].value) %><br>
<%
}
}
%>
</td>
</tr>
<tr>
<td class=metadataFieldLabel>Identifiers:</td>
<td class=metadataFieldValue>
<%
DCValue[] identifiers = item.getDC("identifier", Item.ANY, Item.ANY);
for (int i = 0; i < identifiers.length; i++)
{
// Skip citation, handled above
if (!identifiers[i].qualifier.equals("citation"))
{
%>
<%= identifierQualNames.get(identifiers[i].qualifier) %>: <%= Utils.addEntities(identifiers[i].value) %><br>
<%
}
}
%>
</td>
</tr>
<%
DCValue[] typeDC = item.getDC("type", null, Item.ANY);
String type = "<em>None</em>";
if (typeDC.length > 0)
{
type = typeDC[0].value;
}
%>
<tr>
<td class=metadataFieldLabel>Type:</td>
<td class=metadataFieldValue>
<%= type %>
</td>
</tr>
<%
DCValue[] langArray = item.getDC("language", "iso", null);
DCLanguage language = new DCLanguage("");
if (langArray.length > 0)
{
language = new DCLanguage(langArray[0].value);
}
%>
<tr>
<td class=metadataFieldLabel>Language:</td>
<td class=metadataFieldValue><%= language.getDisplayName() %></td>
</tr>
</table>
</td>
<td valign=middle>
<input type=submit name=submit_jump_<%= SubmitServlet.EDIT_METADATA_1 %> value="Correct one of these">
<input type=submit name=submit_jump_<%= SubmitServlet.EDIT_METADATA_1 + i %> value="Correct one of these">
</td>
</tr>
</table>
</td>
</tr>
<%
}
%>
<%-- ====================================================== --%>
<%-- DESCRIBE ITEM PAGE 2 ELEMENTS --%>
<%-- ====================================================== --%>
<%-- ======================================================
<tr>
<td class=oddRowOddCol>
<table>
<tr>
<td width=100%>
<table>
<tr>
<td class=metadataFieldLabel>Keywords:</td>
<td class=metadataFieldValue>
<%
DCValue[] keywords = item.getDC("subject", null, Item.ANY);
if (keywords.length == 0)
{
%>
<em>None</em>
<%
}
else
{
for (int i = 0; i < keywords.length; i++)
{
%>
<%= Utils.addEntities(keywords[i].value) %><br>
<%
}
}
DCValue[] abstr = item.getDC("description", "abstract", Item.ANY);
DCValue[] sponsors = item.getDC("description", "sponsorship", Item.ANY);
DCValue[] otherDesc = item.getDC("description", null, Item.ANY);
%>
</td>
</tr>
<tr>
<td class=metadataFieldLabel>Abstract:</td>
<td class=metadataFieldValue><%= (abstr.length == 0 ? "<em>None</em>" : Utils.addEntities(abstr[0].value)) %></td>
</tr>
<tr>
<td class=metadataFieldLabel>Sponsors:</td>
<td class=metadataFieldValue><%= (sponsors.length == 0 ? "<em>None</em>" : Utils.addEntities(sponsors[0].value)) %></td>
</tr>
<tr>
<td class=metadataFieldLabel>Other&nbsp;Description:</td>
<td class=metadataFieldValue><%= (otherDesc.length == 0 ? "<em>None</em>" : Utils.addEntities(otherDesc[0].value)) %></td>
</tr>
layoutSection(request, out, inputSet, si, item, 1);
</table>
</td>
<td valign=middle align=right>
@@ -415,6 +261,7 @@
</table>
</td>
</tr>
--%>
<%-- ====================================================== --%>
<%-- UPLOADED_FILES --%>
<%-- ====================================================== --%>

View File

@@ -62,6 +62,7 @@
<jsp:include page="/submit/progressbar.jsp">
<jsp:param name="current_stage" value="<%= SubmitServlet.SELECT_COLLECTION %>"/>
<jsp:param name="stage_reached" value="0"/>
<jsp:param name="md_pages" value="1"/>
</jsp:include>
<H1>Submit: Choose Collection</H1>

View File

@@ -67,6 +67,7 @@
<jsp:include page="/submit/progressbar.jsp">
<jsp:param name="current_stage" value="<%= SubmitServlet.GRANT_LICENSE %>"/>
<jsp:param name="stage_reached" value="<%= SubmitServlet.getStepReached(si) %>"/>
<jsp:param name="md_pages" value="<%= si.numMetadataPages %>"/>
</jsp:include>
<H1>Submit: Grant DSpace Distribution License</H1>

View File

@@ -80,6 +80,7 @@
<jsp:include page="/submit/progressbar.jsp">
<jsp:param name="current_stage" value="<%= SubmitServlet.UPLOAD_FILES %>"/>
<jsp:param name="stage_reached" value="<%= SubmitServlet.getStepReached(si) %>"/>
<jsp:param name="md_pages" value="<%= si.numMetadataPages %>"/>
</jsp:include>
<%

View File

@@ -67,6 +67,7 @@
<jsp:include page="/submit/progressbar.jsp">
<jsp:param name="current_stage" value="<%= SubmitServlet.UPLOAD_FILES %>"/>
<jsp:param name="stage_reached" value="<%= SubmitServlet.getStepReached(si) %>"/>
<jsp:param name="md_pages" value="<%= si.numMetadataPages %>"/>
</jsp:include>
<H1>Submit: Error Uploading File</H1>

View File

@@ -77,6 +77,7 @@
<jsp:include page="/submit/progressbar.jsp">
<jsp:param name="current_stage" value="<%= SubmitServlet.UPLOAD_FILES %>"/>
<jsp:param name="stage_reached" value="<%= SubmitServlet.getStepReached(si) %>"/>
<jsp:param name="md_pages" value="<%= si.numMetadataPages %>"/>
</jsp:include>
<H1>Submit: <%= (justUploaded ? "File Uploaded Successfully" : "Uploaded Files") %></H1>