r990 - in trunk/simexplorer-is: simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/storage simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/storage/engine simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/attachment simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/database simexplorer-is-storage/src
Author: glandais Date: 2008-02-15 15:02:34 +0000 (Fri, 15 Feb 2008) New Revision: 990 Added: trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/storage/SimExplorerStorageSecurityException.java trunk/simexplorer-is/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/SimExplorerStorageTechnicalException.java 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-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceHelper.java trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngineSecuImpl.java trunk/simexplorer-is/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/SimExplorerStorageException.java trunk/simexplorer-is/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/attachment/FileSystemAttachmentHandler.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 Log: SimExplorerStorageTechnicalException creation Hierarchy duplication on element copy 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 14:08:21 UTC (rev 989) +++ trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageService.java 2008-02-15 15:02:34 UTC (rev 990) @@ -79,14 +79,14 @@ * Update. * * @param token the token - * @param oldVersion the old version - * @param newVersion the new version - * @param oldUuid the old uuid - * @param deleteOldElement + * @param uuid the uuid + * @param version the version + * @param updatedElement the updated element + * @param justRemoveLatest just remove latest, if true, updatedElement has to be null * * @throws SimExplorerServiceException the sim explorer service exception */ - void update(String token, String oldUuid, Version oldVersion, MetaData newVersion, boolean deleteOldElement) + void update(String token, String uuid, Version version, MetaData updatedElement, boolean justRemoveLatest) 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 14:08:21 UTC (rev 989) +++ trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceCommon.java 2008-02-15 15:02:34 UTC (rev 990) @@ -374,30 +374,41 @@ } /* (non-Javadoc) - * @see fr.cemagref.simexplorer.is.service.StorageService#update(java.lang.String, java.lang.String, fr.cemagref.simexplorer.is.entities.metadata.Version, fr.cemagref.simexplorer.is.entities.metadata.MetaData) + * @see fr.cemagref.simexplorer.is.service.StorageService#update(java.lang.String, java.lang.String, fr.cemagref.simexplorer.is.entities.metadata.Version, fr.cemagref.simexplorer.is.entities.metadata.MetaData, boolean) */ - public void update(String token, String oldUuid, Version oldVersion, MetaData newElement, boolean deleteOldElement) + public void update(String token, String uuid, Version version, MetaData updatedElement, boolean justRemoveLatest) throws SimExplorerServiceException { Map<Attachment, InputStream> attachments = new HashMap<Attachment, InputStream>(); try { - MetaData oldMetaData = getStorageEngine().getMetadata(token, oldUuid, oldVersion); + MetaData elementToUpdate; - InputStream oldXml = getStorageEngine().retrieveData(token, oldMetaData, getXMLAttachment()); + MetaData currentMetaData = getStorageEngine().getMetadata(token, uuid, version); + + if (justRemoveLatest) { + currentMetaData.setLatest(false); + elementToUpdate = currentMetaData; + } else { + elementToUpdate = updatedElement; + } + InputStream currentXml = getStorageEngine().retrieveData(token, currentMetaData, getXMLAttachment()); + MetaDataFactory<MetaData> mdeFactory = MetaDataFactory.getFactory(MetaData.class); - InputStream newXml = mdeFactory.modifyMedataElementStream(oldXml, newElement); + InputStream newXml = mdeFactory.modifyMedataElementStream(currentXml, elementToUpdate); attachments.put(getXMLAttachment(), newXml); - List<Attachment> realAttachments = oldMetaData.getAttachments(); + List<Attachment> realAttachments = currentMetaData.getAttachments(); for (Attachment attachment : realAttachments) { - attachments.put(attachment, getStorageEngine().retrieveData(token, oldMetaData, attachment)); + attachments.put(attachment, getStorageEngine().retrieveData(token, currentMetaData, attachment)); } - if (deleteOldElement) { - getStorageEngine().deleteElement(token, oldUuid, oldVersion); + if (justRemoveLatest) { + getStorageEngine().deleteElement(token, uuid, version); + } else { + getStorageEngine().duplicateElementHierarchy(token, currentMetaData, elementToUpdate); } - getStorageEngine().saveElement(token, newElement, attachments); + getStorageEngine().saveElement(token, elementToUpdate, attachments); getStorageEngine().commit(); } catch (Exception e) { throw new SimExplorerServiceException(e); @@ -474,9 +485,7 @@ // check if we have rights to create a subversion if (getStorageEngine().canCreateSubVersion(token, metaData.getUuid())) { // set previous as not being the latest one - previousVersion.setLatest(false); - // update item in database, replace previous version - update(token, previousVersion.getUuid(), previousVersion.getVersion(), previousVersion, true); + update(token, previousVersion.getUuid(), previousVersion.getVersion(), null, true); // Increment version only if needed if (metaData.getVersion().compareTo(incrementVersion(previousVersion.getVersion())) <= 0) { @@ -559,12 +568,11 @@ } else { if (getStorageEngine().canCreateSubVersion(token, metaData.getUuid())) { // trying to save a version with same hash but in superior version + // so we will copy versionToUpgrade to metaData.getVersion() Version versionToUpgrade = previousVersion.getVersion().clone(); // set previous as not being the latest one - previousVersion.setLatest(false); - // update item in database, replace previous version - update(token, previousVersion.getUuid(), previousVersion.getVersion(), previousVersion, true); + update(token, previousVersion.getUuid(), previousVersion.getVersion(), null, true); // update already stored element with element being saved version previousVersion.setLatest(true); Modified: trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceHelper.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceHelper.java 2008-02-15 14:08:21 UTC (rev 989) +++ trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceHelper.java 2008-02-15 15:02:34 UTC (rev 990) @@ -57,8 +57,7 @@ // fromElement has to be updated if (!toElement.getUuid().equals(uuid) || !toElement.getVersion().equals(Version.valueOf(version))) { MetaData previousVersion = fromService.getMetadata(token, uuid, version); - previousVersion.setLatest(false); - fromService.update(token, previousVersion.getUuid(), previousVersion.getVersion(), previousVersion, true); + fromService.update(token, previousVersion.getUuid(), previousVersion.getVersion(), null, true); // Update element in source service, from what remote service returns on export toElement.setLatest(true); Added: trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/storage/SimExplorerStorageSecurityException.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/storage/SimExplorerStorageSecurityException.java (rev 0) +++ trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/storage/SimExplorerStorageSecurityException.java 2008-02-15 15:02:34 UTC (rev 990) @@ -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.storage; + +/** + * The Class SimExplorerStorageSecurityException. + */ +public class SimExplorerStorageSecurityException extends SimExplorerStorageException { + + /** + * Instantiates a new sim explorer storage security exception. + */ + public SimExplorerStorageSecurityException() { + super(); + } + + /** + * Instantiates a new sim explorer storage security exception. + * + * @param message the message + */ + public SimExplorerStorageSecurityException(String message) { + super(message); + } + + /** + * Instantiates a new sim explorer storage security exception. + * + * @param cause the cause + */ + public SimExplorerStorageSecurityException(Throwable cause) { + super(cause); + } + + /** + * Instantiates a new sim explorer storage security exception. + * + * @param message the message + * @param cause the cause + */ + public SimExplorerStorageSecurityException(String message, Throwable cause) { + super(message, cause); + } + +} Modified: trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngineSecuImpl.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngineSecuImpl.java 2008-02-15 14:08:21 UTC (rev 989) +++ trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngineSecuImpl.java 2008-02-15 15:02:34 UTC (rev 990) @@ -33,6 +33,7 @@ import fr.cemagref.simexplorer.is.security.credentials.CredentialManager; import fr.cemagref.simexplorer.is.security.entities.Permission; import fr.cemagref.simexplorer.is.storage.SimExplorerStorageException; +import fr.cemagref.simexplorer.is.storage.SimExplorerStorageSecurityException; /** * The Class StorageEngineSecuImpl. @@ -55,7 +56,7 @@ if (permission.isCanAdmin()) { super.deleteElement(token, uuid, version); } else { - throw new SimExplorerStorageException(_("simexplorer.service.security.norights")); + throw new SimExplorerStorageSecurityException(); } } @@ -69,7 +70,7 @@ if (permission.isCanAdmin()) { super.deleteElements(token, uuid); } else { - throw new SimExplorerStorageException(_("simexplorer.service.security.norights")); + throw new SimExplorerStorageSecurityException(); } } @@ -124,7 +125,7 @@ if (permission.isCanRead()) { mde = super.getMetadata(token, uuid, version); } else { - throw new SimExplorerStorageException(_("simexplorer.service.security.norights")); + throw new SimExplorerStorageSecurityException(); } return mde; } @@ -139,7 +140,7 @@ if (permission.isCanRead()) { mde = super.getMetadata(token, uuid); } else { - throw new SimExplorerStorageException(_("simexplorer.service.security.norights")); + throw new SimExplorerStorageSecurityException(); } return mde; } @@ -154,7 +155,7 @@ if (permission.isCanRead()) { versions = super.getVersions(token, uuid); } else { - throw new SimExplorerStorageException(_("simexplorer.service.security.norights")); + throw new SimExplorerStorageSecurityException(); } return versions; } @@ -170,7 +171,7 @@ if (permission.isCanRead()) { stream = super.retrieveData(token, entity, attachment); } else { - throw new SimExplorerStorageException(_("simexplorer.service.security.norights")); + throw new SimExplorerStorageSecurityException(); } return stream; } @@ -198,7 +199,7 @@ super.saveElement(token, element, attachments); credentialManager.saveElement(token, element.getUuid()); } else { - throw new SimExplorerStorageException(_("simexplorer.service.security.norights")); + throw new SimExplorerStorageSecurityException(); } } Modified: trunk/simexplorer-is/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/SimExplorerStorageException.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/SimExplorerStorageException.java 2008-02-15 14:08:21 UTC (rev 989) +++ trunk/simexplorer-is/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/SimExplorerStorageException.java 2008-02-15 15:02:34 UTC (rev 990) @@ -20,7 +20,7 @@ /** * The Class SimExplorerStorageException. */ -public class SimExplorerStorageException extends Exception { +public abstract class SimExplorerStorageException extends Exception { /** The Constant serialVersionUID. */ private static final long serialVersionUID = 4405447107690074844L; @@ -35,8 +35,7 @@ /** * Instantiates a new sim explorer storage exception. * - * @param message - * the message + * @param message the message */ public SimExplorerStorageException(String message) { super(message); @@ -45,8 +44,7 @@ /** * Instantiates a new sim explorer storage exception. * - * @param cause - * the cause + * @param cause the cause */ public SimExplorerStorageException(Throwable cause) { super(cause); @@ -55,10 +53,8 @@ /** * Instantiates a new sim explorer storage exception. * - * @param message - * the message - * @param cause - * the cause + * @param message the message + * @param cause the cause */ public SimExplorerStorageException(String message, Throwable cause) { super(message, cause); Added: trunk/simexplorer-is/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/SimExplorerStorageTechnicalException.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/SimExplorerStorageTechnicalException.java (rev 0) +++ trunk/simexplorer-is/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/SimExplorerStorageTechnicalException.java 2008-02-15 15:02:34 UTC (rev 990) @@ -0,0 +1,62 @@ +/* +* ##% 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; + +/** + * The Class SimExplorerStorageTechnicalException. + */ +public class SimExplorerStorageTechnicalException extends SimExplorerStorageException { + + private static final long serialVersionUID = 7182289381405452276L; + + /** + * Instantiates a new sim explorer storage technical exception. + */ + public SimExplorerStorageTechnicalException() { + super(); + } + + /** + * Instantiates a new sim explorer storage technical exception. + * + * @param message the message + */ + public SimExplorerStorageTechnicalException(String message) { + super(message); + } + + /** + * Instantiates a new sim explorer storage technical exception. + * + * @param cause the cause + */ + public SimExplorerStorageTechnicalException(Throwable cause) { + super(cause); + } + + /** + * Instantiates a new sim explorer storage technical exception. + * + * @param message the message + * @param cause the cause + */ + public SimExplorerStorageTechnicalException(String message, Throwable cause) { + super(message, cause); + } + +} Modified: trunk/simexplorer-is/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/attachment/FileSystemAttachmentHandler.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/attachment/FileSystemAttachmentHandler.java 2008-02-15 14:08:21 UTC (rev 989) +++ trunk/simexplorer-is/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/attachment/FileSystemAttachmentHandler.java 2008-02-15 15:02:34 UTC (rev 990) @@ -32,6 +32,7 @@ import fr.cemagref.simexplorer.is.attachment.Attachment; import fr.cemagref.simexplorer.is.entities.metadata.MetaData; import fr.cemagref.simexplorer.is.storage.SimExplorerStorageException; +import fr.cemagref.simexplorer.is.storage.SimExplorerStorageTechnicalException; import fr.cemagref.simexplorer.is.storage.util.Config; /** @@ -107,7 +108,7 @@ try { fis = new FileInputStream(getFile(entity, attachment, false)); } catch (FileNotFoundException e) { - throw new SimExplorerStorageException(e); + throw new SimExplorerStorageTechnicalException(e); } return fis; } @@ -121,7 +122,7 @@ try { md5 = MD5.asHex(MD5.getHash(getFile(entity, attachment, false))); } catch (Exception e) { - throw new SimExplorerStorageException(e); + throw new SimExplorerStorageTechnicalException(e); } return md5; } @@ -153,9 +154,9 @@ bout.flush(); } catch (FileNotFoundException e) { - throw new SimExplorerStorageException(e); + throw new SimExplorerStorageTechnicalException(e); } catch (IOException e) { - throw new SimExplorerStorageException(e); + throw new SimExplorerStorageTechnicalException(e); } finally { closeStream(bout); } @@ -167,7 +168,7 @@ try { fos.close(); } catch (IOException e) { - throw new SimExplorerStorageException(e); + throw new SimExplorerStorageTechnicalException(e); } } } @@ -181,7 +182,7 @@ // Simple delete on file getFile(entity, attachment, false).delete(); } catch (Exception e) { - throw new SimExplorerStorageException(e); + throw new SimExplorerStorageTechnicalException(e); } } 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 14:08:21 UTC (rev 989) +++ trunk/simexplorer-is/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/database/Database.java 2008-02-15 15:02:34 UTC (rev 990) @@ -88,6 +88,15 @@ */ public abstract void saveElementHierarchy(MetaData parent, MetaData child) throws SimExplorerStorageException; + /** + * Duplicate element hierarchy. + * + * @param fromElement the from element + * @param toElement the to element + * @throws SimExplorerStorageException + */ + public abstract void duplicateElementHierarchy(MetaData fromElement, MetaData toElement) throws SimExplorerStorageException; + // Read /** @@ -290,4 +299,5 @@ */ public abstract void deleteElement(String uuid, Version version) throws SimExplorerStorageException; + } 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 14:08:21 UTC (rev 989) +++ trunk/simexplorer-is/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/database/lucene/LuceneDatabase.java 2008-02-15 15:02:34 UTC (rev 990) @@ -60,6 +60,7 @@ import fr.cemagref.simexplorer.is.entities.metadata.MetaData; import fr.cemagref.simexplorer.is.entities.metadata.Version; import fr.cemagref.simexplorer.is.storage.SimExplorerStorageException; +import fr.cemagref.simexplorer.is.storage.SimExplorerStorageTechnicalException; import fr.cemagref.simexplorer.is.storage.database.Database; import fr.cemagref.simexplorer.is.storage.util.Config; import fr.cemagref.simexplorer.is.storage.util.KeyValue; @@ -199,7 +200,7 @@ commit(); } } catch (IOException e) { - throw new SimExplorerStorageException(e); + throw new SimExplorerStorageTechnicalException(e); } } } @@ -217,7 +218,7 @@ } resetReader(); } catch (IOException e) { - throw new SimExplorerStorageException(e); + throw new SimExplorerStorageTechnicalException(e); } searcherPool = null; } @@ -253,7 +254,7 @@ // Allows concurent access synchedCommit(); } catch (IOException e) { - throw new SimExplorerStorageException(e); + throw new SimExplorerStorageTechnicalException(e); } } @@ -271,7 +272,7 @@ writer.addDocument(document); } } catch (IOException e) { - throw new SimExplorerStorageException(e); + throw new SimExplorerStorageTechnicalException(e); } } @@ -289,7 +290,7 @@ writer.addDocument(document); } } catch (IOException e) { - throw new SimExplorerStorageException(e); + throw new SimExplorerStorageTechnicalException(e); } } @@ -314,7 +315,7 @@ releaseSearcher(searcher); } } catch (Exception e) { - throw new SimExplorerStorageException(e); + throw new SimExplorerStorageTechnicalException(e); } return result; @@ -372,7 +373,7 @@ releaseSearcher(searcher); } } catch (Exception e) { - throw new SimExplorerStorageException(e); + throw new SimExplorerStorageTechnicalException(e); } return versions; @@ -403,7 +404,7 @@ releaseSearcher(searcher); } } catch (Exception e) { - throw new SimExplorerStorageException(e); + throw new SimExplorerStorageTechnicalException(e); } // Return all elements parsed from documents fund @@ -428,7 +429,7 @@ releaseSearcher(searcher); } } catch (Exception e) { - throw new SimExplorerStorageException(e); + throw new SimExplorerStorageTechnicalException(e); } // Return all elements parsed from documents fund @@ -454,7 +455,7 @@ releaseSearcher(searcher); } } catch (Exception e) { - throw new SimExplorerStorageException(e); + throw new SimExplorerStorageTechnicalException(e); } // Return all elements parsed from documents fund @@ -471,7 +472,7 @@ try { query = getQueryByContentSearch(queryText, onlyLatest); } catch (ParseException e) { - throw new SimExplorerStorageException(e); + throw new SimExplorerStorageTechnicalException(e); } int result = 0; @@ -489,7 +490,7 @@ releaseSearcher(searcher); } } catch (Exception e) { - throw new SimExplorerStorageException(e); + throw new SimExplorerStorageTechnicalException(e); } return result; @@ -523,7 +524,7 @@ try { query = getQueryByContentSearch(queryText, onlyLatest); } catch (ParseException e) { - throw new SimExplorerStorageException(e); + throw new SimExplorerStorageTechnicalException(e); } Set<MetaData> result = null; @@ -541,7 +542,7 @@ releaseSearcher(searcher); } } catch (Exception e) { - throw new SimExplorerStorageException(e); + throw new SimExplorerStorageTechnicalException(e); } return result; @@ -594,7 +595,7 @@ writer.deleteDocuments(term); } } catch (Exception e) { - throw new SimExplorerStorageException(e); + throw new SimExplorerStorageTechnicalException(e); } } @@ -908,7 +909,7 @@ releaseSearcher(searcher); } } catch (Exception e) { - throw new SimExplorerStorageException(e); + throw new SimExplorerStorageTechnicalException(e); } return result; } @@ -929,4 +930,26 @@ return getAssociatedElements(mde, KEY_UUID_VERSION_PARENT, KEY_UUID_VERSION_CHILD); } + /* (non-Javadoc) + * @see fr.cemagref.simexplorer.is.storage.database.Database#duplicateElementHierarchy(fr.cemagref.simexplorer.is.entities.metadata.MetaData, fr.cemagref.simexplorer.is.entities.metadata.MetaData) + */ + @Override + public void duplicateElementHierarchy(MetaData fromElement, MetaData toElement) throws SimExplorerStorageException { + // Delete element in db with term search + Term term = new Term(KEY_UUID_VERSION_PARENT, getUuidVersion(toElement.getUuid(), toElement.getVersion())); + try { + synchronized (writerSynchronizer) { + writer.deleteDocuments(term); + } + } catch (Exception e) { + throw new SimExplorerStorageTechnicalException(e); + } + + Set<MetaData> elementsUsedByFrom = getElementsUsedBy(fromElement); + + for (MetaData elementUsed : elementsUsedByFrom) { + saveElementHierarchy(toElement, elementUsed); + } + } + } 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 14:08:21 UTC (rev 989) +++ trunk/simexplorer-is/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngine.java 2008-02-15 15:02:34 UTC (rev 990) @@ -81,6 +81,16 @@ throws SimExplorerStorageException; /** + * Duplicate element hierarchy. + * + * @param token the token + * @param fromElement the from element + * @param toElement the to element + * @throws SimExplorerStorageException + */ + public abstract void duplicateElementHierarchy(String token, MetaData fromElement, MetaData toElement) throws SimExplorerStorageException; + + /** * Can create sub version for element. * * @param token the token @@ -319,4 +329,5 @@ */ public abstract void deleteTempData(String id) throws SimExplorerStorageException; + } \ No newline at end of file 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 14:08:21 UTC (rev 989) +++ trunk/simexplorer-is/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngineImpl.java 2008-02-15 15:02:34 UTC (rev 990) @@ -32,6 +32,7 @@ import fr.cemagref.simexplorer.is.entities.metadata.MetaData; import fr.cemagref.simexplorer.is.entities.metadata.Version; import fr.cemagref.simexplorer.is.storage.SimExplorerStorageException; +import fr.cemagref.simexplorer.is.storage.SimExplorerStorageTechnicalException; import fr.cemagref.simexplorer.is.storage.attachment.AttachmentHandler; import fr.cemagref.simexplorer.is.storage.attachment.FileSystemAttachmentHandler; import fr.cemagref.simexplorer.is.storage.database.Database; @@ -120,7 +121,7 @@ Reader reader = attachment.getContentType().renderToText(content); readers.add(reader); } catch (Exception e) { - throw new SimExplorerStorageException(e); + throw new SimExplorerStorageTechnicalException(e); } } } @@ -149,6 +150,11 @@ database.saveElementHierarchy(parent, child); } + @Override + public void duplicateElementHierarchy(String token, MetaData fromElement, MetaData toElement) throws SimExplorerStorageException { + database.duplicateElementHierarchy(fromElement, toElement); + } + // Read /* (non-Javadoc) @@ -339,4 +345,5 @@ return true; } + }
participants (1)
-
glandais@users.labs.libre-entreprise.org