Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: 81b4f46d by Tony CHEMIT at 2017-08-04T13:17:05+02:00 La barre de progression en % ne fonctionne pas (See #821) - - - - - 9 changed files: - client/src/main/java/fr/ird/observe/client/FloatingObjectReferencesManager.java - client/src/main/java/fr/ird/observe/client/ObserveOpenDataManager.java - client/src/main/java/fr/ird/observe/client/db/ObserveDataSourcesManager.java - client/src/main/java/fr/ird/observe/client/db/ObserveSwingDataSource.java - client/src/main/java/fr/ird/observe/client/ui/ObserveMainUIInitializer.java - client/src/main/java/fr/ird/observe/client/ui/storage/StorageBackupUILauncher.java - client/src/main/java/fr/ird/observe/client/ui/storage/StorageUIHandler.java - client/src/main/java/fr/ird/observe/client/ui/storage/StorageUILauncher.java - client/src/main/java/fr/ird/observe/client/ui/util/ProgressModel.java Changes: ===================================== client/src/main/java/fr/ird/observe/client/FloatingObjectReferencesManager.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/FloatingObjectReferencesManager.java +++ b/client/src/main/java/fr/ird/observe/client/FloatingObjectReferencesManager.java @@ -25,8 +25,10 @@ package fr.ird.observe.client; import com.google.common.collect.ImmutableSet; import fr.ird.observe.client.configuration.ClientConfig; import fr.ird.observe.client.db.ObserveSwingDataSource; +import fr.ird.observe.client.ui.util.ProgressModel; import fr.ird.observe.services.dto.FloatingObjectReference; import java.util.Arrays; +import java.util.Iterator; import java.util.Optional; import java.util.Set; import java.util.TreeSet; @@ -76,13 +78,20 @@ public class FloatingObjectReferencesManager { return ImmutableSet.copyOf(references.stream().map(FloatingObjectReference::getFloatingObjectId).collect(Collectors.toSet())); } - public void sanitize(ObserveSwingDataSource dataSource) { + public void sanitize(ProgressModel progressModel, ObserveSwingDataSource dataSource) { ImmutableSet<String> existingIds = getIds(); ImmutableSet<String> ids = dataSource.getFloatingObjectService().retainExistingIds(existingIds); int beforeSize = references.size(); - references.removeIf(reference -> !ids.contains(reference.getFloatingObjectId())); + Iterator<FloatingObjectReference> iterator = references.iterator(); + while (iterator.hasNext()) { + FloatingObjectReference reference = iterator.next(); + if (!ids.contains(reference.getFloatingObjectId())) { + iterator.remove(); + } + progressModel.incrementsCurrentStep(); + } save(beforeSize); ===================================== client/src/main/java/fr/ird/observe/client/ObserveOpenDataManager.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ObserveOpenDataManager.java +++ b/client/src/main/java/fr/ird/observe/client/ObserveOpenDataManager.java @@ -25,6 +25,7 @@ package fr.ird.observe.client; import com.google.common.base.Preconditions; import fr.ird.observe.client.db.ClientDataContext; import fr.ird.observe.client.db.ObserveSwingDataSource; +import fr.ird.observe.client.ui.util.ProgressModel; import fr.ird.observe.services.ObserveServicesProvider; import fr.ird.observe.services.dto.IdHelper; import fr.ird.observe.services.dto.referential.ProgramDto; @@ -46,7 +47,6 @@ public class ObserveOpenDataManager implements Closeable { this.dataContext = dataContext; } - // Program public boolean canOpenProgram() { return !dataContext.isOpenProgram(); } @@ -290,7 +290,7 @@ public class ObserveOpenDataManager implements Closeable { dataContext.resetOpen(); } - public void sanitizeOpenIds(String[] ids) { + public void sanitizeOpenIds(ProgressModel progressModel, String[] ids) { if (ids != null) { boolean exists = true; @@ -342,6 +342,7 @@ public class ObserveOpenDataManager implements Closeable { if (!exists) { ids[i] = null; } + progressModel.incrementsCurrentStep(); } } } ===================================== client/src/main/java/fr/ird/observe/client/db/ObserveDataSourcesManager.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/db/ObserveDataSourcesManager.java +++ b/client/src/main/java/fr/ird/observe/client/db/ObserveDataSourcesManager.java @@ -36,6 +36,7 @@ import fr.ird.observe.client.ui.ObserveMainUI; import fr.ird.observe.client.ui.ObserveUIMode; import fr.ird.observe.client.ui.actions.menu.storage.ChangeStorageAction; import fr.ird.observe.client.ui.storage.StorageUIModel; +import fr.ird.observe.client.ui.util.ProgressModel; import fr.ird.observe.services.configuration.ObserveDataSourceConfiguration; import fr.ird.observe.services.configuration.ObserveDataSourceInformation; import fr.ird.observe.services.configuration.rest.ObserveDataSourceConfigurationRest; @@ -493,7 +494,7 @@ public class ObserveDataSourcesManager implements Closeable { applicationContext.getConfig().saveTreeOpenNodeIds(dataContext.getOpenIds()); dataContext.populateOpens(); - mainUI.getInitializer().cleanNavigationUI(); + mainUI.getInitializer().cleanNavigationUI(new ProgressModel()); // on met a jour l'état dans la config applicationContext.getConfig().setMainStorageOpened(false); @@ -551,25 +552,29 @@ public class ObserveDataSourcesManager implements Closeable { log.debug("loading ui for storage " + source.getLabel() + ": " + mainUI.getName()); } + ProgressModel progressModel = source.getProgressModel(); + ClientDataContext dataContext = mainUI.getDataContext(); dataContext.setEnabled(true); - mainUI.getInitializer().cleanNavigationUI(); + mainUI.getInitializer().cleanNavigationUI(progressModel); String[] openIds = config.getTreeOpenNodeIds(); - //FIXME On utilise les open ids uniquement en écriture ? le test semble faux - if (source.canReadData()) { - applicationContext.getOpenDataManager().sanitizeOpenIds(openIds); + if (source.canWriteData()) { + applicationContext.getOpenDataManager().sanitizeOpenIds(progressModel, openIds); } + if (source.canWriteData()) { - applicationContext.getFloatingObjectReferencesManager().sanitize(source); + applicationContext.getFloatingObjectReferencesManager().sanitize(progressModel,source); } dataContext.populateOpens(openIds); - mainUI.getInitializer().loadNavigationUI(); + + mainUI.getInitializer().loadNavigationUI(progressModel); mainUI.getModel().setMode(ObserveUIMode.DB); + progressModel.incrementsCurrentStep(); mainUI.getStatus().setStatus(t("observe.message.db.loaded", source.getLabel())); ===================================== client/src/main/java/fr/ird/observe/client/db/ObserveSwingDataSource.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/db/ObserveSwingDataSource.java +++ b/client/src/main/java/fr/ird/observe/client/db/ObserveSwingDataSource.java @@ -32,6 +32,7 @@ import fr.ird.observe.client.ObserveSwingApplicationContext; import fr.ird.observe.client.configuration.ClientConfig; import fr.ird.observe.client.db.event.ObserveSwingDataSourceEvent; import fr.ird.observe.client.db.event.ObserveSwingDataSourceListener; +import fr.ird.observe.client.ui.util.ProgressModel; import fr.ird.observe.services.ObserveServiceInitializer; import fr.ird.observe.services.ObserveServicesProvider; import fr.ird.observe.services.configuration.ObserveDataSourceConfiguration; @@ -135,6 +136,8 @@ public class ObserveSwingDataSource extends AbstractSerializableBean implements private ObserveDataSourceConnection connection; + private ProgressModel progressModel; + // indique que la connexion a expiré mais que la source n'est pas complétement fermer private boolean expired; @@ -243,7 +246,7 @@ public class ObserveSwingDataSource extends AbstractSerializableBean implements fireOpened(); } - // @Override + @Override public void close() { checkIsOpen(); @@ -769,4 +772,12 @@ public class ObserveSwingDataSource extends AbstractSerializableBean implements public <S extends ObserveService> S getService(Class<S> serviceType) { return servicesProvider.getService(serviceType); } + + public ProgressModel getProgressModel() { + return progressModel; + } + + public void setProgressModel(ProgressModel progressModel) { + this.progressModel = progressModel; + } } ===================================== client/src/main/java/fr/ird/observe/client/ui/ObserveMainUIInitializer.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/ObserveMainUIInitializer.java +++ b/client/src/main/java/fr/ird/observe/client/ui/ObserveMainUIInitializer.java @@ -39,6 +39,7 @@ import fr.ird.observe.client.ui.tree.navigation.nodes.ReferenceNavigationTreeNod import fr.ird.observe.client.ui.tree.navigation.nodes.StringNavigationTreeNodeSupport; import fr.ird.observe.client.ui.util.ObserveSwingValidatorMessageTableModel; import fr.ird.observe.client.ui.util.ObserveValidatorMessageTableRenderer; +import fr.ird.observe.client.ui.util.ProgressModel; import fr.ird.observe.services.decoration.DecoratorService; import fr.ird.observe.services.decoration.ObserveI18nDecoratorHelper; import fr.ird.observe.services.dto.constants.ReferentialLocale; @@ -552,11 +553,14 @@ public class ObserveMainUIInitializer { * Nettoye des ui tout ce qui concerne un modèle de navigation. * <p> * <b>Note:</b> cette méthode doit être appelée avant tout rechargement de modèle de naivgation. + * + * @param progressModel progress model to interact with ui */ - public void cleanNavigationUI() { + public void cleanNavigationUI(ProgressModel progressModel) { // reset content uis ui.getContentLayout().reset(ui.getContent()); + progressModel.incrementsCurrentStep(); // clean messages ui.getContextValue(SwingValidatorMessageTableModel.class).clear(); @@ -565,6 +569,7 @@ public class ObserveMainUIInitializer { NavigationTree tree = ui.getNavigation(); tree.clearModel(); + progressModel.incrementsCurrentStep(); // no tree navigation view tree.setVisible(false); @@ -575,16 +580,20 @@ public class ObserveMainUIInitializer { * Charge dans l'ui un nouveau modèle de navigation. * <p> * <b>Note:</b> cette méthode doit être appelée après tout rechargement de modèle de naivgation. - **/ - public void loadNavigationUI() { + * + * @param progressModel the progress model to interact with ui + */ + public void loadNavigationUI(ProgressModel progressModel) { NavigationTree tree = ui.getNavigation(); NavigationTreeModel treeModel = tree.getTreeModel(); treeModel.populate(); + progressModel.incrementsCurrentStep(); // select initial node tree.selectInitialNode(); + progressModel.incrementsCurrentStep(); tree.setVisible(true); ===================================== client/src/main/java/fr/ird/observe/client/ui/storage/StorageBackupUILauncher.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/storage/StorageBackupUILauncher.java +++ b/client/src/main/java/fr/ird/observe/client/ui/storage/StorageBackupUILauncher.java @@ -155,14 +155,13 @@ public class StorageBackupUILauncher extends StorageUILauncher { for (DataReference trip : entry.getValue()) { - progressModel.incrementsCurrentStep(); ExportTripRequest exportRequest = new ExportTripRequest(false, entry.getKey().getId(), trip.getId()); ExportTripResult exportTripResult = managementService.exportTrip(exportRequest); - progressModel.incrementsCurrentStep(); ImportTripRequest importTripRequest = new ImportTripRequest(exportTripResult); tmpManagementService.importTrip(importTripRequest); + progressModel.incrementsCurrentStep(); } @@ -170,13 +169,12 @@ public class StorageBackupUILauncher extends StorageUILauncher { } - progressModel.incrementsCurrentStep(); - if (log.isInfoEnabled()) { log.info("Exporting to " + backupFile); } sourceToBackup.getDataSourceService().backup(backupFile); + progressModel.incrementsCurrentStep(); } catch (DatabaseNotFoundException | DatabaseConnexionNotAuthorizedException | BabModelVersionException | IncompatibleDataSourceCreateConfigurationException | DataSourceCreateWithNoReferentialImportException e) { throw new ObserveSwingTechnicalException(e); ===================================== client/src/main/java/fr/ird/observe/client/ui/storage/StorageUIHandler.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/storage/StorageUIHandler.java +++ b/client/src/main/java/fr/ird/observe/client/ui/storage/StorageUIHandler.java @@ -42,6 +42,7 @@ import fr.ird.observe.client.ui.storage.tabs.SecurityModel; import fr.ird.observe.client.ui.storage.tabs.SelectDataUI; import fr.ird.observe.client.ui.storage.tabs.StorageTabUI; import fr.ird.observe.client.ui.tree.selection.SelectionTreeModel; +import fr.ird.observe.client.ui.util.ProgressModel; import fr.ird.observe.services.configuration.ObserveDataSourceConfiguration; import fr.ird.observe.services.configuration.ObserveDataSourceInformation; import fr.ird.observe.services.configuration.rest.ObserveDataSourceConfigurationRest; @@ -357,15 +358,12 @@ public class StorageUIHandler implements UIHandler<StorageUI> { ClientConfig config = observeContext.getConfig(); // faut-il detruire la base locale ? - boolean destroyLocalBase = - config.isLocalStorageExist() && - model.getDbMode() == DbMode.CREATE_LOCAL; + boolean destroyLocalBase = config.isLocalStorageExist() && model.getDbMode() == DbMode.CREATE_LOCAL; if (log.isDebugEnabled()) { log.debug(">>> should destroy local db ? " + destroyLocalBase); } - ObserveDataSourcesManager dataSourcesManager = observeContext.getDataSourcesManager(); ObserveSwingDataSource currentDataSource = dataSourcesManager.getMainDataSource(); @@ -375,9 +373,36 @@ public class StorageUIHandler implements UIHandler<StorageUI> { localDataSource = currentDataSource; } + ProgressModel progressModel = model.getProgressModel(); + + int stepsCount = 8; + + if (destroyLocalBase || model.isDoBackup()) { + stepsCount++; + } + if (destroyLocalBase) { + stepsCount++; + } + if (model.isDoBackup()) { + stepsCount++; + } + if (currentDataSource != null && currentDataSource.isOpen()) { + stepsCount++; + } + if (DbMode.USE_LOCAL.equals((model.getDbMode()))) { + stepsCount += 2; + } + String[] openIds = config.getTreeOpenNodeIds(); + stepsCount += openIds.length; + stepsCount += observeContext.getFloatingObjectReferencesManager().getNames().size(); + + progressModel.installUI(ui.getCONFIRM().getProgressBar()); + progressModel.setStepsCount(stepsCount); + boolean localDbIsSane = true; if (destroyLocalBase || model.isDoBackup()) { if (localDataSource == null) { + ObserveDataSourceConfigurationTopiaH2 localConfiguration = dataSourcesManager.newH2DataSourceConfiguration(config, t("observe.storage.label.local")); // la base ne doit pas etre mise a jour dans ce cas @@ -413,6 +438,8 @@ public class StorageUIHandler implements UIHandler<StorageUI> { localDataSource = null; } } + + progressModel.incrementsCurrentStep(); } if (model.isDoBackup()) { @@ -439,6 +466,8 @@ public class StorageUIHandler implements UIHandler<StorageUI> { UIHelper.handlingError(e); return; } + + progressModel.incrementsCurrentStep(); } if (destroyLocalBase) { @@ -465,6 +494,8 @@ public class StorageUIHandler implements UIHandler<StorageUI> { return; } } + + progressModel.incrementsCurrentStep(); } // suppression du storage precedent @@ -473,8 +504,13 @@ public class StorageUIHandler implements UIHandler<StorageUI> { log.debug(">>> close main storage " + currentDataSource); } // on doit fermer le storage en cours d'utilisation - currentDataSource.close(); + try { + currentDataSource.close(); + } catch (Exception e) { + UIHelper.handlingError(e); + } } + progressModel.incrementsCurrentStep(); // suppression du storage local if (localDataSource != null @@ -486,7 +522,11 @@ public class StorageUIHandler implements UIHandler<StorageUI> { log.debug(">>> close local storage " + localDataSource); } // on doit fermer le storage local ouvert - localDataSource.close(); + try { + localDataSource.close(); + } catch (Exception e) { + UIHelper.handlingError(e); + } } if (log.isDebugEnabled()) { @@ -498,14 +538,19 @@ public class StorageUIHandler implements UIHandler<StorageUI> { try { currentDataSource = ObserveSwingApplicationContext.get().getDataSourcesManager().newDataSourceFromModel(model); + currentDataSource.setProgressModel(progressModel); // si on utilise la base local on lance une migration de la base si necessaire if (DbMode.USE_LOCAL.equals((model.getDbMode()))) { ObserveDataSourceInformation dataSourceInformation = currentDataSource.checkCanConnect(); + progressModel.incrementsCurrentStep(); + currentDataSource.migrateData(dataSourceInformation, config.getModelVersion()); + progressModel.incrementsCurrentStep(); + } dataSourcesManager.setMainDataSource(currentDataSource); @@ -543,6 +588,8 @@ public class StorageUIHandler implements UIHandler<StorageUI> { currentDataSource.open(); } + progressModel.incrementsCurrentStep(); + if (DbMode.CREATE_LOCAL.equals(model.getDbMode()) && (CreationMode.IMPORT_REMOTE_STORAGE.equals(model.getCreationMode()) || CreationMode.IMPORT_SERVER_STORAGE.equals(model.getCreationMode())) && config.isLocalStorageExist()) { @@ -572,6 +619,8 @@ public class StorageUIHandler implements UIHandler<StorageUI> { log.info(">>> main storage opened " + currentDataSource.getLabel()); } + progressModel.incrementsCurrentStep(); + } catch (Exception ex) { UIHelper.handlingError(ex); throw new RuntimeException(ex); ===================================== client/src/main/java/fr/ird/observe/client/ui/storage/StorageUILauncher.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/storage/StorageUILauncher.java +++ b/client/src/main/java/fr/ird/observe/client/ui/storage/StorageUILauncher.java @@ -100,7 +100,6 @@ public class StorageUILauncher extends WizardUILancher<StorageStep, StorageUIMod @Override protected void doAction(StorageUI ui) { ui.getModel().setBusy(true); - super.doAction(ui); } @Override ===================================== client/src/main/java/fr/ird/observe/client/ui/util/ProgressModel.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/util/ProgressModel.java +++ b/client/src/main/java/fr/ird/observe/client/ui/util/ProgressModel.java @@ -23,6 +23,7 @@ package fr.ird.observe.client.ui.util; */ import javax.swing.JProgressBar; +import javax.swing.SwingUtilities; import org.jdesktop.beans.AbstractBean; /** @@ -70,6 +71,6 @@ public class ProgressModel extends AbstractBean { } public void incrementsCurrentStep() { - setCurrentStep(getCurrentStep() + 1); + SwingUtilities.invokeLater(() -> setCurrentStep(getCurrentStep() + 1)); } } View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/81b4f46df7e2c8eb95b1f09f9725... --- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/81b4f46df7e2c8eb95b1f09f9725... You're receiving this email because of your account on gitlab.com.