Author: glandais Date: 2008-03-06 16:28:13 +0000 (Thu, 06 Mar 2008) New Revision: 1297 Modified: trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/MockStorageServiceImpl.java 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/StorageServiceGenerator.java trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceHelper.java trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/StorageServiceHelper.java trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ImportElementAction.java trunk/simexplorer-is/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/ElementImport.java Log: Recursivness of export, until elements are same on both sides Changed signature of save methods, returns LE instead of just metadata Modified: trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/MockStorageServiceImpl.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/MockStorageServiceImpl.java 2008-03-06 13:25:50 UTC (rev 1296) +++ trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/MockStorageServiceImpl.java 2008-03-06 16:28:13 UTC (rev 1297) @@ -55,13 +55,13 @@ throw new IllegalStateException("not implemented"); } - public MetaData saveElement(String token, SerializableInputStream zipRemoteStream) throws SimExplorerException { - return (MetaData) checkImplemented(); + public LoggableElement saveElement(String token, SerializableInputStream zipRemoteStream) throws SimExplorerException { + return (LoggableElement) checkImplemented(); } - public MetaData saveElement(String token, SerializableInputStream xmlRemoteStream, + public LoggableElement saveElement(String token, SerializableInputStream xmlRemoteStream, Map<Attachment, SerializableInputStream> attachmentsRemoteStream) throws SimExplorerException { - return (MetaData) checkImplemented(); + return (LoggableElement) checkImplemented(); } public MetaData getMetadata(String token, String uuid) throws SimExplorerException { 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-03-06 13:25:50 UTC (rev 1296) +++ trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageService.java 2008-03-06 16:28:13 UTC (rev 1297) @@ -60,7 +60,7 @@ * * @throws SimExplorerException the sim explorer service exception */ - MetaData saveElement(String token, SerializableInputStream zipStream) throws SimExplorerException; + LoggableElement saveElement(String token, SerializableInputStream zipStream) throws SimExplorerException; /** * Save an element. @@ -73,7 +73,7 @@ * * @throws SimExplorerException the sim explorer service exception */ - MetaData saveElement(String token, SerializableInputStream xmlStream, + LoggableElement saveElement(String token, SerializableInputStream xmlStream, Map<Attachment, SerializableInputStream> attachmentsStream) throws SimExplorerException; /** 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-03-06 13:25:50 UTC (rev 1296) +++ trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceCommon.java 2008-03-06 16:28:13 UTC (rev 1297) @@ -246,7 +246,7 @@ * * @throws SimExplorerException the sim explorer service exception */ - public MetaData saveElement(String token, SerializableInputStream zipStream) throws SimExplorerException { + public LoggableElement saveElement(String token, SerializableInputStream zipStream) throws SimExplorerException { String xmlFile = null; Map<Attachment, String> attachments = new HashMap<Attachment, String>(); @@ -297,7 +297,7 @@ InputStream xmlData = getStorageEngine().retrieveTempData(xmlFile); LoggableElement loggableElement = LoggableElementFactory.parseStream(xmlData); - MetaData elementSaved = saveElement(token, loggableElement, attachments); + LoggableElement elementSaved = saveElement(token, loggableElement, attachments); getStorageEngine().deleteTempData(xmlFile); for (Map.Entry<Attachment, String> tmpId : attachments.entrySet()) { getStorageEngine().deleteTempData(tmpId.getValue()); @@ -316,7 +316,7 @@ * * @throws SimExplorerException the exception */ - public MetaData saveElement(String token, SerializableInputStream xmlFile, + public LoggableElement saveElement(String token, SerializableInputStream xmlFile, Map<Attachment, SerializableInputStream> attachments) throws SimExplorerException { // Store temporary data String idxml = getStorageEngine().storeTempData(xmlFile); @@ -327,7 +327,7 @@ } InputStream xmlData = getStorageEngine().retrieveTempData(idxml); LoggableElement loggableElement = LoggableElementFactory.parseStream(xmlData); - MetaData elementSaved = saveElement(token, loggableElement, idsattachment); + LoggableElement elementSaved = saveElement(token, loggableElement, idsattachment); getStorageEngine().deleteTempData(idxml); for (Map.Entry<Attachment, String> tmpId : idsattachment.entrySet()) { getStorageEngine().deleteTempData(tmpId.getValue()); @@ -772,7 +772,7 @@ * * @throws SimExplorerException the exception */ - private MetaData saveElement(String token, LoggableElement element, Map<Attachment, String> idsattachment) + private LoggableElement saveElement(String token, LoggableElement element, Map<Attachment, String> idsattachment) throws SimExplorerException { MetaData metaData = element.getMetaData(); if (metaData == null) { @@ -792,10 +792,10 @@ processVersionRules(token, metaData, element); List<LoggableElement> children = element.getChildren(); - MetaData childMetaData; + LoggableElement childElement; for (LoggableElement child : children) { - childMetaData = saveElement(token, child, idsattachment); - getStorageEngine().saveElementHierarchy(token, metaData, childMetaData); + childElement = saveElement(token, child, idsattachment); + getStorageEngine().saveElementHierarchy(token, metaData, childElement.getMetaData()); } // Prepare saving @@ -820,7 +820,7 @@ } - return metaData; + return element; } } Modified: trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceGenerator.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceGenerator.java 2008-03-06 13:25:50 UTC (rev 1296) +++ trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceGenerator.java 2008-03-06 16:28:13 UTC (rev 1297) @@ -46,7 +46,7 @@ * @throws Exception * the exception */ - private MetaData saveEa(StorageService storageService, String token, ExplorationApplication ea, + private LoggableElement saveEa(StorageService storageService, String token, ExplorationApplication ea, boolean computeAttachments, Map<Attachment, ElementGenerator.RandomStream> attachments) throws Exception { if (computeAttachments) { @@ -118,7 +118,7 @@ ea.getMetaData().setVersion(firstVersion); log.info("Saving " + firstVersion + "A"); - MetaData mde1 = saveEa(storageService, token, ea, true, attachments); + LoggableElement le1 = saveEa(storageService, token, ea, true, attachments); ea.getMetaData().setVersion(secondVersion); @@ -135,11 +135,11 @@ } else { log.info("Saving " + secondVersion + "A"); } - MetaData mde2 = saveEa(storageService, token, ea, false, attachments); + LoggableElement le2 = saveEa(storageService, token, ea, false, attachments); - log.info("A : " + mde1.getHash()); + log.info("A : " + le1.getMetaData().getHash()); if (different) { - log.info("B : " + mde2.getHash()); + log.info("B : " + le2.getMetaData().getHash()); } return ea.getMetaData().getUuid(); 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-03-06 13:25:50 UTC (rev 1296) +++ trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceHelper.java 2008-03-06 16:28:13 UTC (rev 1297) @@ -22,6 +22,7 @@ import com.healthmarketscience.rmiio.SerializableInputStream; +import fr.cemagref.simexplorer.is.entities.data.LoggableElement; import fr.cemagref.simexplorer.is.entities.metadata.MetaData; import fr.cemagref.simexplorer.is.entities.metadata.Version; import fr.cemagref.simexplorer.is.exceptions.SimExplorerException; @@ -44,35 +45,65 @@ */ public static MetaData exportElementTo(String token, StorageService fromService, StorageService toService, String uuid, String version) throws SimExplorerException { - // Extract element from source service - InputStream fromElement = fromService.retrieveElementFull(token, uuid, version); - // Store element in remote service - MetaData toElement; - try { - if (fromElement instanceof SerializableInputStream) { - toElement = toService.saveElement(token, - (SerializableInputStream) fromElement); - } else { - toElement = toService.saveElement(token, - new SerializableInputStream(fromElement)); - } - } catch (IOException e) { - throw new SimExplorerTechnicalException(e); - } + + String currentUuid = uuid; + String currentVersion = version; + + boolean sameElements; - // fromElement has to be updated - if (!toElement.getUuid().equals(uuid) || !toElement.getVersion().equals(Version.valueOf(version))) { - MetaData previousVersion = fromService.getMetadata(token, uuid, version); - fromService.update(token, previousVersion.getUuid(), previousVersion.getVersion(), null, true); + // Remote element + LoggableElement toElement; - // Update element in source service, from what remote service returns on export - toElement.setLatest(true); - toElement.setParentUuid(uuid); - toElement.setParentVersion(version); - fromService.update(token, uuid, Version.valueOf(version), toElement, false); - } + + do { + // Extract element from source service + LoggableElement fromElement = fromService.getLoggableElement(token, currentUuid, currentVersion); + InputStream fromElementStream = fromService.retrieveElementFull(token, currentUuid, currentVersion); + // Store element in remote service + try { + if (fromElementStream instanceof SerializableInputStream) { + toElement = toService.saveElement(token, + (SerializableInputStream) fromElementStream); + } else { + toElement = toService.saveElement(token, + new SerializableInputStream(fromElementStream)); + } + } catch (IOException e) { + throw new SimExplorerTechnicalException(e); + } + + // Check if remote element is equal to local element + sameElements = fromElement.equals(toElement); + + // If not + if (!sameElements) { + // Resave localy remote element + + // Get new remote element + InputStream toElementStream = toService.retrieveElementFull( + token, toElement.getMetaData().getUuid(), toElement + .getMetaData().getVersion().toString()); + + // Save new remote element + try { + if (toElementStream instanceof SerializableInputStream) { + fromElement = fromService.saveElement(token, + (SerializableInputStream) toElementStream); + } else { + fromElement = fromService.saveElement(token, + new SerializableInputStream(toElementStream)); + } + } catch (IOException e) { + throw new SimExplorerTechnicalException(e); + } + + currentUuid = fromElement.getMetaData().getUuid(); + currentVersion = fromElement.getMetaData().getVersion().toString(); + } + + } while (!sameElements); - return toElement; + return toElement.getMetaData(); } protected StorageServiceHelper() { Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/StorageServiceHelper.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/StorageServiceHelper.java 2008-03-06 13:25:50 UTC (rev 1296) +++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/StorageServiceHelper.java 2008-03-06 16:28:13 UTC (rev 1297) @@ -164,7 +164,7 @@ SerializableInputStream zipStream; zipStream = new SerializableInputStream(new FileInputStream(file)); MetaData result; - result = getService(context, remote).saveElement(context.getToken(), zipStream); + result = getService(context, remote).saveElement(context.getToken(), zipStream).getMetaData(); return result; } catch (Exception e) { throw new SimExplorerRuntimeException(e); Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ImportElementAction.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ImportElementAction.java 2008-03-06 13:25:50 UTC (rev 1296) +++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ImportElementAction.java 2008-03-06 16:28:13 UTC (rev 1297) @@ -146,7 +146,7 @@ SerializableInputStream zipStream; zipStream = new SerializableInputStream(new FileInputStream(file)); MetaData result; - result = getContext().getStorageService(remote).saveElement(getContext().getToken(), zipStream); + result = getContext().getStorageService(remote).saveElement(getContext().getToken(), zipStream).getMetaData(); return result; } catch (Exception e) { throw new SimExplorerRuntimeException(e); Modified: trunk/simexplorer-is/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/ElementImport.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/ElementImport.java 2008-03-06 13:25:50 UTC (rev 1296) +++ trunk/simexplorer-is/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/ElementImport.java 2008-03-06 16:28:13 UTC (rev 1297) @@ -23,7 +23,7 @@ import com.healthmarketscience.rmiio.SerializableInputStream; import de.hsofttec.t5components.annotations.SetterGetter; -import fr.cemagref.simexplorer.is.entities.metadata.MetaData; +import fr.cemagref.simexplorer.is.entities.data.LoggableElement; import fr.cemagref.simexplorer.is.exceptions.SimExplorerException; import fr.cemagref.simexplorer.is.exceptions.SimExplorerTechnicalException; import fr.cemagref.simexplorer.is.service.remote.RemoteStorageService; @@ -54,7 +54,7 @@ * @throws Exception the exception */ public Object onSuccess() throws SimExplorerException { - MetaData mde = null; + LoggableElement le = null; if (_fileEA != null) { SerializableInputStream zipStream; try { @@ -62,7 +62,7 @@ } catch (Exception e) { throw new SimExplorerTechnicalException(e); } - mde = RemoteStorageService.getStorageService().saveElement(getToken(), zipStream); + le = RemoteStorageService.getStorageService().saveElement(getToken(), zipStream); } else { if (_fileLib != null) { SerializableInputStream zipStream; @@ -71,11 +71,11 @@ } catch (Exception e) { throw new SimExplorerTechnicalException(e); } - mde = RemoteStorageService.getStorageService().saveElement(getToken(), zipStream); + le = RemoteStorageService.getStorageService().saveElement(getToken(), zipStream); } } - if (mde != null) { - elementDetail.setup(mde.getUuid(), mde.getVersion().toString()); + if (le != null) { + elementDetail.setup(le.getMetaData().getUuid(), le.getMetaData().getVersion().toString()); return elementDetail; } return this;