This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository tutti. See http://git.codelutin.com/tutti.git commit 98f931c08dcff357b92036892a8f3bf379710ced Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Feb 2 16:14:52 2015 +0100 always work on a copy of db to avoid windows locks on files --- .../ui/swing/update/module/DbModuleUpdater.java | 69 +++++++++++++++++----- 1 file changed, 53 insertions(+), 16 deletions(-) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/update/module/DbModuleUpdater.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/update/module/DbModuleUpdater.java index 8b63a46..96731d6 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/update/module/DbModuleUpdater.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/update/module/DbModuleUpdater.java @@ -31,10 +31,12 @@ import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.service.referential.TuttiReferentialSynchronizeService; import fr.ifremer.tutti.ui.swing.TuttiUIContext; +import fr.ifremer.tutti.ui.swing.updater.DeleteHelper; import fr.ifremer.tutti.ui.swing.updater.UpdateModule; import org.apache.commons.io.FileUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.jaxx.application.ApplicationIOUtil; import org.nuiton.jaxx.application.ApplicationTechnicalException; import org.nuiton.jaxx.application.swing.action.ApplicationActionUI; import org.nuiton.jaxx.application.type.ApplicationProgressionModel; @@ -105,19 +107,34 @@ public class DbModuleUpdater extends ModuleUpdaterSupport { if (log.isInfoEnabled()) { log.info(String.format( - "A db update was downloaded (oldVersion: %s, newVersion: %s), will restart application to use it", + "A db update was downloaded (oldVersion: %s, newVersion: %s).", info.oldVersion, info.newVersion)); } - if (dbInstalled) { + if (dbInstalled || dbUpdated) { - // first database, just copy it to correct directory - prepareFirstDatabase(context, info); + File source = getDbDirectory(info); - } else if (dbUpdated) { + if (dbInstalled) { - // launch a referential synchronize operation - synchronizeDatabase(context, info); + // first database, just copy it to correct directory + prepareFirstDatabase(context, info, source); + + } else if (dbUpdated) { + + // launch a referential synchronize operation + synchronizeDatabase(context, info, source); + + } + + if (log.isInfoEnabled()) { + log.info("Delete update directory: " + source); + } + try { + FileUtils.deleteDirectory(source); + } catch (IOException e) { + throw new ApplicationTechnicalException(t("tutti.applicationUpdater.prepareFirstDB.deleteDirectory.error", source), e); + } } @@ -128,28 +145,26 @@ public class DbModuleUpdater extends ModuleUpdaterSupport { return t("tutti.update.db"); } - protected void prepareFirstDatabase(TuttiUIContext context, ApplicationInfo info) { + protected void prepareFirstDatabase(TuttiUIContext context, ApplicationInfo info, File source) { + if (log.isInfoEnabled()) { log.info("First time database was downloaded at version: " + info.newVersion); } - File source = getDbDirectory(info); + File target = context.getConfig().getDbDirectory(); if (log.isInfoEnabled()) { log.info("Copy from " + source + " to " + target); } + try { FileUtils.copyDirectory(source, target); } catch (IOException e) { throw new ApplicationTechnicalException(t("tutti.applicationUpdater.prepareFirstDB.copyDirectory.error", source, target), e); } - try { - FileUtils.deleteDirectory(source.getParentFile()); - } catch (IOException e) { - throw new ApplicationTechnicalException(t("tutti.applicationUpdater.prepareFirstDB.deleteDirectory.error", target), e); - } + } - protected void synchronizeDatabase(TuttiUIContext context, ApplicationInfo info) { + protected void synchronizeDatabase(TuttiUIContext context, ApplicationInfo info, File source) { if (log.isInfoEnabled()) { log.info(String.format("A database update was downloaded (oldVersion: %s, newVersion: %s), will launch a referential synchronize operation ", info.oldVersion, info.newVersion)); @@ -157,7 +172,7 @@ public class DbModuleUpdater extends ModuleUpdaterSupport { TuttiReferentialSynchronizeService service = context.getTuttiReferentialSynchronizeService(); - File dbDirectory = getDbDirectory(info); + File dbDirectory = getDbDirectoryCopy(source); ReferentialSynchroContext synchroContext = service.createSynchroContext(dbDirectory); ReferentialSynchroResult result = synchroContext.getResult(); @@ -219,6 +234,28 @@ public class DbModuleUpdater extends ModuleUpdaterSupport { return result; } + protected File getDbDirectoryCopy(File source) { + + File temporaryDirectory = ApplicationIOUtil.createTemporaryDirectory(this.toString()); + File[] files = source.listFiles(); + if (files != null) { + + for (File file : files) { + ApplicationIOUtil.copyFileToDirectory(file, temporaryDirectory, "Can't copy file " + file + " to directory " + temporaryDirectory); + } + + } + + try { + DeleteHelper.deleteDirectoryOnExit(temporaryDirectory.toPath()); + } catch (IOException e) { + throw new ApplicationTechnicalException("Can't mark directory " + temporaryDirectory + "to be deleted on exit", e); + } + + return temporaryDirectory; + + } + private static class DelegateProgressionModel extends ApplicationProgressionModel { private static final long serialVersionUID = 1L; -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.