Tony CHEMIT pushed to branch feature/v8_maquette at ultreiaio / ird-observe Commits: 27bcb0df by Tony CHEMIT at 2018-04-09T13:42:52Z Refactor move api (first step) - - - - - 16 changed files: - client/src/main/java/fr/ird/observe/client/ObserveSwingApplicationContext.java - client/src/main/java/fr/ird/observe/client/ui/content/data/longline/ActivityLonglineLogbookUIHandler.java - client/src/main/java/fr/ird/observe/client/ui/content/data/longline/ActivityLonglineUIHandler.java - client/src/main/java/fr/ird/observe/client/ui/content/data/longline/TripLonglineUIHandler.java - client/src/main/java/fr/ird/observe/client/ui/content/data/seine/ActivitySeineUIHandler.java - client/src/main/java/fr/ird/observe/client/ui/content/data/seine/RouteUIHandler.java - client/src/main/java/fr/ird/observe/client/ui/content/data/seine/TripSeineUIHandler.java - client/src/main/java/fr/ird/observe/client/ui/content/open/ContentOpenableUIHandler.java - client/src/main/java/fr/ird/observe/client/ui/tree/navigation/nodes/NavigationTreeNodeSupport.java - client/src/main/java/fr/ird/observe/client/ui/tree/navigation/nodes/ReferenceNavigationTreeNodeSupport.java - client/src/main/java/fr/ird/observe/client/ui/tree/navigation/nodes/longline/ActivitiesLonglineNavigationTreeNode.java - client/src/main/java/fr/ird/observe/client/ui/tree/navigation/nodes/longline/ProgramLonglineNavigationTreeNode.java - client/src/main/java/fr/ird/observe/client/ui/tree/navigation/nodes/seine/ActivitiesSeineNavigationTreeNode.java - client/src/main/java/fr/ird/observe/client/ui/tree/navigation/nodes/seine/ProgramSeineNavigationTreeNode.java - client/src/main/java/fr/ird/observe/client/ui/tree/navigation/nodes/seine/RoutesSeineNavigationTreeNode.java - services-client/src/main/java/fr/ird/observe/services/client/ObserveServiceFactoryClient.java Changes: ===================================== client/src/main/java/fr/ird/observe/client/ObserveSwingApplicationContext.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ObserveSwingApplicationContext.java +++ b/client/src/main/java/fr/ird/observe/client/ObserveSwingApplicationContext.java @@ -2,19 +2,19 @@ * #%L * ObServe :: Client * %% - * Copyright (C) 2008 - 2017 IRD, Code Lutin, Ultreia.io + * Copyright (C) 2008 - 2018 IRD, Code Lutin, Ultreia.io * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the + * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public + * + * You should have received a copy of the GNU General Public * License along with this program. If not, see * <http://www.gnu.org/licenses/gpl-3.0.html>. * #L% @@ -23,7 +23,6 @@ package fr.ird.observe.client; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableSet; -import fr.ird.observe.spi.DtoModelHelper; import fr.ird.observe.client.backup.AtCloseApplicationLocalDatabaseBackupTask; import fr.ird.observe.client.backup.BackupsManager; import fr.ird.observe.client.configuration.ClientConfig; @@ -34,12 +33,20 @@ import fr.ird.observe.client.ui.content.ContentUIManager; import fr.ird.observe.client.ui.content.ObserveActionMap; import fr.ird.observe.client.ui.content.ObserveFocusManager; import fr.ird.observe.client.validation.ClientValidationContext; -import fr.ird.observe.dto.referential.ReferentialLocale; import fr.ird.observe.dto.decoration.DecoratorService; +import fr.ird.observe.dto.referential.ReferentialLocale; import fr.ird.observe.services.ObserveDataSourceConfigurationMainFactory; import fr.ird.observe.services.ObserveServiceMainFactory; import fr.ird.observe.services.validation.ValidatorDto; import fr.ird.observe.services.validation.ValidatorsManager; +import fr.ird.observe.spi.DtoModelHelper; +import org.apache.commons.lang3.SystemUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.h2.tools.Server; +import org.nuiton.jaxx.runtime.context.DefaultApplicationContext; +import org.nuiton.jaxx.runtime.context.JAXXContextEntryDef; + import java.io.Closeable; import java.io.IOException; import java.util.Arrays; @@ -49,13 +56,6 @@ import java.util.List; import java.util.Objects; import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit; -import org.apache.commons.lang3.SystemUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.h2.tools.Server; -import org.nuiton.jaxx.runtime.context.DefaultApplicationContext; -import org.nuiton.jaxx.runtime.context.JAXXContextEntryDef; - import static fr.ird.observe.client.ObserveSwingApplicationContext.Entries.ACTIONS; import static fr.ird.observe.client.ObserveSwingApplicationContext.Entries.ACTION_MAP; @@ -97,91 +97,12 @@ public class ObserveSwingApplicationContext extends DefaultApplicationContext im /** Logger */ private static final Log log = LogFactory.getLog(ObserveSwingApplicationContext.class); - - enum Entries { - - CONFIG("Config", ClientConfig.class), - DECORATOR_SERVICE("Decorator service", DecoratorService.class), - TEXT_GENERATOR("Text generator", ObserveTextGenerator.class), - DATA_SOURCE_CONFIGURATION_FACTORY("Data source configuration main factory", ObserveDataSourceConfigurationMainFactory.class), - OPEN_DATA_MANAGER("Open data manager", ObserveOpenDataManager.class), - DATA_CONTEXT("Data context", ClientDataContext.class), - CONTENT_UI_MANAGER("Content UI manager", ContentUIManager.class), - DATA_SOURCES_MANAGER("Data sources manager", ObserveDataSourcesManager.class), - FLOATING_OBJECT_REFERENCES_MANAGER("Floating object referenfences manager", FloatingObjectPresetsManager.class), - OBSERVE_SWING_SESSION_HELPER("Swing session Helper", ObserveSwingSessionHelper.class), - VALIDATION_CONTEXT("Validation context", ClientValidationContext.class), - MAIN_UI("Main UI", ObserveMainUI.class), - ACTIONS("Command line Actions", ObserveCLAction.class), - ACTION_MAP("UI Actions", ObserveActionMap.class), - H2_SERVER_MODE("H2 Server mode", Boolean.class), - H2_SERVER("H2 Server", Server.class), - H2_WEBSERVER("H2 Web server", Server.class), - FOCUS_MANAGER("Focus manager", ObserveFocusManager.class), - VALIDATORS_MANAGER("Validators manager", ValidatorsManager.class), - BACKUP_MANAGER("Backup manager", BackupsManager.class), - LOCAL_DATABASE_BACKUP_TIMER("Local database backup task", ScheduledThreadPoolExecutor.class), - NODE_TO_RESELECT("Node to reselect"); - - private final String objectName; - private final JAXXContextEntryDef entryDef; - - <O> Entries(String objectName, Class<O> entryType) { - this.objectName = objectName; - this.entryDef = newContextEntryDef(objectName, entryType); - } - - Entries(String objectName) { - this.objectName = objectName; - this.entryDef = newListContextEntryDef(objectName); - } - - @SuppressWarnings("unchecked") - public <O> O get() { - return (O) entryDef.getContextValue(ObserveSwingApplicationContext.get()); - } - - @SuppressWarnings("unchecked") - private <O> void set(O instance) { - entryDef.setContextValue(ObserveSwingApplicationContext.get(), instance); - if (log.isInfoEnabled()) { - log.info("Add to application context " + objectName + ": " + (instance instanceof Collection ? ((Collection) instance).size() + " element(s)" : instance)); - } - } - - private <O> void remove() { - O instance = get(); - entryDef.removeContextValue(ObserveSwingApplicationContext.get()); - if (log.isInfoEnabled()) { - log.info("Remove from application context " + objectName + ": " + (instance instanceof Collection ? ((Collection) instance).size() + " element(s)" : instance)); - } - } - } - private static ObserveSwingApplicationContext INSTANCE; - /** Un objet pour bloquer le context */ private final Object lock; - /** Un drapeau pour savoir quand l'application est en cours de fermeture. */ private boolean closed; - /** - * Récupération du contexte applicatif. - * - * @return l'instance partagé du contexte. - * @throws IllegalStateException si le contexte n'a pas été initialisé - */ - public static ObserveSwingApplicationContext get() throws IllegalStateException { - Objects.requireNonNull(INSTANCE, "no application context initialized."); - return INSTANCE; - } - - /** @return {@code true} si le context a été initialisé */ - public static boolean isInit() { - return INSTANCE != null; - } - public ObserveSwingApplicationContext(ClientConfig config) { Preconditions.checkState(INSTANCE == null, "application context already registred."); @@ -216,9 +137,21 @@ public class ObserveSwingApplicationContext extends DefaultApplicationContext im lock = new Object(); } - //------------------------------------------- - // - Read - //------------------------------------------- + /** + * Récupération du contexte applicatif. + * + * @return l'instance partagé du contexte. + * @throws IllegalStateException si le contexte n'a pas été initialisé + */ + public static ObserveSwingApplicationContext get() throws IllegalStateException { + Objects.requireNonNull(INSTANCE, "no application context initialized."); + return INSTANCE; + } + + /** @return {@code true} si le context a été initialisé */ + public static boolean isInit() { + return INSTANCE != null; + } /** * @return {@code true} si le context applicatif a été fermé (et est donc @@ -228,6 +161,10 @@ public class ObserveSwingApplicationContext extends DefaultApplicationContext im return closed; } + //------------------------------------------- + // - Read + //------------------------------------------- + public ClientConfig getConfig() { return CONFIG.get(); } @@ -276,10 +213,29 @@ public class ObserveSwingApplicationContext extends DefaultApplicationContext im return MAIN_UI.get(); } + public void setMainUI(ObserveMainUI ui) { + MAIN_UI.set(ui); + + ObserveActionMap actionMap = ui.getObserveActionMap(); + ui.getRootPane().setActionMap(actionMap); + + ACTION_MAP.set(actionMap); + + } + public List<Object> getNodesToReselect() { return NODE_TO_RESELECT.get(); } + public void setNodesToReselect(Object[] paths) { + if (paths == null) { + NODE_TO_RESELECT.remove(); + + } else { + NODE_TO_RESELECT.set(Arrays.asList(paths)); + } + } + public ObserveActionMap getActionMap() { return ACTION_MAP.get(); } @@ -288,14 +244,26 @@ public class ObserveSwingApplicationContext extends DefaultApplicationContext im return H2_SERVER.get(); } + public void setH2Server(Server server) { + H2_SERVER.set(server); + } + public Server getH2WebServer() { return H2_WEBSERVER.get(); } + public void setH2WebServer(Server server) { + H2_WEBSERVER.set(server); + } + private ScheduledThreadPoolExecutor getLocalDatabaseBackupTimer() { return LOCAL_DATABASE_BACKUP_TIMER.get(); } + //------------------------------------------- + // - Write + //------------------------------------------- + public ObserveSwingSessionHelper getSwingSessionHelper() { return OBSERVE_SWING_SESSION_HELPER.get(); } @@ -308,37 +276,6 @@ public class ObserveSwingApplicationContext extends DefaultApplicationContext im return BACKUP_MANAGER.get(); } - //------------------------------------------- - // - Write - //------------------------------------------- - - public void setNodesToReselect(Object[] paths) { - if (paths == null) { - NODE_TO_RESELECT.remove(); - - } else { - NODE_TO_RESELECT.set(Arrays.asList(paths)); - } - } - - public void setH2Server(Server server) { - H2_SERVER.set(server); - } - - public void setH2WebServer(Server server) { - H2_WEBSERVER.set(server); - } - - public void setMainUI(ObserveMainUI ui) { - MAIN_UI.set(ui); - - ObserveActionMap actionMap = ui.getObserveActionMap(); - ui.getRootPane().setActionMap(actionMap); - - ACTION_MAP.set(actionMap); - - } - public void removeMainUI() { MAIN_UI.remove(); } @@ -347,16 +284,16 @@ public class ObserveSwingApplicationContext extends DefaultApplicationContext im H2_SERVER_MODE.remove(); } - //------------------------------------------- - // - Locks - //------------------------------------------- - void lock() throws InterruptedException { synchronized (lock) { lock.wait(); } } + //------------------------------------------- + // - Locks + //------------------------------------------- + public void releaseLock() { synchronized (lock) { lock.notifyAll(); @@ -364,7 +301,7 @@ public class ObserveSwingApplicationContext extends DefaultApplicationContext im } @Override - public void close() throws IOException { + public void close() { if (log.isInfoEnabled()) { log.info("Closing swing application context " + this); } @@ -398,11 +335,7 @@ public class ObserveSwingApplicationContext extends DefaultApplicationContext im log.error("Could not close", e); } } - try { - ObserveServiceMainFactory.get().close(); - } catch (IOException e) { - log.error("Could not close", e); - } + ObserveServiceMainFactory.get().close(); // fermeture du context principal clear(); @@ -421,12 +354,63 @@ public class ObserveSwingApplicationContext extends DefaultApplicationContext im super.finalize(); } -// private void registerMainAction(ActionMap actionMap, UIActionSupport action) { -// String actionId = action.getActionId(); -// if (log.isInfoEnabled()) { -// log.info("Register UI action " + actionId); -// } -// actionMap.put(actionId, action); -// } + enum Entries { + + CONFIG("Config", ClientConfig.class), + DECORATOR_SERVICE("Decorator service", DecoratorService.class), + TEXT_GENERATOR("Text generator", ObserveTextGenerator.class), + DATA_SOURCE_CONFIGURATION_FACTORY("Data source configuration main factory", ObserveDataSourceConfigurationMainFactory.class), + OPEN_DATA_MANAGER("Open data manager", ObserveOpenDataManager.class), + DATA_CONTEXT("Data context", ClientDataContext.class), + CONTENT_UI_MANAGER("Content UI manager", ContentUIManager.class), + DATA_SOURCES_MANAGER("Data sources manager", ObserveDataSourcesManager.class), + FLOATING_OBJECT_REFERENCES_MANAGER("Floating object referenfences manager", FloatingObjectPresetsManager.class), + OBSERVE_SWING_SESSION_HELPER("Swing session Helper", ObserveSwingSessionHelper.class), + VALIDATION_CONTEXT("Validation context", ClientValidationContext.class), + MAIN_UI("Main UI", ObserveMainUI.class), + ACTIONS("Command line Actions", ObserveCLAction.class), + ACTION_MAP("UI Actions", ObserveActionMap.class), + H2_SERVER_MODE("H2 Server mode", Boolean.class), + H2_SERVER("H2 Server", Server.class), + H2_WEBSERVER("H2 Web server", Server.class), + FOCUS_MANAGER("Focus manager", ObserveFocusManager.class), + VALIDATORS_MANAGER("Validators manager", ValidatorsManager.class), + BACKUP_MANAGER("Backup manager", BackupsManager.class), + LOCAL_DATABASE_BACKUP_TIMER("Local database backup task", ScheduledThreadPoolExecutor.class), + NODE_TO_RESELECT("Node to reselect"); + + private final String objectName; + private final JAXXContextEntryDef entryDef; + + <O> Entries(String objectName, Class<O> entryType) { + this.objectName = objectName; + this.entryDef = newContextEntryDef(objectName, entryType); + } + + Entries(String objectName) { + this.objectName = objectName; + this.entryDef = newListContextEntryDef(objectName); + } + + @SuppressWarnings("unchecked") + public <O> O get() { + return (O) entryDef.getContextValue(ObserveSwingApplicationContext.get()); + } + @SuppressWarnings("unchecked") + private <O> void set(O instance) { + entryDef.setContextValue(ObserveSwingApplicationContext.get(), instance); + if (log.isInfoEnabled()) { + log.info("Add to application context " + objectName + ": " + (instance instanceof Collection ? ((Collection) instance).size() + " element(s)" : instance)); + } + } + + private <O> void remove() { + O instance = get(); + entryDef.removeContextValue(ObserveSwingApplicationContext.get()); + if (log.isInfoEnabled()) { + log.info("Remove from application context " + objectName + ": " + (instance instanceof Collection ? ((Collection) instance).size() + " element(s)" : instance)); + } + } + } } ===================================== client/src/main/java/fr/ird/observe/client/ui/content/data/longline/ActivityLonglineLogbookUIHandler.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/content/data/longline/ActivityLonglineLogbookUIHandler.java +++ b/client/src/main/java/fr/ird/observe/client/ui/content/data/longline/ActivityLonglineLogbookUIHandler.java @@ -28,13 +28,18 @@ import fr.ird.observe.client.db.constants.DataContextType; import fr.ird.observe.client.ui.content.ContentMode; import fr.ird.observe.client.ui.content.ContentUIModel; import fr.ird.observe.client.ui.content.open.ContentOpenableUIHandler; +import fr.ird.observe.client.ui.tree.navigation.NavigationTree; +import fr.ird.observe.client.ui.tree.navigation.nodes.NavigationTreeNodeSupport; +import fr.ird.observe.client.ui.tree.navigation.nodes.longline.ActivitiesLonglineNavigationTreeNode; import fr.ird.observe.client.validation.ClientValidationContext; import fr.ird.observe.dto.data.longline.ActivityLonglineDto; import fr.ird.observe.dto.data.longline.ActivityLonglineHelper; +import fr.ird.observe.dto.data.longline.ActivityLonglineReference; import fr.ird.observe.dto.data.longline.TripLonglineDto; import fr.ird.observe.dto.form.Form; import fr.ird.observe.dto.reference.DataDtoReference; import fr.ird.observe.dto.result.TripChildSaveResultDto; +import fr.ird.observe.spi.DtoModelHelper; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.jaxx.runtime.spi.UIHandler; @@ -241,8 +246,6 @@ class ActivityLonglineLogbookUIHandler extends ContentOpenableUIHandler<Activity setUpdateMareeNodeTag(saveResult.isTripEndDateUpdated()); - obtainChildPosition(bean); - if (notPersisted) { // ouverture de l'activité après création getOpenDataManager().openActivityLongline(getSelectedParentId(), bean.getId(), null); @@ -257,9 +260,15 @@ class ActivityLonglineLogbookUIHandler extends ContentOpenableUIHandler<Activity return true; } + @Override - protected int getOpenablePosition(String parentId, ActivityLonglineDto bean) { - return getActivityLonglineService().getActivityLonglinePositionInTripLongline(parentId, bean.getId()); + protected int getOpenablePosition() { + NavigationTree treeHelper = getNavigationTree(); + NavigationTreeNodeSupport node = treeHelper.getSelectedNode(); + ActivitiesLonglineNavigationTreeNode parentNode = (ActivitiesLonglineNavigationTreeNode) node.getParent(); + ActivityLonglineReference reference = DtoModelHelper.fromDataDto(getBeanType()).toReference(getDecoratorService().getReferentialLocale(), getBean()); + return ActivitiesLonglineNavigationTreeNode.sortReferences(parentNode, node, reference, ActivityLonglineReference::getTimeStamp); +// return getActivityLonglineService().getActivityLonglinePositionInTripLongline(parentId, bean.getId()); } @Override ===================================== client/src/main/java/fr/ird/observe/client/ui/content/data/longline/ActivityLonglineUIHandler.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/content/data/longline/ActivityLonglineUIHandler.java +++ b/client/src/main/java/fr/ird/observe/client/ui/content/data/longline/ActivityLonglineUIHandler.java @@ -4,7 +4,7 @@ package fr.ird.observe.client.ui.content.data.longline; * #%L * ObServe :: Client * %% - * Copyright (C) 2008 - 2017 IRD, Code Lutin, Ultreia.io + * Copyright (C) 2008 - 2018 IRD, Code Lutin, Ultreia.io * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as @@ -28,20 +28,25 @@ import fr.ird.observe.client.db.constants.DataContextType; import fr.ird.observe.client.ui.content.ContentMode; import fr.ird.observe.client.ui.content.ContentUIModel; import fr.ird.observe.client.ui.content.open.ContentOpenableUIHandler; +import fr.ird.observe.client.ui.tree.navigation.NavigationTree; +import fr.ird.observe.client.ui.tree.navigation.nodes.NavigationTreeNodeSupport; +import fr.ird.observe.client.ui.tree.navigation.nodes.longline.ActivitiesLonglineNavigationTreeNode; import fr.ird.observe.client.validation.ClientValidationContext; -import fr.ird.observe.dto.form.Form; import fr.ird.observe.dto.data.longline.ActivityLonglineDto; import fr.ird.observe.dto.data.longline.ActivityLonglineHelper; +import fr.ird.observe.dto.data.longline.ActivityLonglineReference; import fr.ird.observe.dto.data.longline.TripLonglineDto; +import fr.ird.observe.dto.form.Form; import fr.ird.observe.dto.reference.DataDtoReference; import fr.ird.observe.dto.result.TripChildSaveResultDto; -import java.util.Optional; -import javax.swing.SwingUtilities; +import fr.ird.observe.spi.DtoModelHelper; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.jaxx.runtime.spi.UIHandler; import org.nuiton.validator.NuitonValidatorScope; +import javax.swing.*; +import java.util.Optional; import static org.nuiton.i18n.I18n.n; import static org.nuiton.i18n.I18n.t; @@ -241,8 +246,6 @@ class ActivityLonglineUIHandler extends ContentOpenableUIHandler<ActivityLonglin setUpdateMareeNodeTag(saveResult.isTripEndDateUpdated()); - obtainChildPosition(bean); - if (notPersisted) { // ouverture de l'activité après création getOpenDataManager().openActivityLongline(getSelectedParentId(), bean.getId(), null); @@ -258,8 +261,13 @@ class ActivityLonglineUIHandler extends ContentOpenableUIHandler<ActivityLonglin } @Override - protected int getOpenablePosition(String parentId, ActivityLonglineDto bean) { - return getActivityLonglineService().getActivityLonglinePositionInTripLongline(parentId, bean.getId()); + protected int getOpenablePosition() { + NavigationTree treeHelper = getNavigationTree(); + NavigationTreeNodeSupport node = treeHelper.getSelectedNode(); + ActivitiesLonglineNavigationTreeNode parentNode = (ActivitiesLonglineNavigationTreeNode) node.getParent(); + ActivityLonglineReference reference = DtoModelHelper.fromDataDto(getBeanType()).toReference(getDecoratorService().getReferentialLocale(), getBean()); + return ActivitiesLonglineNavigationTreeNode.sortReferences(parentNode, node, reference, ActivityLonglineReference::getTimeStamp); +// return getActivityLonglineService().getActivityLonglinePositionInTripLongline(parentId, bean.getId()); } @Override ===================================== client/src/main/java/fr/ird/observe/client/ui/content/data/longline/TripLonglineUIHandler.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/content/data/longline/TripLonglineUIHandler.java +++ b/client/src/main/java/fr/ird/observe/client/ui/content/data/longline/TripLonglineUIHandler.java @@ -10,12 +10,12 @@ package fr.ird.observe.client.ui.content.data.longline; * it under the terms of the GNU General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU General Public * License along with this program. If not, see * <http://www.gnu.org/licenses/gpl-3.0.html>. @@ -29,8 +29,12 @@ import fr.ird.observe.client.db.constants.DataContextType; import fr.ird.observe.client.ui.content.ContentMode; import fr.ird.observe.client.ui.content.open.ContentOpenableUIHandler; import fr.ird.observe.client.ui.content.open.ContentOpenableUIModel; +import fr.ird.observe.client.ui.tree.navigation.NavigationTree; +import fr.ird.observe.client.ui.tree.navigation.nodes.NavigationTreeNodeSupport; +import fr.ird.observe.client.ui.tree.navigation.nodes.longline.ProgramLonglineNavigationTreeNode; import fr.ird.observe.client.ui.util.tripMap.TripMapUI; import fr.ird.observe.dto.data.TripMapDto; +import fr.ird.observe.dto.data.longline.TripLonglineReference; import fr.ird.observe.dto.form.Form; import fr.ird.observe.dto.data.longline.TripLonglineDto; import fr.ird.observe.dto.data.longline.TripLonglineHelper; @@ -51,6 +55,7 @@ import javax.swing.JTabbedPane; import javax.swing.SwingUtilities; import javax.swing.event.TableModelListener; +import fr.ird.observe.spi.DtoModelHelper; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.jaxx.runtime.spi.UIHandler; @@ -245,18 +250,18 @@ class TripLonglineUIHandler extends ContentOpenableUIHandler<TripLonglineDto, Tr } super.startEditUI(TripLonglineUI.BINDING_VESSEL_SELECTED_ITEM, - TripLonglineUI.BINDING_CAPTAIN_SELECTED_ITEM, - TripLonglineUI.BINDING_OBSERVATION_OBSERVER_SELECTED_ITEM, - TripLonglineUI.BINDING_OBSERVATION_TRIP_TYPE_SELECTED_ITEM, - TripLonglineUI.BINDING_OBSERVATION_DATA_ENTRY_OPERATOR_SELECTED_ITEM, - TripLonglineUI.BINDING_TOTAL_FISHING_OPERATIONS_NUMBER_NUMBER_VALUE, - TripLonglineUI.BINDING_OCEAN_SELECTED_ITEM, - TripLonglineUI.BINDING_START_DATE_DATE, - TripLonglineUI.BINDING_END_DATE_DATE, - TripLonglineUI.BINDING_COMMENT_MODEL, - TripLonglineUI.BINDING_HOME_ID_TEXT, - TripLonglineUI.BINDING_CLOSE_ENABLED, - TripLonglineUI.BINDING_CLOSE_AND_CREATE_ENABLED); + TripLonglineUI.BINDING_CAPTAIN_SELECTED_ITEM, + TripLonglineUI.BINDING_OBSERVATION_OBSERVER_SELECTED_ITEM, + TripLonglineUI.BINDING_OBSERVATION_TRIP_TYPE_SELECTED_ITEM, + TripLonglineUI.BINDING_OBSERVATION_DATA_ENTRY_OPERATOR_SELECTED_ITEM, + TripLonglineUI.BINDING_TOTAL_FISHING_OPERATIONS_NUMBER_NUMBER_VALUE, + TripLonglineUI.BINDING_OCEAN_SELECTED_ITEM, + TripLonglineUI.BINDING_START_DATE_DATE, + TripLonglineUI.BINDING_END_DATE_DATE, + TripLonglineUI.BINDING_COMMENT_MODEL, + TripLonglineUI.BINDING_HOME_ID_TEXT, + TripLonglineUI.BINDING_CLOSE_ENABLED, + TripLonglineUI.BINDING_CLOSE_AND_CREATE_ENABLED); model.setModified(create); } @@ -310,9 +315,6 @@ class TripLonglineUIHandler extends ContentOpenableUIHandler<TripLonglineDto, Tr SaveResultDto saveResult = getTripLonglineService().save(bean); saveResult.toDto(bean); - // recuperation de la position de la maree dans le program - obtainChildPosition(bean); - // ouverture de la marée if (notPersisted) { getOpenDataManager().openTripLongline(getSelectedParentId(), bean.getId()); @@ -321,12 +323,6 @@ class TripLonglineUIHandler extends ContentOpenableUIHandler<TripLonglineDto, Tr } @Override - protected int getOpenablePosition(String parentId, TripLonglineDto bean) { - - return getTripLonglineService().getTripLonglinePositionInProgram(parentId, bean.getId()); - } - - @Override protected boolean doDelete(TripLonglineDto bean) { if (askToDelete(bean)) { @@ -374,4 +370,14 @@ class TripLonglineUIHandler extends ContentOpenableUIHandler<TripLonglineDto, Tr model.setObservationTabValid(observationTabValid); } + + @Override + protected int getOpenablePosition() { + NavigationTree treeHelper = getNavigationTree(); + NavigationTreeNodeSupport node = treeHelper.getSelectedNode(); + ProgramLonglineNavigationTreeNode parentNode = (ProgramLonglineNavigationTreeNode) node.getParent(); + TripLonglineReference reference = DtoModelHelper.fromDataDto(getBeanType()).toReference(getDecoratorService().getReferentialLocale(), getBean()); + return ProgramLonglineNavigationTreeNode.sortReferences(parentNode, node, reference, TripLonglineReference::getStartDate); + } + } ===================================== client/src/main/java/fr/ird/observe/client/ui/content/data/seine/ActivitySeineUIHandler.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/content/data/seine/ActivitySeineUIHandler.java +++ b/client/src/main/java/fr/ird/observe/client/ui/content/data/seine/ActivitySeineUIHandler.java @@ -2,7 +2,7 @@ * #%L * ObServe :: Client * %% - * Copyright (C) 2008 - 2017 IRD, Code Lutin, Ultreia.io + * Copyright (C) 2008 - 2018 IRD, Code Lutin, Ultreia.io * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as @@ -27,22 +27,21 @@ import fr.ird.observe.client.db.constants.DataContextType; import fr.ird.observe.client.ui.content.ContentMode; import fr.ird.observe.client.ui.content.ContentUIModel; import fr.ird.observe.client.ui.content.open.ContentOpenableUIHandler; +import fr.ird.observe.client.ui.tree.navigation.NavigationTree; +import fr.ird.observe.client.ui.tree.navigation.nodes.NavigationTreeNodeSupport; +import fr.ird.observe.client.ui.tree.navigation.nodes.seine.ActivitiesSeineNavigationTreeNode; import fr.ird.observe.client.validation.ClientValidationContext; +import fr.ird.observe.dto.data.seine.ActivitySeineDto; +import fr.ird.observe.dto.data.seine.ActivitySeineHelper; +import fr.ird.observe.dto.data.seine.ActivitySeineReference; +import fr.ird.observe.dto.data.seine.RouteDto; +import fr.ird.observe.dto.data.seine.TripSeineDto; import fr.ird.observe.dto.form.Form; import fr.ird.observe.dto.reference.DataDtoReference; import fr.ird.observe.dto.referential.seine.VesselActivitySeineHelper; import fr.ird.observe.dto.referential.seine.VesselActivitySeineReference; import fr.ird.observe.dto.result.SaveResultDto; -import fr.ird.observe.dto.data.seine.ActivitySeineDto; -import fr.ird.observe.dto.data.seine.ActivitySeineHelper; -import fr.ird.observe.dto.data.seine.RouteDto; -import fr.ird.observe.dto.data.seine.TripSeineDto; -import java.util.HashSet; -import java.util.List; -import java.util.Optional; -import java.util.Set; -import javax.swing.SwingUtilities; -import javax.swing.event.TableModelListener; +import fr.ird.observe.spi.DtoModelHelper; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.jaxx.runtime.spi.UIHandler; @@ -50,6 +49,12 @@ import org.nuiton.jaxx.validator.swing.SwingValidatorMessage; import org.nuiton.jaxx.validator.swing.SwingValidatorMessageTableModel; import org.nuiton.validator.NuitonValidatorScope; +import javax.swing.*; +import javax.swing.event.TableModelListener; +import java.util.HashSet; +import java.util.List; +import java.util.Optional; +import java.util.Set; import static org.nuiton.i18n.I18n.n; import static org.nuiton.i18n.I18n.t; @@ -68,7 +73,7 @@ class ActivitySeineUIHandler extends ContentOpenableUIHandler<ActivitySeineDto, ActivitySeineUIHandler() { super(DataContextType.Route, DataContextType.ActivitySeine, - n("observe.common.ActivitySeineDto.message.not.open")); + n("observe.common.ActivitySeineDto.message.not.open")); computeTabValidStateListener = e -> { SwingValidatorMessageTableModel source = (SwingValidatorMessageTableModel) e.getSource(); @@ -131,17 +136,17 @@ class ActivitySeineUIHandler extends ContentOpenableUIHandler<ActivitySeineDto, // la route n'est pas ouverte addMessage(ui, - NuitonValidatorScope.INFO, - getTypeI18nKey(RouteDto.class), - t("observe.common.RouteDto.message.not.open")); + NuitonValidatorScope.INFO, + getTypeI18nKey(RouteDto.class), + t("observe.common.RouteDto.message.not.open")); } else if (!getOpenDataManager().isOpenTripSeine(dataContext.getSelectedTripSeineId())) { // la marée n'est past ouverte addMessage(ui, - NuitonValidatorScope.INFO, - getTypeI18nKey(TripSeineDto.class), - t("observe.common.TripSeineDto.message.not.open")); + NuitonValidatorScope.INFO, + getTypeI18nKey(TripSeineDto.class), + t("observe.common.TripSeineDto.message.not.open")); if (getModel().isHistoricalData()) { @@ -251,28 +256,28 @@ class ActivitySeineUIHandler extends ContentOpenableUIHandler<ActivitySeineDto, ui.getValidator().setContext(contextName); if (create) { addMessage(ui, - NuitonValidatorScope.INFO, - getTypeI18nKey(ActivitySeineDto.class), - t("observe.common.ActivitySeineDto.message.creating")); + NuitonValidatorScope.INFO, + getTypeI18nKey(ActivitySeineDto.class), + t("observe.common.ActivitySeineDto.message.creating")); } else { addMessage(ui, - NuitonValidatorScope.INFO, - getTypeI18nKey(ActivitySeineDto.class), - t("observe.common.ActivitySeineDto.message.updating")); + NuitonValidatorScope.INFO, + getTypeI18nKey(ActivitySeineDto.class), + t("observe.common.ActivitySeineDto.message.updating")); } super.startEditUI(ActivitySeineUI.BINDING_TIME_TIME, - ActivitySeineUI.BINDING_VESSEL_SPEED_NUMBER_VALUE, - ActivitySeineUI.BINDING_SEA_SURFACE_TEMPERATURE_STORAGE_TEMPERATURE, - ActivitySeineUI.BINDING_COMMENT_MODEL, - ActivitySeineUI.BINDING_VESSEL_ACTIVITY_SEINE_SELECTED_ITEM, - ActivitySeineUI.BINDING_PREVIOUS_FPA_ZONE_SELECTED_ITEM, - ActivitySeineUI.BINDING_CURRENT_FPA_ZONE_SELECTED_ITEM, - ActivitySeineUI.BINDING_NEXT_FPA_ZONE_SELECTED_ITEM, - ActivitySeineUI.BINDING_SURROUNDING_ACTIVITY_SELECTED_ITEM, - ActivitySeineUI.BINDING_CLOSE_ENABLED, - ActivitySeineUI.BINDING_ADD_SET_ENABLED, - ActivitySeineUI.BINDING_CLOSE_AND_CREATE_ENABLED); + ActivitySeineUI.BINDING_VESSEL_SPEED_NUMBER_VALUE, + ActivitySeineUI.BINDING_SEA_SURFACE_TEMPERATURE_STORAGE_TEMPERATURE, + ActivitySeineUI.BINDING_COMMENT_MODEL, + ActivitySeineUI.BINDING_VESSEL_ACTIVITY_SEINE_SELECTED_ITEM, + ActivitySeineUI.BINDING_PREVIOUS_FPA_ZONE_SELECTED_ITEM, + ActivitySeineUI.BINDING_CURRENT_FPA_ZONE_SELECTED_ITEM, + ActivitySeineUI.BINDING_NEXT_FPA_ZONE_SELECTED_ITEM, + ActivitySeineUI.BINDING_SURROUNDING_ACTIVITY_SELECTED_ITEM, + ActivitySeineUI.BINDING_CLOSE_ENABLED, + ActivitySeineUI.BINDING_ADD_SET_ENABLED, + ActivitySeineUI.BINDING_CLOSE_AND_CREATE_ENABLED); model.setModified(create); } @@ -288,8 +293,6 @@ class ActivitySeineUIHandler extends ContentOpenableUIHandler<ActivitySeineDto, SaveResultDto saveResult = getActivitySeineService().save(routeId, getModel().getBean()); saveResult.toDto(bean); - obtainChildPosition(bean); - if (notPersisted) { // ouverture de l'activité après création getOpenDataManager().openActivitySeine(getSelectedParentId(), bean.getId(), null); @@ -305,8 +308,13 @@ class ActivitySeineUIHandler extends ContentOpenableUIHandler<ActivitySeineDto, } @Override - protected int getOpenablePosition(String parentId, ActivitySeineDto bean) { - return getActivitySeineService().getActivitySeinePositionInRoute(parentId, bean.getId()); + protected int getOpenablePosition() { + NavigationTree treeHelper = getNavigationTree(); + NavigationTreeNodeSupport node = treeHelper.getSelectedNode(); + ActivitiesSeineNavigationTreeNode parentNode = (ActivitiesSeineNavigationTreeNode) node.getParent(); + ActivitySeineReference reference = DtoModelHelper.fromDataDto(getBeanType()).toReference(getDecoratorService().getReferentialLocale(), getBean()); + return ActivitiesSeineNavigationTreeNode.sortReferences(parentNode, node, reference, ActivitySeineReference::getTime); +// return getActivitySeineService().getActivitySeinePositionInRoute(parentId, bean.getId()); } @Override ===================================== client/src/main/java/fr/ird/observe/client/ui/content/data/seine/RouteUIHandler.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/content/data/seine/RouteUIHandler.java +++ b/client/src/main/java/fr/ird/observe/client/ui/content/data/seine/RouteUIHandler.java @@ -2,7 +2,7 @@ * #%L * ObServe :: Client * %% - * Copyright (C) 2008 - 2017 IRD, Code Lutin, Ultreia.io + * Copyright (C) 2008 - 2018 IRD, Code Lutin, Ultreia.io * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as @@ -24,28 +24,32 @@ package fr.ird.observe.client.ui.content.data.seine; import fr.ird.observe.client.ObserveSwingApplicationContext; import fr.ird.observe.client.db.ClientDataContext; import fr.ird.observe.client.db.constants.DataContextType; -import fr.ird.observe.client.ui.util.UIHelper; import fr.ird.observe.client.ui.content.ContentMode; import fr.ird.observe.client.ui.content.open.ContentOpenableUIHandler; import fr.ird.observe.client.ui.tree.navigation.NavigationTree; import fr.ird.observe.client.ui.tree.navigation.nodes.NavigationTreeNodeSupport; +import fr.ird.observe.client.ui.tree.navigation.nodes.seine.RouteSeineNavigationTreeNode; +import fr.ird.observe.client.ui.tree.navigation.nodes.seine.RoutesSeineNavigationTreeNode; +import fr.ird.observe.client.ui.util.UIHelper; +import fr.ird.observe.dto.data.seine.ActivitySeineDto; +import fr.ird.observe.dto.data.seine.RouteDto; +import fr.ird.observe.dto.data.seine.RouteHelper; +import fr.ird.observe.dto.data.seine.RouteReference; +import fr.ird.observe.dto.data.seine.TripSeineDto; import fr.ird.observe.dto.decoration.ObserveI18nDecoratorHelper; import fr.ird.observe.dto.form.Form; import fr.ird.observe.dto.referential.seine.VesselActivitySeineHelper; import fr.ird.observe.dto.referential.seine.VesselActivitySeineReference; import fr.ird.observe.dto.result.TripChildSaveResultDto; -import fr.ird.observe.dto.data.seine.ActivitySeineDto; -import fr.ird.observe.dto.data.seine.RouteDto; -import fr.ird.observe.dto.data.seine.RouteHelper; -import fr.ird.observe.dto.data.seine.TripSeineDto; -import java.util.Date; -import javax.swing.JOptionPane; +import fr.ird.observe.spi.DtoModelHelper; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.jaxx.runtime.spi.UIHandler; import org.nuiton.util.DateUtil; import org.nuiton.validator.NuitonValidatorScope; +import javax.swing.*; +import java.util.Date; import static org.nuiton.i18n.I18n.n; import static org.nuiton.i18n.I18n.t; @@ -204,8 +208,6 @@ class RouteUIHandler extends ContentOpenableUIHandler<RouteDto, RouteUI> impleme // on doit toujours recharger le nœud de la marée puisque le nombre de routes a changé setUpdateMareeNodeTag(true); - obtainChildPosition(bean); - // ouverture de la route if (notPersisted) { getOpenDataManager().openRoute(getSelectedParentId(), bean.getId()); @@ -215,8 +217,12 @@ class RouteUIHandler extends ContentOpenableUIHandler<RouteDto, RouteUI> impleme } @Override - protected int getOpenablePosition(String parentId, RouteDto bean) { - return getRouteService().getRoutePositionInTripSeine(parentId, bean.getId()); + protected int getOpenablePosition() { + NavigationTree treeHelper = getNavigationTree(); + NavigationTreeNodeSupport node = treeHelper.getSelectedNode(); + RoutesSeineNavigationTreeNode parentNode = (RoutesSeineNavigationTreeNode) node.getParent(); + RouteReference reference = DtoModelHelper.fromDataDto(getBeanType()).toReference(getDecoratorService().getReferentialLocale(), getBean()); + return RouteSeineNavigationTreeNode.sortReferences(parentNode, node, reference, RouteReference::getDate); } @Override ===================================== client/src/main/java/fr/ird/observe/client/ui/content/data/seine/TripSeineUIHandler.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/content/data/seine/TripSeineUIHandler.java +++ b/client/src/main/java/fr/ird/observe/client/ui/content/data/seine/TripSeineUIHandler.java @@ -2,7 +2,7 @@ * #%L * ObServe :: Client * %% - * Copyright (C) 2008 - 2017 IRD, Code Lutin, Ultreia.io + * Copyright (C) 2008 - 2018 IRD, Code Lutin, Ultreia.io * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as @@ -28,8 +28,14 @@ import fr.ird.observe.client.db.constants.DataContextType; import fr.ird.observe.client.ui.content.ContentMode; import fr.ird.observe.client.ui.content.open.ContentOpenableUIHandler; import fr.ird.observe.client.ui.content.open.ContentOpenableUIModel; +import fr.ird.observe.client.ui.tree.navigation.NavigationTree; +import fr.ird.observe.client.ui.tree.navigation.nodes.NavigationTreeNodeSupport; +import fr.ird.observe.client.ui.tree.navigation.nodes.seine.ProgramSeineNavigationTreeNode; import fr.ird.observe.client.ui.util.tripMap.TripMapUI; import fr.ird.observe.dto.data.TripMapDto; +import fr.ird.observe.dto.data.seine.TripSeineDto; +import fr.ird.observe.dto.data.seine.TripSeineHelper; +import fr.ird.observe.dto.data.seine.TripSeineReference; import fr.ird.observe.dto.form.Form; import fr.ird.observe.dto.reference.DtoReferenceCollection; import fr.ird.observe.dto.referential.PersonDto; @@ -39,18 +45,17 @@ import fr.ird.observe.dto.referential.VesselDto; import fr.ird.observe.dto.referential.VesselHelper; import fr.ird.observe.dto.referential.VesselReference; import fr.ird.observe.dto.result.SaveResultDto; -import fr.ird.observe.dto.data.seine.TripSeineDto; -import fr.ird.observe.dto.data.seine.TripSeineHelper; -import java.util.Date; -import java.util.List; -import javax.swing.JComponent; -import javax.swing.JTabbedPane; -import javax.swing.SwingUtilities; +import fr.ird.observe.spi.DtoModelHelper; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.jaxx.runtime.spi.UIHandler; import org.nuiton.util.DateUtil; +import javax.swing.JComponent; +import javax.swing.JTabbedPane; +import javax.swing.SwingUtilities; +import java.util.Date; +import java.util.List; import static org.nuiton.i18n.I18n.n; import static org.nuiton.i18n.I18n.t; @@ -289,9 +294,6 @@ class TripSeineUIHandler extends ContentOpenableUIHandler<TripSeineDto, TripSein SaveResultDto saveResult = getTripSeineService().save(bean); saveResult.toDto(bean); - // recuperation de la position de la maree dans le program - obtainChildPosition(bean); - // ouverture de la marée if (notPersisted) { getOpenDataManager().openTripSeine(getSelectedParentId(), bean.getId()); @@ -300,9 +302,14 @@ class TripSeineUIHandler extends ContentOpenableUIHandler<TripSeineDto, TripSein return true; } - protected int getOpenablePosition(String parentId, TripSeineDto bean) { + protected int getOpenablePosition() { - return getTripSeineService().getTripSeinePositionInProgram(parentId, bean.getId()); + NavigationTree treeHelper = getNavigationTree(); + NavigationTreeNodeSupport node = treeHelper.getSelectedNode(); + ProgramSeineNavigationTreeNode parentNode = (ProgramSeineNavigationTreeNode) node.getParent(); + TripSeineReference reference = DtoModelHelper.fromDataDto(getBeanType()).toReference(getDecoratorService().getReferentialLocale(), getBean()); + return ProgramSeineNavigationTreeNode.sortReferences(parentNode, node, reference, TripSeineReference::getStartDate); +// return getTripSeineService().getTripSeinePositionInProgram(parentId, bean.getId()); } @Override ===================================== client/src/main/java/fr/ird/observe/client/ui/content/open/ContentOpenableUIHandler.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/content/open/ContentOpenableUIHandler.java +++ b/client/src/main/java/fr/ird/observe/client/ui/content/open/ContentOpenableUIHandler.java @@ -48,10 +48,9 @@ import static org.nuiton.i18n.I18n.t; */ public abstract class ContentOpenableUIHandler<E extends DataDto, U extends ContentOpenableUI<E, U>> extends ContentUIHandler<E, U> { - private static final String POSITION_OPENABLE = "positionOpenable"; +// private static final String POSITION_OPENABLE = "positionOpenable"; - /** Logger */ - static private final Log log = LogFactory.getLog(ContentOpenableUIHandler.class); + private static final Log log = LogFactory.getLog(ContentOpenableUIHandler.class); private static final String UPDATE_TRIP_NODE = "updateTripNode"; protected final String closeMessage; @@ -147,8 +146,7 @@ public abstract class ContentOpenableUIHandler<E extends DataDto, U extends Cont model.setMode(ContentMode.READ); removeAllMessages(ui); - addMessage(ui, NuitonValidatorScope.INFO, - getTypeI18nKey(bean.getClass()), t(closeMessage)); + addMessage(ui, NuitonValidatorScope.INFO, getTypeI18nKey(bean.getClass()), t(closeMessage)); NavigationTree treeHelper = getNavigationTree(); treeHelper.reloadSelectedNode(bean instanceof TripSeineDto || bean instanceof TripLonglineDto, true); @@ -162,9 +160,9 @@ public abstract class ContentOpenableUIHandler<E extends DataDto, U extends Cont super.afterSave(refresh); - U ui = getUi(); + E bean = getBean(); + int position = getOpenablePosition(); - int position = ui.getContextValue(Integer.class, POSITION_OPENABLE); NavigationTree treeHelper = getNavigationTree(); NavigationTreeNodeSupport node = treeHelper.getSelectedNode(); @@ -176,8 +174,6 @@ public abstract class ContentOpenableUIHandler<E extends DataDto, U extends Cont boolean create = node.getId() == null; - E bean = getBean(); - int oldPosition; if (create) { oldPosition = parentNode.getChildCount(); @@ -258,20 +254,20 @@ public abstract class ContentOpenableUIHandler<E extends DataDto, U extends Cont createDataUI(); } - protected final void obtainChildPosition(E bean) { - - String containerId = getSelectedParentId(); - - int position = getOpenablePosition(containerId, bean); - - if (log.isDebugEnabled()) { - log.debug("Position of child : " + position); - } - - getUi().setContextValue(position, POSITION_OPENABLE); - } - - protected abstract int getOpenablePosition(String parentId, E bean); +// protected final void obtainChildPosition(E bean) { +// +// String containerId = getSelectedParentId(); +// +// int position = getOpenablePosition(containerId, bean); +// +// if (log.isDebugEnabled()) { +// log.debug("Position of child : " + position); +// } +// +// getUi().setContextValue(position, POSITION_OPENABLE); +// } + + protected abstract int getOpenablePosition(); protected final void finalizeOpenUI(ContentMode mode, boolean create) { ===================================== client/src/main/java/fr/ird/observe/client/ui/tree/navigation/nodes/NavigationTreeNodeSupport.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/tree/navigation/nodes/NavigationTreeNodeSupport.java +++ b/client/src/main/java/fr/ird/observe/client/ui/tree/navigation/nodes/NavigationTreeNodeSupport.java @@ -4,7 +4,7 @@ package fr.ird.observe.client.ui.tree.navigation.nodes; * #%L * ObServe :: Client * %% - * Copyright (C) 2008 - 2017 IRD, Code Lutin, Ultreia.io + * Copyright (C) 2008 - 2018 IRD, Code Lutin, Ultreia.io * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as @@ -26,15 +26,22 @@ import fr.ird.observe.client.ui.ObserveKeyStrokes; import fr.ird.observe.client.ui.actions.content.SelectNodeUIAction; import fr.ird.observe.client.ui.content.ContentUI; import fr.ird.observe.client.ui.tree.ObserveTreeNodeSupport; -import java.awt.Color; -import java.awt.event.ActionEvent; -import java.util.Enumeration; -import javax.swing.AbstractAction; -import javax.swing.JMenuItem; +import fr.ird.observe.dto.IdDto; +import fr.ird.observe.dto.reference.DtoReference; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.jaxx.runtime.JAXXObject; +import javax.swing.AbstractAction; +import javax.swing.JMenuItem; +import java.awt.Color; +import java.awt.event.ActionEvent; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.Enumeration; +import java.util.List; +import java.util.function.Function; + /** * Created on 14/11/16. * @@ -48,6 +55,21 @@ public abstract class NavigationTreeNodeSupport<O> extends ObserveTreeNodeSuppor private boolean loaded; + public static <D extends IdDto, R extends DtoReference<D, R>, C extends Comparable> int sortReferences(Iterable<? extends ReferenceNavigationTreeNodeSupport<D, R>> childNodes, NavigationTreeNodeSupport selectedNode, R reference, Function<R, C> comparatorFunction) { + List<R> references = new ArrayList<>(); + for (ReferenceNavigationTreeNodeSupport<D, R> childNode : childNodes) { + if (childNode == selectedNode) { + continue; + } + references.add(childNode.getData()); + } + references.add(reference); + @SuppressWarnings("unchecked") + Comparator<R> comparing = Comparator.comparing(comparatorFunction); + references.sort(comparing); + return references.indexOf(reference); + } + public abstract Class<?> getDataType(); public abstract void reload(); ===================================== client/src/main/java/fr/ird/observe/client/ui/tree/navigation/nodes/ReferenceNavigationTreeNodeSupport.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/tree/navigation/nodes/ReferenceNavigationTreeNodeSupport.java +++ b/client/src/main/java/fr/ird/observe/client/ui/tree/navigation/nodes/ReferenceNavigationTreeNodeSupport.java @@ -4,7 +4,7 @@ package fr.ird.observe.client.ui.tree.navigation.nodes; * #%L * ObServe :: Client * %% - * Copyright (C) 2008 - 2017 IRD, Code Lutin, Ultreia.io + * Copyright (C) 2008 - 2018 IRD, Code Lutin, Ultreia.io * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as @@ -26,9 +26,14 @@ import fr.ird.observe.client.ObserveSwingApplicationContext; import fr.ird.observe.dto.IdDto; import fr.ird.observe.dto.IdHelper; import fr.ird.observe.dto.reference.DtoReference; -import java.awt.Color; import org.nuiton.decorator.Decorator; +import java.awt.*; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.function.Function; + /** * Created on 14/11/16. * @@ -39,17 +44,17 @@ public abstract class ReferenceNavigationTreeNodeSupport<D extends IdDto, R exte private final Decorator<R> decorator; - @Override - public String getId() { - return getData().getId(); - } - protected ReferenceNavigationTreeNodeSupport(R data, boolean allowChildren) { super(data, allowChildren && data.isPersisted()); this.decorator = ObserveSwingApplicationContext.get().getDecoratorService().getReferenceDecorator(getDataType()); } @Override + public String getId() { + return getData().getId(); + } + + @Override public Color getColor() { return isPersisted() ? super.getColor() : Color.RED; } ===================================== client/src/main/java/fr/ird/observe/client/ui/tree/navigation/nodes/longline/ActivitiesLonglineNavigationTreeNode.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/tree/navigation/nodes/longline/ActivitiesLonglineNavigationTreeNode.java +++ b/client/src/main/java/fr/ird/observe/client/ui/tree/navigation/nodes/longline/ActivitiesLonglineNavigationTreeNode.java @@ -25,10 +25,15 @@ package fr.ird.observe.client.ui.tree.navigation.nodes.longline; import fr.ird.observe.client.ui.content.data.longline.ActivityLonglinesUI; import fr.ird.observe.client.ui.tree.navigation.nodes.ClassNavigationTreeNode; import fr.ird.observe.client.ui.tree.navigation.nodes.WithChildsToReload; +import fr.ird.observe.client.ui.tree.navigation.nodes.seine.TripSeineNavigationTreeNode; import fr.ird.observe.dto.IdHelper; import fr.ird.observe.dto.data.longline.ActivityLonglineDto; import fr.ird.observe.dto.data.longline.ActivityLonglineReference; import fr.ird.observe.dto.reference.DataDtoReferenceSet; +import org.apache.commons.collections4.EnumerationUtils; +import org.jetbrains.annotations.NotNull; + +import java.util.Iterator; import static org.nuiton.i18n.I18n.t; @@ -39,7 +44,7 @@ import static org.nuiton.i18n.I18n.t; * @author Tony Chemit - dev@tchemit.fr * @since 6.0 */ -public class ActivitiesLonglineNavigationTreeNode extends ClassNavigationTreeNode<ActivityLonglineDto> implements WithChildsToReload { +public class ActivitiesLonglineNavigationTreeNode extends ClassNavigationTreeNode<ActivityLonglineDto> implements WithChildsToReload, Iterable<ActivityLonglineNavigationTreeNode> { ActivitiesLonglineNavigationTreeNode() { super(ActivityLonglineDto.class, true, t("observe.ui.tree.activities")); @@ -67,4 +72,11 @@ public class ActivitiesLonglineNavigationTreeNode extends ClassNavigationTreeNod add(new ActivityLonglineNavigationTreeNode(reference)); } } + + @SuppressWarnings("unchecked") + @NotNull + @Override + public Iterator<ActivityLonglineNavigationTreeNode> iterator() { + return EnumerationUtils.toList(children()).iterator(); + } } ===================================== client/src/main/java/fr/ird/observe/client/ui/tree/navigation/nodes/longline/ProgramLonglineNavigationTreeNode.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/tree/navigation/nodes/longline/ProgramLonglineNavigationTreeNode.java +++ b/client/src/main/java/fr/ird/observe/client/ui/tree/navigation/nodes/longline/ProgramLonglineNavigationTreeNode.java @@ -4,7 +4,7 @@ package fr.ird.observe.client.ui.tree.navigation.nodes.longline; * #%L * ObServe :: Client * %% - * Copyright (C) 2008 - 2017 IRD, Code Lutin, Ultreia.io + * Copyright (C) 2008 - 2018 IRD, Code Lutin, Ultreia.io * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as @@ -27,9 +27,11 @@ import fr.ird.observe.client.ui.tree.navigation.nodes.ReferenceNavigationTreeNod import fr.ird.observe.dto.data.longline.TripLonglineReference; import fr.ird.observe.dto.referential.ProgramDto; import fr.ird.observe.dto.referential.ProgramReference; +import org.apache.commons.collections4.EnumerationUtils; +import org.jetbrains.annotations.NotNull; + import java.util.Collection; import java.util.Iterator; -import org.apache.commons.collections4.EnumerationUtils; /** * Created on 14/11/16. @@ -74,8 +76,11 @@ public class ProgramLonglineNavigationTreeNode extends ReferenceNavigationTreeNo return TripLonglinesUI.class; } + @SuppressWarnings("unchecked") + @NotNull @Override public Iterator<TripLonglineNavigationTreeNode> iterator() { return EnumerationUtils.toList(children()).iterator(); } + } ===================================== client/src/main/java/fr/ird/observe/client/ui/tree/navigation/nodes/seine/ActivitiesSeineNavigationTreeNode.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/tree/navigation/nodes/seine/ActivitiesSeineNavigationTreeNode.java +++ b/client/src/main/java/fr/ird/observe/client/ui/tree/navigation/nodes/seine/ActivitiesSeineNavigationTreeNode.java @@ -4,7 +4,7 @@ package fr.ird.observe.client.ui.tree.navigation.nodes.seine; * #%L * ObServe :: Client * %% - * Copyright (C) 2008 - 2017 IRD, Code Lutin, Ultreia.io + * Copyright (C) 2008 - 2018 IRD, Code Lutin, Ultreia.io * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as @@ -26,10 +26,13 @@ import fr.ird.observe.client.ui.content.data.seine.ActivitySeinesUI; import fr.ird.observe.client.ui.tree.navigation.nodes.ClassNavigationTreeNode; import fr.ird.observe.client.ui.tree.navigation.nodes.WithChildsToReload; import fr.ird.observe.dto.IdHelper; -import fr.ird.observe.dto.reference.DataDtoReferenceSet; import fr.ird.observe.dto.data.seine.ActivitySeineDto; import fr.ird.observe.dto.data.seine.ActivitySeineReference; +import fr.ird.observe.dto.reference.DataDtoReferenceSet; +import org.apache.commons.collections4.EnumerationUtils; +import org.jetbrains.annotations.NotNull; +import java.util.Iterator; import static org.nuiton.i18n.I18n.t; @@ -39,7 +42,7 @@ import static org.nuiton.i18n.I18n.t; * @author Tony Chemit - dev@tchemit.fr * @since 6.0 */ -public class ActivitiesSeineNavigationTreeNode extends ClassNavigationTreeNode<ActivitySeineDto> implements WithChildsToReload { +public class ActivitiesSeineNavigationTreeNode extends ClassNavigationTreeNode<ActivitySeineDto> implements WithChildsToReload ,Iterable<ActivitySeineNavigationTreeNode> { ActivitiesSeineNavigationTreeNode() { super(ActivitySeineDto.class, true, t("observe.ui.tree.activities")); @@ -67,4 +70,11 @@ public class ActivitiesSeineNavigationTreeNode extends ClassNavigationTreeNode<A add(new ActivitySeineNavigationTreeNode(reference)); } } + + @SuppressWarnings("unchecked") + @NotNull + @Override + public Iterator<ActivitySeineNavigationTreeNode> iterator() { + return EnumerationUtils.toList(children()).iterator(); + } } ===================================== client/src/main/java/fr/ird/observe/client/ui/tree/navigation/nodes/seine/ProgramSeineNavigationTreeNode.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/tree/navigation/nodes/seine/ProgramSeineNavigationTreeNode.java +++ b/client/src/main/java/fr/ird/observe/client/ui/tree/navigation/nodes/seine/ProgramSeineNavigationTreeNode.java @@ -4,7 +4,7 @@ package fr.ird.observe.client.ui.tree.navigation.nodes.seine; * #%L * ObServe :: Client * %% - * Copyright (C) 2008 - 2017 IRD, Code Lutin, Ultreia.io + * Copyright (C) 2008 - 2018 IRD, Code Lutin, Ultreia.io * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as @@ -24,12 +24,14 @@ package fr.ird.observe.client.ui.tree.navigation.nodes.seine; import fr.ird.observe.client.ui.content.data.seine.TripSeinesUI; import fr.ird.observe.client.ui.tree.navigation.nodes.ReferenceNavigationTreeNodeSupport; +import fr.ird.observe.dto.data.seine.TripSeineReference; import fr.ird.observe.dto.referential.ProgramDto; import fr.ird.observe.dto.referential.ProgramReference; -import fr.ird.observe.dto.data.seine.TripSeineReference; +import org.apache.commons.collections4.EnumerationUtils; +import org.jetbrains.annotations.NotNull; + import java.util.Collection; import java.util.Iterator; -import org.apache.commons.collections4.EnumerationUtils; /** * Created on 14/11/16. @@ -61,7 +63,6 @@ public class ProgramSeineNavigationTreeNode extends ReferenceNavigationTreeNodeS return TripSeinesUI.class; } - @Override public boolean isOpen() { // le programme est ouvert si l'une de ses marées est ouverte @@ -73,6 +74,8 @@ public class ProgramSeineNavigationTreeNode extends ReferenceNavigationTreeNodeS return false; } + @SuppressWarnings("unchecked") + @NotNull @Override public Iterator<TripSeineNavigationTreeNode> iterator() { return EnumerationUtils.toList(children()).iterator(); ===================================== client/src/main/java/fr/ird/observe/client/ui/tree/navigation/nodes/seine/RoutesSeineNavigationTreeNode.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/tree/navigation/nodes/seine/RoutesSeineNavigationTreeNode.java +++ b/client/src/main/java/fr/ird/observe/client/ui/tree/navigation/nodes/seine/RoutesSeineNavigationTreeNode.java @@ -4,7 +4,7 @@ package fr.ird.observe.client.ui.tree.navigation.nodes.seine; * #%L * ObServe :: Client * %% - * Copyright (C) 2008 - 2017 IRD, Code Lutin, Ultreia.io + * Copyright (C) 2008 - 2018 IRD, Code Lutin, Ultreia.io * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as @@ -26,10 +26,13 @@ import fr.ird.observe.client.ui.content.data.seine.RoutesUI; import fr.ird.observe.client.ui.tree.navigation.nodes.ClassNavigationTreeNode; import fr.ird.observe.client.ui.tree.navigation.nodes.WithChildsToReload; import fr.ird.observe.dto.IdHelper; -import fr.ird.observe.dto.reference.DataDtoReferenceSet; import fr.ird.observe.dto.data.seine.RouteDto; import fr.ird.observe.dto.data.seine.RouteReference; +import fr.ird.observe.dto.reference.DataDtoReferenceSet; +import org.apache.commons.collections4.EnumerationUtils; +import org.jetbrains.annotations.NotNull; +import java.util.Iterator; import static org.nuiton.i18n.I18n.t; @@ -39,7 +42,7 @@ import static org.nuiton.i18n.I18n.t; * @author Tony Chemit - dev@tchemit.fr * @since 6.0 */ -public class RoutesSeineNavigationTreeNode extends ClassNavigationTreeNode<RouteDto> implements WithChildsToReload { +public class RoutesSeineNavigationTreeNode extends ClassNavigationTreeNode<RouteDto> implements WithChildsToReload,Iterable<RouteSeineNavigationTreeNode> { RoutesSeineNavigationTreeNode() { super(RouteDto.class, true, t("observe.ui.tree.seine.routes")); @@ -67,4 +70,12 @@ public class RoutesSeineNavigationTreeNode extends ClassNavigationTreeNode<Route add(new RouteSeineNavigationTreeNode(reference)); } } + + + @SuppressWarnings("unchecked") + @NotNull + @Override + public Iterator<RouteSeineNavigationTreeNode> iterator() { + return EnumerationUtils.toList(children()).iterator(); + } } ===================================== services-client/src/main/java/fr/ird/observe/services/client/ObserveServiceFactoryClient.java ===================================== --- a/services-client/src/main/java/fr/ird/observe/services/client/ObserveServiceFactoryClient.java +++ b/services-client/src/main/java/fr/ird/observe/services/client/ObserveServiceFactoryClient.java @@ -4,7 +4,7 @@ package fr.ird.observe.services.client; * #%L * ObServe :: Services client implementation * %% - * Copyright (C) 2008 - 2017 IRD, Code Lutin, Ultreia.io + * Copyright (C) 2008 - 2018 IRD, Code Lutin, Ultreia.io * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as @@ -36,9 +36,11 @@ import fr.ird.observe.services.gson.ObserveDataSourceConnectionAdapter; import fr.ird.observe.services.gson.ObserveDtoGsonSupplier; import fr.ird.observe.services.service.ObserveService; import io.ultreia.java4all.http.HResponseBuilder; -import java.io.IOException; -import java.util.Objects; import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.util.Objects; /** * Created on 16/08/15. @@ -47,8 +49,10 @@ import org.apache.commons.lang3.StringUtils; */ public class ObserveServiceFactoryClient extends ObserveServiceFactorySupport implements ObserveDataSourceConfigurationRestConstants { + private static final Log log = LogFactory.getLog(ObserveServiceFactoryClient.class); + private final static ClassMappingClient CLASS_MAPPING = ClassMappingClient.get(); + private final static int LOCATE_PREFIX_LENGTH = ObserveServiceClientSupport.class.getPackage().getName().length(); private final ObserveRequestBuilderFactory requestBuilderFactory = new ObserveRequestBuilderFactory(); - private final HResponseBuilder responseBuilder = HResponseBuilder.create(new ObserveDtoGsonSupplier() { @Override @@ -60,9 +64,6 @@ public class ObserveServiceFactoryClient extends ObserveServiceFactorySupport im } }); - private final static ClassMappingClient CLASS_MAPPING = ClassMappingClient.get(); - - private final static int LOCATE_PREFIX_LENGTH = ObserveServiceClientSupport.class.getPackage().getName().length(); @Override public <S extends ObserveService> boolean accept(ObserveDataSourceConfiguration dataSourceConfiguration, Class<S> serviceType) { @@ -130,8 +131,12 @@ public class ObserveServiceFactoryClient extends ObserveServiceFactorySupport im } @Override - public void close() throws IOException { - responseBuilder.close(); + public void close() { + try { + responseBuilder.close(); + } catch (Exception e) { + log.error("Can't close response builder", e); + } } } View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/27bcb0df8d6b9e8bb4e938a1a797... --- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/27bcb0df8d6b9e8bb4e938a1a797... You're receiving this email because of your account on gitlab.com.
participants (1)
-
Tony CHEMIT