Author: glandais Date: 2008-02-15 13:14:05 +0000 (Fri, 15 Feb 2008) New Revision: 986 Modified: trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageService.java trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceCommon.java trunk/simexplorer-is/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/database/Database.java trunk/simexplorer-is/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/database/lucene/LuceneDatabase.java trunk/simexplorer-is/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngine.java trunk/simexplorer-is/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngineImpl.java trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/service/MockStorageServiceImpl.java Log: Retrieving element hierarchy Modified: trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageService.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageService.java 2008-02-15 10:18:01 UTC (rev 985) +++ trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageService.java 2008-02-15 13:14:05 UTC (rev 986) @@ -47,8 +47,7 @@ * * @throws SimExplorerServiceException the sim explorer service exception */ - String loginUser(String login, String password) - throws SimExplorerServiceException; + String loginUser(String login, String password) throws SimExplorerServiceException; /** * Save an element. @@ -60,8 +59,7 @@ * * @throws SimExplorerServiceException the sim explorer service exception */ - MetaData saveElement(String token, SerializableInputStream zipStream) - throws SimExplorerServiceException; + MetaData saveElement(String token, SerializableInputStream zipStream) throws SimExplorerServiceException; /** * Save an element. @@ -75,8 +73,7 @@ * @throws SimExplorerServiceException the sim explorer service exception */ MetaData saveElement(String token, SerializableInputStream xmlStream, - Map<Attachment, SerializableInputStream> attachmentsStream) - throws SimExplorerServiceException; + Map<Attachment, SerializableInputStream> attachmentsStream) throws SimExplorerServiceException; /** * Update. @@ -91,7 +88,7 @@ */ void update(String token, String oldUuid, Version oldVersion, MetaData newVersion, boolean deleteOldElement) throws SimExplorerServiceException; - + /** * Retrieve metadata (latest version). * @@ -102,8 +99,7 @@ * * @throws SimExplorerServiceException the sim explorer service exception */ - MetaData getMetadata(String token, String uuid) - throws SimExplorerServiceException; + MetaData getMetadata(String token, String uuid) throws SimExplorerServiceException; /** * Retrieve metadata. @@ -116,10 +112,35 @@ * * @throws SimExplorerServiceException the sim explorer service exception */ - MetaData getMetadata(String token, String uuid, String version) - throws SimExplorerServiceException; + MetaData getMetadata(String token, String uuid, String version) throws SimExplorerServiceException; /** + * Gets the metadatas used by the element. + * + * @param token the token + * @param uuid the uuid + * @param version the version + * + * @return the metadatas used + * + * @throws SimExplorerServiceException the sim explorer service exception + */ + MetaData[] getMetadatasUsed(String token, String uuid, String version) throws SimExplorerServiceException; + + /** + * Gets the metadatas using the element. + * + * @param token the token + * @param uuid the uuid + * @param version the version + * + * @return the metadatas using + * + * @throws SimExplorerServiceException the sim explorer service exception + */ + MetaData[] getMetadatasUsing(String token, String uuid, String version) throws SimExplorerServiceException; + + /** * Export XML of element to a stream. * * @param token the token @@ -130,8 +151,7 @@ * * @throws SimExplorerServiceException the sim explorer service exception */ - InputStream retrieveElementXML(String token, String uuid, String version) - throws SimExplorerServiceException; + InputStream retrieveElementXML(String token, String uuid, String version) throws SimExplorerServiceException; /** * Export full element to a stream as a zip. @@ -144,8 +164,7 @@ * * @throws SimExplorerServiceException the sim explorer service exception */ - InputStream retrieveElementFull(String token, String uuid, String version) - throws SimExplorerServiceException; + InputStream retrieveElementFull(String token, String uuid, String version) throws SimExplorerServiceException; /** * Retrieve data related to an entity. @@ -159,8 +178,8 @@ * * @throws SimExplorerServiceException the sim explorer service exception */ - InputStream retrieveElementData(String token, String uuid, String version, - Attachment attachment) throws SimExplorerServiceException; + InputStream retrieveElementData(String token, String uuid, String version, Attachment attachment) + throws SimExplorerServiceException; /** * Retrieve number of elements matching query. @@ -173,8 +192,7 @@ * * @throws SimExplorerServiceException the sim explorer service exception */ - int findFullTextCount(String token, String query, boolean onlyLatest) - throws SimExplorerServiceException; + int findFullTextCount(String token, String query, boolean onlyLatest) throws SimExplorerServiceException; /** * Find elements matching query. @@ -190,8 +208,7 @@ * * @throws SimExplorerServiceException the sim explorer service exception */ - MetaData[] findFullText(String token, String query, boolean onlyLatest, - int indexStart, int count, int dateOrder) + MetaData[] findFullText(String token, String query, boolean onlyLatest, int indexStart, int count, int dateOrder) throws SimExplorerServiceException; /** @@ -204,8 +221,7 @@ * * @throws SimExplorerServiceException the sim explorer service exception */ - int findApplicationsCount(String token, boolean onlyLatest) - throws SimExplorerServiceException; + int findApplicationsCount(String token, boolean onlyLatest) throws SimExplorerServiceException; /** * Get a list of applications. @@ -220,8 +236,8 @@ * * @throws SimExplorerServiceException the sim explorer service exception */ - MetaData[] findApplications(String token, boolean onlyLatest, int start, - int count, int dateOrder) throws SimExplorerServiceException; + MetaData[] findApplications(String token, boolean onlyLatest, int start, int count, int dateOrder) + throws SimExplorerServiceException; /** * Fully load an element. @@ -234,8 +250,7 @@ * * @throws SimExplorerServiceException the sim explorer service exception */ - LoggableElement getLoggableElement(String token, String uuid, String version) - throws SimExplorerServiceException; + LoggableElement getLoggableElement(String token, String uuid, String version) throws SimExplorerServiceException; /** * Get all version of an element. @@ -247,8 +262,7 @@ * * @throws SimExplorerServiceException the sim explorer service exception */ - Version[] getVersions(String token, String uuid) - throws SimExplorerServiceException; + Version[] getVersions(String token, String uuid) throws SimExplorerServiceException; /** * Delete element. @@ -259,8 +273,7 @@ * * @throws SimExplorerServiceException the sim explorer service exception */ - void deleteElement(String token, String uuid, String version) - throws SimExplorerServiceException; + void deleteElement(String token, String uuid, String version) throws SimExplorerServiceException; /** * Delete element. @@ -270,7 +283,6 @@ * * @throws SimExplorerServiceException the sim explorer service exception */ - void deleteElement(String token, String uuid) - throws SimExplorerServiceException; + void deleteElement(String token, String uuid) throws SimExplorerServiceException; } Modified: trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceCommon.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceCommon.java 2008-02-15 10:18:01 UTC (rev 985) +++ trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceCommon.java 2008-02-15 13:14:05 UTC (rev 986) @@ -100,6 +100,30 @@ } /* (non-Javadoc) + * @see fr.cemagref.simexplorer.is.service.StorageService#getMetadatasUsed(java.lang.String, java.lang.String, java.lang.String) + */ + @Override + public MetaData[] getMetadatasUsed(String token, String uuid, String version) throws SimExplorerServiceException { + try { + return getStorageEngine().getMetadatasUsed(token, uuid, new Version(version)); + } catch (SimExplorerStorageException e) { + throw new SimExplorerServiceException(e); + } + } + + /* (non-Javadoc) + * @see fr.cemagref.simexplorer.is.service.StorageService#getMetadatasUsing(java.lang.String, java.lang.String, java.lang.String) + */ + @Override + public MetaData[] getMetadatasUsing(String token, String uuid, String version) throws SimExplorerServiceException { + try { + return getStorageEngine().getMetadatasUsing(token, uuid, new Version(version)); + } catch (SimExplorerStorageException e) { + throw new SimExplorerServiceException(e); + } + } + + /* (non-Javadoc) * @see fr.cemagref.simexplorer.is.service.StorageService#findFullText(java.lang.String, java.lang.String, boolean, int, int, int) */ public MetaData[] findFullText(String token, String query, boolean onlyLatest, int indexStart, int count, @@ -475,6 +499,13 @@ } } + /** + * Gets the first element. + * + * @param document the document + * + * @return the first element + */ private Element getFirstElement(Document document) { Element element = null; NodeList childNodes = document.getChildNodes(); @@ -627,6 +658,7 @@ * @param idsattachment the idsattachment * @param document the document * @param node the node + * @param parent the parent * * @throws Exception the exception */ @@ -641,7 +673,6 @@ for (Element element : entityElements) { MetaData elementMetaData = saveElement(token, document, element, idsattachment); getStorageEngine().saveElementHierarchy(token, parent, elementMetaData); - // FIXME store that this element is used } } Modified: trunk/simexplorer-is/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/database/Database.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/database/Database.java 2008-02-15 10:18:01 UTC (rev 985) +++ trunk/simexplorer-is/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/database/Database.java 2008-02-15 13:14:05 UTC (rev 986) @@ -79,11 +79,12 @@ public abstract void insertElement(MetaData element, List<Reader> readers) throws SimExplorerStorageException; /** - * Save element hierarchy, saving the fact that parent uses child + * Save element hierarchy, saving the fact that parent uses child. * * @param parent the parent * @param child the child - * @throws SimExplorerStorageException + * + * @throws SimExplorerStorageException the sim explorer storage exception */ public abstract void saveElementHierarchy(MetaData parent, MetaData child) throws SimExplorerStorageException; @@ -114,6 +115,26 @@ public abstract List<Version> getVersions(String uuid) throws SimExplorerStorageException; /** + * Gets the elements used by mde. + * + * @param mde the mde + * + * @return the elements used by + * @throws SimExplorerStorageException + */ + public abstract Set<MetaData> getElementsUsedBy(MetaData mde) throws SimExplorerStorageException; + + /** + * Gets the elements using mde. + * + * @param mde the mde + * + * @return the elements using + * @throws SimExplorerStorageException + */ + public abstract Set<MetaData> getElementsUsing(MetaData mde) throws SimExplorerStorageException; + + /** * Retrieve all elements by id Empty list if no element with this id. * * @param uuid Id Modified: trunk/simexplorer-is/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/database/lucene/LuceneDatabase.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/database/lucene/LuceneDatabase.java 2008-02-15 10:18:01 UTC (rev 985) +++ trunk/simexplorer-is/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/database/lucene/LuceneDatabase.java 2008-02-15 13:14:05 UTC (rev 986) @@ -764,6 +764,14 @@ } } + /** + * Gets the uuid version. + * + * @param uuid the uuid + * @param version the version + * + * @return the uuid version + */ private String getUuidVersion(String uuid, Version version) { StringBuffer sb = new StringBuffer(); sb.append(uuid).append(".").append(version.toString()); @@ -771,7 +779,7 @@ } /** - * Transform an element hierarchy to a Lucene document + * Transform an element hierarchy to a Lucene document. * * @param parent the parent * @param child the child @@ -849,4 +857,76 @@ return document; } + /** + * Gets the associated elements. + * + * @param mde the mde + * @param fromField the from field + * @param toField the to field + * + * @return the associated elements + * @throws SimExplorerStorageException + */ + protected Set<MetaData> getAssociatedElements(MetaData mde, String fromField, String toField) + throws SimExplorerStorageException { + Set<MetaData> result = new HashSet<MetaData>(); + try { + Query query; + Hits hits; + + // Get current searcher instance + Searcher searcher = getSearcher(); + try { + List<String> uuidVersionList = new ArrayList<String>(); + + // First search corresponding elements in base + query = new TermQuery(new Term(fromField, getUuidVersion(mde.getUuid(), mde.getVersion()))); + hits = searcher.search(query); + + // For each one, retrieve idversion associated + for (int j = 0; j < hits.length(); j++) { + Document document = hits.doc(j); + uuidVersionList.add(document.get(toField)); + } + + // for each idversion associated, look up corresponding element + for (String uuidVersion : uuidVersionList) { + + // Create a query with all parameters + query = new TermQuery(new Term(KEY_UUID_VERSION, uuidVersion)); + hits = searcher.search(query); + + for (int j = 0; j < hits.length(); j++) { + Document document = hits.doc(j); + + result.add(loadLuceneElement(document)); + } + + } + } finally { + // Release searcher instance + releaseSearcher(searcher); + } + } catch (Exception e) { + throw new SimExplorerStorageException(e); + } + return result; + } + + /* (non-Javadoc) + * @see fr.cemagref.simexplorer.is.storage.database.Database#getElementsUsedBy(fr.cemagref.simexplorer.is.entities.metadata.MetaData) + */ + @Override + public Set<MetaData> getElementsUsedBy(MetaData mde) throws SimExplorerStorageException { + return getAssociatedElements(mde, KEY_UUID_VERSION_CHILD, KEY_UUID_VERSION_PARENT); + } + + /* (non-Javadoc) + * @see fr.cemagref.simexplorer.is.storage.database.Database#getElementsUsing(fr.cemagref.simexplorer.is.entities.metadata.MetaData) + */ + @Override + public Set<MetaData> getElementsUsing(MetaData mde) throws SimExplorerStorageException { + return getAssociatedElements(mde, KEY_UUID_VERSION_PARENT, KEY_UUID_VERSION_CHILD); + } + } Modified: trunk/simexplorer-is/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngine.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngine.java 2008-02-15 10:18:01 UTC (rev 985) +++ trunk/simexplorer-is/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngine.java 2008-02-15 13:14:05 UTC (rev 986) @@ -74,7 +74,8 @@ * @param token the token * @param parent the parent * @param child the child - * @throws SimExplorerStorageException + * + * @throws SimExplorerStorageException the sim explorer storage exception */ public abstract void saveElementHierarchy(String token, MetaData parent, MetaData child) throws SimExplorerStorageException; @@ -142,6 +143,34 @@ public abstract MetaData getMetadata(String token, String uuid, Version version) throws SimExplorerStorageException; /** + * Gets the metadatas used. + * + * @param token the token + * @param uuid the uuid + * @param version the version + * + * @return the metadatas used + * + * @throws SimExplorerStorageException the sim explorer storage exception + */ + public abstract MetaData[] getMetadatasUsed(String token, String uuid, Version version) + throws SimExplorerStorageException; + + /** + * Gets the metadatas using. + * + * @param token the token + * @param uuid the uuid + * @param version the version + * + * @return the metadatas using + * + * @throws SimExplorerStorageException the sim explorer storage exception + */ + public abstract MetaData[] getMetadatasUsing(String token, String uuid, Version version) + throws SimExplorerStorageException; + + /** * Get data associated to an element. * * @param entity Element related Modified: trunk/simexplorer-is/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngineImpl.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngineImpl.java 2008-02-15 10:18:01 UTC (rev 985) +++ trunk/simexplorer-is/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngineImpl.java 2008-02-15 13:14:05 UTC (rev 986) @@ -26,6 +26,8 @@ import java.util.Set; import java.util.UUID; +import org.codelutin.util.CollectionUtil; + import fr.cemagref.simexplorer.is.attachment.Attachment; import fr.cemagref.simexplorer.is.entities.metadata.MetaData; import fr.cemagref.simexplorer.is.entities.metadata.Version; @@ -177,6 +179,26 @@ } /* (non-Javadoc) + * @see fr.cemagref.simexplorer.is.storage.engine.StorageEngine#getMetadatasUsed(java.lang.String, java.lang.String, fr.cemagref.simexplorer.is.entities.metadata.Version) + */ + @Override + public MetaData[] getMetadatasUsed(String token, String uuid, Version version) throws SimExplorerStorageException { + MetaData mde = database.getElement(uuid, version); + Set<MetaData> elements = database.getElementsUsedBy(mde); + return elements.toArray(new MetaData[elements.size()]); + } + + /* (non-Javadoc) + * @see fr.cemagref.simexplorer.is.storage.engine.StorageEngine#getMetadatasUsing(java.lang.String, java.lang.String, fr.cemagref.simexplorer.is.entities.metadata.Version) + */ + @Override + public MetaData[] getMetadatasUsing(String token, String uuid, Version version) throws SimExplorerStorageException { + MetaData mde = database.getElement(uuid, version); + Set<MetaData> elements = database.getElementsUsing(mde); + return elements.toArray(new MetaData[elements.size()]); + } + + /* (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, Attachment attachment) @@ -197,8 +219,8 @@ */ public MetaData[] findFullText(String token, String query, boolean onlyLatest, int indexStart, int count, int dateOrder) throws SimExplorerStorageException { - MetaData[] result = database.findElementsByContentSearch(query, onlyLatest, indexStart, count, dateOrder) - .toArray(new MetaData[0]); + Set<MetaData> elements = database.findElementsByContentSearch(query, onlyLatest, indexStart, count, dateOrder); + MetaData[] result = elements.toArray(new MetaData[elements.size()]); return result; } @@ -207,8 +229,8 @@ */ public MetaData[] findElementsByType(String token, String type, boolean onlyLatest, int start, int count, int dateOrder) throws SimExplorerStorageException { - MetaData[] result = database.findElementsByType(type, onlyLatest, start, count, dateOrder).toArray( - new MetaData[0]); + Set<MetaData> elements = database.findElementsByType(type, onlyLatest, start, count, dateOrder); + MetaData[] result = elements.toArray(new MetaData[elements.size()]); return result; } @@ -269,6 +291,9 @@ return id; } + /* (non-Javadoc) + * @see fr.cemagref.simexplorer.is.storage.engine.StorageEngine#storeTempData(java.lang.String, java.io.InputStream) + */ @Override public void storeTempData(String id, InputStream stream) throws SimExplorerStorageException { attachmentHandler.storeData(mdTmp, getTmpAttachment(id), stream); @@ -282,6 +307,9 @@ return is; } + /* (non-Javadoc) + * @see fr.cemagref.simexplorer.is.storage.engine.StorageEngine#retrieveMD5TempData(java.lang.String) + */ @Override public String retrieveMD5TempData(String id) throws SimExplorerStorageException { String md5 = attachmentHandler.retrieveMD5Data(mdTmp, getTmpAttachment(id)); Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/service/MockStorageServiceImpl.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/service/MockStorageServiceImpl.java 2008-02-15 10:18:01 UTC (rev 985) +++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/service/MockStorageServiceImpl.java 2008-02-15 13:14:05 UTC (rev 986) @@ -291,4 +291,16 @@ public String toString() { return super.toString() + " remote:" + remote; } + + @Override + public MetaData[] getMetadatasUsed(String token, String uuid, String version) throws SimExplorerServiceException { + checkImplemented(); + return null; + } + + @Override + public MetaData[] getMetadatasUsing(String token, String uuid, String version) throws SimExplorerServiceException { + checkImplemented(); + return null; + } }