mirror of
https://github.com/DSpace/DSpace.git
synced 2025-10-15 14:03:17 +00:00

git-svn-id: http://scm.dspace.org/svn/repo/trunk@1467 9c30dcfa-912a-0410-8fc2-9e0234be79fd
1031 lines
35 KiB
Plaintext
1031 lines
35 KiB
Plaintext
<%--
|
|
- 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.ArrayList" %>
|
|
<%@ 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" %>
|
|
|
|
<%@ page import="javax.servlet.jsp.jstl.fmt.LocaleSupport" %>
|
|
<%@ page import="javax.servlet.jsp.tagext.TagSupport" %>
|
|
<%@ page import="javax.servlet.jsp.PageContext" %>
|
|
|
|
<%@ page import="org.dspace.core.ConfigurationManager" %>
|
|
|
|
<%@ taglib uri="http://www.dspace.org/dspace-tags.tld" prefix="dspace" %>
|
|
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
|
|
|
|
<%!
|
|
// required by Controlled Vocabulary add-on
|
|
String contextPath;
|
|
|
|
// This method is resposible for showing a link next to an input box
|
|
// that pops up a window that to display a controlled vocabulary.
|
|
// It should be called from the doOneBox and doTwoBox methods.
|
|
// It must be extended to work with doTextArea.
|
|
String doControlledVocabulary(String fieldName, PageContext pageContext, String vocabulary)
|
|
{
|
|
String link = "";
|
|
boolean enabled = ConfigurationManager.getBooleanProperty("webui.controlledvocabulary.enable");
|
|
boolean useWithCurrentField = vocabulary != null && ! "".equals(vocabulary);
|
|
|
|
if (enabled && useWithCurrentField)
|
|
{
|
|
link = "<br/>" +
|
|
"<a href='javascript:void(null);' onclick='javascript:popUp(\"" +
|
|
contextPath + "/controlledvocabulary/controlledvocabulary.jsp?ID=" +
|
|
fieldName + "&vocabulary=" + vocabulary + "\")'>" +
|
|
"<span class='controlledVocabularyLink'>" +
|
|
LocaleSupport.getLocalizedMessage(pageContext, "jsp.submit.edit-metadata.controlledvocabulary") +
|
|
"</span>" +
|
|
"</a>";
|
|
}
|
|
return link;
|
|
|
|
}
|
|
|
|
boolean hasVocabulary(String vocabulary)
|
|
{
|
|
boolean enabled = ConfigurationManager.getBooleanProperty("webui.controlledvocabulary.enable");
|
|
boolean useWithCurrentField = vocabulary != null && !"".equals(vocabulary);
|
|
boolean has = false;
|
|
|
|
if (enabled && useWithCurrentField)
|
|
{
|
|
has = true;
|
|
}
|
|
return has;
|
|
}
|
|
|
|
|
|
void doPersonalName(javax.servlet.jsp.JspWriter out, Item item,
|
|
String fieldName, String schema, String element, String qualifier, boolean repeatable,
|
|
int fieldCountIncr, String label, PageContext pageContext)
|
|
throws java.io.IOException
|
|
{
|
|
|
|
DCValue[] defaults = item.getMetadata(schema, 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%\"> </td>")
|
|
.append("<td class=\"submitFormDateLabel\" width=\"5%\">")
|
|
// .append("Last name<br>e.g. <strong>Smith</strong></td>")
|
|
.append(LocaleSupport.getLocalizedMessage(pageContext, "jsp.submit.edit-metadata.lastname"))
|
|
.append("</td>")
|
|
.append("<td class=\"submitFormDateLabel\" width=\"5%\">")
|
|
// .append("First name(s) + \"Jr\"<br> e.g. <strong>Donald Jr</strong></td>")
|
|
.append(LocaleSupport.getLocalizedMessage(pageContext, "jsp.submit.edit-metadata.firstname"))
|
|
.append("</td>")
|
|
.append("<td width=\"40%\"> </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> </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().replaceAll("\"", """)) // Encode "
|
|
.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>")
|
|
.append("\" value=\"")
|
|
.append(LocaleSupport.getLocalizedMessage(pageContext, "jsp.submit.edit-metadata.button.remove"))
|
|
.append("\"/> </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>");
|
|
.append("_more\" value=\"")
|
|
.append(LocaleSupport.getLocalizedMessage(pageContext, "jsp.submit.edit-metadata.button.add"))
|
|
.append("\"/> </td></tr>");
|
|
}
|
|
else
|
|
{
|
|
// put a blank if nothing else
|
|
sb.append("<td> </td></tr>");
|
|
}
|
|
}
|
|
|
|
out.write(sb.toString());
|
|
}
|
|
|
|
void doDate(javax.servlet.jsp.JspWriter out, Item item,
|
|
String fieldName, String schema, String element, String qualifier, boolean repeatable,
|
|
int fieldCountIncr, String label, PageContext pageContext)
|
|
throws java.io.IOException
|
|
{
|
|
|
|
DCValue[] defaults = item.getMetadata(schema, 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> </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=\"nowrap\" class=\"submitFormDateLabel\">")
|
|
// .append("Month:<select name=\"")
|
|
.append(LocaleSupport.getLocalizedMessage(pageContext, "jsp.submit.edit-metadata.month"))
|
|
.append("<select name=\"")
|
|
.append(fieldName)
|
|
.append("_month");
|
|
if (repeatable)
|
|
sb.append('_').append(i);
|
|
sb.append("\"><option value=\"-1\"")
|
|
.append((dateIssued.getMonth() == -1 ? " selected=\"selected\"" : ""))
|
|
// .append(">(No month)</option>");
|
|
.append(">")
|
|
.append(LocaleSupport.getLocalizedMessage(pageContext, "jsp.submit.edit-metadata.no_month"))
|
|
.append("</option>");
|
|
|
|
for (int j = 1; j < 13; j++)
|
|
{
|
|
sb.append("<option value=\"")
|
|
.append(j)
|
|
.append((dateIssued.getMonth() == j ? "\" selected=\"selected\"" : "\"" ))
|
|
.append(">")
|
|
.append(org.dspace.content.DCDate.getMonthName(j))
|
|
.append("</option>");
|
|
}
|
|
|
|
sb.append("</select>")
|
|
// .append("Day:<input type=text name=\"")
|
|
.append(LocaleSupport.getLocalizedMessage(pageContext, "jsp.submit.edit-metadata.day"))
|
|
.append("<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("\"/>")
|
|
.append(LocaleSupport.getLocalizedMessage(pageContext, "jsp.submit.edit-metadata.year"))
|
|
.append("<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>");
|
|
.append("\" value=\"")
|
|
.append(LocaleSupport.getLocalizedMessage(pageContext, "jsp.submit.edit-metadata.button.remove"))
|
|
.append("\"> </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>");
|
|
.append("_more\" value=\"")
|
|
.append(LocaleSupport.getLocalizedMessage(pageContext, "jsp.submit.edit-metadata.button.add"))
|
|
.append("\"/> </td></tr>");
|
|
}
|
|
else
|
|
{
|
|
// put a blank if nothing else
|
|
sb.append("<td> </td></tr>");
|
|
}
|
|
}
|
|
|
|
out.write(sb.toString());
|
|
}
|
|
|
|
void doSeriesNumber(javax.servlet.jsp.JspWriter out, Item item,
|
|
String fieldName, String schema, String element, String qualifier, boolean repeatable,
|
|
int fieldCountIncr, String label, PageContext pageContext)
|
|
throws java.io.IOException
|
|
{
|
|
|
|
DCValue[] defaults = item.getMetadata(schema, 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> </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().replaceAll("\"", """))
|
|
.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().replaceAll("\"", """))
|
|
.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>");
|
|
.append("\" value=\"")
|
|
.append(LocaleSupport.getLocalizedMessage(pageContext, "jsp.submit.edit-metadata.button.remove"))
|
|
.append("\"/> </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>");
|
|
.append("_more\" value=\"")
|
|
.append(LocaleSupport.getLocalizedMessage(pageContext, "jsp.submit.edit-metadata.button.add"))
|
|
.append("\"/> </td></tr>");
|
|
}
|
|
else
|
|
{
|
|
// put a blank if nothing else
|
|
sb.append("<td> </td></tr>");
|
|
}
|
|
}
|
|
|
|
out.write(sb.toString());
|
|
}
|
|
|
|
void doTextArea(javax.servlet.jsp.JspWriter out, Item item,
|
|
String fieldName, String schema, String element, String qualifier, boolean repeatable,
|
|
int fieldCountIncr, String label, PageContext pageContext)
|
|
throws java.io.IOException
|
|
{
|
|
|
|
DCValue[] defaults = item.getMetadata(schema, 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> </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\" >")
|
|
.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>");
|
|
.append("\" value=\"")
|
|
.append(LocaleSupport.getLocalizedMessage(pageContext, "jsp.submit.edit-metadata.button.remove"))
|
|
.append("\"/> </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>");
|
|
.append("_more\" value=\"")
|
|
.append(LocaleSupport.getLocalizedMessage(pageContext, "jsp.submit.edit-metadata.button.add"))
|
|
.append("\"/> </td></tr>");
|
|
}
|
|
else
|
|
{
|
|
// put a blank if nothing else
|
|
sb.append("<td> </td></tr>");
|
|
}
|
|
}
|
|
|
|
out.write(sb.toString());
|
|
}
|
|
|
|
void doOneBox(javax.servlet.jsp.JspWriter out, Item item,
|
|
String fieldName, String schema, String element, String qualifier, boolean repeatable,
|
|
int fieldCountIncr, String label, PageContext pageContext, String vocabulary)
|
|
throws java.io.IOException
|
|
{
|
|
|
|
DCValue[] defaults = item.getMetadata(schema, 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> </td>");
|
|
|
|
if (i < defaults.length)
|
|
val = defaults[i].value.replaceAll("\"", """);
|
|
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("\"/>")
|
|
.append(doControlledVocabulary(fieldName, pageContext, vocabulary))
|
|
.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>");
|
|
.append("\" value=\"")
|
|
.append(LocaleSupport.getLocalizedMessage(pageContext, "jsp.submit.edit-metadata.button.remove"))
|
|
.append("\"/> </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>");
|
|
.append("_more\" value=\"")
|
|
.append(LocaleSupport.getLocalizedMessage(pageContext, "jsp.submit.edit-metadata.button.add"))
|
|
.append("\"/> </td></tr>");
|
|
}
|
|
else
|
|
{
|
|
// put a blank if nothing else
|
|
sb.append("<td> </td></tr>");
|
|
}
|
|
}
|
|
|
|
out.write(sb.toString());
|
|
}
|
|
|
|
void doTwoBox(javax.servlet.jsp.JspWriter out, Item item,
|
|
String fieldName, String schema, String element, String qualifier, boolean repeatable,
|
|
int fieldCountIncr, String label, PageContext pageContext, String vocabulary)
|
|
throws java.io.IOException
|
|
{
|
|
DCValue[] defaults = item.getMetadata(schema, 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%\"> </td>")
|
|
.append("<td class=\"submitFormDateLabel\" width=\"5%\">")
|
|
// .append("Series Name</td>")
|
|
.append(LocaleSupport.getLocalizedMessage(pageContext, "jsp.submit.edit-metadata.seriesname"))
|
|
.append("</td>")
|
|
.append("<td class=\"submitFormDateLabel\" width=\"5%\">")
|
|
// .append("Report or Paper No.</td>")
|
|
.append(LocaleSupport.getLocalizedMessage(pageContext, "jsp.submit.edit-metadata.paperno"))
|
|
.append("</td>")
|
|
.append("<td width=\"40%\"> </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> </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.replaceAll("\"", """))
|
|
.append("\"/> <input type=\"submit\" name=\"submit_")
|
|
.append(fieldName)
|
|
.append("_remove_")
|
|
.append(i)
|
|
// .append("\" value=\"Remove\"/></td>\n");
|
|
.append("\" value=\"")
|
|
.append(LocaleSupport.getLocalizedMessage(pageContext, "jsp.submit.edit-metadata.button.remove2"))
|
|
.append("\"/></td>\n");
|
|
else
|
|
{
|
|
sb.append("<td align=\"left\"><input type=\"text\" name=\"")
|
|
.append(fieldName).append("_").append(i)
|
|
.append("\" size=\"15\">")
|
|
.append(doControlledVocabulary(fieldName + "_" + i, pageContext, vocabulary))
|
|
.append("</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.replaceAll("\"", """))
|
|
.append("\"/> <input type=\"submit\" name=\"submit_")
|
|
.append(fieldName)
|
|
.append("_remove_")
|
|
.append(i)
|
|
// .append("\" value=\"Remove\"/></td></tr>\n");
|
|
.append("\" value=\"")
|
|
.append(LocaleSupport.getLocalizedMessage(pageContext, "jsp.submit.edit-metadata.button.remove2"))
|
|
.append("\"/></td></tr>\n");
|
|
else
|
|
{
|
|
sb.append("<td align=\"left\"><input type=\"text\" name=\"")
|
|
.append(fieldName)
|
|
.append("_").append(i)
|
|
//.append("\" size=\"15\"/></td>");
|
|
.append("\" size=\"15\">")
|
|
.append(doControlledVocabulary(fieldName + "_" + i, pageContext, vocabulary))
|
|
.append("</td>\n");
|
|
|
|
if (i+1 >= fieldCount)
|
|
{
|
|
sb.append("<td><input type=\"submit\" name=\"submit_")
|
|
.append(fieldName)
|
|
// .append("_more\" value=\"Add More\"/></td>\n");
|
|
.append("_more\" value=\"")
|
|
.append(LocaleSupport.getLocalizedMessage(pageContext, "jsp.submit.edit-metadata.button.add"))
|
|
.append("\"/></td>\n");
|
|
}
|
|
else
|
|
{
|
|
sb.append("</td>");
|
|
}
|
|
sb.append("<td> </td></tr>");
|
|
}
|
|
}
|
|
|
|
out.write(sb.toString());
|
|
}
|
|
|
|
|
|
|
|
void doQualdropValue(javax.servlet.jsp.JspWriter out, Item item,
|
|
String fieldName, String schema, String element, DCInputSet inputs, boolean repeatable,
|
|
int fieldCountIncr, List qualMap, String label, PageContext pageContext)
|
|
throws java.io.IOException
|
|
{
|
|
DCValue[] unfiltered = item.getMetadata(schema, element, Item.ANY, Item.ANY);
|
|
// filter out both unqualified and qualified values occuring elsewhere in inputs
|
|
ArrayList filtered = new ArrayList();
|
|
for (int i = 0; i < unfiltered.length; i++)
|
|
{
|
|
String unfilteredFieldName = unfiltered[i].element + "." + unfiltered[i].qualifier;
|
|
if ( ! inputs.isFieldPresent(unfilteredFieldName) )
|
|
{
|
|
filtered.add( unfiltered[i] );
|
|
}
|
|
}
|
|
DCValue[] defaults = (DCValue[])filtered.toArray(new DCValue[0]);
|
|
//DCValue[] defaults = item.getMetadata(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> </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=\"selected\" ": "" ))
|
|
.append(" value=\"")
|
|
.append(v)
|
|
.append("\">")
|
|
.append(q)
|
|
.append("</option>");
|
|
}
|
|
|
|
// do the input box
|
|
sb.append("</select> <input type=\"text\" name=\"")
|
|
.append(fieldName)
|
|
.append("_value");
|
|
if (repeatable)
|
|
sb.append("_").append(j);
|
|
sb.append("\" size=\"34\" value=\"")
|
|
.append(currentVal.replaceAll("\"", """))
|
|
.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>");
|
|
.append("\" value=\"")
|
|
.append(LocaleSupport.getLocalizedMessage(pageContext, "jsp.submit.edit-metadata.button.remove"))
|
|
.append("\"/> </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>");
|
|
.append("_more\" value=\"")
|
|
.append(LocaleSupport.getLocalizedMessage(pageContext, "jsp.submit.edit-metadata.button.add"))
|
|
.append("\"/> </td></tr>");
|
|
}
|
|
else
|
|
{
|
|
// put a blank if nothing else
|
|
sb.append("<td> </td></tr>");
|
|
}
|
|
}
|
|
|
|
out.write(sb.toString());
|
|
}
|
|
|
|
void doDropDown(javax.servlet.jsp.JspWriter out, Item item,
|
|
String fieldName, String schema, String element, String qualifier, boolean repeatable,
|
|
List valueList, String label)
|
|
throws java.io.IOException
|
|
{
|
|
DCValue[] defaults = item.getMetadata(schema, 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=\"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=\"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();
|
|
|
|
// for later use, determine whether we are in submit or workflow mode
|
|
String scope = SubmitServlet.isWorkflow(si) ? "workflow" : "submit";
|
|
%>
|
|
|
|
<dspace:layout locbar="off" navbar="off" titlekey="jsp.submit.edit-metadata.title">
|
|
|
|
<%
|
|
contextPath = request.getContextPath();
|
|
%>
|
|
|
|
<form action="<%= request.getContextPath() %>/submit#<%= si.jumpToField%>" method="post" name="edit_metadata">
|
|
<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><fmt:message key="jsp.submit.edit-metadata.heading"/></h1>
|
|
|
|
<%
|
|
if (pageNum == SubmitServlet.EDIT_METADATA_1)
|
|
{
|
|
%>
|
|
<div><fmt:message key="jsp.submit.edit-metadata.info1"/>
|
|
<dspace:popup page="/help/index.html#describe2"><fmt:message key="jsp.submit.edit-metadata.help"/></dspace:popup></div>
|
|
<%
|
|
}
|
|
else
|
|
{
|
|
%>
|
|
<div><fmt:message key="jsp.submit.edit-metadata.info2"/>
|
|
<dspace:popup page="/help/index.html#describe3"><fmt:message key="jsp.submit.edit-metadata.help"/></dspace:popup></div>
|
|
|
|
<%
|
|
}
|
|
%>
|
|
|
|
<%-- 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++)
|
|
{
|
|
// ignore inputs invisible in this scope
|
|
if (!inputs[z].isVisible(scope))
|
|
{
|
|
continue;
|
|
}
|
|
String dcElement = inputs[z].getElement();
|
|
String dcQualifier = inputs[z].getQualifier();
|
|
String dcSchema = inputs[z].getSchema();
|
|
|
|
String fieldName;
|
|
int fieldCountIncr;
|
|
boolean repeatable;
|
|
String vocabulary;
|
|
|
|
vocabulary = inputs[z].getVocabulary();
|
|
|
|
|
|
if (dcQualifier != null && !dcQualifier.equals("*"))
|
|
fieldName = dcSchema + "_" + dcElement + '_' + dcQualifier;
|
|
else
|
|
fieldName = dcSchema + "_" + 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, dcSchema, dcElement, dcQualifier,
|
|
repeatable, fieldCountIncr, label, pageContext);
|
|
}
|
|
else if (inputType.equals("date"))
|
|
{
|
|
doDate(out, item, fieldName, dcSchema, dcElement, dcQualifier,
|
|
repeatable, fieldCountIncr, label, pageContext);
|
|
}
|
|
else if (inputType.equals("series"))
|
|
{
|
|
doSeriesNumber(out, item, fieldName, dcSchema, dcElement, dcQualifier,
|
|
repeatable, fieldCountIncr, label, pageContext);
|
|
}
|
|
else if (inputType.equals("qualdrop_value"))
|
|
{
|
|
doQualdropValue(out, item, fieldName, dcSchema, dcElement, inputSet, repeatable,
|
|
fieldCountIncr, inputs[z].getPairs(), label, pageContext);
|
|
}
|
|
else if (inputType.equals("textarea"))
|
|
{
|
|
doTextArea(out, item, fieldName, dcSchema, dcElement, dcQualifier,
|
|
repeatable, fieldCountIncr, label, pageContext);
|
|
}
|
|
else if (inputType.equals("dropdown"))
|
|
{
|
|
doDropDown(out, item, fieldName, dcSchema, dcElement, dcQualifier,
|
|
repeatable, inputs[z].getPairs(), label);
|
|
}
|
|
else if (inputType.equals("twobox"))
|
|
{
|
|
doTwoBox(out, item, fieldName, dcSchema, dcElement, dcQualifier,
|
|
repeatable, fieldCountIncr, label, pageContext, vocabulary);
|
|
}
|
|
else
|
|
{
|
|
doOneBox(out, item, fieldName, dcSchema, dcElement, dcQualifier,
|
|
repeatable, fieldCountIncr, label, pageContext, vocabulary);
|
|
}
|
|
|
|
if (hasVocabulary(vocabulary))
|
|
{
|
|
%>
|
|
|
|
<br/>
|
|
<tr>
|
|
<td> </td>
|
|
<td colspan="3" class="submitFormHelpControlledVocabularies">
|
|
<dspace:popup page="/help/index.html#controlledvocabulary"><fmt:message key="jsp.controlledvocabulary.controlledvocabulary.help-link"/></dspace:popup>
|
|
</td>
|
|
</tr>
|
|
|
|
<%
|
|
}
|
|
%>
|
|
<%-- HACK: Using this line to give the browser hints as to the widths of cells --%>
|
|
<tr>
|
|
<td width="40%"> </td>
|
|
<td colspan="2" width="5%"> </td>
|
|
<td width="40%"> </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> </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%"> </td>
|
|
<td>
|
|
<input type="submit" name="submit_prev" value="<fmt:message key="jsp.submit.edit-metadata.previous"/>"/>
|
|
</td>
|
|
<td>
|
|
<input type="submit" name="submit_next" value="<fmt:message key="jsp.submit.edit-metadata.next"/>"/>
|
|
</td>
|
|
<td> </td>
|
|
<td align="right">
|
|
<input type="submit" name="submit_cancel" value="<fmt:message key="jsp.submit.edit-metadata.cancelsave"/>"/>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</center>
|
|
</form>
|
|
|
|
</dspace:layout>
|