NIHVIVO-2997 Merged r3354 from maint-rel-1.3 branch.
This commit is contained in:
parent
5485ff82b7
commit
73e299ec79
4 changed files with 252 additions and 238 deletions
35
productMods/css/harvester/fileharvest.css
Normal file
35
productMods/css/harvester/fileharvest.css
Normal file
|
@ -0,0 +1,35 @@
|
|||
<#-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
|
||||
|
||||
h3.testfile-step-header {
|
||||
float: left;
|
||||
padding-right: 30px;
|
||||
}
|
||||
div.testfile-step-body {
|
||||
overflow: hidden;
|
||||
}
|
||||
div.clearBothDiv {
|
||||
clear: both;
|
||||
padding-bottom: 20px;
|
||||
}
|
||||
a.help {
|
||||
margin-left: 10px;
|
||||
font-size: 0.8em;
|
||||
}
|
||||
#csvHelp-indented {
|
||||
margin: 0 1.5em 1em;
|
||||
padding: .5em;
|
||||
font-size: 0.8em;
|
||||
line-height: 1.2em;
|
||||
background: #efefef;
|
||||
}
|
||||
#csvHelp-indented p:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
#uploadTarget {
|
||||
width: 0;
|
||||
height: 0;
|
||||
border: 0px solid #fff;
|
||||
}
|
||||
#harvestButton {
|
||||
margin-right: 10px;
|
||||
}
|
|
@ -2,261 +2,240 @@
|
|||
|
||||
<#if !(user.loggedIn && user.hasSiteAdminAccess)>
|
||||
|
||||
<p>You must be an administrator to use this tool.</p>
|
||||
<p>You must be an administrator to use this tool.</p>
|
||||
|
||||
<#else>
|
||||
|
||||
<#if jobKnown == "false">
|
||||
<p>Error: No file harvest job was specified, or an unknown job was specified.</p>
|
||||
<p>The end user should not see this error under normal circumstances, so this is probably a bug and should be reported.</p>
|
||||
<#else>
|
||||
<#if jobKnown == "false">
|
||||
|
||||
<script type="text/javascript">
|
||||
<p>Error: No file harvest job was specified, or an unknown job was specified.</p>
|
||||
|
||||
var harvestProgressResponse;
|
||||
function doFunStuff()
|
||||
{
|
||||
doHarvest();
|
||||
}
|
||||
<p>The end user should not see this error under normal circumstances, so this is probably a bug and should be reported.</p>
|
||||
|
||||
function doHarvest()
|
||||
{
|
||||
document.getElementById("harvestButton").disabled = true;
|
||||
document.getElementById("harvestButtonHelpText").innerHTML = "Please wait while your data is harvested.";
|
||||
<#else>
|
||||
|
||||
var request = createRequest();
|
||||
request.onreadystatechange=function() {
|
||||
if(request.readyState == 4 && request.status == 200) {
|
||||
harvestProgressResponse = request.responseText;
|
||||
<script type="text/javascript">
|
||||
|
||||
var json = eval("(" + harvestProgressResponse + ")");
|
||||
var scriptTextArea = document.getElementById("scriptTextArea");
|
||||
scriptTextArea.innerHTML = json.scriptText;
|
||||
var harvestProgressResponse;
|
||||
|
||||
window.setTimeout(continueHarvest, 1000);
|
||||
}
|
||||
}
|
||||
request.open("POST", "${postTo}", true);
|
||||
request.setRequestHeader("content-type","application/x-www-form-urlencoded");
|
||||
//request.send("${paramMode}=${modeHarvest}&${paramJob}=${job}");
|
||||
request.send("${paramMode}=${modeHarvest}");
|
||||
}
|
||||
function doHarvest()
|
||||
{
|
||||
document.getElementById("harvestButton").disabled = true;
|
||||
document.getElementById("harvestButtonHelpText").innerHTML = "Please wait while your data is harvested.";
|
||||
|
||||
var request = createRequest();
|
||||
request.onreadystatechange=function() {
|
||||
if(request.readyState == 4 && request.status == 200) {
|
||||
harvestProgressResponse = request.responseText;
|
||||
|
||||
var json = eval("(" + harvestProgressResponse + ")");
|
||||
var scriptTextArea = document.getElementById("scriptTextArea");
|
||||
scriptTextArea.innerHTML = json.scriptText;
|
||||
|
||||
window.setTimeout(continueHarvest, 1000);
|
||||
}
|
||||
}
|
||||
request.open("POST", "${postTo}", true);
|
||||
request.setRequestHeader("content-type","application/x-www-form-urlencoded");
|
||||
//request.send("${paramMode}=${modeHarvest}&${paramJob}=${job}");
|
||||
request.send("${paramMode}=${modeHarvest}");
|
||||
}
|
||||
|
||||
|
||||
function continueHarvest()
|
||||
{
|
||||
var response = harvestProgressResponse;
|
||||
var json = eval("(" + response + ")");
|
||||
function continueHarvest()
|
||||
{
|
||||
var response = harvestProgressResponse;
|
||||
var json = eval("(" + response + ")");
|
||||
|
||||
var logAppend = json.progressSinceLastCheck;
|
||||
var progressTextArea = document.getElementById("progressTextArea");
|
||||
progressTextArea.innerHTML = progressTextArea.innerHTML + logAppend;
|
||||
progressTextArea.scrollTop = progressTextArea.scrollHeight;
|
||||
var logAppend = json.progressSinceLastCheck;
|
||||
var progressTextArea = document.getElementById("progressTextArea");
|
||||
progressTextArea.innerHTML = progressTextArea.innerHTML + logAppend;
|
||||
progressTextArea.scrollTop = progressTextArea.scrollHeight;
|
||||
|
||||
if(!json.finished) {
|
||||
var request = createRequest();
|
||||
request.onreadystatechange=function() {
|
||||
if(request.readyState == 4 && request.status == 200) {
|
||||
harvestProgressResponse = request.responseText;
|
||||
window.setTimeout(continueHarvest, 1000);
|
||||
}
|
||||
}
|
||||
request.open("POST", "${postTo}", true);
|
||||
request.setRequestHeader("Content-type","application/x-www-form-urlencoded");
|
||||
//request.send("${paramMode}=${modeCheckStatus}&${paramJob}=${job}");
|
||||
request.send("${paramMode}=${modeCheckStatus}");
|
||||
} else {
|
||||
if(!json.finished) {
|
||||
var request = createRequest();
|
||||
request.onreadystatechange=function() {
|
||||
if(request.readyState == 4 && request.status == 200) {
|
||||
harvestProgressResponse = request.responseText;
|
||||
window.setTimeout(continueHarvest, 1000);
|
||||
}
|
||||
}
|
||||
request.open("POST", "${postTo}", true);
|
||||
request.setRequestHeader("Content-type","application/x-www-form-urlencoded");
|
||||
//request.send("${paramMode}=${modeCheckStatus}&${paramJob}=${job}");
|
||||
request.send("${paramMode}=${modeCheckStatus}");
|
||||
} else {
|
||||
|
||||
var linkHeader = document.getElementById("linkHeader");
|
||||
linkHeader.style.display = "inline";
|
||||
// var linkHeader = document.getElementById("linkHeader");
|
||||
// linkHeader.style.display = "inline";
|
||||
$('#linkHeader').removeClass('hidden');
|
||||
|
||||
var importedItems = document.getElementById("importedItems")
|
||||
var importedItems = document.getElementById("importedItems")
|
||||
|
||||
if(json.newlyAddedUrls.length > 0) {
|
||||
for(var i = 0; i < json.newlyAddedUrls.length; i++) {
|
||||
if(json.newlyAddedUrls.length > 0) {
|
||||
for(var i = 0; i < json.newlyAddedUrls.length; i++) {
|
||||
|
||||
var newLi = document.createElement("li");
|
||||
newLi.innerHTML = "<a href=\"" + json.newlyAddedUrls[i] + "\" target=\"_blank\">" + json.newlyAddedUris[i] + "</a>";
|
||||
importedItems.appendChild(newLi);
|
||||
}
|
||||
} else {
|
||||
var newLi = document.createElement("li");
|
||||
newLi.innerHTML = "<a href=\"" + json.newlyAddedUrls[i] + "\" target=\"_blank\">" + json.newlyAddedUris[i] + "</a>";
|
||||
importedItems.appendChild(newLi);
|
||||
}
|
||||
} else {
|
||||
|
||||
var newLi = document.createElement("li");
|
||||
newLi.innerHTML = "${jobSpecificNoNewDataMessage}";
|
||||
importedItems.appendChild(newLi);
|
||||
}
|
||||
var newLi = document.createElement("li");
|
||||
newLi.innerHTML = "${jobSpecificNoNewDataMessage}";
|
||||
importedItems.appendChild(newLi);
|
||||
}
|
||||
|
||||
document.getElementById("harvestButtonHelpText").innerHTML = "Harvest complete. For another, please refresh the page.";
|
||||
}
|
||||
}
|
||||
document.getElementById("harvestButtonHelpText").innerHTML = "Harvest complete. For another, please refresh the page.";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
function createRequest() {
|
||||
var request;
|
||||
if (window.XMLHttpRequest) {
|
||||
request = new XMLHttpRequest();
|
||||
} else {
|
||||
request = new ActiveXObject("Microsoft.XMLHTTP");
|
||||
}
|
||||
return request;
|
||||
}
|
||||
function createRequest() {
|
||||
var request;
|
||||
if (window.XMLHttpRequest) {
|
||||
request = new XMLHttpRequest();
|
||||
} else {
|
||||
request = new ActiveXObject("Microsoft.XMLHTTP");
|
||||
}
|
||||
return request;
|
||||
}
|
||||
|
||||
function fileResponse()
|
||||
{
|
||||
var response = frames["uploadTarget"].document.getElementsByTagName("body")[0].innerHTML;
|
||||
var json = eval("(" + response + ")");
|
||||
|
||||
function toggleCollapsibleDiv(divName)
|
||||
{
|
||||
var display = document.getElementById(divName).style.display;
|
||||
if(display == "none")
|
||||
document.getElementById(divName).style.display = "inline";
|
||||
else
|
||||
document.getElementById(divName).style.display = "none";
|
||||
}
|
||||
var fileListing = document.getElementById("fileListing")
|
||||
var newLi = document.createElement("li");
|
||||
|
||||
function toggleCsvHelp()
|
||||
{
|
||||
toggleCollapsibleDiv("csvHelp-collapsible");
|
||||
}
|
||||
if(json.success)
|
||||
newLi.innerHTML = json.fileName + " <span style=\"color:green\">" + json.errorMessage + "</span>";
|
||||
else
|
||||
newLi.innerHTML = json.fileName + " <span style=\"color:red\">upload failed: " + json.errorMessage + "</span>";
|
||||
fileListing.appendChild(newLi);
|
||||
|
||||
function fileResponse()
|
||||
{
|
||||
var response = frames["uploadTarget"].document.getElementsByTagName("body")[0].innerHTML;
|
||||
var json = eval("(" + response + ")");
|
||||
document.getElementById("${paramFirstUpload}").value = "false";
|
||||
|
||||
var fileListing = document.getElementById("fileListing")
|
||||
var newLi = document.createElement("li");
|
||||
//document.getElementById("responseArea").innerHTML = response;
|
||||
}
|
||||
|
||||
if(json.success)
|
||||
newLi.innerHTML = json.fileName + " <span style=\"color:green\">" + json.errorMessage + "</span>";
|
||||
else
|
||||
newLi.innerHTML = json.fileName + " <span style=\"color:red\">upload failed: " + json.errorMessage + "</span>";
|
||||
fileListing.appendChild(newLi);
|
||||
function init()
|
||||
{
|
||||
document.getElementById("harvestButton").disabled = false;
|
||||
|
||||
document.getElementById("${paramFirstUpload}").value = "false";
|
||||
document.getElementById("${paramFirstUpload}").value = "true";
|
||||
document.getElementById("fileUploadForm").onsubmit = function()
|
||||
{
|
||||
document.getElementById("fileUploadForm").target = "uploadTarget";
|
||||
document.getElementById("uploadTarget").onload = fileResponse;
|
||||
}
|
||||
document.getElementById("downloadTemplateForm").onsubmit = function()
|
||||
{
|
||||
document.getElementById("downloadTemplateForm").target = "uploadTarget";
|
||||
}
|
||||
}
|
||||
|
||||
//document.getElementById("responseArea").innerHTML = response;
|
||||
}
|
||||
window.onload = init;
|
||||
|
||||
function init()
|
||||
{
|
||||
document.getElementById("harvestButton").disabled = false;
|
||||
$(document).ready(function() {
|
||||
$('a.help').click(function() {
|
||||
$('#csvHelp-collapsible').toggleClass('hidden');
|
||||
return false;
|
||||
});
|
||||
|
||||
document.getElementById("${paramFirstUpload}").value = "true";
|
||||
document.getElementById("fileUploadForm").onsubmit = function()
|
||||
{
|
||||
document.getElementById("fileUploadForm").target = "uploadTarget";
|
||||
document.getElementById("uploadTarget").onload = fileResponse;
|
||||
}
|
||||
document.getElementById("downloadTemplateForm").onsubmit = function()
|
||||
{
|
||||
document.getElementById("downloadTemplateForm").target = "uploadTarget";
|
||||
}
|
||||
}
|
||||
window.onload = init;
|
||||
$('#harvestButton').click(function() {
|
||||
doHarvest();
|
||||
return false;
|
||||
});
|
||||
});
|
||||
|
||||
</script>
|
||||
</script>
|
||||
|
||||
<h2><a class="ingestMenu" href="${urls.base}/ingest">Ingest Menu</a> > ${jobSpecificHeader}</h2>
|
||||
|
||||
<style>
|
||||
h3.testfile-step-header
|
||||
{
|
||||
float:left;
|
||||
padding-right:30px
|
||||
}
|
||||
h4.testfile-step-subheader
|
||||
{
|
||||
<div id="step1" class="testfile-step">
|
||||
<h3 class="testfile-step-header">Step 1</h3>
|
||||
<div id="step1-inner" class="testfile-step-body">
|
||||
<h4 class="testfile-step-subheader">Download template</h4>
|
||||
<form id="downloadTemplateForm" method="post" action=${postTo}>
|
||||
<input type="hidden" id="${paramMode}" name="${paramMode}" value="${modeDownloadTemplate}" />
|
||||
<p><input id="submit" type="submit" name="submit" value="Download" /> ${jobSpecificDownloadHelp}</p>
|
||||
</form>
|
||||
</div>
|
||||
<div class="clearBothDiv" />
|
||||
</div>
|
||||
|
||||
}
|
||||
div.testfile-step-body
|
||||
{
|
||||
overflow:hidden
|
||||
}
|
||||
div.clearBothDiv
|
||||
{
|
||||
clear:both;
|
||||
padding-bottom:20px
|
||||
}
|
||||
</style>
|
||||
<div id="step2" class="testfile-step">
|
||||
<h3 class="testfile-step-header">Step 2</h3>
|
||||
<div id="step2-inner" class="testfile-step-body">
|
||||
<h4 class="testfile-step-subheader">Fill in data <a class="help" href="#">Help</a></h4>
|
||||
<div id="csvHelp-collapsible" class="hidden">
|
||||
<div id="csvHelp-indented">
|
||||
${jobSpecificFillInHelp}
|
||||
</div>
|
||||
</div>
|
||||
<p>Fill in the template with your data. You may fill in multiple templates if you wish to harvest multiple files at once.</p>
|
||||
<div id="csvHelp">
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearBothDiv" />
|
||||
</div>
|
||||
|
||||
<h2>${jobSpecificHeader}</h2>
|
||||
<div id="step1" class="testfile-step">
|
||||
<h3 class="testfile-step-header">Step 1</h3>
|
||||
<div id="step1-inner" class="testfile-step-body">
|
||||
<h4 class="testfile-step-subheader">Download template</h4>
|
||||
<form id="downloadTemplateForm" method="post" action=${postTo}>
|
||||
<input type="hidden" id="${paramMode}" name="${paramMode}" value="${modeDownloadTemplate}" />
|
||||
<p><input type="submit" name="submit" value="Download" style="margin-right:10px" />${jobSpecificDownloadHelp}</p>
|
||||
</form>
|
||||
</div>
|
||||
<div class="clearBothDiv" />
|
||||
</div>
|
||||
<div id="step2" class="testfile-step">
|
||||
<h3 class="testfile-step-header">Step 2</h3>
|
||||
<div id="step2-inner" class="testfile-step-body">
|
||||
<h4 class="testfile-step-subheader">Fill in data <a style="font-size:smaller;margin-left:10px" onclick="toggleCsvHelp();return false;" href="#">Help</a></h4>
|
||||
<div id="csvHelp-collapsible" style="display:none">
|
||||
<div id="csvHelp-indented" style="margin-left:20px;font-size:smaller">
|
||||
${jobSpecificFillInHelp}
|
||||
</div>
|
||||
</div>
|
||||
<p>Fill in the template with your data. You may fill in multiple templates if you wish to harvest multiple files at once.</p>
|
||||
<div id="csvHelp">
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearBothDiv" />
|
||||
</div>
|
||||
<div id="step3" class="testfile-step">
|
||||
<h3 class="testfile-step-header">Step 3</h3>
|
||||
<div id="step3-inner" class="testfile-step-body">
|
||||
<h4 class="testfile-step-subheader">Upload file(s)</h4>
|
||||
<p>Upload your filled-in template(s).</p>
|
||||
<form id="fileUploadForm" method="post" enctype="multipart/form-data" action=${postTo}>
|
||||
<input type="hidden" id="${paramFirstUpload}" name="${paramFirstUpload}" value="true" />
|
||||
<!--<input type="hidden" id="${paramJob}" name="${paramJob}" value="${job}" /> -->
|
||||
<input type="file" name="${paramUploadedFile}" />
|
||||
<input type="submit" name="submit" value="Upload" />
|
||||
<iframe id="uploadTarget" name="uploadTarget" src="" style="width:0;height:0;border:0px solid #fff;"></iframe>
|
||||
</form>
|
||||
<h5>Uploaded files</h5>
|
||||
<ul id="fileListing">
|
||||
</ul>
|
||||
</div>
|
||||
<div class="clearBothDiv" />
|
||||
</div>
|
||||
<div id="step4" class="testfile-step">
|
||||
<h3 class="testfile-step-header">Step 4</h3>
|
||||
<div id="step4-inner" class="testfile-step-body">
|
||||
<h4 class="testfile-step-subheader">Harvest</h4>
|
||||
<p><input type="button" name="harvestButton" id="harvestButton" value="Harvest" style="margin-right:10px" onclick="doFunStuff();" /><span id="harvestButtonHelpText">Click the button to harvest your file(s).</span></p>
|
||||
</div>
|
||||
<div class="clearBothDiv" />
|
||||
</div>
|
||||
<div id="step3" class="testfile-step">
|
||||
<h3 class="testfile-step-header">Step 3</h3>
|
||||
<div id="step3-inner" class="testfile-step-body">
|
||||
<h4 class="testfile-step-subheader">Upload file(s)</h4>
|
||||
<p>Upload your filled-in template(s).</p>
|
||||
<form id="fileUploadForm" method="post" enctype="multipart/form-data" action=${postTo}>
|
||||
<input type="hidden" id="${paramFirstUpload}" name="${paramFirstUpload}" value="true" />
|
||||
<!--<input type="hidden" id="${paramJob}" name="${paramJob}" value="${job}" /> -->
|
||||
<input type="file" name="${paramUploadedFile}" />
|
||||
<input type="submit" name="submit" value="Upload" />
|
||||
<iframe id="uploadTarget" name="uploadTarget" src=""></iframe>
|
||||
</form>
|
||||
<h5>Uploaded files</h5>
|
||||
<ul id="fileListing">
|
||||
</ul>
|
||||
</div>
|
||||
<div class="clearBothDiv" />
|
||||
</div>
|
||||
|
||||
<div id="step4" class="testfile-step">
|
||||
<h3 class="testfile-step-header">Step 4</h3>
|
||||
<div id="step4-inner" class="testfile-step-body">
|
||||
<h4 class="testfile-step-subheader">Harvest</h4>
|
||||
<p><input type="button" name="harvestButton" id="harvestButton" class="green button" value="Harvest" /><span id="harvestButtonHelpText">Click the button to harvest your file(s).</span></p>
|
||||
</div>
|
||||
<div class="clearBothDiv" />
|
||||
</div>
|
||||
|
||||
<div id="step5" class="testfile-step">
|
||||
<h3 class="testfile-step-header">Step 5</h3>
|
||||
<div id="step5-inner" class="testfile-step-body">
|
||||
<h4 class="testfile-step-subheader">View results</h4>
|
||||
<div id="script">
|
||||
<h5>Script being executed</h5>
|
||||
<textarea cols="100" rows="20" readonly="readonly" id="scriptTextArea"></textarea>
|
||||
</div>
|
||||
<div id="progress">
|
||||
<h5>Progress</h5>
|
||||
<textarea cols="100" rows="20" readonly="readonly" id="progressTextArea"></textarea>
|
||||
</div>
|
||||
<div id="summary">
|
||||
<h5 id="linkHeader" style="display:none">${jobSpecificLinkHeader}</h5>
|
||||
<ul id="importedItems">
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearBothDiv" />
|
||||
</div>
|
||||
<div id="step5" class="testfile-step">
|
||||
<h3 class="testfile-step-header">Step 5</h3>
|
||||
<div id="step5-inner" class="testfile-step-body">
|
||||
<h4 class="testfile-step-subheader">View results</h4>
|
||||
<div id="script">
|
||||
<h5>Script being executed</h5>
|
||||
<textarea cols="100" rows="20" readonly="readonly" id="scriptTextArea"></textarea>
|
||||
</div>
|
||||
<div id="progress">
|
||||
<h5>Progress</h5>
|
||||
<textarea cols="100" rows="20" readonly="readonly" id="progressTextArea"></textarea>
|
||||
</div>
|
||||
<div id="summary">
|
||||
<h5 id="linkHeader" class="hidden">${jobSpecificLinkHeader}</h5>
|
||||
<ul id="importedItems">
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearBothDiv" />
|
||||
</div>
|
||||
|
||||
<#-- if job known -->
|
||||
</#if>
|
||||
${stylesheets.add('<link rel="stylesheet" href="${urls.base}/css/harvester/fileharvest.css" />')}
|
||||
|
||||
<#-- if job known -->
|
||||
</#if>
|
||||
|
||||
<#-- if user is logged-in with site admin access -->
|
||||
</#if>
|
||||
|
||||
|
||||
|
|
|
@ -423,7 +423,7 @@ class CsvFileHarvestJob implements FileHarvestJob {
|
|||
public String getTemplateFillInHelp() {
|
||||
String newline = "\n";
|
||||
String help = "";
|
||||
help += "<p>A CSV, or <b>C</b>omma-<b>S</b>eparated <b>V</b>alues file, is a method of storing tabular data in plain text. The first line of a CSV file contains header information, while each subsequent line contains a data record.</p>" + newline;
|
||||
help += "<p>A CSV, or <strong>C</strong>omma-<strong>S</strong>eparated </strong>V</strong>alues file, is a method of storing tabular data in plain text. The first line of a CSV file contains header information, while each subsequent line contains a data record.</p>" + newline;
|
||||
help += "<p>The template we provide contains only the header, which you will then fill in accordingly. For example, if the template contains the text \"firstName,lastName\", then you might add two more lines, \"John,Doe\" and \"Jane,Public\".</p>" + newline;
|
||||
return help;
|
||||
}
|
||||
|
|
|
@ -57,7 +57,7 @@ public class FileHarvestController extends FreemarkerHttpServlet {
|
|||
private static final String PARAMETER_MODE = "mode";
|
||||
private static final String PARAMETER_JOB = "job";
|
||||
|
||||
private static final String POST_TO = "/vivo/harvester/harvest";
|
||||
private static final String POST_TO = UrlBuilder.getUrl("/harvester/harvest");
|
||||
|
||||
private static final String MODE_HARVEST = "harvest";
|
||||
private static final String MODE_CHECK_STATUS = "checkStatus";
|
||||
|
|
Loading…
Add table
Reference in a new issue