Update of
/var/cvs/contributions/CMSContainer/cmsc/utilities/src/java/com/finalist/util/http
In directory
james.mmbase.org:/tmp/cvs-serv27508/utilities/src/java/com/finalist/util/http
Modified Files:
BulkUploadUtil.java
Log Message:
CMSC-681 Asset Maintenance upload zip file and trash listing
See also:
http://cvs.mmbase.org/viewcvs/contributions/CMSContainer/cmsc/utilities/src/java/com/finalist/util/http
See also: http://www.mmbase.org/jira/browse/CMSC-681
Index: BulkUploadUtil.java
===================================================================
RCS file:
/var/cvs/contributions/CMSContainer/cmsc/utilities/src/java/com/finalist/util/http/BulkUploadUtil.java,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -b -r1.13 -r1.14
--- BulkUploadUtil.java 2 Dec 2008 08:43:11 -0000 1.13
+++ BulkUploadUtil.java 11 Dec 2008 09:19:55 -0000 1.14
@@ -32,7 +32,12 @@
import org.apache.struts.upload.FormFile;
import org.mmbase.bridge.Cloud;
import org.mmbase.bridge.Node;
+import org.mmbase.bridge.NodeList;
import org.mmbase.bridge.NodeManager;
+import org.mmbase.bridge.NodeQuery;
+import org.mmbase.bridge.util.SearchUtil;
+import org.mmbase.util.transformers.ByteToCharTransformer;
+import org.mmbase.util.transformers.ChecksumFactory;
import com.finalist.cmsc.mmbase.RelationUtil;
import com.finalist.cmsc.util.UploadUtil;
@@ -47,7 +52,7 @@
private static final String CONFIGURATION_RESOURCE_NAME =
"/com/finalist/util/http/util.properties";
private static final String ZIP_MIME_TYPES[] = new String[] {
"application/x-zip-compressed", "application/zip",
- "application/x-zip" };
+ "\"application/octet-stream", "application/x-zip" };
private static Set<String> supportedImages;
@@ -101,11 +106,11 @@
}
public static List<Integer> store(Cloud cloud, NodeManager manager, String
parentchannel, FormFile file) {
- List<Integer> nodes ;
+ List<Integer> nodes;
if (StringUtils.isEmpty(parentchannel)) {
throw new NullPointerException("parentchannel is null");
}
- nodes = getNodeList(Integer.valueOf(parentchannel), manager, file);
+ nodes = getNodeList(Integer.valueOf(parentchannel), manager, file,
cloud);
return nodes;
}
@@ -158,16 +163,21 @@
return node;
}
- private static List<Integer> getNodeList(Integer parentChannel, NodeManager
manager, FormFile file) {
+ private static List<Integer> getNodeList(Integer parentChannel, NodeManager
manager, FormFile file, Cloud cloud) {
List<Integer> nodes = null;
try {
if (isZipFile(file)) {
- ZipInputStream zip = new ZipInputStream(new
BufferedInputStream(new ByteArrayInputStream(file.getFileData())));
- nodes = createNodesInZip(parentChannel, manager, zip);
+ byte[] fileData = file.getFileData();
+ ByteArrayInputStream bis = new ByteArrayInputStream(fileData);
+ InputStream is = new BufferedInputStream(bis);
+ ZipInputStream zip = new ZipInputStream(is);
+
+ nodes = createNodesInZip(parentChannel, manager, zip, cloud);
} else {
- Node node = createNode(parentChannel, manager, file.getFileName(),
file.getInputStream(), file.getFileSize());
- if(node!=null){
+ Node node = createNode(parentChannel, manager, file.getFileName(),
file.getInputStream(), file
+ .getFileSize());
+ if (node != null) {
nodes = new ArrayList<Integer>();
nodes.add(node.getNumber());
}
@@ -181,7 +191,6 @@
}
private static ArrayList<Integer> createNodesInZip(NodeManager manager,
ZipInputStream zip) {
-
ZipEntry entry = null;
int count = 0;
ArrayList<Integer> nodes = new ArrayList<Integer>();
@@ -215,14 +224,15 @@
}
} catch (IOException ex) {
- log.info("Failed to read uploaded zipfile, skipping it"+
ex.getMessage());
+ log.info("Failed to read uploaded zipfile, skipping it" +
ex.getMessage());
} finally {
close(zip);
}
return nodes;
}
- private static ArrayList<Integer> createNodesInZip(Integer parentChannel,
NodeManager manager, ZipInputStream zip) {
+ private static ArrayList<Integer> createNodesInZip(Integer parentChannel,
NodeManager manager, ZipInputStream zip,
+ Cloud cloud) {
ZipEntry entry = null;
int count = 0;
@@ -239,29 +249,40 @@
}
continue;
}
+ if (isImage(entry.getName())) {
+ manager = cloud.getNodeManager("images");
+ } else {
+ manager = cloud.getNodeManager("attachments");
+ }
count++;
- // create temp file for zip entry, create a node from it and
- // remove the temp file
- File tempFile = File.createTempFile("cmsc", null);
- FileOutputStream out = new FileOutputStream(tempFile);
- copyStream(zip, out);
- zip.closeEntry();
- out.close();
- FileInputStream in = new FileInputStream(tempFile);
- Node node = createNode(parentChannel, manager, entry.getName(),
in, tempFile.length());
+ ChecksumFactory checksumFactory = new ChecksumFactory();
+ ByteToCharTransformer transformer = (ByteToCharTransformer)
checksumFactory
+ .createTransformer(checksumFactory.createParameters());
+ long size = entry.getSize();
+ byte[] buffer = new byte[(int) size];
+ zip.read(buffer, 0, (int) size);
+ String checkSum = transformer.transform(buffer);
+ NodeQuery query = manager.createQuery();
+ SearchUtil.addEqualConstraint(query, manager.getField("checksum"),
checkSum);
+ NodeList assets = query.getList();
+
+ boolean isNewFile = (assets.size() == 0);
+ InputStream is = new ByteArrayInputStream(buffer);
+ if (isNewFile) {
+ Node node = createNode(parentChannel, manager, entry.getName(),
is, size);
if (node != null) {
nodes.add(node.getNumber());
}
- in.close();
- tempFile.delete();
+ is.close();
+ }
+ zip.closeEntry();
}
} catch (IOException ex) {
log.error("IOException--Failed to read uploaded zipfile, skipping
it", ex);
- }catch(Exception e) {
- log.error("Failed to read uploaded zipfile, skipping it",e);
- }
- finally {
+ } catch (Exception e) {
+ log.error("Failed to read uploaded zipfile, skipping it", e);
+ } finally {
close(zip);
}
return nodes;
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs