Author: tchemit Date: 2013-02-15 19:55:19 +0100 (Fri, 15 Feb 2013) New Revision: 429 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/429 Log: improve db actions + load db after ui is visible to use action api + improve db update behaviour Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/MainUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/RunTutti.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiApplicationUpdaterCallBack.java 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/UpdateReferentialAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/DbManagerUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/DbManagerUI.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/DbManagerUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/OpenDbAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/action/TuttiActionUIHandler.java 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/MainUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/MainUIHandler.java 2013-02-15 18:24:40 UTC (rev 428) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/MainUIHandler.java 2013-02-15 18:55:19 UTC (rev 429) @@ -32,6 +32,7 @@ import fr.ifremer.tutti.ui.swing.config.TuttiConfigUI; import fr.ifremer.tutti.ui.swing.content.cruise.EditCruiseUI; import fr.ifremer.tutti.ui.swing.content.db.DbManagerUI; +import fr.ifremer.tutti.ui.swing.content.db.OpenDbAction; import fr.ifremer.tutti.ui.swing.content.home.SelectCruiseUI; import fr.ifremer.tutti.ui.swing.content.operation.FishingOperationsUI; import fr.ifremer.tutti.ui.swing.content.program.EditProgramUI; @@ -124,17 +125,20 @@ JToolBar bar = ui.getBottomBar(); ui.getStatus().addWidget(bar, 0); - TuttiScreen screen; + if (!context.isDbExist()) { - if (context.isDbExist() && context.isDbLoaded()) { + // clean db context + context.clearDbContext(); - screen = TuttiScreen.SELECT_CRUISE; + // go to manage db screen (to install db) + context.setScreen(TuttiScreen.MANAGE_DB); } else { - screen = TuttiScreen.MANAGE_DB; + // open tutti db + OpenDbAction openDbAction = createAction(OpenDbAction.class); + openDbAction.setCheckDbContext(true); + openDbAction.actionPerformed(null); } - - context.setScreen(screen); } @Override @@ -431,60 +435,67 @@ protected String getSelectedCruiseTitle() { - String programId = context.getProgramId(); String title; - if (programId == null) { + if (context.isDbLoaded()) { - // no program selected (so neither cruise) + String programId = context.getProgramId(); - title = _("tutti.title.noSelectedProgram"); + if (programId == null) { - } else { + // no program selected (so neither cruise) - // selected program + title = _("tutti.title.noSelectedProgram"); - Program program = persistenceService.getProgram(programId); + } else { - title = _("tutti.title.selectedProgram", program.getName()) + " / "; + // selected program - String cruiseId = context.getCruiseId(); + Program program = persistenceService.getProgram(programId); - if (cruiseId == null) { + title = _("tutti.title.selectedProgram", program.getName()) + " / "; - // no selected cruise + String cruiseId = context.getCruiseId(); - title += _("tutti.title.noSelectedCruise"); + if (cruiseId == null) { - } else { + // no selected cruise - // selected cruise - Cruise cruise; - cruise = persistenceService.getCruise(cruiseId); + title += _("tutti.title.noSelectedCruise"); - title += _("tutti.title.selectedCruise", cruise.getName()); - } + } else { - title += " / "; + // selected cruise + Cruise cruise; + cruise = persistenceService.getCruise(cruiseId); - String protocolId = context.getProtocolId(); + title += _("tutti.title.selectedCruise", cruise.getName()); + } - if (protocolId == null) { + title += " / "; - // no selected protocol + String protocolId = context.getProtocolId(); - title += _("tutti.title.noSelectedProtocol"); + if (protocolId == null) { - } else { + // no selected protocol - // selected protocol - TuttiProtocol protocol = persistenceService.getProtocol(protocolId); + title += _("tutti.title.noSelectedProtocol"); - title += _("tutti.title.selectedProtocol", protocol.getName()); + } else { + + // selected protocol + TuttiProtocol protocol = persistenceService.getProtocol(protocolId); + + title += _("tutti.title.selectedProtocol", protocol.getName()); + } + } + } else { + title = _("tutti.title.nodb"); + } - } return title; } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/RunTutti.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/RunTutti.java 2013-02-15 18:24:40 UTC (rev 428) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/RunTutti.java 2013-02-15 18:55:19 UTC (rev 429) @@ -79,7 +79,7 @@ new UpdateApplicationAction(handler).doAction(null); // try to update db - new UpdateReferentialAction(handler).doAction(null); +// new UpdateReferentialAction(handler).doAction(null); } // Prepare ui look&feel and load ui properties @@ -117,7 +117,7 @@ ui.dispose(); if (exit) { - System.exit(1); + System.exit(0); } } } \ No newline at end of file Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiApplicationUpdaterCallBack.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiApplicationUpdaterCallBack.java 2013-02-15 18:24:40 UTC (rev 428) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiApplicationUpdaterCallBack.java 2013-02-15 18:55:19 UTC (rev 429) @@ -67,6 +67,8 @@ protected ProgressionModel progressionModel; + protected boolean dbUpdated; + public TuttiApplicationUpdaterCallBack(TuttiUIContext context, ProgressionModel progressionModel) { this.context = context; this.progressionModel = progressionModel; @@ -76,6 +78,10 @@ this.types = Lists.newArrayList(types); } + public boolean isDbUpdated() { + return dbUpdated; + } + @Override public Map<String, ApplicationUpdater.ApplicationInfo> updateToDo(Map<String, ApplicationUpdater.ApplicationInfo> appToUpdate) { Map<String, ApplicationUpdater.ApplicationInfo> result = Maps.newHashMap(); @@ -97,8 +103,9 @@ ApplicationUpdater.ApplicationInfo info = getInfo(UpdateType.DB, result); if (info == null) { - String message = "Aucune mise à jour de base détectée."; - context.showInformationMessage(message); + dbUpdated=false; + } else { + dbUpdated=true; } } return result; @@ -113,7 +120,6 @@ } else { progressionModel.setMessage("Téléchargement et mise à jour de la base (version " + info.newVersion + ")"); } - } if (UpdateType.JRE.name().toLowerCase().equals(info.name)) { progressionModel.setMessage("Téléchargement et installation d'une nouvelle JRE (version " + info.newVersion + ")"); @@ -296,6 +302,7 @@ } catch (IOException e) { throw new RuntimeException("Could not delete temporary directory " + target, e); } + } protected void synchronizetDatabase(ApplicationUpdater.ApplicationInfo info) { 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 2013-02-15 18:24:40 UTC (rev 428) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java 2013-02-15 18:55:19 UTC (rev 429) @@ -455,80 +455,6 @@ setProgramId(null); setCruiseId(null); setDbLoaded(false); - - } else { - - setDbLoaded(true); - - //check if programId is sane - PersistenceService service = getService(PersistenceService.class); - - if (isProtocolFilled()) { - - if (!service.isProtocolExist(protocolId)) { - - // not found in this db - - if (log.isWarnEnabled()) { - log.warn("Remove invalid protocolId: " + protocolId); - } - - setProtocolId(null); - } - } - - if (isProgramFilled()) { - - Program program = service.getProgram(programId); - if (program == null) { - - // not found in this db - - if (log.isWarnEnabled()) { - log.warn("Remove invalid programId: " + programId); - } - - setProgramId(null); - setCruiseId(null); - - } else { - - if (log.isInfoEnabled()) { - log.info("ProgramId valid: " + programId); - } - - setProgramId(programId); - - // test cruiseId - if (isCruiseFilled()) { - - Cruise cruise = service.getCruise(cruiseId); - - if (cruise != null && - !cruise.getProgram().getId().equals(programId)) { - - // not matchin program, reset cruise id - cruise = null; - } - - if (cruise == null) { - - // not found in this db - - if (log.isWarnEnabled()) { - log.warn("Remove invalid cruiseId: " + cruiseId); - } - setCruiseId(null); - - } else { - - if (log.isInfoEnabled()) { - log.info("CruiseId valid: " + cruiseId); - } - } - } - } - } } // save back to config @@ -576,9 +502,6 @@ // close action ui actionUI.getModel().setProgressionModel(null); actionUI.getModel().setAction(null); - -// // hide it -// actionUI.setVisible(false); } setActionUI(null); } @@ -624,4 +547,86 @@ public TuttiActionUI getActionUI() { return actionUI; } + + public void clearDbContext() { + protocolId = null; + programId = null; + cruiseId = null; + saveContextToConfig(); + } + + public void checkDbContext() { + + //check if programId is sane + PersistenceService service = getService(PersistenceService.class); + + if (isProtocolFilled()) { + + if (!service.isProtocolExist(protocolId)) { + + // not found in this db + + if (log.isWarnEnabled()) { + log.warn("Remove invalid protocolId: " + protocolId); + } + + setProtocolId(null); + } + } + + if (isProgramFilled()) { + + Program program = service.getProgram(programId); + if (program == null) { + + // not found in this db + + if (log.isWarnEnabled()) { + log.warn("Remove invalid programId: " + programId); + } + + setProgramId(null); + setCruiseId(null); + + } else { + + if (log.isInfoEnabled()) { + log.info("ProgramId valid: " + programId); + } + + setProgramId(programId); + + // test cruiseId + if (isCruiseFilled()) { + + Cruise cruise = service.getCruise(cruiseId); + + if (cruise != null && + !cruise.getProgram().getId().equals(programId)) { + + // not matchin program, reset cruise id + cruise = null; + } + + if (cruise == null) { + + // not found in this db + + if (log.isWarnEnabled()) { + log.warn("Remove invalid cruiseId: " + cruiseId); + } + setCruiseId(null); + + } else { + + if (log.isInfoEnabled()) { + log.info("CruiseId valid: " + cruiseId); + } + } + } + } + } + + saveContextToConfig(); + } } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/UpdateReferentialAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/UpdateReferentialAction.java 2013-02-15 18:24:40 UTC (rev 428) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/UpdateReferentialAction.java 2013-02-15 18:55:19 UTC (rev 429) @@ -82,11 +82,18 @@ false, callback); - progressionModel.setMessage("Rechargement de la base de données"); + if (callback.isDbUpdated()) { - getContext().setDbLoaded(true); - getHandler().reloadPersistenceService(); + progressionModel.setMessage("Rechargement de la base de données"); + getContext().setDbLoaded(true); + getHandler().reloadPersistenceService(); + + + } else { + sendMessage("Aucune mise à jour de base détectée."); + } + getContext().getActionUI().getModel().setProgressionModel(null); } } \ No newline at end of file Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/DbManagerUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/DbManagerUI.css 2013-02-15 18:24:40 UTC (rev 428) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/DbManagerUI.css 2013-02-15 18:55:19 UTC (rev 429) @@ -27,28 +27,34 @@ horizontalAlignment: {JLabel.CENTER}; } +#noDbActions { + visible: {!model.isDbExist()}; +} + #installDbButton { - enabled: {!model.isDbExist()}; _tuttiAction: {InstallDbAction.class}; } +#withDbActions { + visible: {model.isDbExist()}; +} + #openDbButton { - enabled: {model.isDbExist() && !model.isDbLoaded()}; + enabled: {!model.isDbLoaded()}; _tuttiAction: {OpenDbAction.class}; } #upgradeDbButton { - enabled: {model.isDbExist() && model.isDbLoaded()}; + enabled: {model.isDbLoaded()}; _tuttiAction: {UpdateReferentialAction.class}; } #closeDbButton { - enabled: {model.isDbExist() && model.isDbLoaded()}; + enabled: {model.isDbLoaded()}; _tuttiAction: {CloseDbAction.class}; } #exportDbButton { - enabled: false; - /*enabled: {model.isDbExist() && model.isDbLoaded()};*/ + enabled: {model.isDbLoaded()}; _tuttiAction: {ExportDbAction.class}; } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/DbManagerUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/DbManagerUI.jaxx 2013-02-15 18:24:40 UTC (rev 428) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/DbManagerUI.jaxx 2013-02-15 18:55:19 UTC (rev 429) @@ -53,11 +53,15 @@ <TuttiUIContext id='model' initializer='getContextValue(TuttiUIContext.class)'/> + <JLabel id='informationLabel' constraints='BorderLayout.CENTER'/> <JPanel id='centerPanel' layout='{new BorderLayout()}' - constraints='BorderLayout.CENTER'> - <JLabel id='informationLabel' constraints='BorderLayout.CENTER'/> - <JPanel constraints='BorderLayout.SOUTH' layout='{new GridLayout(0, 1)}'> + constraints='BorderLayout.SOUTH'> + <JPanel id='noDbActions' constraints='BorderLayout.CENTER' + layout='{new GridLayout(0, 1)}'> <JButton id='installDbButton'/> + </JPanel> + <JPanel id='withDbActions' constraints='BorderLayout.SOUTH' + layout='{new GridLayout(0, 1)}'> <JButton id='openDbButton'/> <JButton id='upgradeDbButton'/> <JButton id='exportDbButton'/> Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/DbManagerUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/DbManagerUIHandler.java 2013-02-15 18:24:40 UTC (rev 428) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/DbManagerUIHandler.java 2013-02-15 18:55:19 UTC (rev 429) @@ -31,8 +31,6 @@ import org.apache.commons.logging.LogFactory; import javax.swing.SwingUtilities; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; import static org.nuiton.i18n.I18n._; @@ -52,15 +50,6 @@ @Override public void beforeInitUI() { - context.addPropertyChangeListener(new PropertyChangeListener() { - @Override - public void propertyChange(PropertyChangeEvent evt) { - String propertyName = evt.getPropertyName(); - String message; - - - } - }); } public String updateMessage(boolean dbExist, boolean dbLoaded) { @@ -91,16 +80,15 @@ initUI(ui); - ui.applyDataBinding(DbManagerUI.BINDING_INSTALL_DB_BUTTON_ENABLED); ui.applyDataBinding(DbManagerUI.BINDING_OPEN_DB_BUTTON_ENABLED); - ui.applyDataBinding(DbManagerUI.BINDING_CLOSE_DB_BUTTON_ENABLED); ui.applyDataBinding(DbManagerUI.BINDING_UPGRADE_DB_BUTTON_ENABLED); + ui.applyDataBinding(DbManagerUI.BINDING_EXPORT_DB_BUTTON_ENABLED); SwingUtilities.invokeLater( new Runnable() { @Override public void run() { - ui.repaint(); + getContext().getMainUI().getBody().revalidate(); } } ); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/OpenDbAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/OpenDbAction.java 2013-02-15 18:24:40 UTC (rev 428) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/OpenDbAction.java 2013-02-15 18:55:19 UTC (rev 429) @@ -46,9 +46,15 @@ private static final long serialVersionUID = 1L; /** Logger. */ - private static final Log log = - LogFactory.getLog(OpenDbAction.class); + private static final Log log = LogFactory.getLog(OpenDbAction.class); + /** + * Flag to sanity or not the db context (and save it in config). + * + * @since 1.0 + */ + protected boolean checkDbContext; + public OpenDbAction(MainUIHandler handler) { super(handler, "openDb", @@ -61,6 +67,9 @@ @Override protected void doAction(ActionEvent event) { + if (log.isDebugEnabled()) { + log.debug("Will open db..."); + } getContext().setDbLoaded(true); getHandler().reloadPersistenceService(); @@ -68,6 +77,23 @@ sendMessage(String.format("La base de données '%s' est ouverte.", jdbcUrl)); + if (checkDbContext) { + + if (log.isDebugEnabled()) { + log.debug("Check db context"); + } + getContext().checkDbContext(); + } getContext().setScreen(TuttiScreen.SELECT_CRUISE); } + + @Override + protected void releaseAction(ActionEvent event) { + checkDbContext = false; + super.releaseAction(event); + } + + public void setCheckDbContext(boolean checkDbContext) { + this.checkDbContext = checkDbContext; + } } \ No newline at end of file Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/action/TuttiActionUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/action/TuttiActionUIHandler.java 2013-02-15 18:24:40 UTC (rev 428) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/action/TuttiActionUIHandler.java 2013-02-15 18:55:19 UTC (rev 429) @@ -27,6 +27,7 @@ import fr.ifremer.tutti.persistence.ProgressionModel; import fr.ifremer.tutti.ui.swing.AbstractTuttiAction; import fr.ifremer.tutti.ui.swing.AbstractTuttiUIHandler; +import fr.ifremer.tutti.ui.swing.MainUI; import fr.ifremer.tutti.ui.swing.TuttiUIContext; import jaxx.runtime.SwingUtil; import jaxx.runtime.validator.swing.SwingValidator; @@ -120,7 +121,10 @@ // starting action if (ui.getOwner() != null) { - SwingUtil.center(ui.getOwner(), ui); + MainUI mainUI = getContext().getMainUI(); + if (mainUI != null) { + SwingUtil.center(mainUI, ui); + } } // new action ui.getGlobalActionLabel().setText(_("tutti.message.action.running", action.getActionDescription())); 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 2013-02-15 18:24:40 UTC (rev 428) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-02-15 18:55:19 UTC (rev 429) @@ -27,7 +27,7 @@ tutti.action.cloneProtocol=Cloner tutti.action.cloneProtocol.tip=Dupliquer le protocole sélectionné tutti.action.close=Fermer -tutti.action.closeDb=Fermer la base +tutti.action.closeDb=Fermer tutti.action.closeDb.tip=Fermer la base de données en cours d'utilisation tutti.action.computeWeights=Elever les poids tutti.action.computeWeights.tip=Elever les poids @@ -57,7 +57,7 @@ tutti.action.exit.tip=Quitter l'application tutti.action.exportAllCaracteristic=Exporter toutes les caractéristiques tutti.action.exportAllCaracteristic.tip=Exporter toutes les caractéristiques (sans les affecter à un écran) -tutti.action.exportDb=Exporter la base +tutti.action.exportDb=Exporter tutti.action.exportDb.tip=Exporter la base de données au format zip tutti.action.exportProtocol=Exporter tutti.action.exportProtocol.tip=Exporter le protocole sélectionné @@ -95,7 +95,7 @@ tutti.action.importTemporarySpecies.tip=Importer un référentiel temporaire d'espèces tutti.action.importTemporaryVessel=Importer tutti.action.importTemporaryVessel.tip=Importer un référentiel temporaire de navires -tutti.action.installDb=Installer la base +tutti.action.installDb=Installer tutti.action.installDb.tip=Télécharger puis installer la base de données tutti.action.manageDb=Gestion base tutti.action.manageDb.tip=Gérer la base de données utilisée par Tutti @@ -107,7 +107,7 @@ tutti.action.newProtocol=Nouveau tutti.action.newProtocol.tip=Créer un nouveau protocole tutti.action.ok=Fermer -tutti.action.openDb=Ouvrir la base +tutti.action.openDb=Ouvrir tutti.action.openDb.tip=Ouvrir la base de données détectée par Tutti tutti.action.reload.actions=Recharger les actions tutti.action.reload.application=Recharger l'application @@ -139,9 +139,9 @@ tutti.action.site.tip=Accéder au site du projet Tutti tutti.action.splitSpeciesBatch=Catégoriser le lot tutti.action.splitSpeciesBatch.tip=Catégoriser le lot courant (celui de la ligne sélectionné) -tutti.action.updateApplication=Mise à jour -tutti.action.updateApplication.tip=Mettre à jour l'application si nécessaire -tutti.action.updateReferential=Mise à jour +tutti.action.updateApplication=Vérifier les mises à jour +tutti.action.updateApplication.tip=Vérifier les mises à jour logicielles +tutti.action.updateReferential=Vérifier les mises à jour tutti.action.updateReferential.tip=Mettre à jour les référentiels si nécessaire tutti.action.validate=Valider tutti.action.validateCatches=Valider les captures @@ -463,6 +463,7 @@ tutti.title.noSelectedCruise=Pas de campagne sélectionné tutti.title.noSelectedProgram=Pas de série de campagne sélectionné tutti.title.noSelectedProtocol=Pas de protocol sélectionné +tutti.title.nodb=Pas de base chargé tutti.title.selectSpecies=Choisissez une espèce tutti.title.selectedCruise=Campagne %s tutti.title.selectedProgram=Série de campagne %s