Author: tchemit Date: 2008-02-13 12:57:04 +0000 (Wed, 13 Feb 2008) New Revision: 914 Modified: trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceCommon.java Log: formattage classe : methodes abstraites tout en haut methodes publiques methodes protegees methodes privees 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-13 12:33:36 UTC (rev 913) +++ trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceCommon.java 2008-02-13 12:57:04 UTC (rev 914) @@ -23,7 +23,6 @@ import java.io.PipedInputStream; import java.io.PipedOutputStream; import java.util.HashMap; -import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; @@ -53,7 +52,7 @@ public abstract class StorageServiceCommon implements StorageService, XmlConstants { /** The xml attachment. */ - private Attachment xmlAttachment = null; + protected Attachment xmlAttachment = null; /** * Gets the storage engine. @@ -65,18 +64,13 @@ protected abstract StorageEngine getStorageEngine() throws SimExplorerStorageException; /** - * Gets the xML attachment. - * - * @return the xML attachment + * Increment version. + * + * @param version the version + * + * @return the version */ - private Attachment getXMLAttachment() { - if (xmlAttachment == null) { - xmlAttachment = new Attachment(); - xmlAttachment.setDataHash(""); - xmlAttachment.setFileName("entity.xml"); - } - return xmlAttachment; - } + protected abstract Version incrementVersion(Version version); /* (non-Javadoc) * @see fr.cemagref.simexplorer.is.service.StorageService#getMetadata(java.lang.String, java.lang.String) @@ -172,9 +166,9 @@ * * @param token the token * @param zipStream the zip stream - * + * * @return the meta data - * + * * @throws SimExplorerServiceException the sim explorer service exception */ public MetaData saveElement(String token, SimExplorerServiceStream zipStream) throws SimExplorerServiceException { @@ -234,7 +228,7 @@ * @param token the token * @param xmlFile the xml file * @param attachments the attachments - * + * * @return the meta data * * @throws SimExplorerServiceException the exception @@ -262,14 +256,14 @@ /** * Retrieve element data. - * + * * @param token the token * @param uuid the uuid * @param version the version * @param attachment the attachment - * + * * @return the input stream - * + * * @throws SimExplorerServiceException the sim explorer service exception */ public InputStream retrieveElementData(String token, String uuid, String version, Attachment attachment) @@ -286,13 +280,13 @@ /** * Retrieve element xml common. - * + * * @param token the token * @param uuid the uuid * @param version the version - * + * * @return the input stream - * + * * @throws SimExplorerServiceException the sim explorer service exception */ public InputStream retrieveElementXML(String token, String uuid, String version) throws SimExplorerServiceException { @@ -308,13 +302,13 @@ /** * Retrieve element full. - * + * * @param token the token * @param uuid the uuid * @param version the version - * + * * @return the input stream - * + * * @throws SimExplorerServiceException the sim explorer service exception */ public InputStream retrieveElementFull(String token, String uuid, String version) @@ -348,15 +342,152 @@ } + /* (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) + */ + public void update(String token, String oldUuid, Version oldVersion, MetaData newVersion, boolean deleteOldElement) + throws SimExplorerServiceException { + Map<Attachment, InputStream> attachments = new HashMap<Attachment, InputStream>(); + try { + MetaData oldMetaData = getStorageEngine().getMetadata(token, oldUuid, oldVersion); + + InputStream oldXml = getStorageEngine().retrieveData(token, oldMetaData, getXMLAttachment()); + + MetaDataFactory<MetaData> mdeFactory = MetaDataFactory.getFactory(MetaData.class); + InputStream newXml = mdeFactory.replaceElementInParentXML(oldXml, newVersion); + + attachments.put(getXMLAttachment(), newXml); + + List<Attachment> realAttachments = oldMetaData.getAttachments(); + for (Attachment attachment : realAttachments) { + attachments.put(attachment, getStorageEngine().retrieveData(token, oldMetaData, attachment)); + } + + if (deleteOldElement) { + getStorageEngine().deleteElement(token, oldUuid, oldVersion); + } + getStorageEngine().saveElement(token, newVersion, attachments); + getStorageEngine().commit(); + } catch (Exception e) { + throw new SimExplorerServiceException(e); + } + } + + /* (non-Javadoc) + * @see fr.cemagref.simexplorer.is.service.StorageService#getVersions(java.lang.String, java.lang.String) + */ + public Version[] getVersions(String token, String uuid) throws SimExplorerServiceException { + try { + Set<MetaData> versions = getStorageEngine().getElementVersions(token, uuid); + Version[] result = new Version[versions.size()]; + int i = 0; + for (MetaData metaData : versions) { + result[i] = metaData.getVersion(); + i++; + } + return result; + } catch (SimExplorerStorageException e) { + throw new SimExplorerServiceException(e); + } + } + + /* (non-Javadoc) + * @see fr.cemagref.simexplorer.is.service.StorageService#deleteElement(java.lang.String, java.lang.String, java.lang.String) + */ + public void deleteElement(String token, String uuid, String version) throws SimExplorerServiceException { + try { + getStorageEngine().deleteElement(token, uuid, new Version(version)); + getStorageEngine().commit(); + } catch (SimExplorerStorageException e) { + throw new SimExplorerServiceException(e); + } + } + + /* (non-Javadoc) + * @see fr.cemagref.simexplorer.is.service.StorageService#deleteElement(java.lang.String, java.lang.String) + */ + public void deleteElement(String token, String uuid) throws SimExplorerServiceException { + try { + getStorageEngine().deleteElements(token, uuid); + getStorageEngine().commit(); + } catch (SimExplorerStorageException e) { + throw new SimExplorerServiceException(e); + } + } + /** + * Process version rules. + * + * @param token the token + * @param metaData the meta data + * + * @return true, if process version rules + * + * @throws Exception the exception + */ + protected boolean processVersionRules(String token, MetaData metaData) throws Exception { + // This one will always be the latest + metaData.setLatest(true); + + // Check existing version in storage + MetaData previousVersion = getStorageEngine().getMetadata(token, metaData.getUuid()); + + // Version rules + if (previousVersion != null) { + previousVersion.setLatest(false); + update(token, previousVersion.getUuid(), previousVersion.getVersion(), previousVersion, false); + + // Increment version only if needed + if (metaData.getVersion().compareTo(incrementVersion(previousVersion.getVersion())) <= 0) { + metaData.setVersion(incrementVersion(previousVersion.getVersion()).toString()); + } + + return true; + } + return false; + } + + /** + * Gets the xML attachment. + * + * @return the xML attachment + */ + private Attachment getXMLAttachment() { + if (xmlAttachment == null) { + xmlAttachment = new Attachment(); + xmlAttachment.setDataHash(""); + xmlAttachment.setFileName("entity.xml"); + } + return xmlAttachment; + } + + private boolean notExists(String token, MetaData metaData) throws Exception { + MetaData previousVersion = getStorageEngine().getMetadata(token, metaData.getUuid()); + + if (previousVersion != null && previousVersion.getHash().equals(metaData.getHash())) { + + if (metaData.getVersion().compareTo(previousVersion.getVersion()) < 0) { + metaData.setVersion(previousVersion.getVersion().toString()); + } else { + Version versionToUpgrade = previousVersion.getVersion().clone(); + previousVersion.setVersion(metaData.getVersion().toString()); + update(token, previousVersion.getUuid(), versionToUpgrade, previousVersion, false); + } + + return false; + } + return true; + } + + /** * Real implementation of saveElement. - * + * * @param token the token * @param idxml the idxml * @param idsattachment the idsattachment - * + * * @return the meta data - * + * * @throws Exception the exception */ private MetaData saveElement(String token, String idxml, Map<Attachment, String> idsattachment) throws Exception { @@ -419,13 +550,13 @@ /** * Save sub elements. - * + * * @param token the token * @param idxml the idxml * @param entitiesNode the entities node * @param entityNode the entity node * @param idsattachment the idsattachment - * + * * @throws Exception the exception */ private void saveSubElements(String token, String idxml, String entitiesNode, String entityNode, @@ -448,137 +579,4 @@ } - /* (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) - */ - public void update(String token, String oldUuid, Version oldVersion, MetaData newVersion, boolean deleteOldElement) - throws SimExplorerServiceException { - Map<Attachment, InputStream> attachments = new HashMap<Attachment, InputStream>(); - try { - MetaData oldMetaData = getStorageEngine().getMetadata(token, oldUuid, oldVersion); - - InputStream oldXml = getStorageEngine().retrieveData(token, oldMetaData, getXMLAttachment()); - - MetaDataFactory<MetaData> mdeFactory = MetaDataFactory.getFactory(MetaData.class); - InputStream newXml = mdeFactory.replaceElementInParentXML(oldXml, newVersion); - - attachments.put(getXMLAttachment(), newXml); - - List<Attachment> realAttachments = oldMetaData.getAttachments(); - for (Attachment attachment : realAttachments) { - attachments.put(attachment, getStorageEngine().retrieveData(token, oldMetaData, attachment)); - } - - if (deleteOldElement) { - getStorageEngine().deleteElement(token, oldUuid, oldVersion); - } - getStorageEngine().saveElement(token, newVersion, attachments); - getStorageEngine().commit(); - } catch (Exception e) { - throw new SimExplorerServiceException(e); - } - } - - /** - * Process version rules. - * - * @param token the token - * @param metaData the meta data - * - * @return true, if process version rules - * - * @throws Exception the exception - */ - protected boolean processVersionRules(String token, MetaData metaData) throws Exception { - // This one will always be the latest - metaData.setLatest(true); - - // Check existing version in storage - MetaData previousVersion = getStorageEngine().getMetadata(token, metaData.getUuid()); - - // Version rules - if (previousVersion != null) { - previousVersion.setLatest(false); - update(token, previousVersion.getUuid(), previousVersion.getVersion(), previousVersion, false); - - // Increment version only if needed - if (metaData.getVersion().compareTo(incrementVersion(previousVersion.getVersion())) <= 0) { - metaData.setVersion(incrementVersion(previousVersion.getVersion()).toString()); - } - - return true; - } - return false; - } - - private boolean notExists(String token, MetaData metaData) throws Exception { - MetaData previousVersion = getStorageEngine().getMetadata(token, metaData.getUuid()); - - if (previousVersion != null && previousVersion.getHash().equals(metaData.getHash())) { - - if (metaData.getVersion().compareTo(previousVersion.getVersion()) < 0) { - metaData.setVersion(previousVersion.getVersion().toString()); - } else { - Version versionToUpgrade = previousVersion.getVersion().clone(); - previousVersion.setVersion(metaData.getVersion().toString()); - update(token, previousVersion.getUuid(), versionToUpgrade, previousVersion, false); - } - - return false; - } - return true; - } - - /** - * Increment version. - * - * @param version the version - * - * @return the version - */ - protected abstract Version incrementVersion(Version version); - - /* (non-Javadoc) - * @see fr.cemagref.simexplorer.is.service.StorageService#getVersions(java.lang.String, java.lang.String) - */ - public Version[] getVersions(String token, String uuid) throws SimExplorerServiceException { - try { - Set<MetaData> versions = getStorageEngine().getElementVersions(token, uuid); - Iterator<MetaData> iterator = versions.iterator(); - Version[] result = new Version[versions.size()]; - int i = 0; - for (MetaData metaData : versions) { - result[i] = metaData.getVersion(); - i++; - } - return result; - } catch (SimExplorerStorageException e) { - throw new SimExplorerServiceException(e); - } - } - - /* (non-Javadoc) - * @see fr.cemagref.simexplorer.is.service.StorageService#deleteElement(java.lang.String, java.lang.String, java.lang.String) - */ - public void deleteElement(String token, String uuid, String version) throws SimExplorerServiceException { - try { - getStorageEngine().deleteElement(token, uuid, new Version(version)); - getStorageEngine().commit(); - } catch (SimExplorerStorageException e) { - throw new SimExplorerServiceException(e); - } - } - - /* (non-Javadoc) - * @see fr.cemagref.simexplorer.is.service.StorageService#deleteElement(java.lang.String, java.lang.String) - */ - public void deleteElement(String token, String uuid) throws SimExplorerServiceException { - try { - getStorageEngine().deleteElements(token, uuid); - getStorageEngine().commit(); - } catch (SimExplorerStorageException e) { - throw new SimExplorerServiceException(e); - } - } - }