Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: 5fe8bfcc by tchemit at 2018-11-19T12:10:36Z [LL] Echantillons : Petits ajustements (ne plus ajouter automatiquement un echantillon sur la creation d'une activité) - Closes #1132 - - - - - 360a4e41 by tchemit at 2018-11-19T12:10:38Z Fix some validators - - - - - 26 changed files: - client-core/src/main/i18n/getters/java.getter - client-core/src/main/java/fr/ird/observe/client/ui/ObserveKeyStrokes.java - client-core/src/main/java/fr/ird/observe/client/ui/actions/content/api/data/edit/SaveEditDataUIActionSupport.java - + client-core/src/main/java/fr/ird/observe/client/ui/actions/content/data/longline/add/AddActivityLonglineLogbookSampleUIAction.java - + client-core/src/main/java/fr/ird/observe/client/ui/actions/content/data/longline/delete/DeleteSampleLonglineLogbookUIAction.java - client-core/src/main/java/fr/ird/observe/client/ui/actions/content/data/longline/save/SaveActivityLonglineLogbookSampleUIAction.java - client-core/src/main/java/fr/ird/observe/client/ui/content/data/longline/logbook/ActivityLonglineLogbookSampleUI.jaxx - client-core/src/main/java/fr/ird/observe/client/ui/content/data/longline/logbook/ActivityLonglineLogbookSampleUI.jcss - client-core/src/main/java/fr/ird/observe/client/ui/content/data/longline/logbook/ActivityLonglineLogbookSampleUIHandler.java - client-core/src/main/java/fr/ird/observe/client/ui/content/data/longline/logbook/ActivityLonglineLogbookSampleUIModel.java - client-core/src/main/java/fr/ird/observe/client/ui/content/data/longline/logbook/ActivityLonglineLogbookUI.jaxx - client-core/src/main/java/fr/ird/observe/client/ui/content/data/longline/logbook/ActivityLonglineLogbookUI.jcss - client-core/src/main/java/fr/ird/observe/client/ui/content/data/longline/logbook/SamplePartLogbookUIHandler.java - client-core/src/main/java/fr/ird/observe/client/ui/content/data/longline/logbook/SamplePartLogbookUIModel.java - client-core/src/main/java/fr/ird/observe/client/ui/tree/navigation/NavigationTree.java - client-core/src/main/java/fr/ird/observe/client/ui/tree/navigation/nodes/longline/logbook/ActivityLonglineLogbookNavigationTreeNode.java - dto/src/main/java/fr/ird/observe/dto/data/longline/ActivityLonglineLogbookDto.java - observe-i18n/src/main/i18n/translations/observe_en_GB.properties - observe-i18n/src/main/i18n/translations/observe_es_ES.properties - observe-i18n/src/main/i18n/translations/observe_fr_FR.properties - server-core/src/main/filtered-resources/mapping - services-local/src/main/java/fr/ird/observe/services/local/service/data/longline/ActivityLonglineLogbookSampleServiceLocal.java - services-local/src/main/java/fr/ird/observe/services/local/service/data/longline/ActivityLonglineLogbookServiceLocal.java - services/src/main/java/fr/ird/observe/services/service/data/longline/ActivityLonglineLogbookSampleService.java - validation/src/main/resources/fr/ird/observe/dto/data/longline/SetLonglineLogbookDto-create-error-validation.xml - validation/src/main/resources/fr/ird/observe/dto/data/longline/SetLonglineLogbookDto-update-error-validation.xml Changes: ===================================== client-core/src/main/i18n/getters/java.getter ===================================== @@ -289,6 +289,8 @@ observe.common.ActivityDto.action.goToOpen.short observe.common.ActivityDto.action.goToOpen.tip observe.common.ActivityLogbookDto.action.goToOpen.short observe.common.ActivityLogbookDto.action.goToOpen.tip +observe.common.ActivityLonglineLogbookDto.action.addSample +observe.common.ActivityLonglineLogbookDto.action.addSample.tip observe.common.ActivityLonglineLogbookDto.action.addSet observe.common.ActivityLonglineLogbookDto.action.addSet.tip observe.common.ActivityLonglineLogbookDto.action.chooseRelatedObservedActivity ===================================== client-core/src/main/java/fr/ird/observe/client/ui/ObserveKeyStrokes.java ===================================== @@ -94,6 +94,7 @@ public abstract class ObserveKeyStrokes { public static final KeyStroke KEY_STROKE_GO_DOWN = KeyStroke.getKeyStroke("alt pressed D"); public static final KeyStroke KEY_STROKE_ADD_DCP = KeyStroke.getKeyStroke("ctrl pressed P"); public static final KeyStroke KEY_STROKE_ADD_SET_LONGLINE = KeyStroke.getKeyStroke("ctrl pressed L"); + public static final KeyStroke KEY_STROKE_ADD_SAMPLE_LONGLINE = KeyStroke.getKeyStroke("ctrl pressed M"); public static final KeyStroke KEY_STROKE_GO_UP = KeyStroke.getKeyStroke("alt pressed U"); public static final KeyStroke KEY_STROKE_EDIT_REFERENTIAL = KeyStroke.getKeyStroke("ctrl pressed M"); public static final KeyStroke KEY_STROKE_DETAIL_REFERENTIAL = KeyStroke.getKeyStroke("ctrl pressed D"); ===================================== client-core/src/main/java/fr/ird/observe/client/ui/actions/content/api/data/edit/SaveEditDataUIActionSupport.java ===================================== @@ -40,6 +40,7 @@ import fr.ird.observe.navigation.tree.MultipleReferenceContainerNode; import fr.ird.observe.navigation.tree.ReferenceNode; import fr.ird.observe.navigation.tree.SingleReferenceContainerNode; import fr.ird.observe.spi.DtoModelHelper; +import org.jetbrains.annotations.NotNull; import org.nuiton.jaxx.validator.swing.SwingValidatorUtil; import javax.swing.KeyStroke; @@ -93,14 +94,7 @@ public abstract class SaveEditDataUIActionSupport<D extends DataDto, R extends D ReferenceNode<D, R> node = model.getReferenceNode(tree); NavigationTreeNodeSupport parent = (NavigationTreeNodeSupport) node.getParent(); - Function<R, ReferenceNode<D, R>> nodeFactory; - if (parent instanceof SingleReferenceContainerNode) { - //noinspection unchecked - nodeFactory = ((SingleReferenceContainerNode) parent)::newSingleChildNode; - } else { - //noinspection unchecked - nodeFactory = ((MultipleReferenceContainerNode) parent)::newChildNode; - } + Function<R, ReferenceNode<D, R>> nodeFactory = getNodeFactory(parent); ReferentialLocale referentialLocale = ObserveSwingApplicationContext.get().getDecoratorService().getReferentialLocale(); @@ -132,5 +126,18 @@ public abstract class SaveEditDataUIActionSupport<D extends DataDto, R extends D // afterSave(ui, bean, node, notPersisted); } + @NotNull + protected Function<R, ReferenceNode<D, R>> getNodeFactory(NavigationTreeNodeSupport parent) { + Function<R, ReferenceNode<D, R>> nodeFactory; + if (parent instanceof SingleReferenceContainerNode) { + //noinspection unchecked + nodeFactory = ((SingleReferenceContainerNode) parent)::newSingleChildNode; + } else { + //noinspection unchecked + nodeFactory = ((MultipleReferenceContainerNode) parent)::newChildNode; + } + return nodeFactory; + } + } ===================================== client-core/src/main/java/fr/ird/observe/client/ui/actions/content/data/longline/add/AddActivityLonglineLogbookSampleUIAction.java ===================================== @@ -0,0 +1,65 @@ +package fr.ird.observe.client.ui.actions.content.data.longline.add; + +/*- + * #%L + * ObServe :: Client core + * %% + * 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 + * 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>. + * #L% + */ + +import fr.ird.observe.client.ui.ObserveKeyStrokes; +import fr.ird.observe.client.ui.ObserveMainUI; +import fr.ird.observe.client.ui.actions.content.api.AbstractContentUIAction; +import fr.ird.observe.client.ui.content.api.ContentUI; +import fr.ird.observe.client.ui.content.data.longline.logbook.ActivityLonglineLogbookUI; +import fr.ird.observe.client.ui.tree.navigation.NavigationTree; +import fr.ird.observe.client.ui.tree.navigation.nodes.longline.logbook.ActivityLonglineLogbookNavigationTreeNode; +import fr.ird.observe.client.ui.tree.navigation.nodes.longline.logbook.ActivityLonglineSampleLogbookNavigationTreeNode; +import fr.ird.observe.dto.data.longline.ActivityLonglineLogbookDto; +import fr.ird.observe.dto.data.longline.SampleLogbookDto; +import fr.ird.observe.dto.data.longline.SampleLogbookReference; + +import static fr.ird.observe.client.ui.content.api.ContentUIHandler.getNavigationTree; +import static io.ultreia.java4all.i18n.I18n.t; + +/** + * Created by tchemit on 19/11/2018. + * + * @author Tony Chemit - dev@tchemit.fr + */ +public class AddActivityLonglineLogbookSampleUIAction extends AbstractContentUIAction { + + public static final String ACTION_NAME = AddActivityLonglineLogbookSampleUIAction.class.getName(); + + public AddActivityLonglineLogbookSampleUIAction(ObserveMainUI mainUI) { + super(mainUI, ACTION_NAME, t("observe.common.ActivityLonglineLogbookDto.action.addSample"), t("observe.common.ActivityLonglineLogbookDto.action.addSample.tip"), "add", ObserveKeyStrokes.KEY_STROKE_ADD_SAMPLE_LONGLINE); + } + + @Override + protected void actionPerformed(ContentUI contentUI) { + NavigationTree tree = getNavigationTree(); + ActivityLonglineLogbookNavigationTreeNode parentNode = (ActivityLonglineLogbookNavigationTreeNode) tree.getSelectedNode(); + ActivityLonglineLogbookUI ui = (ActivityLonglineLogbookUI) contentUI; + ActivityLonglineLogbookDto bean = ui.getBean(); + ActivityLonglineSampleLogbookNavigationTreeNode childNode = parentNode.newSampleChildNode(new SampleLogbookReference(new SampleLogbookDto(), + bean.getTimeStamp(), + bean.getLatitude(), + bean.getLongitude())); + tree.addUnsavedNode(parentNode, childNode); + } +} ===================================== client-core/src/main/java/fr/ird/observe/client/ui/actions/content/data/longline/delete/DeleteSampleLonglineLogbookUIAction.java ===================================== @@ -0,0 +1,32 @@ +package fr.ird.observe.client.ui.actions.content.data.longline.delete; + +import fr.ird.observe.client.ui.ObserveMainUI; +import fr.ird.observe.client.ui.actions.content.api.data.edit.DeleteEditDataUIActionSupport; +import fr.ird.observe.client.ui.content.data.longline.logbook.ActivityLonglineLogbookSampleUI; +import fr.ird.observe.dto.data.longline.SampleLogbookDto; +import fr.ird.observe.dto.data.longline.SampleLogbookReference; +import fr.ird.observe.navigation.model.edit.ObserveEditNode; + +import static fr.ird.observe.client.ui.ObserveKeyStrokes.KEY_STROKE_DELETE_DATA_GLOBAL; +import static io.ultreia.java4all.i18n.I18n.n; + +/** + * Created by tchemit on 19/11/2018. + * + * @author Tony Chemit - dev@tchemit.fr + */ +public class DeleteSampleLonglineLogbookUIAction extends DeleteEditDataUIActionSupport<SampleLogbookDto, SampleLogbookReference, ActivityLonglineLogbookSampleUI> { + + public static final String ACTION_NAME = DeleteSampleLonglineLogbookUIAction.class.getName(); + + public DeleteSampleLonglineLogbookUIAction(ObserveMainUI mainUI) { + super(mainUI, ACTION_NAME, n("observe.action.delete.tip"), KEY_STROKE_DELETE_DATA_GLOBAL); + } + + @Override + protected void doDelete(ActivityLonglineLogbookSampleUI ui, SampleLogbookDto bean, ObserveEditNode<?> parentEditNode) { + String parentId = parentEditNode.getId(); + getServicesProvider().getActivityLonglineLogbookSampleService().delete(parentId, bean.getId()); + } + +} ===================================== client-core/src/main/java/fr/ird/observe/client/ui/actions/content/data/longline/save/SaveActivityLonglineLogbookSampleUIAction.java ===================================== @@ -24,18 +24,25 @@ package fr.ird.observe.client.ui.actions.content.data.longline.save; import fr.ird.observe.client.ui.ObserveKeyStrokes; import fr.ird.observe.client.ui.ObserveMainUI; -import fr.ird.observe.client.ui.actions.content.api.data.simple.SaveSimpleDataUIActionSupport; +import fr.ird.observe.client.ui.actions.content.api.data.edit.SaveEditDataUIActionSupport; import fr.ird.observe.client.ui.content.data.longline.logbook.ActivityLonglineLogbookSampleUI; +import fr.ird.observe.client.ui.tree.navigation.nodes.NavigationTreeNodeSupport; +import fr.ird.observe.client.ui.tree.navigation.nodes.longline.logbook.ActivityLonglineLogbookNavigationTreeNode; import fr.ird.observe.dto.data.longline.SampleLogbookDto; +import fr.ird.observe.dto.data.longline.SampleLogbookReference; import fr.ird.observe.dto.result.SaveResultDto; import fr.ird.observe.navigation.model.edit.ObserveEditNode; +import fr.ird.observe.navigation.tree.ReferenceNode; +import org.jetbrains.annotations.NotNull; + +import java.util.function.Function; /** * Created by tchemit on 28/09/2018. * * @author Tony Chemit - dev@tchemit.fr */ -public class SaveActivityLonglineLogbookSampleUIAction extends SaveSimpleDataUIActionSupport<SampleLogbookDto, ActivityLonglineLogbookSampleUI> { +public class SaveActivityLonglineLogbookSampleUIAction extends SaveEditDataUIActionSupport<SampleLogbookDto, SampleLogbookReference, ActivityLonglineLogbookSampleUI> { public static final String ACTION_NAME = SaveActivityLonglineLogbookSampleUIAction.class.getName(); @@ -44,16 +51,16 @@ public class SaveActivityLonglineLogbookSampleUIAction extends SaveSimpleDataUIA } @Override - protected boolean doSave(ActivityLonglineLogbookSampleUI ui, SampleLogbookDto bean, ObserveEditNode<?> parentEditNode) { + protected boolean doSave(ActivityLonglineLogbookSampleUI ui, SampleLogbookDto bean, ObserveEditNode<?> parentEditNode, boolean notPersisted) { bean.setSamplePartLogbook(ui.getSamplePartLogbookModel().getBean().getSamplePartLogbook()); - SaveResultDto saveResult = getServicesProvider().getActivityLonglineLogbookSampleService().save(bean); + String parentId = parentEditNode.getId(); + SaveResultDto saveResult = getServicesProvider().getActivityLonglineLogbookSampleService().save(parentId, bean); saveResult.toDto(bean); return true; } @Override - protected void afterSave(ActivityLonglineLogbookSampleUI ui, SampleLogbookDto bean) { - super.afterSave(ui, bean); - ui.getSamplePartLogbookUI().resetEdit(); + protected @NotNull Function<SampleLogbookReference, ReferenceNode<SampleLogbookDto, SampleLogbookReference>> getNodeFactory(NavigationTreeNodeSupport parent) { + return ((ActivityLonglineLogbookNavigationTreeNode)parent)::newSampleChildNode; } } ===================================== client-core/src/main/java/fr/ird/observe/client/ui/content/data/longline/logbook/ActivityLonglineLogbookSampleUI.jaxx ===================================== @@ -18,16 +18,18 @@ #L% --> -<fr.ird.observe.client.ui.content.api.data.simple.ContentSimpleUI +<fr.ird.observe.client.ui.content.api.data.edit.ContentEditUI i18n="fr.ird.observe.dto.data.longline.SampleLogbookDto" - superGenericType='SampleLogbookDto, ActivityLonglineLogbookSampleUI' + superGenericType='SampleLogbookDto, SampleLogbookReference, ActivityLonglineLogbookSampleUI' contentTitle='{n("observe.common.SampleLogbookDto.title")}'> <style source="../../../Common.jcss"/> <import> fr.ird.observe.dto.data.longline.SampleLogbookDto + fr.ird.observe.dto.data.longline.SampleLogbookReference + fr.ird.observe.client.ui.actions.content.data.longline.delete.DeleteSampleLonglineLogbookUIAction fr.ird.observe.client.ui.actions.content.data.longline.move.MoveSingleActivityLonglineSampleLogbookUIAction fr.ird.observe.client.ui.actions.content.data.longline.save.SaveActivityLonglineLogbookSampleUIAction fr.ird.observe.client.ui.util.JComment @@ -67,7 +69,8 @@ <JButton id='reset'/> <JButton id='save'/> - <Table id="actions" fill='both' weightx='1' insets='0'> + <JButton id='delete'/> + <Table id="extraActions" fill='both' weightx='1' insets='0'> <row> <cell weightx="0.5" fill="both"> <JButton id='move'/> @@ -77,4 +80,4 @@ <Object id="delegateContentUI" initializer="samplePartLogbookPanel"/> <SamplePartLogbookUIModel id="samplePartLogbookModel" initializer="samplePartLogbookUI.getModel()" styleClass="contentTableStandalone"/> -</fr.ird.observe.client.ui.content.api.data.simple.ContentSimpleUI> +</fr.ird.observe.client.ui.content.api.data.edit.ContentEditUI> ===================================== client-core/src/main/java/fr/ird/observe/client/ui/content/data/longline/logbook/ActivityLonglineLogbookSampleUI.jcss ===================================== @@ -29,6 +29,15 @@ _observeAction:{SaveActivityLonglineLogbookSampleUIAction.ACTION_NAME}; } + +#delete { + _observeAction:{DeleteSampleLonglineLogbookUIAction.ACTION_NAME}; +} + +#extraActions { + visible:{!model.isReadingMode()}; +} + #comment { title:"observe.common.TripLonglineSampleLogbookDto.comment"; } ===================================== client-core/src/main/java/fr/ird/observe/client/ui/content/data/longline/logbook/ActivityLonglineLogbookSampleUIHandler.java ===================================== @@ -10,12 +10,12 @@ package fr.ird.observe.client.ui.content.data.longline.logbook; * 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>. @@ -24,9 +24,10 @@ package fr.ird.observe.client.ui.content.data.longline.logbook; import fr.ird.observe.client.ObserveSwingApplicationContext; import fr.ird.observe.client.ui.content.api.ContentMode; -import fr.ird.observe.client.ui.content.api.data.simple.ContentSimpleUIHandler; +import fr.ird.observe.client.ui.content.api.data.edit.ContentEditUIHandler; import fr.ird.observe.client.ui.content.api.ui.ObserveLayoutFocusTraversalPolicy; import fr.ird.observe.dto.data.longline.SampleLogbookDto; +import fr.ird.observe.dto.data.longline.SampleLogbookReference; import fr.ird.observe.dto.form.Form; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -34,8 +35,6 @@ import org.nuiton.jaxx.runtime.spi.UIHandler; import java.awt.Component; import java.awt.Container; -import java.awt.GridBagConstraints; -import java.awt.Insets; /** * Created on 12/5/14. @@ -43,7 +42,7 @@ import java.awt.Insets; * @author Tony Chemit - dev@tchemit.fr * @since 3.8 */ -public class ActivityLonglineLogbookSampleUIHandler extends ContentSimpleUIHandler<SampleLogbookDto, ActivityLonglineLogbookSampleUI> implements UIHandler<ActivityLonglineLogbookSampleUI> { +public class ActivityLonglineLogbookSampleUIHandler extends ContentEditUIHandler<SampleLogbookDto, SampleLogbookReference, ActivityLonglineLogbookSampleUI> implements UIHandler<ActivityLonglineLogbookSampleUI> { private static final Logger log = LogManager.getLogger(ActivityLonglineLogbookSampleUIHandler.class); @@ -64,9 +63,6 @@ public class ActivityLonglineLogbookSampleUIHandler extends ContentSimpleUIHandl ObserveSwingApplicationContext.get().getMainUI().removeContextValue(Boolean.class, "fromActivity"); initTabUI(ui.getSamplePartLogbookUI(), ui.getSamplePartLogbookPanel()); ui.getSamplePartLogbookUI().getSelectToolbar().setVisible(true); - ui.getActions().add(ui.getReset(), new GridBagConstraints(0, 0, 1, 1, 0.5, 0.0, 10, 1, new Insets(0, 0, 0, 0), 0, 0)); - ui.getActions().add(ui.getSave(), new GridBagConstraints(1, 0, 1, 1, 0.5, 0.0, 10, 1, new Insets(0, 0, 0, 0), 0, 0)); - ui.getActions().add(ui.getMove(), new GridBagConstraints(2, 0, 1, 1, 0.5, 0.0, 10, 1, new Insets(0, 0, 0, 0), 0, 0)); } @Override @@ -90,9 +86,18 @@ public class ActivityLonglineLogbookSampleUIHandler extends ContentSimpleUIHandl public void onOpenModel() { super.onOpenModel(); ActivityLonglineLogbookSampleUIModel model = getModel(); - String activityId = model.getSelectedId(); + String sampleId = model.getSelectedId(); + String activityId = model.getSelectedParentId(); log.info(prefix + "activityId = " + activityId); - Form<SampleLogbookDto> form = getActivityLonglineLogbookSampleService().loadForm(activityId); + log.info(prefix + "sampleId = " + sampleId); + boolean create = sampleId == null; + + Form<SampleLogbookDto> form; + if (create) { + form = getActivityLonglineLogbookSampleService().preCreate(activityId); + } else { + form = getActivityLonglineLogbookSampleService().loadForm(activityId); + } model.openForm(form); onOpenTabUIModel(ui.getSamplePartLogbookUI(), form); } ===================================== client-core/src/main/java/fr/ird/observe/client/ui/content/data/longline/logbook/ActivityLonglineLogbookSampleUIModel.java ===================================== @@ -10,12 +10,12 @@ package fr.ird.observe.client.ui.content.data.longline.logbook; * 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>. @@ -24,8 +24,10 @@ package fr.ird.observe.client.ui.content.data.longline.logbook; import fr.ird.observe.client.ObserveSwingApplicationContext; import fr.ird.observe.client.ui.content.api.ContentMode; -import fr.ird.observe.client.ui.content.api.data.simple.ContentSimpleUIModel; +import fr.ird.observe.client.ui.content.api.data.edit.ContentEditUIModel; import fr.ird.observe.dto.data.longline.SampleLogbookDto; +import fr.ird.observe.dto.data.longline.SampleLogbookReference; +import fr.ird.observe.navigation.model.edit.ObserveEditNode; import fr.ird.observe.navigation.model.select.ObserveSelectNode; /** @@ -33,7 +35,7 @@ import fr.ird.observe.navigation.model.select.ObserveSelectNode; * * @author Tony Chemit - dev@tchemit.fr */ -public class ActivityLonglineLogbookSampleUIModel extends ContentSimpleUIModel<SampleLogbookDto> { +public class ActivityLonglineLogbookSampleUIModel extends ContentEditUIModel<SampleLogbookDto, SampleLogbookReference> { private static final long serialVersionUID = 1L; @@ -43,12 +45,16 @@ public class ActivityLonglineLogbookSampleUIModel extends ContentSimpleUIModel<S @Override protected ContentMode computeMode(boolean canWrite) { - return canWrite ? getContentModeFromSelf() : ContentMode.READ; + return canWrite ? getContentModeFromParent() : ContentMode.READ; } @Override protected ObserveSelectNode<?> computeSelectNode() { - return ObserveSwingApplicationContext.get().getNavigationSelect().getLongline().getActivityLogbook(); + return ObserveSwingApplicationContext.get().getNavigationSelect().getLongline().getActivityLogbookSample(); + } + + protected ObserveEditNode<?> computeEditNode() { + return ObserveSwingApplicationContext.get().getNavigationEdit().getLongline().getActivityLogbook(); } } ===================================== client-core/src/main/java/fr/ird/observe/client/ui/content/data/longline/logbook/ActivityLonglineLogbookUI.jaxx ===================================== @@ -38,6 +38,7 @@ fr.ird.observe.dto.referential.DataQualityReference fr.ird.observe.client.ui.actions.content.data.longline.add.AddActivityLonglineLogbookSetUIAction + fr.ird.observe.client.ui.actions.content.data.longline.add.AddActivityLonglineLogbookSampleUIAction fr.ird.observe.client.ui.actions.content.data.longline.delete.DeleteActivityLonglineLogbookUIAction fr.ird.observe.client.ui.actions.content.data.longline.move.MoveSingleActivityLonglineLogbookUIAction fr.ird.observe.client.ui.actions.content.data.longline.save.SaveActivityLonglineLogbookUIAction @@ -221,6 +222,9 @@ <cell weightx="0.5" fill="both"> <JButton id='addSet'/> </cell> + <cell weightx="0.5" fill="both"> + <JButton id='addSample'/> + </cell> </row> </Table> ===================================== client-core/src/main/java/fr/ird/observe/client/ui/content/data/longline/logbook/ActivityLonglineLogbookUI.jcss ===================================== @@ -118,6 +118,11 @@ _observeAction:{AddActivityLonglineLogbookSetUIAction.ACTION_NAME}; } +#addSample { + enabled:{!model.isModified() && model.isValid() && !bean.isHasSample()}; + _observeAction:{AddActivityLonglineLogbookSampleUIAction.ACTION_NAME}; +} + #chooseRelatedObservedActivity { visible:{!model.isReadingMode()}; enabled:{model.isValid()}; ===================================== client-core/src/main/java/fr/ird/observe/client/ui/content/data/longline/logbook/SamplePartLogbookUIHandler.java ===================================== @@ -76,9 +76,9 @@ public class SamplePartLogbookUIHandler extends NotStandaloneContentTableUIHandl boolean fromActivity = ui.getContextValue(Boolean.class, "fromActivity") != null; if (fromActivity) { ui.removeContextValue(Boolean.class, "fromActivity"); - ui.setContextValue(new SamplePartLogbookUIModel(ui, ObserveSwingApplicationContext.get().getNavigationSelect().getLongline().getActivityLogbook())); + ui.setContextValue(new SamplePartLogbookUIModel(ui, getDataSource(),ObserveSwingApplicationContext.get().getNavigationSelect().getLongline().getActivityLogbook())); } else { - ui.setContextValue(new SamplePartLogbookUIModel(ui, ObserveSwingApplicationContext.get().getNavigationSelect().getLongline().getTripSampleLogbook())); + ui.setContextValue(new SamplePartLogbookUIModel(ui, getDataSource(),ObserveSwingApplicationContext.get().getNavigationSelect().getLongline().getTripSampleLogbook())); } } ===================================== client-core/src/main/java/fr/ird/observe/client/ui/content/data/longline/logbook/SamplePartLogbookUIModel.java ===================================== @@ -22,6 +22,7 @@ package fr.ird.observe.client.ui.content.data.longline.logbook; * #L% */ +import fr.ird.observe.client.db.ObserveSwingDataSource; import fr.ird.observe.client.ui.content.api.data.table.ContentTableMeta; import fr.ird.observe.client.ui.content.api.data.table.ContentTableModel; import fr.ird.observe.client.ui.content.api.data.table.ContentTableUI; @@ -29,7 +30,6 @@ import fr.ird.observe.client.ui.content.api.data.table.ContentTableUIModel; import fr.ird.observe.client.validation.ClientValidationContext; import fr.ird.observe.dto.data.longline.SampleLogbookDto; import fr.ird.observe.dto.data.longline.SamplePartLogbookDto; -import fr.ird.observe.dto.data.longline.SamplePartLogbookHelper; import fr.ird.observe.dto.referential.LengthMeasureMethodReference; import fr.ird.observe.dto.referential.SexReference; import fr.ird.observe.dto.referential.SizeMeasureTypeReference; @@ -63,7 +63,7 @@ public class SamplePartLogbookUIModel extends ContentTableUIModel<SampleLogbookD private LengthMeasureMethodReference defaultLengthMeasureMethod; private WeightMeasureMethodReference defaultWeightMeasureMethod; - public SamplePartLogbookUIModel(SamplePartLogbookUI ui, ObserveSelectNode<?> selectNode) { + public SamplePartLogbookUIModel(SamplePartLogbookUI ui, ObserveSwingDataSource dataSource, ObserveSelectNode<?> selectNode) { super(SampleLogbookDto.class, SamplePartLogbookDto.class, selectNode, @@ -93,15 +93,11 @@ public class SamplePartLogbookUIModel extends ContentTableUIModel<SampleLogbookD ContentTableModel.newTableMeta(SamplePartLogbookDto.class, SamplePartLogbookDto.PROPERTY_SEX, false)); initModel(ui, metas); - setAddMessageOnOpen(false); - } - @Override - public void initModel(ContentTableUI<SampleLogbookDto, SamplePartLogbookDto, ?> ui, List<ContentTableMeta<SamplePartLogbookDto>> contentTableMetas) { - super.initModel(ui, contentTableMetas); - defaultSex = ui.getDataSource().getReferentialReferenceSet(SexReference.class).tryGetReferenceById(SAMPLE_PART_LOGBOOK_DEFAULT_SEX_ID).orElseThrow(IllegalStateException::new); - defaultLengthMeasureMethod = ui.getDataSource().getReferentialReferenceSet(LengthMeasureMethodReference.class).tryGetReferenceById(SAMPLE_PART_LOGBOOK_DEFAULT_LENGTH_MEASURE_METHOD_ID).orElseThrow(IllegalStateException::new); - defaultWeightMeasureMethod = ui.getDataSource().getReferentialReferenceSet(WeightMeasureMethodReference.class).tryGetReferenceById(SAMPLE_PART_LOGBOOK_DEFAULT_WEIGHT_MEASURE_METHOD_ID).orElseThrow(IllegalStateException::new); + defaultSex = dataSource.getReferentialReferenceSet(SexReference.class).tryGetReferenceById(SAMPLE_PART_LOGBOOK_DEFAULT_SEX_ID).orElseThrow(IllegalStateException::new); + defaultLengthMeasureMethod = dataSource.getReferentialReferenceSet(LengthMeasureMethodReference.class).tryGetReferenceById(SAMPLE_PART_LOGBOOK_DEFAULT_LENGTH_MEASURE_METHOD_ID).orElseThrow(IllegalStateException::new); + defaultWeightMeasureMethod = dataSource.getReferentialReferenceSet(WeightMeasureMethodReference.class).tryGetReferenceById(SAMPLE_PART_LOGBOOK_DEFAULT_WEIGHT_MEASURE_METHOD_ID).orElseThrow(IllegalStateException::new); + setAddMessageOnOpen(false); } @Override @@ -143,7 +139,7 @@ public class SamplePartLogbookUIModel extends ContentTableUIModel<SampleLogbookD @Override protected void load(SamplePartLogbookDto source, SamplePartLogbookDto target) { - SamplePartLogbookHelper.copySamplePartLogbookDto(source, target); + source.copy(target); } @Override ===================================== client-core/src/main/java/fr/ird/observe/client/ui/tree/navigation/NavigationTree.java ===================================== @@ -333,6 +333,11 @@ public class NavigationTree extends JXTree { afterAddUnsavedNode(parentNode, result); } + public void addUnsavedNode(MutableTreeNode parentNode, ReferenceNode<?,?> result) { + insertNode(parentNode, result, parentNode.getChildCount()); + afterAddUnsavedNode(parentNode, result); + } + private void afterAddUnsavedNode(MutableTreeNode parentNode, ReferenceNode result) { // refresh parent node (render of parent can have changed) ===================================== client-core/src/main/java/fr/ird/observe/client/ui/tree/navigation/nodes/longline/logbook/ActivityLonglineLogbookNavigationTreeNode.java ===================================== @@ -94,6 +94,10 @@ public class ActivityLonglineLogbookNavigationTreeNode extends ReferenceNavigati return SetLonglineLogbookReference.class; } + public ActivityLonglineSampleLogbookNavigationTreeNode newSampleChildNode(SampleLogbookReference childrenReference) { + return new ActivityLonglineSampleLogbookNavigationTreeNode(childrenReference); + } + @Override public SetLonglineLogbookNavigationTreeNode newSingleChildNode(SetLonglineLogbookReference childrenReference) { return new SetLonglineLogbookNavigationTreeNode(childrenReference); ===================================== dto/src/main/java/fr/ird/observe/dto/data/longline/ActivityLonglineLogbookDto.java ===================================== @@ -10,12 +10,12 @@ package fr.ird.observe.dto.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>. @@ -74,4 +74,9 @@ public class ActivityLonglineLogbookDto extends GeneratedActivityLonglineLogbook public String getVesselActivityLonglineId() { return vesselActivityLongline == null ? null : vesselActivityLongline.getId(); } + + public boolean isHasSample() { + return sample != null; + } + } ===================================== observe-i18n/src/main/i18n/translations/observe_en_GB.properties ===================================== @@ -389,6 +389,8 @@ observe.common.ActivityLonglineDto.message.not.open=Activity is not opened, no e observe.common.ActivityLonglineDto.message.updating=Updating an activity observe.common.ActivityLonglineDto.timeStamp=timestamp observe.common.ActivityLonglineDto.titles=Activities +observe.common.ActivityLonglineLogbookDto.action.addSample=Add sample +observe.common.ActivityLonglineLogbookDto.action.addSample.tip=Add sample associated with this activity observe.common.ActivityLonglineLogbookDto.action.addSet=Add the fishing operation observe.common.ActivityLonglineLogbookDto.action.addSet.tip=Add the fishing operation associated with this activity observe.common.ActivityLonglineLogbookDto.action.chooseRelatedObservedActivity=Choose activity ===================================== observe-i18n/src/main/i18n/translations/observe_es_ES.properties ===================================== @@ -389,6 +389,8 @@ observe.common.ActivityLonglineDto.message.not.open=La actividad no está abiert observe.common.ActivityLonglineDto.message.updating=Se está modificando la actividad actual. observe.common.ActivityLonglineDto.timeStamp=FechaHora observe.common.ActivityLonglineDto.titles=Actividades +observe.common.ActivityLonglineLogbookDto.action.addSample=Add sample \#TODO +observe.common.ActivityLonglineLogbookDto.action.addSample.tip=Add sample associated with this activity \#TODO observe.common.ActivityLonglineLogbookDto.action.addSet=Añadir la operación de pesca observe.common.ActivityLonglineLogbookDto.action.addSet.tip=Añadir la operación de pesca asociada a esta actividad observe.common.ActivityLonglineLogbookDto.action.chooseRelatedObservedActivity=Choose activity \#TODO ===================================== observe-i18n/src/main/i18n/translations/observe_fr_FR.properties ===================================== @@ -389,6 +389,8 @@ observe.common.ActivityLonglineDto.message.not.open=L'opération de pêche n'est observe.common.ActivityLonglineDto.message.updating=L'activité est en cours de modification. observe.common.ActivityLonglineDto.timeStamp=Horodatage observe.common.ActivityLonglineDto.titles=Activités +observe.common.ActivityLonglineLogbookDto.action.addSample=Ajouter l'échantillon +observe.common.ActivityLonglineLogbookDto.action.addSample.tip=Ajouter l'échantillon associé à cette activité observe.common.ActivityLonglineLogbookDto.action.addSet=Ajouter l'opération de pêche observe.common.ActivityLonglineLogbookDto.action.addSet.tip=Ajouter l'opération de pêche associée à cette activité observe.common.ActivityLonglineLogbookDto.action.chooseRelatedObservedActivity=Choisir l'activité ===================================== server-core/src/main/filtered-resources/mapping ===================================== @@ -95,9 +95,11 @@ POST /api/v1/data/longline/ActivityLongLineObsEncounterService/save GET /api/v1/data/longline/ActivityLongLineObsSensorUsedService/getDataFile v1.data.longline.ActivityLongLineObsSensorUsedServiceRestApi.getDataFile GET /api/v1/data/longline/ActivityLongLineObsSensorUsedService/loadForm v1.data.longline.ActivityLongLineObsSensorUsedServiceRestApi.loadForm POST /api/v1/data/longline/ActivityLongLineObsSensorUsedService/save v1.data.longline.ActivityLongLineObsSensorUsedServiceRestApi.save +DELETE /api/v1/data/longline/ActivityLonglineLogbookSampleService/delete v1.data.longline.ActivityLonglineLogbookSampleServiceRestApi.delete GET /api/v1/data/longline/ActivityLonglineLogbookSampleService/loadForm v1.data.longline.ActivityLonglineLogbookSampleServiceRestApi.loadForm POST /api/v1/data/longline/ActivityLonglineLogbookSampleService/moveToActivityLongline v1.data.longline.ActivityLonglineLogbookSampleServiceRestApi.moveToActivityLongline POST /api/v1/data/longline/ActivityLonglineLogbookSampleService/moveToTripLongline v1.data.longline.ActivityLonglineLogbookSampleServiceRestApi.moveToTripLongline +GET /api/v1/data/longline/ActivityLonglineLogbookSampleService/preCreate v1.data.longline.ActivityLonglineLogbookSampleServiceRestApi.preCreate POST /api/v1/data/longline/ActivityLonglineLogbookSampleService/save v1.data.longline.ActivityLonglineLogbookSampleServiceRestApi.save DELETE /api/v1/data/longline/ActivityLonglineLogbookService/delete v1.data.longline.ActivityLonglineLogbookServiceRestApi.delete GET /api/v1/data/longline/ActivityLonglineLogbookService/exists v1.data.longline.ActivityLonglineLogbookServiceRestApi.exists ===================================== services-local/src/main/java/fr/ird/observe/services/local/service/data/longline/ActivityLonglineLogbookSampleServiceLocal.java ===================================== @@ -10,12 +10,12 @@ package fr.ird.observe.services.local.service.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>. @@ -45,13 +45,35 @@ public class ActivityLonglineLogbookSampleServiceLocal extends ObserveServiceLoc } @Override - public SaveResultDto save(SampleLogbookDto dto) { + public Form<SampleLogbookDto> preCreate(String activityLonglineId) { + ActivityLonglineLogbook activity = ACTIVITY_LONGLINE_LOGBOOK_SPI.loadEntity(getTopiaPersistenceContext(), activityLonglineId); + SampleLogbook preCreated = SAMPLE_LOGBOOK_SPI.newEntity(); + preCreated.setTimeStamp(activity.getTimeStamp()); + preCreated.setLatitude(activity.getLatitude()); + preCreated.setLongitude(activity.getLongitude()); + return SAMPLE_LOGBOOK_SPI.dataEntityToForm(preCreated, getReferentialLocale()); + } + + @Override + public SaveResultDto save(String activityId, SampleLogbookDto dto) { + ActivityLonglineLogbook activity = ACTIVITY_LONGLINE_LOGBOOK_SPI.loadEntity(getTopiaPersistenceContext(), activityId); SampleLogbook entity = SAMPLE_LOGBOOK_SPI.loadOrCreateEntityFromDataDto(getTopiaPersistenceContext(), dto); checkLastUpdateDate(entity, dto); SAMPLE_LOGBOOK_SPI.copyDataDtoToEntity(dto, entity, getReferentialLocale()); + if (activity.getSample() == null) { + activity.setSample(entity); + } return saveEntity(entity); } + @Override + public void delete(String activityLonglineId, String sampleLogbookId) { + ActivityLonglineLogbook activity = ACTIVITY_LONGLINE_LOGBOOK_SPI.loadEntity(getTopiaPersistenceContext(), activityLonglineId); + SAMPLE_LOGBOOK_SPI.loadEntity(getTopiaPersistenceContext(), sampleLogbookId); + activity.setSample(null); + saveEntity(activity); + } + @Override public void moveToTripLongline(String activityId, String newTripId, String sampleLogbookId) { //FIXME Manage fields to remove like associated observed activity ===================================== services-local/src/main/java/fr/ird/observe/services/local/service/data/longline/ActivityLonglineLogbookServiceLocal.java ===================================== @@ -34,7 +34,6 @@ import fr.ird.observe.dto.result.TripChildSaveResultDto; import fr.ird.observe.dto.result.TripChildSaveResultHelper; import fr.ird.observe.entities.longline.ActivityLonglineLogbook; import fr.ird.observe.entities.longline.ActivityLonglineLogbookTopiaDao; -import fr.ird.observe.entities.longline.SampleLogbook; import fr.ird.observe.entities.longline.TripLongline; import fr.ird.observe.entities.referentiel.DataQuality; import fr.ird.observe.services.local.service.ObserveServiceLocal; @@ -108,21 +107,11 @@ public class ActivityLonglineLogbookServiceLocal extends ObserveServiceLocal imp checkLastUpdateDate(entity, dto); ACTIVITY_LONGLINE_LOGBOOK_SPI.copyDataDtoToEntity(dto, entity, getReferentialLocale()); boolean notPersisted = dto.isNotPersisted(); - if (notPersisted) { - // create a unique sample - SampleLogbook preCreated = SAMPLE_LOGBOOK_SPI.newEntity(); - preCreated.setLatitude(entity.getLatitude()); - preCreated.setLongitude(entity.getLongitude()); - preCreated.setTimeStamp(entity.getTimeStamp()); - saveEntity(preCreated); - entity.setSample(preCreated); - } SaveResultDto saveResultDto = saveEntity(entity); TripChildSaveResultDto result = TripChildSaveResultHelper.of(saveResultDto); if (notPersisted) { tripLongline.addActivityLonglineLogbook(entity); - } boolean wasEndDateUpdated = TRIP_LONGLINE_SPI.getDao(getTopiaPersistenceContext()).updateEndDate(tripLongline); result.setTripEndDateUpdated(wasEndDateUpdated); ===================================== services/src/main/java/fr/ird/observe/services/service/data/longline/ActivityLonglineLogbookSampleService.java ===================================== @@ -29,6 +29,7 @@ import fr.ird.observe.services.service.ObserveService; import fr.ird.observe.services.spi.ReadDataPermission; import fr.ird.observe.services.spi.Write; import fr.ird.observe.services.spi.WriteDataPermission; +import io.ultreia.java4all.http.spi.Delete; import io.ultreia.java4all.http.spi.Get; import io.ultreia.java4all.http.spi.Post; @@ -37,6 +38,10 @@ import io.ultreia.java4all.http.spi.Post; */ public interface ActivityLonglineLogbookSampleService extends ObserveService { + @Get + @WriteDataPermission + Form<SampleLogbookDto> preCreate(String activityLonglineId); + @Get @ReadDataPermission Form<SampleLogbookDto> loadForm(String activityLonglineId); @@ -44,7 +49,12 @@ public interface ActivityLonglineLogbookSampleService extends ObserveService { @WriteDataPermission @Write @Post - SaveResultDto save(SampleLogbookDto dto); + SaveResultDto save(String activityId, SampleLogbookDto dto); + + @Write + @WriteDataPermission + @Delete + void delete(String activityLonglineId, String sampleLogbookId); @WriteDataPermission @Write ===================================== validation/src/main/resources/fr/ird/observe/dto/data/longline/SetLonglineLogbookDto-create-error-validation.xml ===================================== @@ -26,13 +26,13 @@ <field name="homeId"> <!-- homeId duplique --> - <field-validator type="setLonglineObsUniqueHomeIdDto" short-circuit="true"> + <field-validator type="setLonglineLogbookUniqueHomeIdDto" short-circuit="true"> <message>observe.validation.setLongline.duplicated.homeId##${duplicatedActivity}</message> </field-validator> </field> <field name="number"> <!-- number duplique --> - <field-validator type="setLonglineObsUniqueNumberIdDto" short-circuit="true"> + <field-validator type="setLonglineLogbookUniqueNumberIdDto" short-circuit="true"> <message>observe.validation.setLongline.duplicated.number##${duplicatedActivity}</message> </field-validator> </field> ===================================== validation/src/main/resources/fr/ird/observe/dto/data/longline/SetLonglineLogbookDto-update-error-validation.xml ===================================== @@ -26,13 +26,13 @@ <field name="homeId"> <!-- homeId duplique --> - <field-validator type="setLonglineObsUniqueHomeIdDto" short-circuit="true"> + <field-validator type="setLonglineLogbookUniqueHomeIdDto" short-circuit="true"> <message>observe.validation.setLongline.duplicated.homeId##${duplicatedActivity}</message> </field-validator> </field> <field name="number"> <!-- number duplique --> - <field-validator type="setLonglineObsUniqueNumberIdDto" short-circuit="true"> + <field-validator type="setLonglineLogbookUniqueNumberIdDto" short-circuit="true"> <message>observe.validation.setLongline.duplicated.number##${duplicatedActivity}</message> </field-validator> </field> View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/compare/ce9d7d7291118369bbcbee974d2... -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/compare/ce9d7d7291118369bbcbee974d2... You're receiving this email because of your account on gitlab.com.