r88 - in trunk/simexplorer-si-storage: . .settings src/java/META-INF src/java/fr/cemagref/simexplorer/is/storage/attachment src/java/fr/cemagref/simexplorer/is/storage/database src/java/fr/cemagref/simexplorer/is/storage/database/lucene src/java/fr/cemagref/simexplorer/is/storage/engine src/java/fr/cemagref/simexplorer/is/storage/entities/metadata src/java/fr/cemagref/simexplorer/is/storage/factories src/java/fr/cemagref/simexplorer/is/storage/service src/java/fr/cemagref/simexplore
Author: glandais Date: 2007-12-26 16:30:11 +0000 (Wed, 26 Dec 2007) New Revision: 88 Added: trunk/simexplorer-si-storage/.settings/org.eclipse.jst.common.project.facet.core.prefs Modified: trunk/simexplorer-si-storage/.classpath trunk/simexplorer-si-storage/src/java/META-INF/MANIFEST.MF trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/attachment/Content.java trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/database/Database.java trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/database/DatabaseConstants.java trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/database/lucene/LuceneDatabase.java trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngine.java trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/entities/metadata/MetaDataEntity.java trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/entities/metadata/Version.java trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/BaseEntityFactory.java trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/LoggableElementFactory.java trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/MetaDataEntityFactory.java trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/XmlConstants.java trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/service/StorageService.java trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/service/StorageServiceImpl.java trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/xml/MetaDataParser.java trunk/simexplorer-si-storage/src/test/fr/cemagref/simexplorer/is/storage/test/ElementGenerator.java trunk/simexplorer-si-storage/src/test/fr/cemagref/simexplorer/is/storage/test/LuceneDatabaseLoadTestCase.java trunk/simexplorer-si-storage/src/test/fr/cemagref/simexplorer/is/storage/test/LuceneDatabaseTestCase.java trunk/simexplorer-si-storage/src/test/fr/cemagref/simexplorer/is/storage/test/LuceneDatabaseThread.java trunk/simexplorer-si-storage/src/test/fr/cemagref/simexplorer/is/storage/test/LuceneDatabaseThreadsTestCase.java trunk/simexplorer-si-storage/src/test/fr/cemagref/simexplorer/is/storage/test/LuceneSimpleTest.java trunk/simexplorer-si-storage/src/test/fr/cemagref/simexplorer/is/storage/test/MetaDataGenerator.java trunk/simexplorer-si-storage/src/test/fr/cemagref/simexplorer/is/storage/test/service/StorageServiceTest.java Log: Gestion des versions par d?\195?\169faut (latest) Modified: trunk/simexplorer-si-storage/.classpath =================================================================== --- trunk/simexplorer-si-storage/.classpath 2007-12-24 12:11:45 UTC (rev 87) +++ trunk/simexplorer-si-storage/.classpath 2007-12-26 16:30:11 UTC (rev 88) @@ -4,8 +4,8 @@ <classpathentry kind="src" path="src/test"/> <classpathentry kind="con" path="org.eclipse.jst.server.core.container/org.jboss.ide.eclipse.as.core.server.runtime.runtimeTarget/JBoss v4.2"/> <classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/> - <classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> <classpathentry kind="con" path="org.eclipse.jst.server.core.container/org.eclipse.jst.server.generic.runtimeTarget/JBoss v4.2"/> + <classpathentry exported="true" kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/> <classpathentry kind="output" path="target/classes"/> </classpath> Added: trunk/simexplorer-si-storage/.settings/org.eclipse.jst.common.project.facet.core.prefs =================================================================== --- trunk/simexplorer-si-storage/.settings/org.eclipse.jst.common.project.facet.core.prefs (rev 0) +++ trunk/simexplorer-si-storage/.settings/org.eclipse.jst.common.project.facet.core.prefs 2007-12-26 16:30:11 UTC (rev 88) @@ -0,0 +1,4 @@ +#Mon Dec 24 09:40:26 CET 2007 +classpath.helper/org.eclipse.jdt.launching.JRE_CONTAINER/owners=jst.java\:5.0 +classpath.helper/org.eclipse.jst.server.core.container\:\:org.eclipse.jst.server.generic.runtimeTarget\:\:JBoss\ v4.2/owners=jst.ejb\:3.0 +eclipse.preferences.version=1 Modified: trunk/simexplorer-si-storage/src/java/META-INF/MANIFEST.MF =================================================================== --- trunk/simexplorer-si-storage/src/java/META-INF/MANIFEST.MF 2007-12-24 12:11:45 UTC (rev 87) +++ trunk/simexplorer-si-storage/src/java/META-INF/MANIFEST.MF 2007-12-26 16:30:11 UTC (rev 88) @@ -1,3 +1,2 @@ Manifest-Version: 1.0 -Class-Path: Modified: trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/attachment/Content.java =================================================================== --- trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/attachment/Content.java 2007-12-24 12:11:45 UTC (rev 87) +++ trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/attachment/Content.java 2007-12-26 16:30:11 UTC (rev 88) @@ -6,23 +6,23 @@ public class Content { - private ContentType type; - private InputStream content; + private ContentType type; + private InputStream content; - public ContentType getType() { - return type; - } + public ContentType getType() { + return type; + } - public void setType(ContentType type) { - this.type = type; - } + public void setType(ContentType type) { + this.type = type; + } - public InputStream getContent() { - return content; - } + public InputStream getContent() { + return content; + } - public void setContent(InputStream content) { - this.content = content; - } + public void setContent(InputStream content) { + this.content = content; + } } Modified: trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/database/Database.java =================================================================== --- trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/database/Database.java 2007-12-24 12:11:45 UTC (rev 87) +++ trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/database/Database.java 2007-12-26 16:30:11 UTC (rev 88) @@ -1,7 +1,7 @@ package fr.cemagref.simexplorer.is.storage.database; import java.io.Reader; -import java.util.Collections; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; @@ -88,38 +88,6 @@ public abstract List<Version> getVersions(String uuid) throws Exception; /** - * Retrieve an element in its latest version null if not fund - * - * @param uuid - * Id - * @return Element in its latest version, null if no element with this id - * exists - * @throws Exception - */ - public MetaDataEntity getElementLatestVersion(String uuid) throws Exception { - MetaDataEntity result = null; - - // Get all versions - List<Version> versions = getVersions(uuid); - - // Sort versions ascending - Collections.sort(versions); - // Revert, first is latest - Collections.reverse(versions); - - // If at least a version exists - if (versions.size() > 0) { - Version version = versions.get(0); - // get element corresponding to latest version - result = getElement(uuid, version); - } else { - result = null; - } - - return result; - } - - /** * Retrieve all elements by id Empty list if no element with this id * * @param uuid @@ -127,8 +95,8 @@ * @return Element list * @throws Exception */ - public abstract Set<MetaDataEntity> findElementsById(String uuid) - throws Exception; + public abstract Set<MetaDataEntity> findElementsById(String uuid, + boolean onlyLatest) throws Exception; /** * Retrieve elements with specific properties<br> @@ -172,18 +140,26 @@ public abstract int findElementsByPropertiesCount( Map<String, String> properties) throws Exception; - /** - * Retrieve elements by content search<br> - * Empty list if no element - * - * @param searchedText - * Searched text - * @return Element list - * @throws Exception - */ - public Set<MetaDataEntity> findElementsByContentSearch(String queryText) + private Map<String, String> getPropertiesByType(String type, + boolean onlyLatest) { + Map<String, String> properties = new HashMap<String, String>(); + properties.put(KEY_TYPE, type); + if (onlyLatest) { + properties.put(KEY_LATEST, "1"); + } + return properties; + } + + public Set<MetaDataEntity> findElementsByType(String type, + boolean onlyLatest, int start, int count) throws Exception { + return findElementsByProperties(getPropertiesByType(type, onlyLatest), + start, count); + } + + public int findElementsByTypeCount(String type, boolean onlyLatest) throws Exception { - return findElementsByContentSearch(queryText, 0, -1); + return findElementsByPropertiesCount(getPropertiesByType(type, + onlyLatest)); } /** @@ -200,7 +176,8 @@ * @throws Exception */ public abstract Set<MetaDataEntity> findElementsByContentSearch( - String queryText, int start, int count) throws Exception; + String queryText, boolean onlyLatest, int start, int count) + throws Exception; /** * Retrieve element count with specific content @@ -210,8 +187,8 @@ * @return Number of elements fund * @throws Exception */ - public abstract int findElementsByContentSearchCount(String queryText) - throws Exception; + public abstract int findElementsByContentSearchCount(String queryText, + boolean onlyLatest) throws Exception; // Delete Modified: trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/database/DatabaseConstants.java =================================================================== --- trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/database/DatabaseConstants.java 2007-12-24 12:11:45 UTC (rev 87) +++ trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/database/DatabaseConstants.java 2007-12-26 16:30:11 UTC (rev 88) @@ -29,6 +29,11 @@ */ public static final String KEY_VERSION = "simexplorer.version"; /** + * Field name for latest + */ + public static final String KEY_LATEST = "simexplorer.latest"; + /** + * * Field name for creation date */ public static final String KEY_CREATIONDATE = "simexplorer.creationdate"; Modified: trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/database/lucene/LuceneDatabase.java =================================================================== --- trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/database/lucene/LuceneDatabase.java 2007-12-24 12:11:45 UTC (rev 87) +++ trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/database/lucene/LuceneDatabase.java 2007-12-26 16:30:11 UTC (rev 88) @@ -21,6 +21,7 @@ import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.Term; +import org.apache.lucene.queryParser.ParseException; import org.apache.lucene.queryParser.QueryParser; import org.apache.lucene.search.BooleanClause; import org.apache.lucene.search.BooleanQuery; @@ -129,6 +130,7 @@ // FIXME index location File indexDir = new File("./index/"); + //File indexDir = new File("/home/landais/lucene/index.big"); // Base directory index directory = FSDirectory.getDirectory(indexDir, lockFactory); @@ -140,6 +142,10 @@ // Instanciate unique writer writer = new IndexWriter(directory, true, analyzer, realCreate); + + if (realCreate) { + commit(); + } } @Override @@ -155,7 +161,7 @@ // Check if an optimization is required Date now = new Date(); long elapsed = now.getTime() - lastOptimize.getTime(); - // One optimize per hour, if readers are closed + // FIXME One optimize per hour, if readers are closed if (elapsed > 3600 * 1000 && searcherPool.allClosed()) { writer.optimize(); lastOptimize = new Date(); @@ -258,10 +264,14 @@ } @Override - public Set<MetaDataEntity> findElementsById(String uuid) throws Exception { + public Set<MetaDataEntity> findElementsById(String uuid, boolean onlyLatest) + throws Exception { // Create hash map with id Map<String, String> properties = new HashMap<String, String>(); properties.put(KEY_UUID, uuid); + if (onlyLatest) { + properties.put(KEY_LATEST, "1"); + } Set<MetaDataEntity> result = null; @@ -319,11 +329,9 @@ } @Override - public int findElementsByContentSearchCount(String queryText) - throws Exception { - Analyzer analyzer = new SimpleAnalyzer(); - QueryParser parser = new QueryParser(KEY_SEARCHABLE_CONTENT, analyzer); - Query luceneQuery = parser.parse(queryText); + public int findElementsByContentSearchCount(String queryText, + boolean onlyLatest) throws Exception { + Query query = getQueryByContentSearch(queryText, onlyLatest); int result = 0; @@ -331,7 +339,7 @@ // Get current searcher instance Searcher searcher = getSearcher(); try { - hits = searcher.search(luceneQuery); + hits = searcher.search(query); // Return hits length result = hits.length(); } finally { @@ -344,10 +352,8 @@ @Override public Set<MetaDataEntity> findElementsByContentSearch(String queryText, - int start, int count) throws Exception { - Analyzer analyzer = new SimpleAnalyzer(); - QueryParser parser = new QueryParser(KEY_SEARCHABLE_CONTENT, analyzer); - Query luceneQuery = parser.parse(queryText); + boolean onlyLatest, int start, int count) throws Exception { + Query query = getQueryByContentSearch(queryText, onlyLatest); Set<MetaDataEntity> result = null; @@ -355,7 +361,7 @@ // Get current searcher instance Searcher searcher = getSearcher(); try { - hits = searcher.search(luceneQuery); + hits = searcher.search(query); // Convert hits to elements result = convertHitsToElements(hits, start, count); } finally { @@ -366,6 +372,24 @@ return result; } + private Query getQueryByContentSearch(String queryText, boolean onlyLatest) + throws ParseException { + Query query; + Analyzer analyzer = new SimpleAnalyzer(); + QueryParser parser = new QueryParser(KEY_SEARCHABLE_CONTENT, analyzer); + Query searchQuery = parser.parse(queryText); + if (onlyLatest) { + query = new BooleanQuery(); + ((BooleanQuery) query).add(searchQuery, BooleanClause.Occur.MUST); + ((BooleanQuery) query).add( + new TermQuery(new Term(KEY_LATEST, "1")), + BooleanClause.Occur.MUST); + } else { + query = searchQuery; + } + return query; + } + @Override public void deleteElement(String uuid, Version version) throws Exception { // Delete element in db with term search @@ -443,6 +467,11 @@ element.setType(document.get(KEY_TYPE)); element.setDescription(document.get(KEY_DESCRIPTION)); element.setVersion(document.get(KEY_VERSION)); + if ("1".equals(document.get(KEY_LATEST))) { + element.setLatest(true); + } else { + element.setLatest(false); + } String creationDate = document.get(KEY_CREATIONDATE); if (creationDate != null) { long creationDateLong = new Long(creationDate); @@ -518,6 +547,12 @@ addSimpleField(document, KEY_VERSION, element.getVersion() .toString()); } + if (element.isLatest()) { + addSimpleField(document, KEY_LATEST, "1"); + } else { + addSimpleField(document, KEY_LATEST, "0"); + } + if (element.getCreationDate() != null) { addSimpleField(document, KEY_CREATIONDATE, Long.toString(element .getCreationDate().getTime())); @@ -536,7 +571,8 @@ String key = KEY_ATTACHMENT + "." + entry.getKey(); Content value = entry.getValue(); if (value != null && value.getType() != null) { - addSimpleField(document, key, value.getType().getClass().getSimpleName()); + addSimpleField(document, key, value.getType().getClass() + .getSimpleName()); } } Modified: trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngine.java =================================================================== --- trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngine.java 2007-12-24 12:11:45 UTC (rev 87) +++ trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngine.java 2007-12-26 16:30:11 UTC (rev 88) @@ -25,200 +25,211 @@ */ public class StorageEngine { - /** - * Indexing - */ - protected Database database; + /** + * Indexing + */ + protected Database database; - /** - * Storage - */ - protected AttachmentHandler attachmentHandler; + /** + * Storage + */ + protected AttachmentHandler attachmentHandler; - /** - * Metadata handling temporary data - */ - private MetaDataEntity mdTmp; + /** + * Metadata handling temporary data + */ + private MetaDataEntity mdTmp; - /** - * Default constructor with default implementations of storage and indexing - */ - public StorageEngine() { - super(); - // Indexing - database = new LuceneDatabase(); - // Storage - attachmentHandler = new FileSystemAttachmentHandler(); - // Storing tmp data - mdTmp = new MetaDataEntity(); - mdTmp.setUuid(UUID.randomUUID().toString()); - mdTmp.setVersion("0"); - } + /** + * Default constructor with default implementations of storage and indexing + */ + public StorageEngine() { + super(); + // Indexing + database = new LuceneDatabase(); + // Storage + attachmentHandler = new FileSystemAttachmentHandler(); + // Storing tmp data + mdTmp = new MetaDataEntity(); + mdTmp.setUuid(UUID.randomUUID().toString()); + mdTmp.setVersion("0"); + } - /** - * Open storage - * - * @throws Exception - */ - public void open() throws Exception { - database.open(); - } + /** + * Open storage + * + * @throws Exception + */ + public void open() throws Exception { + database.open(); + } - /** - * Close storage - * - * @throws Exception - */ - public void close() throws Exception { - database.close(); - } + /** + * Close storage + * + * @throws Exception + */ + public void close() throws Exception { + database.close(); + } - /** - * Commit changes to storage - * - * @throws Exception - */ - public void commit() throws Exception { - database.commit(); - } + /** + * Commit changes to storage + * + * @throws Exception + */ + public void commit() throws Exception { + database.commit(); + } - // Create / update + // Create / update - /** - * Save an element to storage - * - * @param element - * Element to save - * @param attachments - * Attachments related - * @throws Exception - */ - public void saveElement(MetaDataEntity element, - Map<String, InputStream> attachments) throws Exception { + /** + * Save an element to storage + * + * @param element + * Element to save + * @param attachments + * Attachments related + * @throws Exception + */ + public void saveElement(MetaDataEntity element, + Map<String, InputStream> attachments) throws Exception { - for (Map.Entry<String, InputStream> entry : attachments.entrySet()) { - attachmentHandler.storeData(element, entry.getKey(), entry - .getValue()); - } + for (Map.Entry<String, InputStream> entry : attachments.entrySet()) { + attachmentHandler.storeData(element, entry.getKey(), entry + .getValue()); + } - List<Reader> readers = new ArrayList<Reader>(); - for (Map.Entry<String, InputStream> entry : attachments.entrySet()) { - String field = entry.getKey(); - InputStream content = attachmentHandler - .retrieveData(element, field); - if (element.getAttachments() != null) { - Content contentInstance = element.getAttachments().get(field); - if (contentInstance != null - && contentInstance.getType() != null) { - ContentType contentType = contentInstance.getType(); - Reader reader = contentType.renderToText(content); - readers.add(reader); - } - } - } + List<Reader> readers = new ArrayList<Reader>(); + for (Map.Entry<String, InputStream> entry : attachments.entrySet()) { + String field = entry.getKey(); + InputStream content = attachmentHandler + .retrieveData(element, field); + if (element.getAttachments() != null) { + Content contentInstance = element.getAttachments().get(field); + if (contentInstance != null + && contentInstance.getType() != null) { + ContentType contentType = contentInstance.getType(); + Reader reader = contentType.renderToText(content); + readers.add(reader); + } + } + } - database.insertElement(element, readers); - } + database.insertElement(element, readers); + } - // Read + // Read - /** - * Retrieve an element - * - * @param uuid - * Id of the element - * @return The element - * @throws Exception - */ - public MetaDataEntity getMetadata(String uuid) throws Exception { - MetaDataEntity mde = database.getElementLatestVersion(uuid); - return mde; - } + /** + * Retrieve an element + * + * @param uuid + * Id of the element + * @return The element + * @throws Exception + */ + public MetaDataEntity getMetadata(String uuid) throws Exception { + MetaDataEntity mde = null; + Set<MetaDataEntity> set = database.findElementsById(uuid, true); + if (!set.isEmpty()) { + mde = set.iterator().next(); + } + return mde; + } - /** - * Retrieve versions of an element<br> - * Empty list if no element with this id - * - * @param uuid - * Id of the element - * @return List of versions of the element<br> - * - * @throws Exception - */ - public List<Version> getVersions(String uuid) throws Exception { - return database.getVersions(uuid); - } + /** + * Retrieve versions of an element<br> + * Empty list if no element with this id + * + * @param uuid + * Id of the element + * @return List of versions of the element<br> + * + * @throws Exception + */ + public List<Version> getVersions(String uuid) throws Exception { + return database.getVersions(uuid); + } - /** - * Retrieve an element in a specific version - * - * @param uuid - * @param version - * @return - * @throws Exception - */ - public MetaDataEntity getMetadata(String uuid, Version version) - throws Exception { - MetaDataEntity mde = database.getElement(uuid, version); - return mde; - } + /** + * Retrieve an element in a specific version + * + * @param uuid + * @param version + * @return + * @throws Exception + */ + public MetaDataEntity getMetadata(String uuid, Version version) + throws Exception { + MetaDataEntity mde = database.getElement(uuid, version); + return mde; + } - public InputStream retrieveData(MetaDataEntity entity, String field) - throws Exception { - InputStream result = attachmentHandler.retrieveData(entity, field); - return result; - } + public InputStream retrieveData(MetaDataEntity entity, String field) + throws Exception { + InputStream result = attachmentHandler.retrieveData(entity, field); + return result; + } - public int findFullTextCount(String query) throws Exception { - return database.findElementsByContentSearchCount(query); - } + public int findFullTextCount(String query, boolean onlyLatest) + throws Exception { + return database.findElementsByContentSearchCount(query, onlyLatest); + } - public MetaDataEntity[] findFullText(String query) throws Exception { - MetaDataEntity[] result = database.findElementsByContentSearch(query) - .toArray(new MetaDataEntity[0]); - return result; - } + public MetaDataEntity[] findFullText(String query, boolean onlyLatest, + int indexStart, int count) throws Exception { + MetaDataEntity[] result = database.findElementsByContentSearch(query, + onlyLatest, indexStart, count).toArray(new MetaDataEntity[0]); + return result; + } - public MetaDataEntity[] findFullText(String query, int indexStart, int count) - throws Exception { - MetaDataEntity[] result = database.findElementsByContentSearch(query, - indexStart, count).toArray(new MetaDataEntity[0]); - return result; - } + public MetaDataEntity[] findElementsByType(String type, boolean onlyLatest, + int start, int count) throws Exception { + MetaDataEntity[] result = database.findElementsByType(type, onlyLatest, + start, count).toArray(new MetaDataEntity[0]); + return result; + } - // Delete + public int findElementsByTypeCount(String type, boolean onlyLatest) + throws Exception { + return database.findElementsByTypeCount(type, onlyLatest); + } - public void deleteElements(String uuid) throws Exception { - List<Version> versions = getVersions(uuid); - for (Version version : versions) { - deleteElement(uuid, version); - } - } + // Delete - public void deleteElement(String uuid, Version version) throws Exception { - MetaDataEntity element = getMetadata(uuid, version); - Map<String, Content> attachments = element.getAttachments(); - for (Map.Entry<String, Content> entry : attachments.entrySet()) { - attachmentHandler.deleteData(element, entry.getKey()); - } - database.deleteElement(element); - } + public void deleteElements(String uuid) throws Exception { + List<Version> versions = getVersions(uuid); + for (Version version : versions) { + deleteElement(uuid, version); + } + } - // Tools + public void deleteElement(String uuid, Version version) throws Exception { + MetaDataEntity element = getMetadata(uuid, version); + Map<String, Content> attachments = element.getAttachments(); + for (Map.Entry<String, Content> entry : attachments.entrySet()) { + attachmentHandler.deleteData(element, entry.getKey()); + } + database.deleteElement(element); + } - public String storeTempData(InputStream stream) throws Exception { - String id = UUID.randomUUID().toString(); - attachmentHandler.storeData(mdTmp, id, stream); - return id; - } + // Tools - public InputStream retrieveTempData(String id) throws Exception { - InputStream is = attachmentHandler.retrieveData(mdTmp, id); - return is; - } + public String storeTempData(InputStream stream) throws Exception { + String id = UUID.randomUUID().toString(); + attachmentHandler.storeData(mdTmp, id, stream); + return id; + } - public void deleteTempData(String id) throws Exception { - attachmentHandler.deleteData(mdTmp, id); - } + public InputStream retrieveTempData(String id) throws Exception { + InputStream is = attachmentHandler.retrieveData(mdTmp, id); + return is; + } + public void deleteTempData(String id) throws Exception { + attachmentHandler.deleteData(mdTmp, id); + } + } Modified: trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/entities/metadata/MetaDataEntity.java =================================================================== --- trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/entities/metadata/MetaDataEntity.java 2007-12-24 12:11:45 UTC (rev 87) +++ trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/entities/metadata/MetaDataEntity.java 2007-12-26 16:30:11 UTC (rev 88) @@ -1,13 +1,16 @@ package fr.cemagref.simexplorer.is.storage.entities.metadata; +import java.io.Serializable; import java.util.Date; import java.util.Map; import fr.cemagref.simexplorer.is.storage.attachment.Content; import fr.cemagref.simexplorer.is.storage.entities.BaseEntity; -public class MetaDataEntity extends BaseEntity { +public class MetaDataEntity extends BaseEntity implements Serializable { + private static final long serialVersionUID = -7916932464982315229L; + private String uuid; private String name; private String type; @@ -21,6 +24,7 @@ private String parentDataVersion; private String parentVersionUuid; private String parentVersionVersion; + private boolean latest; /** * @return the uuid @@ -217,4 +221,12 @@ this.parentVersionVersion = parentVersionVersion; } + public boolean isLatest() { + return latest; + } + + public void setLatest(boolean latest) { + this.latest = latest; + } + } Modified: trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/entities/metadata/Version.java =================================================================== --- trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/entities/metadata/Version.java 2007-12-24 12:11:45 UTC (rev 87) +++ trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/entities/metadata/Version.java 2007-12-26 16:30:11 UTC (rev 88) @@ -1,12 +1,14 @@ package fr.cemagref.simexplorer.is.storage.entities.metadata; +import java.io.Serializable; import java.util.ArrayList; import java.util.List; import java.util.StringTokenizer; -public class Version implements Comparable<Version> { +public class Version implements Comparable<Version>, Serializable { - private List<Integer> pointedVersion; + private static final long serialVersionUID = 8982527036997002451L; + private List<Integer> pointedVersion; public Version(String version) { super(); Modified: trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/BaseEntityFactory.java =================================================================== --- trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/BaseEntityFactory.java 2007-12-24 12:11:45 UTC (rev 87) +++ trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/BaseEntityFactory.java 2007-12-26 16:30:11 UTC (rev 88) @@ -79,8 +79,7 @@ } } - public Set<Element> getElementsByTagName(Element xmlElement, - String tagName) { + public Set<Element> getElementsByTagName(Element xmlElement, String tagName) { Set<Element> elements = new HashSet<Element>(); NodeList nodes = xmlElement.getChildNodes(); Modified: trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/LoggableElementFactory.java =================================================================== --- trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/LoggableElementFactory.java 2007-12-24 12:11:45 UTC (rev 87) +++ trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/LoggableElementFactory.java 2007-12-26 16:30:11 UTC (rev 88) @@ -13,42 +13,14 @@ @Override public E loadXMLElement(Element xmlElement) throws Exception { E element = super.loadXMLElement(xmlElement); - /* - * element.setUuid(getProperty(xmlElement, KEY_UUID)); - * element.setName(getProperty(xmlElement, KEY_NAME)); - * element.setType(getProperty(xmlElement, KEY_TYPE)); - * element.setDescription(getProperty(xmlElement, KEY_DESCRIPTION)); - * element.setVersion(getProperty(xmlElement, KEY_VERSION)); - */ // FIXME Load metadata - /* - * element.setCreationDate(new Date(getProperty(xmlElement, - * KEY_CREATIONDATE))); - */ - - // element.setHash(getProperty(xmlElement, KEY_HASH)); return element; } @Override public void saveXMLElement(org.w3c.dom.Document document, Element xmlElement, E element) throws Exception { - // FIXME save metadata - - /* - * setProperty(document, xmlElement, KEY_UUID, element.getUuid()); - * setProperty(document, xmlElement, KEY_NAME, element.getName()); - * setProperty(document, xmlElement, KEY_TYPE, element.getType()); - * setProperty(document, xmlElement, KEY_DESCRIPTION, element - * .getDescription()); setProperty(document, xmlElement, KEY_VERSION, - * element.getVersion()); /* setProperty(document, xmlElement, - * KEY_CREATIONDATE, element.getCreationDate()); - */ - /* - * setProperty(document, xmlElement, KEY_HASH, element.getHash()); - */ - } } Modified: trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/MetaDataEntityFactory.java =================================================================== --- trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/MetaDataEntityFactory.java 2007-12-24 12:11:45 UTC (rev 87) +++ trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/MetaDataEntityFactory.java 2007-12-26 16:30:11 UTC (rev 88) @@ -13,93 +13,101 @@ import fr.cemagref.simexplorer.is.storage.entities.metadata.MetaDataEntity; public class MetaDataEntityFactory<E extends MetaDataEntity> extends - BaseEntityFactory<MetaDataEntity> implements XmlConstants { + BaseEntityFactory<MetaDataEntity> implements XmlConstants { - @Override - public MetaDataEntity createInstance() { - return new MetaDataEntity(); - } + @Override + public MetaDataEntity createInstance() { + return new MetaDataEntity(); + } - /* - * (non-Javadoc) - * - * @see fr.cemagref.simexplorer.is.storage.factories.BaseEntityFactory#loadXMLElement(org.w3c.dom.Element) - */ - @Override - public MetaDataEntity loadXMLElement(Element xmlElement) throws Exception { - MetaDataEntity entity = super.loadXMLElement(xmlElement); - entity.setUuid(getProperty(xmlElement, KEY_METADATA_UUID)); - entity.setName(getProperty(xmlElement, KEY_METADATA_NAME)); - entity.setType(getProperty(xmlElement, KEY_METADATA_TYPE)); - entity - .setDescription(getProperty(xmlElement, - KEY_METADATA_DESCRIPTION)); - entity.setVersion(getProperty(xmlElement, KEY_METADATA_VERSION)); + /* + * (non-Javadoc) + * + * @see fr.cemagref.simexplorer.is.storage.factories.BaseEntityFactory#loadXMLElement(org.w3c.dom.Element) + */ + @Override + public MetaDataEntity loadXMLElement(Element xmlElement) throws Exception { + MetaDataEntity entity = super.loadXMLElement(xmlElement); + entity.setUuid(getProperty(xmlElement, KEY_METADATA_UUID)); + entity.setName(getProperty(xmlElement, KEY_METADATA_NAME)); + entity.setType(getProperty(xmlElement, KEY_METADATA_TYPE)); + entity + .setDescription(getProperty(xmlElement, + KEY_METADATA_DESCRIPTION)); + entity.setVersion(getProperty(xmlElement, KEY_METADATA_VERSION)); - String creationDate = getProperty(xmlElement, KEY_METADATA_CREATIONDATE); - if (creationDate != null) { - long creationDateLong = new Long(creationDate); - Date date = new Date(creationDateLong); - entity.setCreationDate(date); - } + String latestVersion = getProperty(xmlElement, + KEY_METADATA_LATESTVERSION); + if (latestVersion != null && "1".equals(latestVersion)) { + entity.setLatest(true); + } else { + entity.setLatest(false); + } - entity.setHash(getProperty(xmlElement, KEY_METADATA_HASH)); - entity.setParentDataUuid(getProperty(xmlElement, - KEY_METADATA_PARENTDATA_UUID)); - entity.setParentDataVersion(getProperty(xmlElement, - KEY_METADATA_PARENTDATA_VERSION)); - entity.setParentVersionUuid(getProperty(xmlElement, - KEY_METADATA_PARENTVERSION_UUID)); - entity.setParentVersionVersion(getProperty(xmlElement, - KEY_METADATA_PARENTVERSION_VERSION)); + String creationDate = getProperty(xmlElement, KEY_METADATA_CREATIONDATE); + if (creationDate != null) { + long creationDateLong = new Long(creationDate); + Date date = new Date(creationDateLong); + entity.setCreationDate(date); + } - Map<String, String> descriptors = new HashMap<String, String>(); + entity.setHash(getProperty(xmlElement, KEY_METADATA_HASH)); + entity.setParentDataUuid(getProperty(xmlElement, + KEY_METADATA_PARENTDATA_UUID)); + entity.setParentDataVersion(getProperty(xmlElement, + KEY_METADATA_PARENTDATA_VERSION)); + entity.setParentVersionUuid(getProperty(xmlElement, + KEY_METADATA_PARENTVERSION_UUID)); + entity.setParentVersionVersion(getProperty(xmlElement, + KEY_METADATA_PARENTVERSION_VERSION)); - Element descriptorsElement = getElementByTagName(xmlElement, - KEY_METADATA_DESCRIPTORS); - if (descriptorsElement != null) { - Set<Element> descriptorElements = getElementsByTagName( - descriptorsElement, KEY_METADATA_DESCRIPTOR); - for (Element descriptorElement : descriptorElements) { - String name = getProperty(descriptorElement, - KEY_DESCRIPTOR_NAME); - String value = getProperty(descriptorElement, - KEY_DESCRIPTOR_VALUE); - descriptors.put(name, value); - } - } - entity.setDescriptors(descriptors); + Map<String, String> descriptors = new HashMap<String, String>(); - Map<String, Content> attachments = new HashMap<String, Content>(); + Element descriptorsElement = getElementByTagName(xmlElement, + KEY_METADATA_DESCRIPTORS); + if (descriptorsElement != null) { + Set<Element> descriptorElements = getElementsByTagName( + descriptorsElement, KEY_METADATA_DESCRIPTOR); + for (Element descriptorElement : descriptorElements) { + String name = getProperty(descriptorElement, + KEY_DESCRIPTOR_NAME); + String value = getProperty(descriptorElement, + KEY_DESCRIPTOR_VALUE); + descriptors.put(name, value); + } + } + entity.setDescriptors(descriptors); - Element attachmentsElement = getElementByTagName(xmlElement, - KEY_METADATA_ATTACHMENTS); - if (attachmentsElement != null) { - Set<Element> attachmentElements = getElementsByTagName( - attachmentsElement, KEY_METADATA_ATTACHMENT); - for (Element attachmentElement : attachmentElements) { - String name = getProperty(attachmentElement, - KEY_ATTACHMENT_NAME); - String type = getProperty(attachmentElement, - KEY_ATTACHMENT_TYPE); - Content content = new Content(); - content - .setType(ContentTypeFactory - .getContentTypeInstance(type)); - attachments.put(name, content); - } - } + Map<String, Content> attachments = new HashMap<String, Content>(); - entity.setAttachments(attachments); + Element attachmentsElement = getElementByTagName(xmlElement, + KEY_METADATA_ATTACHMENTS); + if (attachmentsElement != null) { + Set<Element> attachmentElements = getElementsByTagName( + attachmentsElement, KEY_METADATA_ATTACHMENT); + for (Element attachmentElement : attachmentElements) { + String name = getProperty(attachmentElement, + KEY_ATTACHMENT_NAME); + String type = getProperty(attachmentElement, + KEY_ATTACHMENT_TYPE); + Content content = new Content(); + content + .setType(ContentTypeFactory + .getContentTypeInstance(type)); + attachments.put(name, content); + } + } - return entity; - } + entity.setAttachments(attachments); - @Override - public void saveXMLElement(Document document, Element xmlElement, - MetaDataEntity element) throws Exception { - // TODO Auto-generated method stub + return entity; + } - } + @Override + public void saveXMLElement(Document document, Element xmlElement, + MetaDataEntity element) throws Exception { + // TODO Auto-generated method stub + } + } Modified: trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/XmlConstants.java =================================================================== --- trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/XmlConstants.java 2007-12-24 12:11:45 UTC (rev 87) +++ trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/XmlConstants.java 2007-12-26 16:30:11 UTC (rev 88) @@ -2,37 +2,39 @@ public interface XmlConstants { - public static final String KEY_METADATA_UUID = "uuid"; - public static final String KEY_METADATA_VERSION = "version"; - public static final String KEY_METADATA_NAME = "name"; + public static final String KEY_METADATA_UUID = "uuid"; + public static final String KEY_METADATA_VERSION = "version"; + public static final String KEY_METADATA_LATESTVERSION = "latestversion"; + public static final String KEY_METADATA_NAME = "name"; - public static final String KEY_METADATA_TYPE = "type"; - public static final String KEY_METADATA_TYPE_VALUE_EA = "EA"; + public static final String KEY_METADATA_TYPE = "type"; + public static final String KEY_METADATA_TYPE_VALUE_EA = "LuceneDatabaseTestCase"; // FIXME + // EA - public static final String KEY_METADATA_DESCRIPTION = "description"; - public static final String KEY_METADATA_CREATIONDATE = "creationdate"; - public static final String KEY_METADATA_HASH = "hash"; - public static final String KEY_METADATA_PARENTDATA_UUID = "parentdatauuid"; - public static final String KEY_METADATA_PARENTDATA_VERSION = "parentdataversion"; - public static final String KEY_METADATA_PARENTVERSION_UUID = "parentversionuuid"; - public static final String KEY_METADATA_PARENTVERSION_VERSION = "parentversionversion"; - public static final String KEY_METADATA_DESCRIPTORS = "descriptors"; - public static final String KEY_METADATA_DESCRIPTOR = "descriptor"; - public static final String KEY_METADATA_ATTACHMENTS = "attachments"; - public static final String KEY_METADATA_ATTACHMENT = "attachment"; + public static final String KEY_METADATA_DESCRIPTION = "description"; + public static final String KEY_METADATA_CREATIONDATE = "creationdate"; + public static final String KEY_METADATA_HASH = "hash"; + public static final String KEY_METADATA_PARENTDATA_UUID = "parentdatauuid"; + public static final String KEY_METADATA_PARENTDATA_VERSION = "parentdataversion"; + public static final String KEY_METADATA_PARENTVERSION_UUID = "parentversionuuid"; + public static final String KEY_METADATA_PARENTVERSION_VERSION = "parentversionversion"; + public static final String KEY_METADATA_DESCRIPTORS = "descriptors"; + public static final String KEY_METADATA_DESCRIPTOR = "descriptor"; + public static final String KEY_METADATA_ATTACHMENTS = "attachments"; + public static final String KEY_METADATA_ATTACHMENT = "attachment"; - public static final String KEY_DESCRIPTOR_NAME = "name"; - public static final String KEY_DESCRIPTOR_VALUE = "value"; + public static final String KEY_DESCRIPTOR_NAME = "name"; + public static final String KEY_DESCRIPTOR_VALUE = "value"; - public static final String KEY_ATTACHMENT_NAME = "name"; - public static final String KEY_ATTACHMENT_TYPE = "type"; + public static final String KEY_ATTACHMENT_NAME = "name"; + public static final String KEY_ATTACHMENT_TYPE = "type"; - public static final String KEY_COMPONENT = "C"; - public static final String KEY_ED = "ED"; - public static final String KEY_RESULT = "R"; - public static final String KEY_FILE = "FILE"; + public static final String KEY_COMPONENT = "C"; + public static final String KEY_ED = "ED"; + public static final String KEY_RESULT = "R"; + public static final String KEY_FILE = "FILE"; - public static final String FILE_XML = "data.xml"; - public static final String FILE_DATA_PREFIX = "attachment"; + public static final String FILE_XML = "data.xml"; + public static final String FILE_DATA_PREFIX = "attachment"; } Modified: trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/service/StorageService.java =================================================================== --- trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/service/StorageService.java 2007-12-24 12:11:45 UTC (rev 87) +++ trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/service/StorageService.java 2007-12-26 16:30:11 UTC (rev 88) @@ -11,29 +11,33 @@ @Remote public interface StorageService { - public void open() throws Exception; + public void open() throws Exception; - public void close() throws Exception; + public void close() throws Exception; - public void commit() throws Exception; + public void commit() throws Exception; - public MetaDataEntity saveElement(RemoteInputStream zipRemoteStream) - throws Exception; + public MetaDataEntity saveElement(RemoteInputStream zipRemoteStream) + throws Exception; - public MetaDataEntity saveElement(RemoteInputStream xmlRemoteStream, - Map<String, RemoteInputStream> attachmentsRemoteStream) - throws Exception; + public MetaDataEntity saveElement(RemoteInputStream xmlRemoteStream, + Map<String, RemoteInputStream> attachmentsRemoteStream) + throws Exception; - public MetaDataEntity getMetadata(String uuid) throws Exception; + public MetaDataEntity getMetadata(String uuid) throws Exception; - public MetaDataEntity getMetadata(String uuid, String version) - throws Exception; + public MetaDataEntity getMetadata(String uuid, String version) + throws Exception; - public int findFullTextCount(String query) throws Exception; + public int findFullTextCount(String query, boolean onlyLatest) + throws Exception; - public MetaDataEntity[] findFullText(String query) throws Exception; + public MetaDataEntity[] findFullText(String query, boolean onlyLatest, + int indexStart, int count) throws Exception; - public MetaDataEntity[] findFullText(String query, int indexStart, int count) - throws Exception; + public int findApplicationsCount(boolean onlyLatest) throws Exception; + public MetaDataEntity[] findApplications(boolean onlyLatest, int start, + int count) throws Exception; + } Modified: trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/service/StorageServiceImpl.java =================================================================== --- trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/service/StorageServiceImpl.java 2007-12-24 12:11:45 UTC (rev 87) +++ trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/service/StorageServiceImpl.java 2007-12-26 16:30:11 UTC (rev 88) @@ -33,238 +33,249 @@ @RemoteBinding(jndiBinding = "/ejb3/StorageService") public class StorageServiceImpl implements StorageService, XmlConstants { - private StorageEngine storageEngine; + private static StorageEngine storageEngine = null; - private static final String KEY_XML = "_xml"; + private static final String KEY_XML = "_xml"; - public StorageServiceImpl() { - super(); - storageEngine = new StorageEngine(); - } + public StorageServiceImpl() { + super(); + if (storageEngine == null) { + storageEngine = new StorageEngine(); + } + } - public void open() throws Exception { - storageEngine.open(); - } + public void open() throws Exception { + storageEngine.open(); + } - public void close() throws Exception { - storageEngine.close(); - } + public void close() throws Exception { + storageEngine.close(); + } - public void commit() throws Exception { - storageEngine.commit(); - } + public void commit() throws Exception { + storageEngine.commit(); + } - public MetaDataEntity saveElement(RemoteInputStream zipRemoteStream) - throws Exception { - InputStream zipStream = RemoteInputStreamClient.wrap(zipRemoteStream); - return saveElement(zipStream); - } + public MetaDataEntity saveElement(RemoteInputStream zipRemoteStream) + throws Exception { + InputStream zipStream = RemoteInputStreamClient.wrap(zipRemoteStream); + return saveElement(zipStream); + } - public MetaDataEntity saveElement(RemoteInputStream xmlRemoteStream, - Map<String, RemoteInputStream> attachmentsRemoteStream) - throws Exception { - InputStream xmlStream = RemoteInputStreamClient.wrap(xmlRemoteStream); - Map<String, InputStream> attachmentStreams = new HashMap<String, InputStream>(); - for (Map.Entry<String, RemoteInputStream> entry : attachmentsRemoteStream - .entrySet()) { - InputStream stream = RemoteInputStreamClient.wrap(entry.getValue()); - attachmentStreams.put(entry.getKey(), stream); - } - return saveElement(xmlStream, attachmentStreams); - } + public MetaDataEntity saveElement(RemoteInputStream xmlRemoteStream, + Map<String, RemoteInputStream> attachmentsRemoteStream) + throws Exception { + InputStream xmlStream = RemoteInputStreamClient.wrap(xmlRemoteStream); + Map<String, InputStream> attachmentStreams = new HashMap<String, InputStream>(); + for (Map.Entry<String, RemoteInputStream> entry : attachmentsRemoteStream + .entrySet()) { + InputStream stream = RemoteInputStreamClient.wrap(entry.getValue()); + attachmentStreams.put(entry.getKey(), stream); + } + return saveElement(xmlStream, attachmentStreams); + } - public MetaDataEntity getMetadata(String uuid) throws Exception { - return storageEngine.getMetadata(uuid); - } + public MetaDataEntity getMetadata(String uuid) throws Exception { + return storageEngine.getMetadata(uuid); + } - public MetaDataEntity getMetadata(String uuid, String version) - throws Exception { - return storageEngine.getMetadata(uuid, new Version(version)); - } + public MetaDataEntity getMetadata(String uuid, String version) + throws Exception { + return storageEngine.getMetadata(uuid, new Version(version)); + } - public MetaDataEntity[] findFullText(String query) throws Exception { - return storageEngine.findFullText(query); - } + public MetaDataEntity[] findFullText(String query, boolean onlyLatest, + int indexStart, int count) throws Exception { + return storageEngine.findFullText(query, onlyLatest, indexStart, count); + } - public MetaDataEntity[] findFullText(String query, int indexStart, int count) - throws Exception { - return storageEngine.findFullText(query, indexStart, count); - } + public int findFullTextCount(String query, boolean onlyLatest) + throws Exception { + return storageEngine.findFullTextCount(query, onlyLatest); + } - public int findFullTextCount(String query) throws Exception { - return storageEngine.findFullTextCount(query); - } + public int findApplicationsCount(boolean onlyLatest) throws Exception { + return storageEngine.findElementsByTypeCount( + KEY_METADATA_TYPE_VALUE_EA, onlyLatest); + } - private MetaDataEntity saveElement(InputStream zipStream) throws Exception { - String xmlFile = null; - Map<String, String> attachments = new HashMap<String, String>(); + public MetaDataEntity[] findApplications(boolean onlyLatest, int start, + int count) throws Exception { + return storageEngine.findElementsByType(KEY_METADATA_TYPE_VALUE_EA, + onlyLatest, start, count); + } - ZipInputStream zis = new ZipInputStream(zipStream); + private MetaDataEntity saveElement(InputStream zipStream) throws Exception { + String xmlFile = null; + Map<String, String> attachments = new HashMap<String, String>(); - ZipEntry entry; - while ((entry = zis.getNextEntry()) != null) { - if (!entry.isDirectory()) { - String entryName = entry.getName(); - if (entryName.equals(FILE_XML)) { - xmlFile = storageEngine.storeTempData(zis); - } else { - if (entryName.startsWith(FILE_DATA_PREFIX)) { - String fileName = entryName.replace(FILE_DATA_PREFIX - + "/", ""); - String idFile = storageEngine.storeTempData(zis); - attachments.put(fileName, idFile); - } - } - } - } + ZipInputStream zis = new ZipInputStream(zipStream); - return saveElement(xmlFile, attachments); - } + ZipEntry entry; + while ((entry = zis.getNextEntry()) != null) { + if (!entry.isDirectory()) { + String entryName = entry.getName(); + if (entryName.equals(FILE_XML)) { + xmlFile = storageEngine.storeTempData(zis); + } else { + if (entryName.startsWith(FILE_DATA_PREFIX)) { + String fileName = entryName.replace(FILE_DATA_PREFIX + + "/", ""); + String idFile = storageEngine.storeTempData(zis); + attachments.put(fileName, idFile); + } + } + } + } - private MetaDataEntity saveElement(InputStream xmlFile, - Map<String, InputStream> attachments) throws Exception { - // Store temporary data - String idxml = storageEngine.storeTempData(xmlFile); - Map<String, String> idsattachment = new HashMap<String, String>(); - for (Map.Entry<String, InputStream> entry : attachments.entrySet()) { - String idattachment = storageEngine.storeTempData(entry.getValue()); - idsattachment.put(entry.getKey(), idattachment); - } - return saveElement(idxml, idsattachment); - } + return saveElement(xmlFile, attachments); + } - /** - * Real implementation of saveElement - * - * @param idxml - * @param idsattachment - * @return - * @throws Exception - */ - private MetaDataEntity saveElement(String idxml, - Map<String, String> idsattachment) throws Exception { - // Load xml metadata - MetaDataEntity metaData = MetaDataParser.parse(storageEngine - .retrieveTempData(idxml)); + private MetaDataEntity saveElement(InputStream xmlFile, + Map<String, InputStream> attachments) throws Exception { + // Store temporary data + String idxml = storageEngine.storeTempData(xmlFile); + Map<String, String> idsattachment = new HashMap<String, String>(); + for (Map.Entry<String, InputStream> entry : attachments.entrySet()) { + String idattachment = storageEngine.storeTempData(entry.getValue()); + idsattachment.put(entry.getKey(), idattachment); + } + return saveElement(idxml, idsattachment); + } - String uuid = metaData.getUuid(); + /** + * Real implementation of saveElement + * + * @param idxml + * @param idsattachment + * @return + * @throws Exception + */ + private MetaDataEntity saveElement(String idxml, + Map<String, String> idsattachment) throws Exception { + // Load xml metadata + MetaDataEntity metaData = MetaDataParser.parse(storageEngine + .retrieveTempData(idxml)); - // If element is an EA, save inner Components and Data + String uuid = metaData.getUuid(); - if (metaData.getType() != null - && metaData.getType().equals(KEY_METADATA_TYPE_VALUE_EA)) { + // If element is an EA, save inner Components and Data - List<String> components = new ArrayList<String>(); - List<String[]> explorationDatas = new ArrayList<String[]>(); + if (metaData.getType() != null + && metaData.getType().equals(KEY_METADATA_TYPE_VALUE_EA)) { - // Retrieve elements - extractChildren(idxml, idsattachment, components, explorationDatas); + List<String> components = new ArrayList<String>(); + List<String[]> explorationDatas = new ArrayList<String[]>(); - // For each exploration data - for (String[] explorationData : explorationDatas) { - // where is stored xml - String idxmlED = explorationData[0]; + // Retrieve elements + extractChildren(idxml, idsattachment, components, explorationDatas); - // where is stored result - Map<String, String> attachmentsED = new HashMap<String, String>(); - if (explorationData.length > 1) { - attachmentsED.put(explorationData[1], idsattachment - .get(explorationData[1])); - } - // recursive save - saveElement(idxmlED, attachmentsED); + // For each exploration data + for (String[] explorationData : explorationDatas) { + // where is stored xml + String idxmlED = explorationData[0]; - } + // where is stored result + Map<String, String> attachmentsED = new HashMap<String, String>(); + if (explorationData.length > 1) { + attachmentsED.put(explorationData[1], idsattachment + .get(explorationData[1])); + } + // recursive save + saveElement(idxmlED, attachmentsED); - // For each component - for (String idComponent : components) { - saveElement(idComponent, new HashMap<String, String>()); - } + } - // Don't save any file for an EA - idsattachment = new HashMap<String, String>(); + // For each component + for (String idComponent : components) { + saveElement(idComponent, new HashMap<String, String>()); + } - } + // Don't save any file for an EA + idsattachment = new HashMap<String, String>(); - // Check existing version in storage - MetaDataEntity previousVersion = storageEngine.getMetadata(uuid, - metaData.getVersion()); - /* - * MetaDataEntity parentData = storageEngine.getElementVersion(metaData - * .getParentData().getUuid(), metaData.getParentData() .getVersion()); - * MetaDataEntity parentVersion = - * storageEngine.getElementVersion(metaData - * .getParentVersion().getUuid(), metaData.getParentVersion() - * .getVersion()); - */ + } - // Version rules - if (previousVersion != null) { - /* - * metaData.setParentVersion(storageEngine.getElementVersion(uuid, - * previousVersion.getVersion())); - */ - metaData.setVersion(previousVersion.getVersion().incVersion(0) - .toString()); - } + // Check existing version in storage + MetaDataEntity previousVersion = storageEngine.getMetadata(uuid, + metaData.getVersion()); + /* + * MetaDataEntity parentData = storageEngine.getElementVersion(metaData + * .getParentData().getUuid(), metaData.getParentData() .getVersion()); + * MetaDataEntity parentVersion = + * storageEngine.getElementVersion(metaData + * .getParentVersion().getUuid(), metaData.getParentVersion() + * .getVersion()); + */ - // Prepare saving - Map<String, InputStream> attachments = new HashMap<String, InputStream>(); + // Version rules + if (previousVersion != null) { + /* + * metaData.setParentVersion(storageEngine.getElementVersion(uuid, + * previousVersion.getVersion())); + */ + metaData.setVersion(previousVersion.getVersion().incVersion(0) + .toString()); + } - attachments.put(KEY_XML, storageEngine.retrieveTempData(idxml)); - for (Map.Entry<String, String> entry : idsattachment.entrySet()) { - attachments.put(entry.getKey(), storageEngine - .retrieveTempData(entry.getValue())); - } - storageEngine.saveElement(metaData, attachments); + // Prepare saving + Map<String, InputStream> attachments = new HashMap<String, InputStream>(); - return metaData; - } + attachments.put(KEY_XML, storageEngine.retrieveTempData(idxml)); + for (Map.Entry<String, String> entry : idsattachment.entrySet()) { + attachments.put(entry.getKey(), storageEngine + .retrieveTempData(entry.getValue())); + } + storageEngine.saveElement(metaData, attachments); + storageEngine.commit(); - private void extractChildren(String idxml, - Map<String, String> idsattachment, List<String> components, - List<String[]> explorationDatas) throws Exception { - MetaDataEntityFactory<MetaDataEntity> elementFactory = (MetaDataEntityFactory<MetaDataEntity>) BaseEntityFactory - .getFactory("MetaDataEntity"); + return metaData; + } - Document document = BaseEntityFactory.getBuilder().parse( - storageEngine.retrieveTempData(idxml)); + private void extractChildren(String idxml, + Map<String, String> idsattachment, List<String> components, + List<String[]> explorationDatas) throws Exception { + MetaDataEntityFactory<MetaDataEntity> elementFactory = (MetaDataEntityFactory<MetaDataEntity>) BaseEntityFactory + .getFactory("MetaDataEntity"); - Element rootElement = (Element) document.getFirstChild(); + Document document = BaseEntityFactory.getBuilder().parse( + storageEngine.retrieveTempData(idxml)); - // Components - Set<Element> componentElements = elementFactory.getElementsByTagName( - rootElement, KEY_COMPONENT); - for (Element element : componentElements) { - components.add(storageEngine.storeTempData(Parser - .serializeElement(element))); - } + Element rootElement = (Element) document.getFirstChild(); - Set<Element> applicationDataElements = elementFactory - .getElementsByTagName(rootElement, KEY_ED); - for (Element elementAD : applicationDataElements) { + // Components + Set<Element> componentElements = elementFactory.getElementsByTagName( + rootElement, KEY_COMPONENT); + for (Element element : componentElements) { + components.add(storageEngine.storeTempData(Parser + .serializeElement(element))); + } - Element element = elementFactory.getElementByTagName(elementAD, - KEY_RESULT); - String result = elementFactory.getProperty(element, KEY_FILE); + Set<Element> applicationDataElements = elementFactory + .getElementsByTagName(rootElement, KEY_ED); + for (Element elementAD : applicationDataElements) { - String[] explorationDataArray = null; - if (result != null) { - explorationDataArray = new String[2]; - explorationDataArray[1] = result; - } else { - explorationDataArray = new String[1]; - } - explorationDataArray[0] = storageEngine.storeTempData(Parser - .serializeElement(elementAD)); + Element element = elementFactory.getElementByTagName(elementAD, + KEY_RESULT); + String result = elementFactory.getProperty(element, KEY_FILE); - } + String[] explorationDataArray = null; + if (result != null) { + explorationDataArray = new String[2]; + explorationDataArray[1] = result; + } else { + explorationDataArray = new String[1]; + } + explorationDataArray[0] = storageEngine.storeTempData(Parser + .serializeElement(elementAD)); - } + } - /* - * public MetaDataEntity loadElement(String idxml, Map<String, String> - * idsattachment) throws Exception { } - */ + } + /* + * public MetaDataEntity loadElement(String idxml, Map<String, String> + * idsattachment) throws Exception { } + */ + } Modified: trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/xml/MetaDataParser.java =================================================================== --- trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/xml/MetaDataParser.java 2007-12-24 12:11:45 UTC (rev 87) +++ trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/xml/MetaDataParser.java 2007-12-26 16:30:11 UTC (rev 88) @@ -13,28 +13,28 @@ public class MetaDataParser extends Parser { - private static String KEY_METADATA = "metadata"; + private static String KEY_METADATA = "metadata"; - private static String KEY_UUID = "uuid"; - private static String KEY_VERSION = "version"; + private static String KEY_UUID = "uuid"; + private static String KEY_VERSION = "version"; - public static MetaDataEntity parse(InputStream xmlStream) throws Exception { - MetaDataEntityFactory<MetaDataEntity> elementFactory = (MetaDataEntityFactory) BaseEntityFactory - .getFactory(MetaDataEntity.class); + public static MetaDataEntity parse(InputStream xmlStream) throws Exception { + MetaDataEntityFactory<MetaDataEntity> elementFactory = (MetaDataEntityFactory) BaseEntityFactory + .getFactory(MetaDataEntity.class); - Document document = elementFactory.getBuilder().parse(xmlStream); - Element rootElement = (Element) document.getFirstChild(); - Element metadataElement = elementFactory.getElementByTagName( - rootElement, KEY_METADATA); + Document document = elementFactory.getBuilder().parse(xmlStream); + Element rootElement = (Element) document.getFirstChild(); + Element metadataElement = elementFactory.getElementByTagName( + rootElement, KEY_METADATA); - MetaDataEntity metaData = elementFactory - .loadXMLElement(metadataElement); - return metaData; - } + MetaDataEntity metaData = elementFactory + .loadXMLElement(metadataElement); + return metaData; + } - public static void save(Document document, Element xmlElement, - MetaDataEntity element) throws Exception { + public static void save(Document document, Element xmlElement, + MetaDataEntity element) throws Exception { - } + } } Modified: trunk/simexplorer-si-storage/src/test/fr/cemagref/simexplorer/is/storage/test/ElementGenerator.java =================================================================== --- trunk/simexplorer-si-storage/src/test/fr/cemagref/simexplorer/is/storage/test/ElementGenerator.java 2007-12-24 12:11:45 UTC (rev 87) +++ trunk/simexplorer-si-storage/src/test/fr/cemagref/simexplorer/is/storage/test/ElementGenerator.java 2007-12-26 16:30:11 UTC (rev 88) @@ -35,6 +35,7 @@ metaData.setVersion(Integer.toString(r.nextInt(100))); metaData.setCreationDate(new Date(r.nextLong())); metaData.setHash(UUID.randomUUID().toString()); + metaData.setLatest(true); Map<String, String> descriptors = new HashMap<String, String>(); int i = 5 + r.nextInt(10); @@ -52,7 +53,8 @@ Set<T> elements = new HashSet<T>(); int i = 1 + r.nextInt(2); for (int j = 0; j < i; j++) { - T element = (T) BaseEntityFactory.getFactory(clazz).createInstance(); + T element = (T) BaseEntityFactory.getFactory(clazz) + .createInstance(); if (element instanceof LoggableElement) { update((LoggableElement) element); } Modified: trunk/simexplorer-si-storage/src/test/fr/cemagref/simexplorer/is/storage/test/LuceneDatabaseLoadTestCase.java =================================================================== --- trunk/simexplorer-si-storage/src/test/fr/cemagref/simexplorer/is/storage/test/LuceneDatabaseLoadTestCase.java 2007-12-24 12:11:45 UTC (rev 87) +++ trunk/simexplorer-si-storage/src/test/fr/cemagref/simexplorer/is/storage/test/LuceneDatabaseLoadTestCase.java 2007-12-26 16:30:11 UTC (rev 88) @@ -139,14 +139,14 @@ for (int i = 0; i < csearch; i++) { String key = randomstrings[r.nextInt(randomstrings.length)] + "*"; - int count = database.findElementsByContentSearchCount(key); + int count = database.findElementsByContentSearchCount(key, false); System.out.println(key + " : " + count); int start = count / 2; int length = Math.min(200, Math.min(count, Math.max(1, count / 4))); Set<MetaDataEntity> metaDatas = database - .findElementsByContentSearch(key, start, length); + .findElementsByContentSearch(key, false, start, length); System.out.println(key + " (" + start + " " + length + ") : " + metaDatas.size()); Modified: trunk/simexplorer-si-storage/src/test/fr/cemagref/simexplorer/is/storage/test/LuceneDatabaseTestCase.java =================================================================== --- trunk/simexplorer-si-storage/src/test/fr/cemagref/simexplorer/is/storage/test/LuceneDatabaseTestCase.java 2007-12-24 12:11:45 UTC (rev 87) +++ trunk/simexplorer-si-storage/src/test/fr/cemagref/simexplorer/is/storage/test/LuceneDatabaseTestCase.java 2007-12-26 16:30:11 UTC (rev 88) @@ -58,14 +58,14 @@ List<Reader> readers = new ArrayList<Reader>(); readers.add(reader); - + database.insertElement(me, readers); database.commit(); - Set<MetaDataEntity> mes = database - .findElementsByContentSearch(keyphrase); + int mesCount = database.findElementsByContentSearchCount(keyphrase, + true); - assertEquals(1, mes.size()); + assertEquals(1, mesCount); } public void testGetVersions() throws Exception { @@ -74,7 +74,7 @@ database.insertElement(mes[i], new ArrayList<Reader>()); } database.commit(); - + List<Version> versions = database.getVersions(mes[0].getUuid()); assertEquals(mes.length, versions.size()); Collections.sort(versions); @@ -92,7 +92,7 @@ database.commit(); Set<MetaDataEntity> elements = database.findElementsById(mes[0] - .getUuid()); + .getUuid(), false); assertEquals(elements.size(), mes.length); } Modified: trunk/simexplorer-si-storage/src/test/fr/cemagref/simexplorer/is/storage/test/LuceneDatabaseThread.java =================================================================== --- trunk/simexplorer-si-storage/src/test/fr/cemagref/simexplorer/is/storage/test/LuceneDatabaseThread.java 2007-12-24 12:11:45 UTC (rev 87) +++ trunk/simexplorer-si-storage/src/test/fr/cemagref/simexplorer/is/storage/test/LuceneDatabaseThread.java 2007-12-26 16:30:11 UTC (rev 88) @@ -3,6 +3,7 @@ import java.io.Reader; import java.util.ArrayList; import java.util.Random; +import java.util.Set; import fr.cemagref.simexplorer.is.storage.database.Database; import fr.cemagref.simexplorer.is.storage.entities.metadata.MetaDataEntity; @@ -52,8 +53,8 @@ } private void searchElements(String id) throws Exception { - MetaDataEntity mde = database.getElementLatestVersion(id); - if (mde == null) { + Set<MetaDataEntity> mde = database.findElementsById(id, true); + if (mde.isEmpty()) { System.err.println(idThreadLucene + " - " + id); } } @@ -69,16 +70,11 @@ for (int i = 0; i < mes.length; i++) { mes[i].setParentDataUuid(Integer.toString(idThreadLucene)); database.insertElement(mes[i], new ArrayList<Reader>()); - /* - System.out.println(idThreadLucene + " - " + ipass + " - " + j - + " - " + i); - */ id = mes[i].getUuid(); } } System.out.print(idThreadLucene + " "); database.commit(); - //sleep(1000); return id; } Modified: trunk/simexplorer-si-storage/src/test/fr/cemagref/simexplorer/is/storage/test/LuceneDatabaseThreadsTestCase.java =================================================================== --- trunk/simexplorer-si-storage/src/test/fr/cemagref/simexplorer/is/storage/test/LuceneDatabaseThreadsTestCase.java 2007-12-24 12:11:45 UTC (rev 87) +++ trunk/simexplorer-si-storage/src/test/fr/cemagref/simexplorer/is/storage/test/LuceneDatabaseThreadsTestCase.java 2007-12-26 16:30:11 UTC (rev 88) @@ -22,7 +22,7 @@ public void testLuceneDatabaseThreads() throws Exception { int nthreads = 10; - + LuceneDatabaseThread[] threads = new LuceneDatabaseThread[nthreads]; for (int i = 0; i < threads.length; i++) { threads[i] = new LuceneDatabaseThread(); Modified: trunk/simexplorer-si-storage/src/test/fr/cemagref/simexplorer/is/storage/test/LuceneSimpleTest.java =================================================================== --- trunk/simexplorer-si-storage/src/test/fr/cemagref/simexplorer/is/storage/test/LuceneSimpleTest.java 2007-12-24 12:11:45 UTC (rev 87) +++ trunk/simexplorer-si-storage/src/test/fr/cemagref/simexplorer/is/storage/test/LuceneSimpleTest.java 2007-12-26 16:30:11 UTC (rev 88) @@ -17,6 +17,17 @@ public class LuceneSimpleTest extends TestCase { + /* + * public void testSearch() throws Exception { Searcher searcher; searcher = + * new IndexSearcher("/home/landais/lucene/index.big"); Query query = new + * TermQuery(new Term("simexplorer.type", "LuceneDatabaseTestCase")); + * + * Sort sort = new Sort("simexplorer.creationdate", true); Hits hits = + * searcher.search(query, sort); for (int i = 0; i < 50; i++) { Document doc = + * hits.doc(i); System.out.println(doc.get("simexplorer.creationdate")); } + * System.out.println(hits.length()); } + */ + public void testLuceneSimple() throws Exception { IndexWriter writer; @@ -56,6 +67,6 @@ System.out.println(searcher.search(query).length()); searcher = new IndexSearcher(indexDir); System.out.println(searcher.search(query).length()); + } - } } Modified: trunk/simexplorer-si-storage/src/test/fr/cemagref/simexplorer/is/storage/test/MetaDataGenerator.java =================================================================== --- trunk/simexplorer-si-storage/src/test/fr/cemagref/simexplorer/is/storage/test/MetaDataGenerator.java 2007-12-24 12:11:45 UTC (rev 87) +++ trunk/simexplorer-si-storage/src/test/fr/cemagref/simexplorer/is/storage/test/MetaDataGenerator.java 2007-12-26 16:30:11 UTC (rev 88) @@ -40,7 +40,9 @@ if (parentVersion != null) { me.setParentVersionUuid(parentVersion.getUuid()); me.setParentVersionVersion(parentVersion.getVersion().toString()); + parentVersion.setLatest(false); } + me.setLatest(true); return me; } @@ -53,6 +55,7 @@ me.setType("LuceneDatabaseTestCase"); me.setDescription(uuid + " " + version.toString()); me.setVersion(version.toString()); + me.setLatest(true); me.setCreationDate(new Date()); me.setHash(UUID.randomUUID().toString()); Modified: trunk/simexplorer-si-storage/src/test/fr/cemagref/simexplorer/is/storage/test/service/StorageServiceTest.java =================================================================== --- trunk/simexplorer-si-storage/src/test/fr/cemagref/simexplorer/is/storage/test/service/StorageServiceTest.java 2007-12-24 12:11:45 UTC (rev 87) +++ trunk/simexplorer-si-storage/src/test/fr/cemagref/simexplorer/is/storage/test/service/StorageServiceTest.java 2007-12-26 16:30:11 UTC (rev 88) @@ -119,7 +119,7 @@ storageService.commit(); assertNotNull(storageService.getMetadata(id)); for (int i = 0; i < randomcontent.length; i++) { - assertTrue(storageService.findFullTextCount(randomcontent[i]) > 0); + assertTrue(storageService.findFullTextCount(randomcontent[i], false) > 0); } }
participants (1)
-
glandais@users.labs.libre-entreprise.org