r1582 - in trunk/tutti-ui-swing/src/main: java/fr/ifremer/tutti/ui/swing resources/i18n
Author: tchemit Date: 2014-02-08 16:35:04 +0100 (Sat, 08 Feb 2014) New Revision: 1582 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1582 Log: fixes #4325: [TECHNIQUE] il est possible de lancer plusieurs cessions d'Allegro sur une machine Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java 2014-02-08 15:06:19 UTC (rev 1581) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java 2014-02-08 15:35:04 UTC (rev 1582) @@ -27,16 +27,6 @@ import com.google.common.base.Preconditions; import com.google.common.collect.Maps; import com.google.common.collect.Sets; -import org.nuiton.jaxx.application.ApplicationBusinessException; -import org.nuiton.jaxx.application.ApplicationConfiguration; -import org.nuiton.jaxx.application.ApplicationIOUtil; -import org.nuiton.jaxx.application.ApplicationTechnicalException; -import org.nuiton.jaxx.application.listener.PropagatePropertyChangeListener; -import org.nuiton.jaxx.application.swing.ApplicationUIContext; -import org.nuiton.jaxx.application.swing.action.ApplicationActionEngine; -import org.nuiton.jaxx.application.swing.action.ApplicationActionFactory; -import org.nuiton.jaxx.application.swing.action.ApplicationActionUI; -import org.nuiton.jaxx.application.swing.util.ApplicationErrorHelper; import fr.ifremer.tutti.TuttiConfiguration; import fr.ifremer.tutti.ichtyometer.feed.FeedReader; import fr.ifremer.tutti.persistence.RessourceClassLoader; @@ -82,6 +72,16 @@ import org.nuiton.i18n.I18n; import org.nuiton.i18n.init.DefaultI18nInitializer; import org.nuiton.i18n.init.UserI18nInitializer; +import org.nuiton.jaxx.application.ApplicationBusinessException; +import org.nuiton.jaxx.application.ApplicationConfiguration; +import org.nuiton.jaxx.application.ApplicationIOUtil; +import org.nuiton.jaxx.application.ApplicationTechnicalException; +import org.nuiton.jaxx.application.listener.PropagatePropertyChangeListener; +import org.nuiton.jaxx.application.swing.ApplicationUIContext; +import org.nuiton.jaxx.application.swing.action.ApplicationActionEngine; +import org.nuiton.jaxx.application.swing.action.ApplicationActionFactory; +import org.nuiton.jaxx.application.swing.action.ApplicationActionUI; +import org.nuiton.jaxx.application.swing.util.ApplicationErrorHelper; import org.nuiton.util.converter.ConverterUtil; import javax.swing.JOptionPane; @@ -95,13 +95,14 @@ import java.io.InputStream; import java.net.URI; import java.net.URISyntaxException; +import java.util.Date; import java.util.Locale; import java.util.Map; import java.util.Properties; import java.util.Set; +import static org.nuiton.i18n.I18n.n; import static org.nuiton.i18n.I18n.t; -import static org.nuiton.i18n.I18n.n; /** * UI application context. @@ -284,6 +285,14 @@ */ private FeedReader ichtyometerReader; + /** + * A file lock to prevent multiple instance. the lock is create in the {@link #init()} method and remove in the + * {@link #close()} method. + * + * @since 3.2 + */ + private File lock; + public static TuttiUIContext newContext(TuttiConfiguration config) { Preconditions.checkNotNull(config); Preconditions.checkState(applicationContext == null, @@ -455,7 +464,25 @@ i18nDirectory, new DefaultI18nInitializer("tutti-i18n")), i18nLocale); + //--------------------------------------------------------------------// + // init lock + //--------------------------------------------------------------------// + + lock = new File(config.getBasedir(), "tutti.lock"); + + if (lock.exists()) { + lock = null; + throw new ApplicationBusinessException(t("tutti.error.application.already.started")); + } + + ApplicationIOUtil.writeContent(lock, new Date().toString(), "Could not create lock file"); + if (log.isInfoEnabled()) { + log.info("Create lock file: " + lock); + } + + + //--------------------------------------------------------------------// // init help //--------------------------------------------------------------------// @@ -552,31 +579,39 @@ @Override public void close() { - // Clear data references - messageNotifiers.clear(); - validationContext = null; - IOUtils.closeQuietly(dataContext); + try { + // Clear data references + messageNotifiers.clear(); + validationContext = null; + IOUtils.closeQuietly(dataContext); - setScreen(null); + setScreen(null); - IOUtils.closeQuietly(serviceContext); - IOUtils.closeQuietly(ichtyometerReader); + IOUtils.closeQuietly(serviceContext); + IOUtils.closeQuietly(ichtyometerReader); - // remove listeners - PropertyChangeListener[] listeners = getPropertyChangeListeners(); - for (PropertyChangeListener listener : listeners) { - if (log.isDebugEnabled()) { - log.debug("Remove listener: " + listener); + // remove listeners + PropertyChangeListener[] listeners = getPropertyChangeListeners(); + for (PropertyChangeListener listener : listeners) { + if (log.isDebugEnabled()) { + log.debug("Remove listener: " + listener); + } + removePropertyChangeListener(listener); } - removePropertyChangeListener(listener); - } - setMainUI(null); - if (actionUI != null) { + setMainUI(null); + if (actionUI != null) { - // close action ui - actionUI.getModel().clear(); + // close action ui + actionUI.getModel().clear(); + } + setActionUI(null); + } finally { + if (lock != null) { + + // destroy lock + ApplicationIOUtil.deleteFile(lock, "Could not delete lock file"); + } } - setActionUI(null); } //------------------------------------------------------------------------// Modified: trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties =================================================================== --- trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties 2014-02-08 15:06:19 UTC (rev 1581) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties 2014-02-08 15:35:04 UTC (rev 1582) @@ -1116,6 +1116,7 @@ tutti.editSpeciesFrequencies.table.header.weight= tutti.editSpeciesFrequencies.title= tutti.editSpeciesFrequencies.title.addLengthStepCaracteristic= +tutti.error.application.already.started= tutti.error.delete.startActionFile=Could not delete start action file %s tutti.error.read.startActionFile=Could not read start action file content %s tutti.error.update.bad.url.syntax= Modified: trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties =================================================================== --- trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2014-02-08 15:06:19 UTC (rev 1581) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2014-02-08 15:35:04 UTC (rev 1582) @@ -13,7 +13,7 @@ tutti.addSampleCategoryBenthosBatch.title=Catégorisation du lot (ajout) tutti.addSampleCategorySpeciesBatch.title=Catégorisation du lot (ajout) tutti.applicationUpdater.help.error=Impossible de télécharger la mise à jour de l'aide.<br/>Si le problème persiste, veuillez consulter l'administrateur. -tutti.applicationUpdater.i18n.error= +tutti.applicationUpdater.i18n.error=Impossible de télécharger la mise à jour des traductions.<br/>Si le problème persiste, veuillez consulter l'administrateur. tutti.applicationUpdater.jre.error=Impossible de télécharger la mise à jour de l'environnement java.<br/>Si le problème persiste, veuillez consulter l'administrateur. tutti.applicationUpdater.prepareFirstDB.copyDirectory.error=Erreur lors de la copie du contenu du dossier %1s vers %2s tutti.applicationUpdater.prepareFirstDB.deleteDirectory.error=Erreur lors de la suppression du dossier %s @@ -1103,6 +1103,7 @@ tutti.editSpeciesFrequencies.table.header.weight=Poids observé tutti.editSpeciesFrequencies.title=Mensuration tutti.editSpeciesFrequencies.title.addLengthStepCaracteristic=Choisir une autre caractéristique +tutti.error.application.already.started=L'application est déjà démarrée. tutti.error.delete.startActionFile=Impossible de supprimer le fichier %s tutti.error.read.startActionFile=Impossible de lire le contenu du fichier %s tutti.error.update.bad.url.syntax=Mise à jour impossible (le format de l'url <strong>%s</strong> n'est pas valide)
participants (1)
-
tchemit@users.forge.codelutin.com