diff --git a/dspace-api/src/main/java/org/dspace/app/itemimport/ItemImport.java b/dspace-api/src/main/java/org/dspace/app/itemimport/ItemImport.java
index 57fa119259..2a6225fb43 100644
--- a/dspace-api/src/main/java/org/dspace/app/itemimport/ItemImport.java
+++ b/dspace-api/src/main/java/org/dspace/app/itemimport/ItemImport.java
@@ -40,7 +40,6 @@ import org.apache.commons.lang.RandomStringUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.apache.xpath.XPathAPI;
-import org.dspace.app.itemexport.ItemExportException;
import org.dspace.authorize.AuthorizeException;
import org.dspace.authorize.AuthorizeManager;
import org.dspace.authorize.ResourcePolicy;
@@ -48,8 +47,6 @@ import org.dspace.content.Bitstream;
import org.dspace.content.BitstreamFormat;
import org.dspace.content.Bundle;
import org.dspace.content.Collection;
-import org.dspace.content.Community;
-import org.dspace.content.DSpaceObject;
import org.dspace.content.FormatIdentifier;
import org.dspace.content.InstallItem;
import org.dspace.content.Item;
@@ -109,9 +106,20 @@ public class ItemImport
private static boolean template = false;
- private static PrintWriter mapOut = null;
+ private static final String tempWorkDir = ConfigurationManager.getProperty("org.dspace.app.batchitemimport.work.dir");
- private static final String ziptempdir = ConfigurationManager.getProperty("org.dspace.app.itemexport.work.dir");
+ static {
+ //Ensure tempWorkDir exists
+ File tempWorkDirFile = new File(tempWorkDir);
+ if (!tempWorkDirFile.exists()){
+ boolean success = tempWorkDirFile.mkdir();
+ if (success) {
+ log.info("Created org.dspace.app.batchitemimport.work.dir of: " + tempWorkDir);
+ } else {
+ log.error("Cannot create batch import directory! " + tempWorkDir);
+ }
+ }
+ }
// File listing filter to look for metadata files
private static FilenameFilter metadataFileFilter = new FilenameFilter()
@@ -512,14 +520,6 @@ public class ItemImport
}
catch (Exception e)
{
- // abort all operations
- if (mapOut != null)
- {
- mapOut.close();
- }
-
- mapOut = null;
-
c.abort();
e.printStackTrace();
System.out.println(e);
@@ -532,19 +532,16 @@ public class ItemImport
if (zip)
{
System.gc();
- System.out.println("Deleting temporary zip directory: " + ziptempdir);
- ItemImport.deleteDirectory(new File(ziptempdir));
+ System.out.println("Deleting temporary zip directory: " + tempWorkDir);
+ ItemImport.deleteDirectory(new File(tempWorkDir));
}
}
catch (Exception ex)
{
- System.out.println("Unable to delete temporary zip archive location: " + ziptempdir);
+ System.out.println("Unable to delete temporary zip archive location: " + tempWorkDir);
}
- if (mapOut != null)
- {
- mapOut.close();
- }
+
if (isTest)
{
@@ -661,6 +658,9 @@ public class ItemImport
// create the mapfile
File outFile = null;
+
+ PrintWriter mapOut = null;
+
boolean directoryFileCollections = false;
if (mycollections == null)
{
@@ -734,6 +734,10 @@ public class ItemImport
c.clearCache();
}
}
+
+ //TODO null check?
+ mapOut.flush();
+ mapOut.close();
}
private void replaceItems(Context c, Collection[] mycollections,
@@ -841,7 +845,7 @@ public class ItemImport
private Item addItem(Context c, Collection[] mycollections, String path,
String itemname, PrintWriter mapOut, boolean template) throws Exception
{
- String mapOutput = null;
+ String mapOutputString = null;
System.out.println("Adding item from directory " + itemname);
@@ -889,7 +893,7 @@ public class ItemImport
}
// send ID to the mapfile
- mapOutput = itemname + " " + myitem.getID();
+ mapOutputString = itemname + " " + myitem.getID();
}
}
else
@@ -906,7 +910,7 @@ public class ItemImport
// find the handle, and output to map file
myhandle = HandleManager.findHandle(c, myitem);
- mapOutput = itemname + " " + myhandle;
+ mapOutputString = itemname + " " + myhandle;
}
// set permissions if specified in contents file
@@ -932,7 +936,7 @@ public class ItemImport
// made it this far, everything is fine, commit transaction
if (mapOut != null)
{
- mapOut.println(mapOutput);
+ mapOut.println(mapOutputString);
}
c.commit();
@@ -1979,8 +1983,6 @@ public class ItemImport
}
public static String unzip(File zipfile) throws IOException {
- log.info("ZIPFILE: " + zipfile.getAbsolutePath());
-
// 2
// does the zip file exist and can we write to the temp directory
if (!zipfile.canRead())
@@ -1989,7 +1991,7 @@ public class ItemImport
}
- File tempdir = new File(ziptempdir);
+ File tempdir = new File(tempWorkDir);
if (!tempdir.isDirectory())
{
log.error("'" + ConfigurationManager.getProperty("org.dspace.app.itemexport.work.dir") +
@@ -1999,10 +2001,10 @@ public class ItemImport
if (!tempdir.exists() && !tempdir.mkdirs())
{
- log.error("Unable to create temporary directory");
+ log.error("Unable to create temporary directory: " + tempdir.getAbsolutePath());
}
- String sourcedir = ziptempdir + System.getProperty("file.separator") + zipfile.getName();
- String zipDir = ziptempdir + System.getProperty("file.separator") + zipfile.getName() + System.getProperty("file.separator");
+ String sourcedir = tempWorkDir + System.getProperty("file.separator") + zipfile.getName();
+ String zipDir = tempWorkDir + System.getProperty("file.separator") + zipfile.getName() + System.getProperty("file.separator");
// 3
@@ -2017,7 +2019,7 @@ public class ItemImport
{
if (!new File(zipDir + entry.getName()).mkdir())
{
- log.error("Unable to create contents directory");
+ log.error("Unable to create contents directory: " + zipDir + entry.getName());
}
}
else
@@ -2034,7 +2036,7 @@ public class ItemImport
File dir = new File(zipDir + entry.getName().substring(0, index));
if (!dir.mkdirs())
{
- log.error("Unable to create directory");
+ log.error("Unable to create directory: " + dir.getAbsolutePath());
}
//Entries could have too many directories, and we need to adjust the sourcedir
@@ -2214,7 +2216,7 @@ public class ItemImport
{
iitems.close();
}
-
+
// close the mapfile writer
if (mapOut != null)
{
@@ -2569,4 +2571,8 @@ public class ItemImport
FileDeleteStrategy.FORCE.delete(new File(uploadDir));
}
+
+ public static String getTempWorkDir() {
+ return tempWorkDir;
+ }
}
diff --git a/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/administrative/FlowBatchImportUtils.java b/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/administrative/FlowBatchImportUtils.java
index 12a647e87c..5413bc3e45 100644
--- a/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/administrative/FlowBatchImportUtils.java
+++ b/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/administrative/FlowBatchImportUtils.java
@@ -7,34 +7,25 @@
*/
package org.dspace.app.xmlui.aspect.administrative;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.sql.SQLException;
-import java.io.File;
-import java.util.List;
-
-import org.apache.log4j.Logger;
import org.apache.cocoon.environment.Request;
import org.apache.cocoon.servlet.multipart.Part;
import org.apache.cocoon.servlet.multipart.PartOnDisk;
-import org.dspace.app.bulkedit.BulkEditChange;
-import org.dspace.app.bulkedit.DSpaceCSV;
-import org.dspace.app.bulkedit.MetadataImport;
-import org.dspace.app.bulkedit.MetadataImportException;
-import org.dspace.app.bulkedit.MetadataImportInvalidHeadingException;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang.StringUtils;
+import org.apache.log4j.Logger;
import org.dspace.app.itemimport.ItemImport;
-import org.dspace.app.itemimport.ItemImportOptions;
-import org.dspace.app.xmlui.utils.HandleUtil;
import org.dspace.app.xmlui.wing.Message;
import org.dspace.authorize.AuthorizeException;
import org.dspace.content.Collection;
-import org.dspace.core.Context;
import org.dspace.core.ConfigurationManager;
+import org.dspace.core.Context;
import org.dspace.core.LogManager;
-import org.dspace.eperson.EPerson;
import org.dspace.handle.HandleManager;
+import java.io.File;
+import java.io.IOException;
+import java.sql.SQLException;
+
/**
* Utility methods to processes BatchImport actions. These methods are used
* exclusively from the administrative flow scripts.
@@ -49,16 +40,12 @@ public class FlowBatchImportUtils {
*/
private static final Message T_upload_successful = new Message("default", "xmlui.administrative.batchimport.flow.upload_successful");
private static final Message T_upload_failed = new Message("default", "xmlui.administrative.batchimport.flow.upload_failed");
- private static final Message T_upload_badschema = new Message("default", "xmlui.administrative.batchimport.flow.upload_badschema");
- private static final Message T_upload_badelement = new Message("default", "xmlui.administrative.batchimport.flow.upload_badelement");
private static final Message T_import_successful = new Message("default", "xmlui.administrative.batchimport.flow.import_successful");
private static final Message T_import_failed = new Message("default", "xmlui.administrative.batchimport.flow.import_failed");
- private static final Message T_over_limit = new Message("default", "xmlui.administrative.batchimport.flow.over_limit");
private static final Message T_no_changes = new Message("default", "xmlui.administrative.batchimport.general.no_changes");
private static final Message T_failed_no_collection = new Message("default", "xmlui.administrative.batchimport.flow.failed_no_collection");
// Other variables
- private static final int limit = ConfigurationManager.getIntProperty("bulkedit", "gui-item-limit", 20);
private static Logger log = Logger.getLogger(FlowBatchImportUtils.class);
public static FlowResult processBatchImport(Context context, Request request) throws SQLException, AuthorizeException, IOException, Exception {
@@ -67,7 +54,6 @@ public class FlowBatchImportUtils {
result.setContinue(false);
String zipFile = (String) request.getSession().getAttribute("zip");
- log.info(zipFile);
if (zipFile != null) {
// Commit the changes
@@ -76,6 +62,7 @@ public class FlowBatchImportUtils {
log.debug(LogManager.getHeader(context, "batchimport", " items changed"));
+ //TODO: I don't think this section actually does anything.
if (true) {
result.setContinue(true);
result.setOutcome(true);
@@ -124,17 +111,13 @@ public class FlowBatchImportUtils {
name = name.substring(name.indexOf('\\') + 1);
}
- log.info(LogManager.getHeader(context, "batchimport", "loading file"));
-
// Process CSV without import
ItemImport itemImport = new ItemImport();
- String collectionHandle = null;
- if (request.get("collectionHandle") != null) {
- collectionHandle = request.get("collectionHandle").toString();
- } else {
+ String collectionHandle = String.valueOf(request.get("collectionHandle"));
+ if (StringUtils.isEmpty(collectionHandle) || !collectionHandle.contains("/")) {
//fail
- log.info("batch fail");
+ log.error("UIBatchImport failed due to no collection.");
result.setContinue(false);
result.setOutcome(false);
result.setMessage(T_failed_no_collection);
@@ -145,27 +128,12 @@ public class FlowBatchImportUtils {
Collection[] collections = new Collection[1];
collections[0] = collection;
- log.info("Batch to collection: " + collection.getName());
+ File tempWorkDir = new File(itemImport.getTempWorkDir());
+ File mapFile = File.createTempFile("batch-", ".map", tempWorkDir);
- /*
- ItemImportOptions itemImportOptions = new ItemImportOptions();
-
- itemImportOptions.setZipFilePath(file);
-
- Collection destCollection = Collection.find(context, 10);
- itemImportOptions.setCollection(destCollection);
-
- EPerson epersonSubmitter = EPerson.findByEmail(context, "peter@longsight.com");
- itemImportOptions.setEpersonSubmitter(epersonSubmitter);
-
- itemImportOptions.setUseTemplate(true);
-*/
- File mapFile = File.createTempFile("batch", "map");
-/* PrintWriter mapOut = new PrintWriter(new FileWriter(mapFile));
- itemImportOptions.setMapFileOut(mapOut);
- log.info("MapFile: " + mapFile.getAbsolutePath());
- //Process ItemImport with ZIP, and other options.
-*/
+ log.info("Attempt UIBatchImport to collection: " + collection.getName()
+ + ", zip: " + file.getName()
+ + ", map: "+ mapFile.getAbsolutePath());
/*
// equivalent command-line would be:
@@ -193,35 +161,23 @@ public class FlowBatchImportUtils {
itemImport.addItems(context, collections, sourceBatchDir, mapFile.getAbsolutePath(), true);
- if(true)
- {
- // Success!
- // Set session and request attributes
+ // Success!
+ // Set session and request attributes
+ result.setContinue(true);
+ result.setOutcome(true);
+ result.setMessage(T_upload_successful);
+ result.setCharacters(FileUtils.readFileToString(mapFile));
- //request.setAttribute("changes", changes);
- //request.getSession().setAttribute("csv", csv);
- log.info("batch success");
-
- result.setContinue(true);
- result.setOutcome(true);
- result.setMessage(T_upload_successful);
- }
- else
- {
- //fail
- log.info("batch fail");
- result.setContinue(false);
- result.setOutcome(false);
- result.setMessage(T_no_changes);
- }
- }
- else
- {
+ log.info("Success! UIBatchImport to collection: " + collection.getName()
+ + ", zip: " + file.getName()
+ + ", map: "+ mapFile.getAbsolutePath());
+ } else {
+ //No ZIP File, or upload failed
result.setContinue(false);
result.setOutcome(false);
result.setMessage(T_upload_failed);
}
- return result;
- }
+ return result;
+ }
}
diff --git a/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/administrative/batchimport/BatchImportUpload.java b/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/administrative/batchimport/BatchImportUpload.java
index e308b21392..eebec50dfe 100644
--- a/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/administrative/batchimport/BatchImportUpload.java
+++ b/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/administrative/batchimport/BatchImportUpload.java
@@ -44,26 +44,10 @@ public class BatchImportUpload extends AbstractDSpaceTransformer {
/** Language strings */
private static final Message T_dspace_home = message("xmlui.general.dspace_home");
- private static final Message T_submit_return = message("xmlui.general.return");
private static final Message T_trail = message("xmlui.administrative.batchimport.general.trail");
- private static final Message T_no_changes = message("xmlui.administrative.batchimport.general.no_changes");
- private static final Message T_new_item = message("xmlui.administrative.batchimport.general.new_item");
private static final Message T_title = message("xmlui.administrative.batchimport.general.title");
private static final Message T_head1 = message("xmlui.administrative.batchimport.general.head1");
- private static final Message T_para = message("xmlui.administrative.batchimport.BatchImportUpload.hint");
- private static final Message T_submit_confirm = message("xmlui.administrative.batchimport.BatchImportUpload.submit_confirm");
- private static final Message T_changes_pending = message("xmlui.administrative.batchimport.BatchImportUpload.changes_pending");
- private static final Message T_item_addition = message("xmlui.administrative.batchimport.BatchImportUpload.item_add");
- private static final Message T_item_deletion = message("xmlui.administrative.batchimport.BatchImportUpload.item_remove");
- private static final Message T_collection_newowner = message("xmlui.administrative.batchimport.BatchImportUpload.collection_newowner");
- private static final Message T_collection_oldowner = message("xmlui.administrative.batchimport.BatchImportUpload.collection_oldowner");
- private static final Message T_collection_mapped = message("xmlui.administrative.batchimport.BatchImportUpload.collection_mapped");
- private static final Message T_collection_unmapped = message("xmlui.administrative.batchimport.BatchImportUpload.collection_unmapped");
- private static final Message T_item_delete = message("xmlui.administrative.batchimport.BatchImportUpload.item_delete");
- private static final Message T_item_withdraw = message("xmlui.administrative.batchimport.BatchImportUpload.item_withdraw");
- private static final Message T_item_reinstate = message("xmlui.administrative.batchimport.BatchImportUpload.item_reinstate");
-
public void addPageMeta(PageMeta pageMeta) throws WingException
{
pageMeta.addMetadata("title").addContent(T_title);
diff --git a/dspace-xmlui/src/main/webapp/i18n/messages.xml b/dspace-xmlui/src/main/webapp/i18n/messages.xml
index e017d3d074..ec09ead5fc 100644
--- a/dspace-xmlui/src/main/webapp/i18n/messages.xml
+++ b/dspace-xmlui/src/main/webapp/i18n/messages.xml
@@ -1454,7 +1454,7 @@
No changes were detected
New item
Upload successful
- Upload failed
+ Upload failed or no file selected
Unknown metadata schema in heading
Unknown metadata element in heading
Import successful