r567 - in trunk: simexplorer-is simexplorer-is-entities simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/attachment simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/entities/metadata simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/factories simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service simexplorer-is-service/src/test/fr/cemagref/simexplorer/is/service simexplorer-is-sto
Author: glandais Date: 2008-02-01 16:26:09 +0000 (Fri, 01 Feb 2008) New Revision: 567 Added: trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/attachment/ trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/attachment/Attachment.java trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/factories/MetaDataFactory.java trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/factories/XMLStreamEncoder.java trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/util/KeyValue.java Removed: trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/contenttype/ trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/factories/MetaDataEntityFactory.java Modified: trunk/simexplorer-is-entities/pom.xml trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/attachment/ContentType.java trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/attachment/ContentTypeFactory.java trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/attachment/RawType.java trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/entities/metadata/MetaData.java trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/factories/BaseEntityFactory.java trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/factories/LoggableElementFactory.java trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/factories/XmlConstants.java trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/ElementGenerator.java trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceCommon.java trunk/simexplorer-is-service/src/test/fr/cemagref/simexplorer/is/service/StorageServiceMassInsert.java trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/MetaDataGenerator.java trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/attachment/FileSystemAttachmentHandler.java trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/database/DatabaseConstants.java trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/database/lucene/LuceneDatabase.java trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngineImpl.java trunk/simexplorer-is-storage/src/resources/properties/config.properties trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/StorageServiceHelper.java trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/action/application/ExportApplicationAction.java trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/action/tab/ShowDetailTabAction.java trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/action/tab/ShowLocalTabAction.java trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/action/tab/ShowRemoteTabAction.java trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/JApplicationTableModel.java trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/ListTabModel.java trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/SynchronizeTabModel.java trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/ElementDetail.java trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/ElementExport.java trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/Install.java trunk/simexplorer-is/pom.xml Log: Attachment refactoring Piped streams when exporting XML : bug fix Modified: trunk/simexplorer-is/pom.xml =================================================================== --- trunk/simexplorer-is/pom.xml 2008-02-01 09:58:10 UTC (rev 566) +++ trunk/simexplorer-is/pom.xml 2008-02-01 16:26:09 UTC (rev 567) @@ -113,8 +113,6 @@ <artifactId>maven-eclipse-plugin</artifactId> <configuration> <useProjectReferences>true</useProjectReferences> - <downloadJavadocs>true</downloadJavadocs> - <downloadSources>true</downloadSources> </configuration> </plugin> </plugins> Modified: trunk/simexplorer-is-entities/pom.xml =================================================================== --- trunk/simexplorer-is-entities/pom.xml 2008-02-01 09:58:10 UTC (rev 566) +++ trunk/simexplorer-is-entities/pom.xml 2008-02-01 16:26:09 UTC (rev 567) @@ -4,11 +4,11 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> - + <groupId>simexplorer-is</groupId> <artifactId>simexplorer-is-entities</artifactId> <name>Entities</name> - + <version>0.0.1-SNAPSHOT</version> <description></description> <packaging>jar</packaging> @@ -19,4 +19,12 @@ <version>0.0.1-SNAPSHOT</version> </parent> + <dependencies> + <dependency> + <groupId>commons-lang</groupId> + <artifactId>commons-lang</artifactId> + <version>2.3</version> + </dependency> + </dependencies> + </project> \ No newline at end of file Copied: trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/attachment (from rev 566, trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/contenttype) Added: 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 (rev 0) +++ trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/attachment/Attachment.java 2008-02-01 16:26:09 UTC (rev 567) @@ -0,0 +1,101 @@ +/* +* ##% Copyright (C) 2008 Code Lutin, Gabriel Landais +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License +* as published by the Free Software Foundation; either version 2 +* of the License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* ##% */ +package fr.cemagref.simexplorer.is.attachment; + +import java.io.Serializable; + +import org.apache.commons.lang.StringUtils; + +public class Attachment implements Serializable { + + private static final long serialVersionUID = 5467615366054227592L; + + private String fileName; + private ContentType contentType; + private int dataHash; + + public String getFileName() { + return fileName; + } + + public void setFileName(String fileName) { + this.fileName = fileName; + } + + public ContentType getContentType() { + return contentType; + } + + public void setContentType(ContentType contentType) { + this.contentType = contentType; + } + + public int getDataHash() { + return dataHash; + } + + public void setDataHash(int dataHash) { + this.dataHash = dataHash; + } + + public String getUniqueId() { + String hexDataHash = StringUtils.leftPad(Integer.toHexString(dataHash), + 8, '0'); + return hexDataHash + fileName; + } + + public static int intFromHexString(String nm) throws NumberFormatException { + int radix = 16; + int index = 0; + int result = 0; + + // Handle radix specifier, if present + if (nm.startsWith("0x", index) || nm.startsWith("0X", index)) { + index += 2; + radix = 16; + } else if (nm.startsWith("#", index)) { + index++; + radix = 16; + } + if (nm.length() - index > 8) { + throw new NumberFormatException(nm + " exceeds 8 digits"); + } + int digit = 0; + for (int i = index; i < nm.length(); i++) { + result = result << 4; + digit = Character.digit(nm.charAt(i), radix); + if (digit == -1) { + throw new NumberFormatException(nm + " : \'" + nm.charAt(i) + + "\' is not a valid hex digit"); + } + result |= digit; + } + return result; + } + + public static int getHashFromUniqueId(String uniqueId) { + String hexHash = uniqueId.substring(0, 8); + return intFromHexString("0X" + hexHash); + } + + public static String getFileNameFromUniqueId(String uniqueId) { + String extractedFileName = uniqueId.substring(9); + return extractedFileName; + } + +} Modified: trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/attachment/ContentType.java =================================================================== --- trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/contenttype/ContentType.java 2008-02-01 09:58:10 UTC (rev 566) +++ trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/attachment/ContentType.java 2008-02-01 16:26:09 UTC (rev 567) @@ -15,7 +15,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ##% */ -package fr.cemagref.simexplorer.is.contenttype; +package fr.cemagref.simexplorer.is.attachment; import java.io.InputStream; import java.io.Reader; Modified: trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/attachment/ContentTypeFactory.java =================================================================== --- trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/contenttype/ContentTypeFactory.java 2008-02-01 09:58:10 UTC (rev 566) +++ trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/attachment/ContentTypeFactory.java 2008-02-01 16:26:09 UTC (rev 567) @@ -15,7 +15,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ##% */ -package fr.cemagref.simexplorer.is.contenttype; +package fr.cemagref.simexplorer.is.attachment; import java.util.HashMap; import java.util.Map; Modified: trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/attachment/RawType.java =================================================================== --- trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/contenttype/RawType.java 2008-02-01 09:58:10 UTC (rev 566) +++ trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/attachment/RawType.java 2008-02-01 16:26:09 UTC (rev 567) @@ -15,7 +15,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ##% */ -package fr.cemagref.simexplorer.is.contenttype; +package fr.cemagref.simexplorer.is.attachment; import java.io.InputStream; import java.io.InputStreamReader; Modified: trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/entities/metadata/MetaData.java =================================================================== --- trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/entities/metadata/MetaData.java 2008-02-01 09:58:10 UTC (rev 566) +++ trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/entities/metadata/MetaData.java 2008-02-01 16:26:09 UTC (rev 567) @@ -18,11 +18,12 @@ package fr.cemagref.simexplorer.is.entities.metadata; import java.io.Serializable; +import java.util.ArrayList; import java.util.Date; -import java.util.HashMap; +import java.util.List; import java.util.Map; -import fr.cemagref.simexplorer.is.contenttype.ContentType; +import fr.cemagref.simexplorer.is.attachment.Attachment; import fr.cemagref.simexplorer.is.entities.BaseEntity; public class MetaData extends BaseEntity implements Serializable { @@ -37,7 +38,7 @@ private Date creationDate; private String hash; private Map<String, String> descriptors; - private Map<String, ContentType> attachments; + private List<Attachment> attachments; private String parentDataUuid; private String parentDataVersion; private String parentVersionUuid; @@ -167,9 +168,9 @@ /** * @return the attachments */ - public Map<String, ContentType> getAttachments() { + public List<Attachment> getAttachments() { if (attachments == null) { - attachments = new HashMap<String, ContentType>(); + attachments = new ArrayList<Attachment>(); } return attachments; } @@ -178,7 +179,7 @@ * @param attachments * the attachments to set */ - public void setAttachments(Map<String, ContentType> attachments) { + public void setAttachments(List<Attachment> attachments) { this.attachments = attachments; } Modified: trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/factories/BaseEntityFactory.java =================================================================== --- trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/factories/BaseEntityFactory.java 2008-02-01 09:58:10 UTC (rev 566) +++ trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/factories/BaseEntityFactory.java 2008-02-01 16:26:09 UTC (rev 567) @@ -27,10 +27,7 @@ import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; import org.w3c.dom.Element; @@ -171,8 +168,6 @@ */ public InputStream saveElement(String rootNodeName, E element) throws Exception { - PipedOutputStream os = new PipedOutputStream(); - org.w3c.dom.Document xmlDocument = getXMLBuilder().newDocument(); // DOM properties xmlDocument.setXmlVersion("1.0"); @@ -184,13 +179,13 @@ xmlDocument.appendChild(rootNode); DOMSource domSource = new DOMSource(xmlDocument); - StreamResult result = new StreamResult(os); - TransformerFactory tf = TransformerFactory.newInstance(); - Transformer transformer = tf.newTransformer(); - transformer.transform(domSource, result); - InputStream is = new PipedInputStream(os); + PipedOutputStream os = new PipedOutputStream(); + PipedInputStream is = new PipedInputStream(os); + XMLStreamEncoder xse = new XMLStreamEncoder(domSource, os); + xse.start(); + return is; } @@ -284,15 +279,12 @@ DOMSource domSource = new DOMSource(xmlDocument); PipedOutputStream os = new PipedOutputStream(); - StreamResult result = new StreamResult(os); - TransformerFactory tf = TransformerFactory.newInstance(); - Transformer transformer = tf.newTransformer(); - transformer.transform(domSource, result); + PipedInputStream is = new PipedInputStream(os); - PipedInputStream inputStream; - inputStream = new PipedInputStream(os); + XMLStreamEncoder xse = new XMLStreamEncoder(domSource, os); + xse.start(); - return inputStream; + return is; } /* Modified: trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/factories/LoggableElementFactory.java =================================================================== --- trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/factories/LoggableElementFactory.java 2008-02-01 09:58:10 UTC (rev 566) +++ trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/factories/LoggableElementFactory.java 2008-02-01 16:26:09 UTC (rev 567) @@ -29,7 +29,7 @@ public E loadElement(Element xmlElement) throws Exception { E element = super.loadElement(xmlElement); - MetaDataEntityFactory elementFactory = MetaDataEntityFactory.getFactory(MetaData.class); + MetaDataFactory elementFactory = MetaDataFactory.getFactory(MetaData.class); // Load metadata informations Element mdeElement = getXMLElementByTagName(xmlElement, KEY_METADATA); @@ -42,7 +42,7 @@ @Override public void saveElement(org.w3c.dom.Document document, Element xmlElement, E element) throws Exception { - MetaDataEntityFactory elementFactory = MetaDataEntityFactory.getFactory(MetaData.class); + MetaDataFactory elementFactory = MetaDataFactory.getFactory(MetaData.class); // Save metadata informations Element mdeElement = document.createElement(KEY_METADATA); Deleted: trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/factories/MetaDataEntityFactory.java =================================================================== --- trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/factories/MetaDataEntityFactory.java 2008-02-01 09:58:10 UTC (rev 566) +++ trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/factories/MetaDataEntityFactory.java 2008-02-01 16:26:09 UTC (rev 567) @@ -1,229 +0,0 @@ -/* -* ##% Copyright (C) 2008 Code Lutin, Gabriel Landais -* -* This program is free software; you can redistribute it and/or -* modify it under the terms of the GNU General Public License -* as published by the Free Software Foundation; either version 2 -* of the License, or (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program; if not, write to the Free Software -* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -* ##% */ -package fr.cemagref.simexplorer.is.factories; - -import java.io.InputStream; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; -import java.util.Set; - -import org.w3c.dom.Document; -import org.w3c.dom.Element; - -import fr.cemagref.simexplorer.is.contenttype.ContentType; -import fr.cemagref.simexplorer.is.contenttype.ContentTypeFactory; -import fr.cemagref.simexplorer.is.entities.metadata.MetaData; - -public class MetaDataEntityFactory<E extends MetaData> extends - BaseEntityFactory<MetaData> { - - private static final SimpleDateFormat sdf = new SimpleDateFormat( - "yyyy-MM-dd'T'HH:mm:ss"); - - @Override - public MetaData createInstance() { - return new MetaData(); - } - - @SuppressWarnings({"unchecked"}) - public static <E extends MetaData> MetaDataEntityFactory<E> getFactory( - Class<E> entityClass) throws Exception { - return (MetaDataEntityFactory) BaseEntityFactory.getFactory(entityClass); - } - /* - * (non-Javadoc) - * - * @see fr.cemagref.simexplorer.is.storage.factories.BaseEntityFactory#loadXMLElement(org.w3c.dom.Element) - */ - - @Override - public MetaData loadElement(Element xmlElement) throws Exception { - MetaData entity = super.loadElement(xmlElement); - entity.setUuid(getXMLProperty(xmlElement, KEY_METADATA_UUID)); - entity.setName(getXMLProperty(xmlElement, KEY_METADATA_NAME)); - entity.setType(getXMLProperty(xmlElement, KEY_METADATA_TYPE)); - entity.setDescription(getXMLProperty(xmlElement, - KEY_METADATA_DESCRIPTION)); - entity.setVersion(getXMLProperty(xmlElement, KEY_METADATA_VERSION)); - - String latestVersion = getXMLProperty(xmlElement, - KEY_METADATA_LATESTVERSION); - if (latestVersion != null && "1".equals(latestVersion)) { - entity.setLatest(true); - } else { - entity.setLatest(false); - } - - String creationDate = getXMLProperty(xmlElement, - KEY_METADATA_CREATIONDATE); - if (creationDate != null) { - Date date = sdf.parse(creationDate); - entity.setCreationDate(date); - } - - entity.setHash(getXMLProperty(xmlElement, KEY_METADATA_HASH)); - entity.setParentDataUuid(getXMLProperty(xmlElement, - KEY_METADATA_PARENTDATA_UUID)); - entity.setParentDataVersion(getXMLProperty(xmlElement, - KEY_METADATA_PARENTDATA_VERSION)); - entity.setParentVersionUuid(getXMLProperty(xmlElement, - KEY_METADATA_PARENTVERSION_UUID)); - entity.setParentVersionVersion(getXMLProperty(xmlElement, - KEY_METADATA_PARENTVERSION_VERSION)); - - Map<String, String> descriptors = new HashMap<String, String>(); - - Element descriptorsElement = getXMLElementByTagName(xmlElement, - KEY_METADATA_DESCRIPTORS); - if (descriptorsElement != null) { - Set<Element> descriptorElements = getXMLElementsByTagName( - descriptorsElement, KEY_METADATA_DESCRIPTOR); - for (Element descriptorElement : descriptorElements) { - String name = getXMLProperty(descriptorElement, - KEY_METADATA_DESCRIPTOR_NAME); - String value = getXMLProperty(descriptorElement, - KEY_METADATA_DESCRIPTOR_VALUE); - descriptors.put(name, value); - } - } - entity.setDescriptors(descriptors); - - Map<String, ContentType> attachments = new HashMap<String, ContentType>(); - - Element attachmentsElement = getXMLElementByTagName(xmlElement, - KEY_METADATA_ATTACHMENTS); - if (attachmentsElement != null) { - Set<Element> attachmentElements = getXMLElementsByTagName( - attachmentsElement, KEY_METADATA_ATTACHMENT); - for (Element attachmentElement : attachmentElements) { - String name = getXMLProperty(attachmentElement, - KEY_METADATA_ATTACHMENT_NAME); - String type = getXMLProperty(attachmentElement, - KEY_METADATA_ATTACHMENT_TYPE); - ContentType contentType = ContentTypeFactory - .getContentTypeInstance(type); - attachments.put(name, contentType); - } - } - - entity.setAttachments(attachments); - - return entity; - } - - @Override - public void saveElement(Document document, Element xmlElement, - MetaData element) throws Exception { - - setXMLProperty(document, xmlElement, KEY_METADATA_UUID, element - .getUuid()); - setXMLProperty(document, xmlElement, KEY_METADATA_NAME, element - .getName()); - setXMLProperty(document, xmlElement, KEY_METADATA_TYPE, element - .getType()); - setXMLProperty(document, xmlElement, KEY_METADATA_DESCRIPTION, element - .getDescription()); - setXMLProperty(document, xmlElement, KEY_METADATA_VERSION, element - .getVersion().toString()); - - if (element.isLatest()) { - setXMLProperty(document, xmlElement, KEY_METADATA_LATESTVERSION, - "1"); - } else { - setXMLProperty(document, xmlElement, KEY_METADATA_LATESTVERSION, - "0"); - } - - if (element.getCreationDate() != null) { - setXMLProperty(document, xmlElement, KEY_METADATA_CREATIONDATE, sdf - .format(element.getCreationDate())); - } - - setXMLProperty(document, xmlElement, KEY_METADATA_HASH, element - .getHash()); - setXMLProperty(document, xmlElement, KEY_METADATA_PARENTDATA_UUID, - element.getParentDataUuid()); - setXMLProperty(document, xmlElement, KEY_METADATA_PARENTDATA_VERSION, - element.getParentDataVersion()); - setXMLProperty(document, xmlElement, KEY_METADATA_PARENTVERSION_UUID, - element.getParentVersionUuid()); - setXMLProperty(document, xmlElement, - KEY_METADATA_PARENTVERSION_VERSION, element - .getParentVersionVersion()); - - Map<String, String> descriptors = element.getDescriptors(); - - Element descriptorsElement = document - .createElement(KEY_METADATA_DESCRIPTORS); - - for (Map.Entry<String, String> kv : descriptors.entrySet()) { - Element descriptorElement = document - .createElement(KEY_METADATA_DESCRIPTOR); - setXMLProperty(document, descriptorElement, - KEY_METADATA_DESCRIPTOR_NAME, kv.getKey()); - setXMLProperty(document, descriptorElement, - KEY_METADATA_DESCRIPTOR_VALUE, kv.getValue()); - descriptorsElement.appendChild(descriptorElement); - } - - xmlElement.appendChild(descriptorsElement); - - Map<String, ContentType> attachments = element.getAttachments(); - - if (attachments != null) { - - Element attachmentsElement = document - .createElement(KEY_METADATA_ATTACHMENTS); - - for (Map.Entry<String, ContentType> kv : attachments.entrySet()) { - Element attachmentElement = document - .createElement(KEY_METADATA_ATTACHMENT); - setXMLProperty(document, attachmentElement, - KEY_METADATA_ATTACHMENT_NAME, kv.getKey()); - setXMLProperty(document, attachmentElement, - KEY_METADATA_ATTACHMENT_TYPE, kv.getValue().getClass() - .getSimpleName()); - attachmentsElement.appendChild(attachmentElement); - } - xmlElement.appendChild(attachmentsElement); - - } - - } - - /** - * As metadata is stored inside an entity, this method loads metadata with - * parsing stream and retrieve metadata node - * - * @param xmlStream - * @return - * @throws Exception - */ - public MetaData loadElementFromParentXML(InputStream xmlStream) - throws Exception { - Document document = getXMLBuilder().parse(xmlStream); - Element rootElement = (Element) document.getFirstChild(); - Element mdeElement = getXMLElementByTagName(rootElement, KEY_METADATA); - MetaData mde; - mde = loadElement(mdeElement); - return mde; - } - -} Copied: trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/factories/MetaDataFactory.java (from rev 566, trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/factories/MetaDataEntityFactory.java) =================================================================== --- trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/factories/MetaDataFactory.java (rev 0) +++ trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/factories/MetaDataFactory.java 2008-02-01 16:26:09 UTC (rev 567) @@ -0,0 +1,249 @@ +/* +* ##% Copyright (C) 2008 Code Lutin, Gabriel Landais +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License +* as published by the Free Software Foundation; either version 2 +* of the License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* ##% */ +package fr.cemagref.simexplorer.is.factories; + +import java.io.InputStream; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +import fr.cemagref.simexplorer.is.attachment.Attachment; +import fr.cemagref.simexplorer.is.attachment.ContentType; +import fr.cemagref.simexplorer.is.attachment.ContentTypeFactory; +import fr.cemagref.simexplorer.is.entities.metadata.MetaData; + +public class MetaDataFactory<E extends MetaData> extends + BaseEntityFactory<MetaData> { + + private static final SimpleDateFormat sdf = new SimpleDateFormat( + "yyyy-MM-dd'T'HH:mm:ss"); + + @Override + public MetaData createInstance() { + return new MetaData(); + } + + @SuppressWarnings( { "unchecked" }) + public static <E extends MetaData> MetaDataFactory<E> getFactory( + Class<E> entityClass) throws Exception { + return (MetaDataFactory) BaseEntityFactory + .getFactory(entityClass); + } + + /* + * (non-Javadoc) + * + * @see fr.cemagref.simexplorer.is.storage.factories.BaseEntityFactory#loadXMLElement(org.w3c.dom.Element) + */ + + @Override + public MetaData loadElement(Element xmlElement) throws Exception { + MetaData entity = super.loadElement(xmlElement); + entity.setUuid(getXMLProperty(xmlElement, KEY_METADATA_UUID)); + entity.setName(getXMLProperty(xmlElement, KEY_METADATA_NAME)); + entity.setType(getXMLProperty(xmlElement, KEY_METADATA_TYPE)); + entity.setDescription(getXMLProperty(xmlElement, + KEY_METADATA_DESCRIPTION)); + entity.setVersion(getXMLProperty(xmlElement, KEY_METADATA_VERSION)); + + String latestVersion = getXMLProperty(xmlElement, + KEY_METADATA_LATESTVERSION); + if (latestVersion != null && "1".equals(latestVersion)) { + entity.setLatest(true); + } else { + entity.setLatest(false); + } + + String creationDate = getXMLProperty(xmlElement, + KEY_METADATA_CREATIONDATE); + if (creationDate != null) { + Date date = sdf.parse(creationDate); + entity.setCreationDate(date); + } + + entity.setHash(getXMLProperty(xmlElement, KEY_METADATA_HASH)); + entity.setParentDataUuid(getXMLProperty(xmlElement, + KEY_METADATA_PARENTDATA_UUID)); + entity.setParentDataVersion(getXMLProperty(xmlElement, + KEY_METADATA_PARENTDATA_VERSION)); + entity.setParentVersionUuid(getXMLProperty(xmlElement, + KEY_METADATA_PARENTVERSION_UUID)); + entity.setParentVersionVersion(getXMLProperty(xmlElement, + KEY_METADATA_PARENTVERSION_VERSION)); + + Map<String, String> descriptors = new HashMap<String, String>(); + + Element descriptorsElement = getXMLElementByTagName(xmlElement, + KEY_METADATA_DESCRIPTORS); + if (descriptorsElement != null) { + Set<Element> descriptorElements = getXMLElementsByTagName( + descriptorsElement, KEY_METADATA_DESCRIPTOR); + for (Element descriptorElement : descriptorElements) { + String name = getXMLProperty(descriptorElement, + KEY_METADATA_DESCRIPTOR_NAME); + String value = getXMLProperty(descriptorElement, + KEY_METADATA_DESCRIPTOR_VALUE); + descriptors.put(name, value); + } + } + entity.setDescriptors(descriptors); + + List<Attachment> attachments = new ArrayList<Attachment>(); + + Element attachmentsElement = getXMLElementByTagName(xmlElement, + KEY_METADATA_ATTACHMENTS); + if (attachmentsElement != null) { + Set<Element> attachmentElements = getXMLElementsByTagName( + attachmentsElement, KEY_METADATA_ATTACHMENT); + for (Element attachmentElement : attachmentElements) { + Attachment attachment = new Attachment(); + + String name = getXMLProperty(attachmentElement, + KEY_METADATA_ATTACHMENT_NAME); + attachment.setFileName(name); + + String type = getXMLProperty(attachmentElement, + KEY_METADATA_ATTACHMENT_TYPE); + ContentType contentType = ContentTypeFactory + .getContentTypeInstance(type); + attachment.setContentType(contentType); + + String dataHash = getXMLProperty(attachmentElement, + KEY_METADATA_ATTACHMENT_HASH); + attachment.setDataHash(Integer.parseInt(dataHash)); + + attachments.add(attachment); + } + } + + entity.setAttachments(attachments); + + return entity; + } + + @Override + public void saveElement(Document document, Element xmlElement, + MetaData element) throws Exception { + + setXMLProperty(document, xmlElement, KEY_METADATA_UUID, element + .getUuid()); + setXMLProperty(document, xmlElement, KEY_METADATA_NAME, element + .getName()); + setXMLProperty(document, xmlElement, KEY_METADATA_TYPE, element + .getType()); + setXMLProperty(document, xmlElement, KEY_METADATA_DESCRIPTION, element + .getDescription()); + setXMLProperty(document, xmlElement, KEY_METADATA_VERSION, element + .getVersion().toString()); + + if (element.isLatest()) { + setXMLProperty(document, xmlElement, KEY_METADATA_LATESTVERSION, + "1"); + } else { + setXMLProperty(document, xmlElement, KEY_METADATA_LATESTVERSION, + "0"); + } + + if (element.getCreationDate() != null) { + setXMLProperty(document, xmlElement, KEY_METADATA_CREATIONDATE, sdf + .format(element.getCreationDate())); + } + + setXMLProperty(document, xmlElement, KEY_METADATA_HASH, element + .getHash()); + setXMLProperty(document, xmlElement, KEY_METADATA_PARENTDATA_UUID, + element.getParentDataUuid()); + setXMLProperty(document, xmlElement, KEY_METADATA_PARENTDATA_VERSION, + element.getParentDataVersion()); + setXMLProperty(document, xmlElement, KEY_METADATA_PARENTVERSION_UUID, + element.getParentVersionUuid()); + setXMLProperty(document, xmlElement, + KEY_METADATA_PARENTVERSION_VERSION, element + .getParentVersionVersion()); + + Map<String, String> descriptors = element.getDescriptors(); + + Element descriptorsElement = document + .createElement(KEY_METADATA_DESCRIPTORS); + + for (Map.Entry<String, String> kv : descriptors.entrySet()) { + Element descriptorElement = document + .createElement(KEY_METADATA_DESCRIPTOR); + setXMLProperty(document, descriptorElement, + KEY_METADATA_DESCRIPTOR_NAME, kv.getKey()); + setXMLProperty(document, descriptorElement, + KEY_METADATA_DESCRIPTOR_VALUE, kv.getValue()); + descriptorsElement.appendChild(descriptorElement); + } + + xmlElement.appendChild(descriptorsElement); + + List<Attachment> attachments = element.getAttachments(); + + if (attachments != null) { + + Element attachmentsElement = document + .createElement(KEY_METADATA_ATTACHMENTS); + + for (Attachment attachment : attachments) { + Element attachmentElement = document + .createElement(KEY_METADATA_ATTACHMENT); + + setXMLProperty(document, attachmentElement, + KEY_METADATA_ATTACHMENT_NAME, attachment.getFileName()); + setXMLProperty(document, attachmentElement, + KEY_METADATA_ATTACHMENT_TYPE, attachment + .getContentType().getClass().getSimpleName()); + setXMLProperty(document, attachmentElement, + KEY_METADATA_ATTACHMENT_HASH, Integer + .toString(attachment.getDataHash())); + + attachmentsElement.appendChild(attachmentElement); + } + xmlElement.appendChild(attachmentsElement); + + } + + } + + /** + * As metadata is stored inside an entity, this method loads metadata with + * parsing stream and retrieve metadata node + * + * @param xmlStream + * @return + * @throws Exception + */ + public MetaData loadElementFromParentXML(InputStream xmlStream) + throws Exception { + Document document = getXMLBuilder().parse(xmlStream); + Element rootElement = (Element) document.getFirstChild(); + Element mdeElement = getXMLElementByTagName(rootElement, KEY_METADATA); + MetaData mde; + mde = loadElement(mdeElement); + return mde; + } + +} Added: trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/factories/XMLStreamEncoder.java =================================================================== --- trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/factories/XMLStreamEncoder.java (rev 0) +++ trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/factories/XMLStreamEncoder.java 2008-02-01 16:26:09 UTC (rev 567) @@ -0,0 +1,60 @@ +/* +* ##% Copyright (C) 2008 Code Lutin, Gabriel Landais +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License +* as published by the Free Software Foundation; either version 2 +* of the License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* ##% */ +package fr.cemagref.simexplorer.is.factories; + +import java.io.IOException; +import java.io.PipedOutputStream; + +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerConfigurationException; +import javax.xml.transform.TransformerException; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; + +public class XMLStreamEncoder extends Thread { + + private DOMSource domSource; + private PipedOutputStream os; + + private StreamResult result; + private Transformer transformer; + + public XMLStreamEncoder(DOMSource domSource, PipedOutputStream os) + throws TransformerConfigurationException { + super(); + this.domSource = domSource; + this.os = os; + + result = new StreamResult(os); + TransformerFactory tf = TransformerFactory.newInstance(); + transformer = tf.newTransformer(); + } + + public void run() { + try { + transformer.transform(domSource, result); + result.getOutputStream().close(); + } catch (TransformerException e) { + // TODO + } catch (IOException e) { + // TODO + } + } + +} Modified: trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/factories/XmlConstants.java =================================================================== --- trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/factories/XmlConstants.java 2008-02-01 09:58:10 UTC (rev 566) +++ trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/factories/XmlConstants.java 2008-02-01 16:26:09 UTC (rev 567) @@ -82,6 +82,7 @@ public static final String KEY_METADATA_ATTACHMENT_NAME = "name"; public static final String KEY_METADATA_ATTACHMENT_TYPE = "type"; + public static final String KEY_METADATA_ATTACHMENT_HASH = "hash"; public static final String FILE_XML = "data.xml"; public static final String FILE_DATA_PREFIX = "attachment"; Modified: trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/ElementGenerator.java =================================================================== --- trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/ElementGenerator.java 2008-02-01 09:58:10 UTC (rev 566) +++ trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/ElementGenerator.java 2008-02-01 16:26:09 UTC (rev 567) @@ -17,9 +17,8 @@ * ##% */ package fr.cemagref.simexplorer.is.service; +import java.io.ByteArrayInputStream; import java.io.InputStream; -import java.io.PipedInputStream; -import java.io.PipedOutputStream; import java.util.Date; import java.util.HashMap; import java.util.HashSet; @@ -30,7 +29,8 @@ import org.apache.commons.lang.RandomStringUtils; -import fr.cemagref.simexplorer.is.contenttype.ContentTypeFactory; +import fr.cemagref.simexplorer.is.attachment.Attachment; +import fr.cemagref.simexplorer.is.attachment.ContentTypeFactory; import fr.cemagref.simexplorer.is.entities.data.Code; import fr.cemagref.simexplorer.is.entities.data.Component; import fr.cemagref.simexplorer.is.entities.data.Constant; @@ -170,9 +170,17 @@ } + private Attachment generateAttachment() throws Exception { + Attachment attachment = new Attachment(); + attachment.setContentType(ContentTypeFactory + .getContentTypeInstance("RawType")); + attachment.setDataHash(r.nextInt()); + attachment.setFileName(shortString() + ".txt"); + return attachment; + } + private void processLibrary(Library library) throws Exception { - library.getMetaData().getAttachments().put(shortString() + ".txt", - ContentTypeFactory.getContentTypeInstance("RawType")); + library.getMetaData().getAttachments().add(generateAttachment()); } private void processCode(Code code) { @@ -189,9 +197,8 @@ throws Exception { Result result = new Result(); explorationData.setResult(result); - explorationData.getMetaData().getAttachments().put( - shortString() + ".txt", - ContentTypeFactory.getContentTypeInstance("RawType")); + explorationData.getMetaData().getAttachments() + .add(generateAttachment()); Set<ConstantValue> constantValues = generateArray(ConstantValue.class); for (ConstantValue constantValue : constantValues) { @@ -211,14 +218,12 @@ } public InputStream generateTextStream() throws Exception { - PipedOutputStream os = new PipedOutputStream(); int wordcount = 300 + r.nextInt(300); StringBuffer sb = new StringBuffer(); for (int i = 0; i < wordcount; i++) { sb.append(randomstrings[r.nextInt(cs)]).append(" "); } - os.write(sb.toString().getBytes()); - InputStream is = new PipedInputStream(os); + InputStream is = new ByteArrayInputStream(sb.toString().getBytes()); return is; } } 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-01 09:58:10 UTC (rev 566) +++ trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceCommon.java 2008-02-01 16:26:09 UTC (rev 567) @@ -26,10 +26,8 @@ import java.util.List; import java.util.Map; import java.util.Set; -import java.util.zip.Deflater; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; -import java.util.zip.ZipOutputStream; import org.w3c.dom.Document; import org.w3c.dom.Element; @@ -39,12 +37,12 @@ import com.healthmarketscience.rmiio.RemoteInputStreamServer; import com.healthmarketscience.rmiio.SimpleRemoteInputStream; -import fr.cemagref.simexplorer.is.contenttype.ContentType; +import fr.cemagref.simexplorer.is.attachment.Attachment; import fr.cemagref.simexplorer.is.entities.data.LoggableElement; import fr.cemagref.simexplorer.is.entities.metadata.MetaData; import fr.cemagref.simexplorer.is.entities.metadata.Version; import fr.cemagref.simexplorer.is.factories.BaseEntityFactory; -import fr.cemagref.simexplorer.is.factories.MetaDataEntityFactory; +import fr.cemagref.simexplorer.is.factories.MetaDataFactory; import fr.cemagref.simexplorer.is.factories.XmlConstants; import fr.cemagref.simexplorer.is.storage.StorageException; import fr.cemagref.simexplorer.is.storage.engine.StorageEngine; @@ -69,8 +67,7 @@ } } - public MetaData saveElement(String token, - RemoteInputStream zipRemoteStream) + public MetaData saveElement(String token, RemoteInputStream zipRemoteStream) throws SimExplorerServiceException { InputStream zipStream; try { @@ -205,7 +202,12 @@ } } } - return saveElement(token, xmlFile, attachments); + MetaData elementSaved = saveElement(token, xmlFile, attachments); + getStorageEngine().deleteTempData(xmlFile); + for (Map.Entry<String, String> tmpId : attachments.entrySet()) { + getStorageEngine().deleteTempData(tmpId.getValue()); + } + return elementSaved; } catch (Exception e) { throw new SimExplorerServiceException(e); } @@ -221,7 +223,12 @@ entry.getValue()); idsattachment.put(entry.getKey(), idattachment); } - return saveElement(token, idxml, idsattachment); + MetaData elementSaved = saveElement(token, idxml, idsattachment); + getStorageEngine().deleteTempData(idxml); + for (Map.Entry<String, String> tmpId : idsattachment.entrySet()) { + getStorageEngine().deleteTempData(tmpId.getValue()); + } + return elementSaved; } public RemoteInputStream retrieveData(String token, String uuid, @@ -229,7 +236,7 @@ try { MetaData mde = getMetadata(token, uuid, version); InputStream stream = getStorageEngine().retrieveData(token, mde, - dataKey); + Attachment.getFileNameFromUniqueId(dataKey)); RemoteInputStreamServer remoteStream = new SimpleRemoteInputStream( stream); return remoteStream.export(); @@ -270,19 +277,21 @@ List<LoggableElement> children = element.getChildren(); for (LoggableElement loggableElement : children) { MetaData thisMde = loggableElement.getMetaData(); - Map<String, ContentType> attachments = loggableElement - .getMetaData().getAttachments(); - for (Map.Entry<String, ContentType> kv : attachments.entrySet()) { - files.put(FILE_DATA_PREFIX + "/" + kv.getKey(), + List<Attachment> attachments = loggableElement.getMetaData() + .getAttachments(); + for (Attachment attachment : attachments) { + files.put( + FILE_DATA_PREFIX + "/" + attachment.getUniqueId(), getStorageEngine().retrieveData(token, thisMde, - kv.getKey())); + attachment.getFileName())); } } + PipedInputStream pipedIn = new PipedInputStream(pipedOut); + ZipStreamEncoder zse = new ZipStreamEncoder(files, pipedOut); zse.start(); - PipedInputStream pipedIn = new PipedInputStream(pipedOut); RemoteInputStreamServer remoteStream = new SimpleRemoteInputStream( pipedIn); return remoteStream.export(); @@ -306,8 +315,7 @@ private MetaData saveElement(String token, String idxml, Map<String, String> idsattachment) throws Exception { // Load metadata xml - MetaDataEntityFactory mdeFactory = MetaDataEntityFactory - .getFactory(MetaData.class); + MetaDataFactory mdeFactory = MetaDataFactory.getFactory(MetaData.class); MetaData metaData = mdeFactory .loadElementFromParentXML(getStorageEngine().retrieveTempData( idxml)); @@ -337,10 +345,12 @@ attachments.put(KEY_XML, getStorageEngine().retrieveTempData(idxml)); - Map<String, ContentType> realAttachments = metaData.getAttachments(); - for (Map.Entry<String, ContentType> entry : realAttachments.entrySet()) { - attachments.put(entry.getKey(), getStorageEngine() - .retrieveTempData(idsattachment.get(entry.getKey()))); + List<Attachment> realAttachments = metaData.getAttachments(); + for (Attachment attachment : realAttachments) { + + attachments.put(attachment.getFileName(), getStorageEngine() + .retrieveTempData( + idsattachment.get(attachment.getUniqueId()))); } getStorageEngine().saveElement(token, metaData, attachments); @@ -353,7 +363,7 @@ String entitiesNode, String entityNode, Map<String, String> idsattachment) throws Exception { - BaseEntityFactory<MetaData> elementFactory = MetaDataEntityFactory + BaseEntityFactory<MetaData> elementFactory = MetaDataFactory .getFactory(MetaData.class); Document document = BaseEntityFactory.getXMLBuilder().parse( @@ -367,8 +377,10 @@ Set<Element> entityElements = elementFactory.getXMLElementsByTagName( entitiesElement, entityNode); for (Element element : entityElements) { - saveElement(token, getStorageEngine().storeTempData( - BaseEntityFactory.serializeElement(element)), idsattachment); + String elementDataId = getStorageEngine().storeTempData( + BaseEntityFactory.serializeElement(element)); + saveElement(token, elementDataId, idsattachment); + getStorageEngine().deleteTempData(elementDataId); } } @@ -399,8 +411,8 @@ public MetaData[] getVersions(String token, String uuid) throws SimExplorerServiceException { try { - Set<MetaData> versions = getStorageEngine() - .getElementVersions(token, uuid); + Set<MetaData> versions = getStorageEngine().getElementVersions( + token, uuid); return versions.toArray(new MetaData[versions.size()]); } catch (StorageException e) { throw new SimExplorerServiceException(e); Modified: trunk/simexplorer-is-service/src/test/fr/cemagref/simexplorer/is/service/StorageServiceMassInsert.java =================================================================== --- trunk/simexplorer-is-service/src/test/fr/cemagref/simexplorer/is/service/StorageServiceMassInsert.java 2008-02-01 09:58:10 UTC (rev 566) +++ trunk/simexplorer-is-service/src/test/fr/cemagref/simexplorer/is/service/StorageServiceMassInsert.java 2008-02-01 16:26:09 UTC (rev 567) @@ -18,8 +18,10 @@ package fr.cemagref.simexplorer.is.service; import java.io.InputStream; +import java.util.ArrayList; import java.util.Date; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.Properties; import java.util.Random; @@ -34,7 +36,8 @@ import com.healthmarketscience.rmiio.RemoteInputStreamServer; import com.healthmarketscience.rmiio.SimpleRemoteInputStream; -import fr.cemagref.simexplorer.is.contenttype.ContentType; +import fr.cemagref.simexplorer.is.attachment.Attachment; +import fr.cemagref.simexplorer.is.attachment.ContentType; import fr.cemagref.simexplorer.is.entities.data.Component; import fr.cemagref.simexplorer.is.entities.data.ExplorationApplication; import fr.cemagref.simexplorer.is.entities.data.ExplorationData; @@ -114,31 +117,30 @@ Map<String, RemoteInputStream> attachments = new HashMap<String, RemoteInputStream>(); - Map<String, ContentType> attachmentsKeys = new HashMap<String, ContentType>(); + List<Attachment> attachmentsKeys = new ArrayList<Attachment>(); - attachmentsKeys.putAll(ea.getMetaData().getAttachments()); + attachmentsKeys.addAll(ea.getMetaData().getAttachments()); Set<Component> components = ea.getComponents(); for (Component component : components) { - attachmentsKeys.putAll(component.getMetaData() + attachmentsKeys.addAll(component.getMetaData() .getAttachments()); Set<Library> libraries = component.getLibraries(); for (Library library : libraries) { - attachmentsKeys.putAll(library.getMetaData() + attachmentsKeys.addAll(library.getMetaData() .getAttachments()); } } Set<ExplorationData> explorations = ea.getExplorations(); for (ExplorationData explorationData : explorations) { - attachmentsKeys.putAll(explorationData.getMetaData() + attachmentsKeys.addAll(explorationData.getMetaData() .getAttachments()); } - for (Map.Entry<String, ContentType> kv : attachmentsKeys - .entrySet()) { + for (Attachment attachment : attachmentsKeys) { InputStream stream = elementGenerator.generateTextStream(); RemoteInputStreamServer remoteStream = new SimpleRemoteInputStream( stream); - attachments.put(kv.getKey(), remoteStream.export()); + attachments.put(attachment.getUniqueId(), remoteStream.export()); } RemoteInputStreamServer xmlRemoteStream = new SimpleRemoteInputStream( Modified: trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/MetaDataGenerator.java =================================================================== --- trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/MetaDataGenerator.java 2008-02-01 09:58:10 UTC (rev 566) +++ trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/MetaDataGenerator.java 2008-02-01 16:26:09 UTC (rev 567) @@ -17,13 +17,14 @@ * ##% */ package fr.cemagref.simexplorer.is.storage; +import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.Random; import java.util.UUID; -import fr.cemagref.simexplorer.is.contenttype.ContentType; +import fr.cemagref.simexplorer.is.attachment.Attachment; import fr.cemagref.simexplorer.is.entities.metadata.MetaData; import fr.cemagref.simexplorer.is.entities.metadata.Version; @@ -83,7 +84,7 @@ descriptors.put("descriptor" + j, UUID.randomUUID().toString()); } me.setDescriptors(descriptors); - me.setAttachments(new HashMap<String, ContentType>()); + me.setAttachments(new ArrayList<Attachment>()); me.setParentDataUuid(null); me.setParentDataVersion(null); me.setParentVersionUuid(null); Modified: trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/attachment/FileSystemAttachmentHandler.java =================================================================== --- trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/attachment/FileSystemAttachmentHandler.java 2008-02-01 09:58:10 UTC (rev 566) +++ trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/attachment/FileSystemAttachmentHandler.java 2008-02-01 16:26:09 UTC (rev 567) @@ -93,9 +93,12 @@ @Override public void storeData(MetaData entity, String field, InputStream is) throws StorageException { + + // Simple stream on file try { - FileOutputStream fos = new FileOutputStream(getFile(entity, field)); + File file = getFile(entity, field); + FileOutputStream fos = new FileOutputStream(file); // Buffer copy stream to stream BufferedInputStream bin = new BufferedInputStream(is); Modified: trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/database/DatabaseConstants.java =================================================================== --- trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/database/DatabaseConstants.java 2008-02-01 09:58:10 UTC (rev 566) +++ trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/database/DatabaseConstants.java 2008-02-01 16:26:09 UTC (rev 567) @@ -63,10 +63,30 @@ */ public static final String KEY_DESCRIPTOR = "simexplorer.descriptor"; /** + * Field name for descriptor + */ + public static final String KEY_DESCRIPTOR_KEY = "key"; + /** + * Field name for descriptor + */ + public static final String KEY_DESCRIPTOR_VALUE = "value"; + /** * Field name for attachment */ public static final String KEY_ATTACHMENT = "simexplorer.attachment"; /** + * Field name for attachment + */ + public static final String KEY_ATTACHMENT_FILENAME = "filename"; + /** + * Field name for attachment + */ + public static final String KEY_ATTACHMENT_HASH = "hash"; + /** + * Field name for attachment + */ + public static final String KEY_ATTACHMENT_TYPE = "type"; + /** * Field name for id of parent data */ public static final String KEY_PARENTDATA_UUID = "simexplorer.parentdata.uuid"; Modified: trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/database/lucene/LuceneDatabase.java =================================================================== --- trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/database/lucene/LuceneDatabase.java 2008-02-01 09:58:10 UTC (rev 566) +++ trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/database/lucene/LuceneDatabase.java 2008-02-01 16:26:09 UTC (rev 567) @@ -27,6 +27,7 @@ import java.util.List; import java.util.Map; import java.util.Set; +import java.util.StringTokenizer; import java.util.Map.Entry; import org.apache.lucene.analysis.Analyzer; @@ -34,7 +35,6 @@ import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.apache.lucene.document.Fieldable; -import org.apache.lucene.index.CorruptIndexException; import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.Term; @@ -53,13 +53,15 @@ import org.apache.lucene.store.LockFactory; import org.apache.lucene.store.NoLockFactory; -import fr.cemagref.simexplorer.is.contenttype.ContentType; -import fr.cemagref.simexplorer.is.contenttype.ContentTypeFactory; +import fr.cemagref.simexplorer.is.attachment.Attachment; +import fr.cemagref.simexplorer.is.attachment.ContentType; +import fr.cemagref.simexplorer.is.attachment.ContentTypeFactory; import fr.cemagref.simexplorer.is.entities.metadata.MetaData; import fr.cemagref.simexplorer.is.entities.metadata.Version; import fr.cemagref.simexplorer.is.storage.StorageException; import fr.cemagref.simexplorer.is.storage.database.Database; import fr.cemagref.simexplorer.is.storage.util.Config; +import fr.cemagref.simexplorer.is.storage.util.KeyValue; /** * Lucene implementation @@ -595,8 +597,8 @@ * @return Entities list * @throws Exception */ - private Set<MetaData> convertHitsToElements(Hits hits, int start, - int count) throws Exception { + private Set<MetaData> convertHitsToElements(Hits hits, int start, int count) + throws Exception { Set<MetaData> elements = new HashSet<MetaData>(); if (hits != null) { // For documents in range @@ -618,8 +620,7 @@ * @return Instance of element * @throws Exception */ - private MetaData loadLuceneElement(Document document) - throws Exception { + private MetaData loadLuceneElement(Document document) throws Exception { MetaData element = new MetaData(); // Fill element with Lucene document @@ -642,32 +643,73 @@ } element.setHash(document.get(KEY_HASH)); - Map<String, String> descriptors = new HashMap<String, String>(); - Map<String, ContentType> attachments = new HashMap<String, ContentType>(); + Map<Integer, KeyValue> descriptors = new HashMap<Integer, KeyValue>(); + Map<Integer, Attachment> attachments = new HashMap<Integer, Attachment>(); List<Fieldable> fields = document.getFields(); for (Fieldable fieldable : fields) { if (fieldable.name().startsWith(KEY_DESCRIPTOR)) { - String field = fieldable.name().replace(KEY_DESCRIPTOR + ".", - ""); - String value = fieldable.stringValue(); - descriptors.put(field, value); + String fieldValue = fieldable.stringValue(); + + String key = fieldable.name().replace(KEY_DESCRIPTOR + ".", ""); + StringTokenizer st = new StringTokenizer(key, "."); + Integer iDescriptor = Integer.valueOf(st.nextToken()); + + KeyValue kv = descriptors.get(iDescriptor); + if (kv == null) { + kv = new KeyValue(); + descriptors.put(iDescriptor, kv); + } + + if (st.nextToken().equals(KEY_DESCRIPTOR_KEY)) { + kv.setKey(fieldValue); + } else { + kv.setValue(fieldValue); + } } if (fieldable.name().startsWith(KEY_ATTACHMENT)) { - String field = fieldable.name().replace(KEY_ATTACHMENT + ".", - ""); - String value = fieldable.stringValue(); - ContentType contentType = ContentTypeFactory - .getContentTypeInstance(value); - attachments.put(field, contentType); + + String fieldValue = fieldable.stringValue(); + + String key = fieldable.name().replace(KEY_ATTACHMENT + ".", ""); + StringTokenizer st = new StringTokenizer(key, "."); + Integer iAttachment = Integer.valueOf(st.nextToken()); + + Attachment attachment = attachments.get(iAttachment); + if (attachment == null) { + attachment = new Attachment(); + attachments.put(iAttachment, attachment); + } + + String field = st.nextToken(); + + if (field.equals(KEY_ATTACHMENT_FILENAME)) { + attachment.setFileName(fieldValue); + } + if (field.equals(KEY_ATTACHMENT_HASH)) { + attachment.setDataHash(Attachment.intFromHexString("0X" + fieldValue)); + } + if (field.equals(KEY_ATTACHMENT_TYPE)) { + attachment.setContentType(ContentTypeFactory + .getContentTypeInstance(fieldValue)); + } } } - element.setDescriptors(descriptors); + Map<String, String> finalDescriptors = new HashMap<String, String>(); + for (Map.Entry<Integer, KeyValue> entry : descriptors.entrySet()) { + finalDescriptors.put(entry.getValue().getKey(), entry.getValue() + .getKey()); + } + element.setDescriptors(finalDescriptors); - element.setAttachments(attachments); + List<Attachment> finalAttachments = new ArrayList<Attachment>(); + for (Map.Entry<Integer, Attachment> entry : attachments.entrySet()) { + finalAttachments.add(entry.getValue()); + } + element.setAttachments(finalAttachments); element.setParentDataUuid(document.get(KEY_PARENTDATA_UUID)); element.setParentDataVersion(document.get(KEY_PARENTDATA_VERSION)); @@ -707,8 +749,7 @@ * @return * @throws Exception */ - private Document saveLuceneElement(MetaData element, - List<Reader> readers) { + private Document saveLuceneElement(MetaData element, List<Reader> readers) { Document document = new Document(); // Store all element properties in Lucene document @@ -734,19 +775,27 @@ addSimpleField(document, KEY_HASH, element.getHash()); Map<String, String> descriptors = element.getDescriptors(); + int i = 0; for (Map.Entry<String, String> entry : descriptors.entrySet()) { - String key = KEY_DESCRIPTOR + "." + entry.getKey(); - String value = entry.getValue(); - addSimpleField(document, key, value); + String key = KEY_DESCRIPTOR + "." + i; + addSimpleField(document, key + "." + KEY_DESCRIPTOR_KEY, entry + .getKey()); + addSimpleField(document, key + "." + KEY_DESCRIPTOR_VALUE, entry + .getValue()); + i++; } - Map<String, ContentType> attachments = element.getAttachments(); - for (Map.Entry<String, ContentType> entry : attachments.entrySet()) { - String key = KEY_ATTACHMENT + "." + entry.getKey(); - ContentType value = entry.getValue(); - if (value != null) { - addSimpleField(document, key, value.getClass().getSimpleName()); - } + List<Attachment> attachments = element.getAttachments(); + i = 0; + for (Attachment attachment : attachments) { + String key = KEY_ATTACHMENT + "." + i; + addSimpleField(document, key + "." + KEY_ATTACHMENT_FILENAME, + attachment.getFileName()); + addSimpleField(document, key + "." + KEY_ATTACHMENT_HASH, Integer + .toHexString(attachment.getDataHash())); + addSimpleField(document, key + "." + KEY_ATTACHMENT_TYPE, + attachment.getContentType().getClass().getSimpleName()); + i++; } addSimpleField(document, KEY_PARENTDATA_UUID, element @@ -764,5 +813,4 @@ return document; } - } Modified: trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngineImpl.java =================================================================== --- trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngineImpl.java 2008-02-01 09:58:10 UTC (rev 566) +++ trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngineImpl.java 2008-02-01 16:26:09 UTC (rev 567) @@ -26,7 +26,8 @@ import java.util.Set; import java.util.UUID; -import fr.cemagref.simexplorer.is.contenttype.ContentType; +import fr.cemagref.simexplorer.is.attachment.Attachment; +import fr.cemagref.simexplorer.is.attachment.ContentType; import fr.cemagref.simexplorer.is.entities.metadata.MetaData; import fr.cemagref.simexplorer.is.entities.metadata.Version; import fr.cemagref.simexplorer.is.storage.StorageException; @@ -120,11 +121,13 @@ InputStream content = attachmentHandler .retrieveData(element, field); if (element.getAttachments() != null) { - ContentType contentType = element.getAttachments().get(field); - if (contentType != null) { + Attachment attachment = findAttachment(field, element + .getAttachments()); + if (attachment != null) { try { // Transform stream into indexable text - Reader reader = contentType.renderToText(content); + Reader reader = attachment.getContentType() + .renderToText(content); readers.add(reader); } catch (Exception e) { throw new StorageException(e); @@ -146,6 +149,16 @@ database.insertElement(element, readers); } + private Attachment findAttachment(String uniqueId, + List<Attachment> attachments) { + for (Attachment attachment : attachments) { + if (attachment.getUniqueId().equals(uniqueId)) { + return attachment; + } + } + return null; + } + // Read /* (non-Javadoc) @@ -181,8 +194,8 @@ /* (non-Javadoc) * @see fr.cemagref.simexplorer.is.storage.engine.StorageEngine#retrieveData(fr.cemagref.simexplorer.is.entities.metadata.MetaData, java.lang.String) */ - public InputStream retrieveData(String token, MetaData entity, - String field) throws StorageException { + public InputStream retrieveData(String token, MetaData entity, String field) + throws StorageException { InputStream result = attachmentHandler.retrieveData(entity, field); return result; } @@ -245,9 +258,9 @@ public void deleteElement(String token, String uuid, Version version) throws StorageException { MetaData element = getMetadata(token, uuid, version); - Map<String, ContentType> attachments = element.getAttachments(); - for (Map.Entry<String, ContentType> entry : attachments.entrySet()) { - attachmentHandler.deleteData(element, entry.getKey()); + List<Attachment> attachments = element.getAttachments(); + for (Attachment attachment : attachments) { + attachmentHandler.deleteData(element, attachment.getUniqueId()); } database.deleteElement(element); } Added: trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/util/KeyValue.java =================================================================== --- trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/util/KeyValue.java (rev 0) +++ trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/util/KeyValue.java 2008-02-01 16:26:09 UTC (rev 567) @@ -0,0 +1,42 @@ +/* +* ##% Copyright (C) 2008 Code Lutin, Gabriel Landais +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License +* as published by the Free Software Foundation; either version 2 +* of the License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* ##% */ +package fr.cemagref.simexplorer.is.storage.util; + +public class KeyValue { + + private String key; + + private String value; + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + +} Modified: trunk/simexplorer-is-storage/src/resources/properties/config.properties =================================================================== --- trunk/simexplorer-is-storage/src/resources/properties/config.properties 2008-02-01 09:58:10 UTC (rev 566) +++ trunk/simexplorer-is-storage/src/resources/properties/config.properties 2008-02-01 16:26:09 UTC (rev 567) @@ -1,3 +1,3 @@ -simexplorer.db=/var/local/simexplorer/db4 -simexplorer.data=/var/local/simexplorer/data4/ +simexplorer.db=/var/local/simexplorer/db5 +simexplorer.data=/var/local/simexplorer/data5/ simexplorer.optimizeperiod=3600 Modified: trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/StorageServiceHelper.java =================================================================== --- trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/StorageServiceHelper.java 2008-02-01 09:58:10 UTC (rev 566) +++ trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/StorageServiceHelper.java 2008-02-01 16:26:09 UTC (rev 567) @@ -41,10 +41,10 @@ return size; } - public static MetaDataEntity[] getData(SimExplorerContext context, boolean remote, boolean onlyLatest, String query, long newFirstIndex, int width, int rowOrder) throws Exception { + public static MetaData[] getData(SimExplorerContext context, boolean remote, boolean onlyLatest, String query, long newFirstIndex, int width, int rowOrder) throws Exception { StorageService service = context.getStorageService(remote); String token = context.getToken(); - MetaDataEntity[] data; + MetaData[] data; if (query == null || query.isEmpty()) { data = service.findApplications(token, onlyLatest, (int) newFirstIndex, width, rowOrder); } else { Modified: trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/action/application/ExportApplicationAction.java =================================================================== --- trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/action/application/ExportApplicationAction.java 2008-02-01 09:58:10 UTC (rev 566) +++ trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/action/application/ExportApplicationAction.java 2008-02-01 16:26:09 UTC (rev 567) @@ -85,7 +85,7 @@ //TODO Where to save (if local to remote and vice-versa ?) StorageService service = getContext().getStorageService(((DetailTabModel) getModel()).isRemote()); - service.exportElement(getContext().getToken(), null, uuid, version.toString()); + //service.exportElement(getContext().getToken(), null, uuid, version.toString()); } @Override Modified: trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/action/tab/ShowDetailTabAction.java =================================================================== --- trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/action/tab/ShowDetailTabAction.java 2008-02-01 09:58:10 UTC (rev 566) +++ trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/action/tab/ShowDetailTabAction.java 2008-02-01 16:26:09 UTC (rev 567) @@ -76,7 +76,7 @@ // mark it, after action will push table model firstTime = getUI() == null; - MetaDataEntity data = listModel.get(model.getIndex()); + MetaData data = listModel.get(model.getIndex()); String uuid = data.getUuid(); Version version = data.getVersion(); log.info("show detail uuid:" + uuid + ", version:" + version + " (remote ?" + model.isRemote() + ")"); Modified: trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/action/tab/ShowLocalTabAction.java =================================================================== --- trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/action/tab/ShowLocalTabAction.java 2008-02-01 09:58:10 UTC (rev 566) +++ trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/action/tab/ShowLocalTabAction.java 2008-02-01 16:26:09 UTC (rev 567) @@ -71,7 +71,7 @@ ListTabModel model = (ListTabModel) getModel(); - MetaDataEntity[] data = model.getList(); + MetaData[] data = model.getList(); if (data == null) { // first coming here, init model Modified: trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/action/tab/ShowRemoteTabAction.java =================================================================== --- trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/action/tab/ShowRemoteTabAction.java 2008-02-01 09:58:10 UTC (rev 566) +++ trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/action/tab/ShowRemoteTabAction.java 2008-02-01 16:26:09 UTC (rev 567) @@ -74,7 +74,7 @@ ListTabModel model = (ListTabModel) getModel(); - MetaDataEntity[] data = model.getList(); + MetaData[] data = model.getList(); if (data == null) { // first coming here, init model Modified: trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/JApplicationTableModel.java =================================================================== --- trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/JApplicationTableModel.java 2008-02-01 09:58:10 UTC (rev 566) +++ trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/JApplicationTableModel.java 2008-02-01 16:26:09 UTC (rev 567) @@ -36,7 +36,7 @@ /** @author tony */ public class JApplicationTableModel extends AbstractTableModel { - MetaDataEntity[] data; + MetaData[] data; PropertyDescriptor[] descriptors; private static final long serialVersionUID = -105647814466295077L; @@ -45,15 +45,15 @@ public JApplicationTableModel() { } - public JApplicationTableModel(MetaDataEntity[] data) { + public JApplicationTableModel(MetaData[] data) { this.data = data; } - public MetaDataEntity[] getData() { + public MetaData[] getData() { return data; } - public void setData(MetaDataEntity[] data) { + public void setData(MetaData[] data) { this.data = data; } @@ -75,7 +75,7 @@ public Object getValueAt(int rowIndex, int columnIndex) { Object result = null; - MetaDataEntity current = data[rowIndex]; + MetaData current = data[rowIndex]; if (current != null) { try { PropertyDescriptor propertyDescriptor = getDescriptors()[columnIndex]; @@ -103,7 +103,7 @@ descriptors = new PropertyDescriptor[columnNames.length]; BeanInfo beanInfo; try { - beanInfo = Introspector.getBeanInfo(MetaDataEntity.class); + beanInfo = Introspector.getBeanInfo(MetaData.class); List<String> props = new ArrayList<String>(columnNames.length); int index = "simexplorer.common.".length(); for (String columnName : columnNames) { Modified: trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/ListTabModel.java =================================================================== --- trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/ListTabModel.java 2008-02-01 09:58:10 UTC (rev 566) +++ trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/ListTabModel.java 2008-02-01 16:26:09 UTC (rev 567) @@ -37,7 +37,7 @@ protected PaginationModel pagination; - protected MetaDataEntity[] list; + protected MetaData[] list; protected boolean onlyLatest; @@ -61,7 +61,7 @@ return query; } - public MetaDataEntity[] getList() { + public MetaData[] getList() { return list; } @@ -69,7 +69,7 @@ return pagination; } - public MetaDataEntity get(int index) { + public MetaData get(int index) { checkSize(index); return getList()[index]; } @@ -115,7 +115,7 @@ } - public void setList(MetaDataEntity[] list) { + public void setList(MetaData[] list) { this.list = list; } @@ -140,7 +140,7 @@ setPagination(paginationModel); // obtain datas from service - MetaDataEntity[] data = StorageServiceHelper.getData(context, remote, isOnlyLatest(), query, (int) paginationModel.getFirstIndex(), paginationModel.getWidth(), getDateOrder()); + MetaData[] data = StorageServiceHelper.getData(context, remote, isOnlyLatest(), query, (int) paginationModel.getFirstIndex(), paginationModel.getWidth(), getDateOrder()); // save in model setList(data); @@ -152,7 +152,7 @@ PaginationModel paginationModel = getPagination(); // obtain datas from service - MetaDataEntity[] data = StorageServiceHelper.getData(context, remote, isOnlyLatest(), getQuery(), (int) paginationModel.getFirstIndex(), paginationModel.getWidth(), getDateOrder()); + MetaData[] data = StorageServiceHelper.getData(context, remote, isOnlyLatest(), getQuery(), (int) paginationModel.getFirstIndex(), paginationModel.getWidth(), getDateOrder()); // save in model setList(data); Modified: trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/SynchronizeTabModel.java =================================================================== --- trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/SynchronizeTabModel.java 2008-02-01 09:58:10 UTC (rev 566) +++ trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/SynchronizeTabModel.java 2008-02-01 16:26:09 UTC (rev 567) @@ -31,8 +31,8 @@ protected SimExplorerTab tab; - protected MetaDataEntity[] listLocal; - protected MetaDataEntity[] listRemote; + protected MetaData[] listLocal; + protected MetaData[] listRemote; private static final long serialVersionUID = -3623331875470531459L; @@ -44,11 +44,11 @@ return tab; } - public MetaDataEntity[] getListLocal() { + public MetaData[] getListLocal() { return listLocal; } - public MetaDataEntity[] getListRemote() { + public MetaData[] getListRemote() { return listRemote; } @@ -56,11 +56,11 @@ this.tab = SimExplorerTab.valueOf(name); } - public void setListLocal(MetaDataEntity[] listLocal) { + public void setListLocal(MetaData[] listLocal) { this.listLocal = listLocal; } - public void setListRemote(MetaDataEntity[] listRemote) { + public void setListRemote(MetaData[] listRemote) { this.listRemote = listRemote; } } \ No newline at end of file Modified: trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/ElementDetail.java =================================================================== --- trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/ElementDetail.java 2008-02-01 09:58:10 UTC (rev 566) +++ trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/ElementDetail.java 2008-02-01 16:26:09 UTC (rev 567) @@ -35,7 +35,7 @@ import com.healthmarketscience.rmiio.RemoteInputStream; import com.healthmarketscience.rmiio.RemoteInputStreamClient; -import fr.cemagref.simexplorer.is.contenttype.ContentType; +import fr.cemagref.simexplorer.is.attachment.ContentType; import fr.cemagref.simexplorer.is.entities.data.Code; import fr.cemagref.simexplorer.is.entities.data.Component; import fr.cemagref.simexplorer.is.entities.data.Constant; Modified: trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/ElementExport.java =================================================================== --- trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/ElementExport.java 2008-02-01 09:58:10 UTC (rev 566) +++ trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/ElementExport.java 2008-02-01 16:26:09 UTC (rev 567) @@ -23,7 +23,6 @@ import java.util.Map; import java.util.Set; import java.util.StringTokenizer; -import java.util.Map.Entry; import org.apache.tapestry.StreamResponse; import org.codelutin.tapestry.beans.TreeNode; @@ -31,7 +30,8 @@ import com.healthmarketscience.rmiio.RemoteInputStream; import com.healthmarketscience.rmiio.RemoteInputStreamClient; -import fr.cemagref.simexplorer.is.contenttype.ContentType; +import fr.cemagref.simexplorer.is.attachment.Attachment; +import fr.cemagref.simexplorer.is.attachment.ContentType; import fr.cemagref.simexplorer.is.entities.data.Component; import fr.cemagref.simexplorer.is.entities.data.ExplorationApplication; import fr.cemagref.simexplorer.is.entities.data.ExplorationData; @@ -119,7 +119,7 @@ List<String> result = new ArrayList<String>(); result.add("Type"); result.add("Name"); - result.add("File"); + result.add("Hash"); result.add(""); return result; } @@ -196,11 +196,11 @@ List<TreeNode> children = new ArrayList<TreeNode>(); - Map<String, ContentType> attachments = explorationData.getMetaData() + List<Attachment> attachments = explorationData.getMetaData() .getAttachments(); - for (Map.Entry<String, ContentType> kv : attachments.entrySet()) { - children.add(generateDownload(explorationData, kv)); + for (Attachment attachment : attachments) { + children.add(generateDownload(explorationData, attachment)); } explorationDataNode.setChildren(children); @@ -256,11 +256,10 @@ TreeNode node = new TreeNode(); node.setType(TreeNode.TYPE_FOLDER); - Map<String, ContentType> attachments = library.getMetaData() - .getAttachments(); + List<Attachment> attachments = library.getMetaData().getAttachments(); List<TreeNode> children = new ArrayList<TreeNode>(); - for (Map.Entry<String, ContentType> kv : attachments.entrySet()) { - children.add(generateDownload(library, kv)); + for (Attachment attachment : attachments) { + children.add(generateDownload(library, attachment)); } node.setChildren(children); @@ -270,17 +269,17 @@ } private TreeNode generateDownload(LoggableElement explorationData, - Entry<String, ContentType> kv) { + Attachment attachment) { TreeNode node = new TreeNode(); node.setType(TreeNode.TYPE_DOCUMENT); String context = explorationData.getMetaData().getUuid() + "," + explorationData.getMetaData().getVersion() + "," - + kv.getKey(); + + attachment.getUniqueId(); node - .setColumns(generateStringArray(kv.getValue().getDescription(), - kv.getKey(), generateString(kv.getKey(), + .setColumns(generateStringArray(attachment.getContentType().getDescription(), + Integer.toHexString(attachment.getDataHash()), generateString(attachment.getFileName(), "downloadFile", context))); return node; } Modified: trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/Install.java =================================================================== --- trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/Install.java 2008-02-01 09:58:10 UTC (rev 566) +++ trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/Install.java 2008-02-01 16:26:09 UTC (rev 567) @@ -18,8 +18,9 @@ package fr.cemagref.simexplorer.is.ui.web.pages; import java.io.InputStream; -import java.util.Date; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.Random; import java.util.Set; @@ -30,7 +31,8 @@ import com.healthmarketscience.rmiio.RemoteInputStreamServer; import com.healthmarketscience.rmiio.SimpleRemoteInputStream; -import fr.cemagref.simexplorer.is.contenttype.ContentType; +import fr.cemagref.simexplorer.is.attachment.Attachment; +import fr.cemagref.simexplorer.is.attachment.ContentType; import fr.cemagref.simexplorer.is.entities.data.Component; import fr.cemagref.simexplorer.is.entities.data.ExplorationApplication; import fr.cemagref.simexplorer.is.entities.data.ExplorationData; @@ -46,7 +48,7 @@ @InjectPage private ElementList elementList; - + @Override public String getWindowTitle() { return ""; @@ -82,32 +84,32 @@ Map<String, RemoteInputStream> attachments = new HashMap<String, RemoteInputStream>(); - Map<String, ContentType> attachmentsKeys = new HashMap<String, ContentType>(); + List<Attachment> attachmentsKeys = new ArrayList<Attachment>(); - attachmentsKeys.putAll(ea.getMetaData().getAttachments()); + attachmentsKeys.addAll(ea.getMetaData().getAttachments()); Set<Component> components = ea.getComponents(); for (Component component : components) { - attachmentsKeys.putAll(component.getMetaData() + attachmentsKeys.addAll(component.getMetaData() .getAttachments()); Set<Library> libraries = component.getLibraries(); for (Library library : libraries) { - attachmentsKeys.putAll(library.getMetaData() + attachmentsKeys.addAll(library.getMetaData() .getAttachments()); } } Set<ExplorationData> explorations = ea.getExplorations(); for (ExplorationData explorationData : explorations) { - attachmentsKeys.putAll(explorationData.getMetaData() + attachmentsKeys.addAll(explorationData.getMetaData() .getAttachments()); } - for (Map.Entry<String, ContentType> kv : attachmentsKeys - .entrySet()) { + for (Attachment attachment : attachmentsKeys) { InputStream stream = elementGenerator .generateTextStream(); RemoteInputStreamServer remoteStream = new SimpleRemoteInputStream( stream); - attachments.put(kv.getKey(), remoteStream.export()); + attachments.put(attachment.getUniqueId(), remoteStream + .export()); } RemoteInputStreamServer xmlRemoteStream = new SimpleRemoteInputStream(
participants (1)
-
glandais@users.labs.libre-entreprise.org