r764 - in trunk: simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/attachment simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service simexplorer-is-service/src/resources/i18n
Author: glandais Date: 2008-02-08 18:07:34 +0000 (Fri, 08 Feb 2008) New Revision: 764 Modified: trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/attachment/Attachment.java trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceCommon.java trunk/simexplorer-is-service/src/resources/i18n/simexplorer-is-service-en_GB.properties trunk/simexplorer-is-service/src/resources/i18n/simexplorer-is-service-fr_FR.properties Log: Import from zip bugs Modified: trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/attachment/Attachment.java =================================================================== --- trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/attachment/Attachment.java 2008-02-08 17:16:27 UTC (rev 763) +++ trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/attachment/Attachment.java 2008-02-08 18:07:34 UTC (rev 764) @@ -119,6 +119,18 @@ return uniqueId.substring(0, 32); } + /** + * Gets the file name from unique id. + * + * @param uniqueId + * the unique id + * + * @return the file name from unique id + */ + public static String getFileNameFromUniqueId(String uniqueId) { + return uniqueId.substring(32); + } + /* (non-Javadoc) * @see java.lang.Object#hashCode() */ Modified: trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceCommon.java =================================================================== --- trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceCommon.java 2008-02-08 17:16:27 UTC (rev 763) +++ trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceCommon.java 2008-02-08 18:07:34 UTC (rev 764) @@ -31,6 +31,8 @@ import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; +import org.codelutin.util.MD5; +import org.codelutin.util.MD5InputStream; import org.codelutin.util.ZipStreamEncoder; import org.w3c.dom.Document; import org.w3c.dom.Element; @@ -239,7 +241,7 @@ private MetaData saveElement(String token, InputStream zipStream) throws SimExplorerServiceException { String xmlFile = null; - Map<String, String> attachments = new HashMap<String, String>(); + Map<Attachment, String> attachments = new HashMap<Attachment, String>(); ZipInputStream zis = new ZipInputStream(zipStream); @@ -254,32 +256,37 @@ if (entryName.startsWith(FILE_DATA_PREFIX)) { String fileName = entryName.replace( FILE_DATA_PREFIX + FOLDER_SEPARATOR, ""); + + String zipMD5 = Attachment + .getHashFromUniqueId(fileName); + fileName = Attachment + .getFileNameFromUniqueId(fileName); + + MD5InputStream md5Stream = new MD5InputStream(zis); String idFile = getStorageEngine().storeTempData( - zis); - attachments.put(fileName, idFile); + md5Stream); + + String localMD5 = MD5.asHex(md5Stream.hash()); + + if (!localMD5.equals(zipMD5)) { + + throw new SimExplorerServiceException( + _("simexplorer.service.invalidhash")); + + } + + Attachment attachment = new Attachment(); + attachment.setFileName(fileName); + attachment.setDataHash(localMD5); + attachments.put(attachment, idFile); } } } } - Map<Attachment, String> realAttachments = new HashMap<Attachment, String>(); - - // Load metadata xml - MetaDataFactory<MetaData> mdeFactory = MetaDataFactory - .getFactory(MetaData.class); - MetaData metaData = mdeFactory - .loadElementFromParentXML(getStorageEngine() - .retrieveTempData(xmlFile)); - - List<Attachment> mdeAttachments = metaData.getAttachments(); - for (Attachment attachment : mdeAttachments) { - realAttachments.put(attachment, attachments.get(attachment - .getUniqueId())); - } - - MetaData elementSaved = saveElement(token, xmlFile, realAttachments); + MetaData elementSaved = saveElement(token, xmlFile, attachments); getStorageEngine().deleteTempData(xmlFile); - for (Map.Entry<String, String> tmpId : attachments.entrySet()) { + for (Map.Entry<Attachment, String> tmpId : attachments.entrySet()) { getStorageEngine().deleteTempData(tmpId.getValue()); } return elementSaved; @@ -457,14 +464,15 @@ String idAttachment = idsattachment.get(attachment); // Check hash of attachments - String md5 = getStorageEngine().retrieveMD5TempData(idAttachment); - if (!md5.equals(attachment.getDataHash())) { + if (idAttachment == null) { + throw new SimExplorerServiceException( - _("simexplorer.service.invalidhash")); + _("simexplorer.service.attachmentnotfund")); + } - attachments.put(attachment, getStorageEngine().retrieveTempData( idAttachment)); + } getStorageEngine().saveElement(token, metaData, attachments); Modified: trunk/simexplorer-is-service/src/resources/i18n/simexplorer-is-service-en_GB.properties =================================================================== --- trunk/simexplorer-is-service/src/resources/i18n/simexplorer-is-service-en_GB.properties 2008-02-08 17:16:27 UTC (rev 763) +++ trunk/simexplorer-is-service/src/resources/i18n/simexplorer-is-service-en_GB.properties 2008-02-08 18:07:34 UTC (rev 764) @@ -1,3 +1,4 @@ +simexplorer.service.attachmentnotfund=File not found simexplorer.service.business.groupexist=Group already exist simexplorer.service.business.userexist=User already exist simexplorer.service.invalidhash=Invalid hash for file Modified: trunk/simexplorer-is-service/src/resources/i18n/simexplorer-is-service-fr_FR.properties =================================================================== --- trunk/simexplorer-is-service/src/resources/i18n/simexplorer-is-service-fr_FR.properties 2008-02-08 17:16:27 UTC (rev 763) +++ trunk/simexplorer-is-service/src/resources/i18n/simexplorer-is-service-fr_FR.properties 2008-02-08 18:07:34 UTC (rev 764) @@ -1,3 +1,4 @@ +simexplorer.service.attachmentnotfund=Fichier non trouvé simexplorer.service.business.groupexist=Le groupe existe d\u00E9j\u00E0 simexplorer.service.business.userexist=L'utilisateur existe d\u00E9j\u00E0 simexplorer.service.invalidhash=Hash invalide pour un fichier
participants (1)
-
glandais@users.labs.libre-entreprise.org