Observe-commits
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
February 2021
- 1 participants
- 72 discussions
[Git][ultreiaio/ird-observe][develop] Review Move API and generate most of it. - See #1787
by Tony CHEMIT 13 Feb '21
by Tony CHEMIT 13 Feb '21
13 Feb '21
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
71da0962 by Tony Chemit at 2021-02-13T17:29:06+01:00
Review Move API and generate most of it. - See #1787
- - - - -
27 changed files:
- client/core/src/main/java/fr/ird/observe/client/ObserveActionExecutor.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/edit/actions/MoveEdit.java → client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/move/MoveAction.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/move/MoveExecutor.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/move/MoveRequest.java
- + client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/move/MoveTreeAdapter.java
- − client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/move/tree/MoveTreeAdapter.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/list/ContentListUINavigationInitializer.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/list/ContentListUINavigationNode.java
- − client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/list/actions/MoveMultiple.java
- − client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/open/actions/MoveOpenable.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/navigation/tree/NavigationNode.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/navigation/tree/capability/ReferenceContainerCapability.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/navigation/tree/root/RootNavigationNode.java
- client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/logbook/ActivitySampleUIHandler.java
- client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/logbook/SampleListUIHandler.java
- client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/logbook/SampleUIHandler.java
- client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/logbook/sample/ActivitySampleUIMoveTreeAdapter.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/move/tree/DefaultMultipleMoveTreeAdapter.java → client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/logbook/sample/ActivitySampleUIMoveTreeAdapterToTrip.java
- client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/logbook/sample/SampleUIHelper.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/move/tree/DefaultSingleMoveTreeAdapter.java → client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/logbook/sample/SampleUIMoveTreeAdapterToActivity.java
- client/datasource/editor/spi/src/main/java/fr/ird/observe/client/datasource/editor/spi/content/GenerateContentUISupport.java
- client/datasource/editor/spi/src/main/java/fr/ird/observe/client/datasource/editor/spi/content/data/list/GenerateContentListUINavigationNode.java
- client/datasource/editor/spi/src/main/java/fr/ird/observe/client/datasource/editor/spi/content/data/openable/ContentOpenableUIDescriptor.java
- + client/datasource/editor/spi/src/main/java/fr/ird/observe/client/datasource/editor/spi/content/data/openable/GenerateContentOpenableUIMoveTreeAdapter.java
- client/datasource/editor/spi/src/main/java/fr/ird/observe/client/datasource/editor/spi/content/data/openable/GenerateContentOpenableUINavigationNode.java
- client/datasource/editor/spi/src/main/java/fr/ird/observe/client/datasource/editor/spi/content/helper/ContentUIHandlerHelper.java
- client/datasource/editor/spi/src/main/java/fr/ird/observe/client/datasource/editor/spi/content/helper/ContentUINavigationContextHelper.java
Changes:
=====================================
client/core/src/main/java/fr/ird/observe/client/ObserveActionExecutor.java
=====================================
@@ -46,9 +46,9 @@ public class ObserveActionExecutor extends ActionExecutor implements Closeable {
@Override
protected void executeWorker(String actionLabel, ActionWorker<?, ?> worker) {
- log.info(String.format("Launch ObServe worker [%s] now...", actionLabel));
+ log.info(String.format("Launch ObServe worker [%s] register...", actionLabel));
executorService.execute(worker);
- log.info(String.format("Launch ObServe worker [%s] is on...", actionLabel));
+ log.info(String.format("Launch ObServe worker [%s] running....", actionLabel));
}
@Override
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/edit/actions/MoveEdit.java → client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/move/MoveAction.java
=====================================
@@ -1,4 +1,4 @@
-package fr.ird.observe.client.datasource.editor.api.content.data.edit.actions;
+package fr.ird.observe.client.datasource.editor.api.content.actions.move;
/*-
* #%L
@@ -24,14 +24,17 @@ package fr.ird.observe.client.datasource.editor.api.content.data.edit.actions;
import com.google.common.collect.ImmutableSet;
import fr.ird.observe.client.datasource.editor.api.ObserveKeyStrokesEditorApi;
+import fr.ird.observe.client.datasource.editor.api.content.ContentUI;
import fr.ird.observe.client.datasource.editor.api.content.actions.ConfigureMenuAction;
-import fr.ird.observe.client.datasource.editor.api.content.actions.move.MoveExecutor;
-import fr.ird.observe.client.datasource.editor.api.content.actions.move.MoveRequest;
-import fr.ird.observe.client.datasource.editor.api.content.actions.move.MoveRequestBuilder;
-import fr.ird.observe.client.datasource.editor.api.content.actions.move.tree.MoveTreeAdapter;
+import fr.ird.observe.client.datasource.editor.api.content.actions.ContentUIActionSupport;
import fr.ird.observe.client.datasource.editor.api.content.data.edit.ContentEditUI;
+import fr.ird.observe.client.datasource.editor.api.content.data.list.ContentListUI;
+import fr.ird.observe.client.datasource.editor.api.content.data.open.ContentOpenableUI;
import fr.ird.observe.client.datasource.editor.api.content.data.open.ContentOpenableUII18nHelper;
+import fr.ird.observe.dto.ObserveUtil;
+import fr.ird.observe.dto.data.DataDto;
import fr.ird.observe.dto.data.EditableDto;
+import fr.ird.observe.dto.data.OpenableDto;
import javax.swing.AbstractButton;
import java.awt.event.ActionEvent;
@@ -41,31 +44,101 @@ import java.util.function.Function;
import java.util.function.Supplier;
/**
- * Created on 12/10/2020.
+ * To move a data.
+ * <p>
+ * Created on 12/02/2021.
*
* @author Tony Chemit - dev(a)tchemit.fr
- * @since 8.0.1
+ * @since 8.0.6
*/
-public final class MoveEdit<D extends EditableDto, U extends ContentEditUI<D, U>> extends ContentEditUIActionSupport<D, U> implements ConfigureMenuAction<U> {
+public class MoveAction<D extends DataDto, U extends ContentUI> extends ContentUIActionSupport<U> implements ConfigureMenuAction<U> {
+ /**
+ * To execute the move action.
+ */
private final MoveExecutor executor;
- public static <D extends EditableDto, U extends ContentEditUI<D, U>> void installAction(U ui, Supplier<MoveRequestBuilder.StepBuild> requestBuilderSupplier, Function<MoveRequest, BiConsumer<String, ImmutableSet<String>>> requestConsumer, Function<MoveRequest, MoveTreeAdapter> treeAdapter) {
- MoveExecutor moveExecutor = new MoveExecutor(requestBuilderSupplier, requestConsumer, treeAdapter);
- MoveEdit<D, U> action = new MoveEdit<>(ui.getModel().getSource().getScope().getMainType(), moveExecutor);
- init(ui, (AbstractButton) Objects.requireNonNull(ui).getObjectById("move"), action);
+ public static class Builder<D extends DataDto, U extends ContentUI> implements AddOnStep<D, U>, AddSaveStep<D, U>, AddThenStep<D, U>, BuildStep<D, U> {
+
+ private final U ui;
+ private final Class<D> dtoType;
+ private Supplier<MoveRequestBuilder.StepBuild> requestBuilderSupplier;
+ private Function<MoveRequest, BiConsumer<String, ImmutableSet<String>>> requestConsumer;
+ private Function<MoveRequest, ? extends MoveTreeAdapter<?, ?, ?>> treeAdapter;
+
+ public Builder(U ui, Class<D> dtoType) {
+ this.ui = Objects.requireNonNull(ui);
+ this.dtoType = Objects.requireNonNull(dtoType);
+ }
+
+ @Override
+ public AddSaveStep<D, U> on(Supplier<MoveRequestBuilder.StepBuild> requestBuilderSupplier) {
+ this.requestBuilderSupplier = Objects.requireNonNull(requestBuilderSupplier);
+ return this;
+ }
+
+ @Override
+ public AddThenStep<D, U> move(Function<MoveRequest, BiConsumer<String, ImmutableSet<String>>> requestConsumer) {
+ this.requestConsumer = Objects.requireNonNull(requestConsumer);
+ return this;
+ }
+
+ @Override
+ public BuildStep<D, U> then(Function<U, Function<MoveRequest, ? extends MoveTreeAdapter<?, ?, ?>>> treeAdapter) {
+ this.treeAdapter = Objects.requireNonNull(treeAdapter).apply(ui);
+ return this;
+ }
+
+ @Override
+ public MoveAction<D, U> install(Supplier<? extends AbstractButton> editor) {
+ MoveExecutor moveExecutor = new MoveExecutor(requestBuilderSupplier, requestConsumer, treeAdapter);
+ MoveAction<D, U> action = new MoveAction<>(dtoType, moveExecutor);
+ init(ui, editor.get(), action);
+ return action;
+ }
}
- protected MoveEdit(Class<D> dataType, MoveExecutor executor) {
- super(dataType, null, null, "move", ObserveKeyStrokesEditorApi.KEY_STROKE_MOVE);
- this.executor = executor;
- setText(ContentOpenableUII18nHelper.getActionMove(getDataType()));
- setTooltipText(ContentOpenableUII18nHelper.getActionMove(getDataType()));
+ public static <D extends DataDto, U extends ContentUI> AddOnStep<D, U> create(U ui, Class<D> dtoType) {
+ return new Builder<>(ui, dtoType);
+ }
+
+ public static <D extends EditableDto, U extends ContentEditUI<D, U>> AddOnStep<D, U> create(U ui) {
+ return create(ui, ObserveUtil.getFirstType(ui));
+ }
+
+ public static <D extends OpenableDto, U extends ContentOpenableUI<D, U>> AddOnStep<D, U> create(U ui) {
+ return create(ui, ObserveUtil.getFirstType(ui));
+ }
+
+ public static <D extends OpenableDto, U extends ContentListUI<D, ?, U>> AddOnStep<D, U> create(U ui) {
+ return create(ui, ObserveUtil.getFirstType(ui));
+ }
+
+ protected MoveAction(Class<D> dataType, MoveExecutor executor) {
+ super(null, null, "move", ObserveKeyStrokesEditorApi.KEY_STROKE_MOVE);
+ this.executor = Objects.requireNonNull(executor);
+ setText(ContentOpenableUII18nHelper.getActionMove(dataType));
+ setTooltipText(ContentOpenableUII18nHelper.getActionMove(dataType));
}
@Override
- protected void doActionPerformed(ActionEvent e, U ui) {
+ protected final void doActionPerformed(ActionEvent e, U ui) {
executor.execute(getClientUIContext().getActionExecutor(), getDataSourceEditor(), null);
}
+ public interface AddOnStep<D extends DataDto, U extends ContentUI> {
+ AddSaveStep<D, U> on(Supplier<MoveRequestBuilder.StepBuild> requestBuilderSupplier);
+ }
+
+ public interface AddSaveStep<D extends DataDto, U extends ContentUI> {
+ AddThenStep<D, U> move(Function<MoveRequest, BiConsumer<String, ImmutableSet<String>>> requestConsumer);
+ }
+
+ public interface AddThenStep<D extends DataDto, U extends ContentUI> {
+ BuildStep<D, U> then(Function<U, Function<MoveRequest, ? extends MoveTreeAdapter<?, ?, ?>>> treeAdapter);
+ }
+
+ public interface BuildStep<D extends DataDto, U extends ContentUI> {
+ MoveAction<D, U> install(Supplier<? extends AbstractButton> editor);
+ }
}
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/move/MoveExecutor.java
=====================================
@@ -25,7 +25,6 @@ package fr.ird.observe.client.datasource.editor.api.content.actions.move;
import com.google.common.collect.ImmutableSet;
import fr.ird.observe.client.datasource.editor.api.DataSourceEditor;
import fr.ird.observe.client.datasource.editor.api.content.actions.mode.ChangeMode;
-import fr.ird.observe.client.datasource.editor.api.content.actions.move.tree.MoveTreeAdapter;
import fr.ird.observe.client.datasource.editor.api.navigation.NavigationTree;
import fr.ird.observe.toolkit.dto.navigation.edit.EditNode;
import fr.ird.observe.toolkit.dto.navigation.edit.close.CloseEditNodeVetoException;
@@ -34,6 +33,7 @@ import org.apache.logging.log4j.Logger;
import org.nuiton.jaxx.runtime.swing.application.ActionExecutor;
import javax.swing.SwingUtilities;
+import java.lang.reflect.InvocationTargetException;
import java.util.Objects;
import java.util.Optional;
import java.util.function.BiConsumer;
@@ -60,9 +60,9 @@ public class MoveExecutor {
/**
* To adapt tree.
*/
- private final Function<MoveRequest, MoveTreeAdapter> treeAdapter;
+ private final Function<MoveRequest, ? extends MoveTreeAdapter<?, ?, ?>> treeAdapter;
- public MoveExecutor(Supplier<MoveRequestBuilder.StepBuild> requestBuilderSupplier, Function<MoveRequest, BiConsumer<String, ImmutableSet<String>>> requestConsumer, Function<MoveRequest, MoveTreeAdapter> treeAdapter) {
+ public MoveExecutor(Supplier<MoveRequestBuilder.StepBuild> requestBuilderSupplier, Function<MoveRequest, BiConsumer<String, ImmutableSet<String>>> requestConsumer, Function<MoveRequest, ? extends MoveTreeAdapter<?, ?, ?>> treeAdapter) {
this.requestBuilderSupplier = Objects.requireNonNull(requestBuilderSupplier);
this.requestConsumer = Objects.requireNonNull(requestConsumer);
this.treeAdapter = Objects.requireNonNull(treeAdapter);
@@ -74,7 +74,7 @@ public class MoveExecutor {
if (optionalRequest.isPresent()) {
MoveRequest request = optionalRequest.get();
if (editNode == null || close(request, editNode, dataSourceEditor)) {
- actionExecutor.addAction("", () -> consume(request, dataSourceEditor.getNavigationUI().getTree()));
+ actionExecutor.addAction("Move " + request, () -> consume(request, dataSourceEditor.getNavigationUI().getTree()));
}
return;
}
@@ -93,12 +93,17 @@ public class MoveExecutor {
String newParentId = request.getNewParentId();
String oldParentId = request.getOldParentId();
ImmutableSet<String> referenceId = request.getIds();
- log.info(String.format("Move %s from parent: %s to %s", referenceId, oldParentId, newParentId));
+ log.info(String.format("Move adapt tree [start] %s from parent: %s to %s", referenceId, oldParentId, newParentId));
BiConsumer<String, ImmutableSet<String>> consumer = getRequestConsumer(request);
consumer.accept(newParentId, referenceId);
-
- SwingUtilities.invokeLater(() -> treeAdapter.apply(request).adaptTree(request, tree));
+ MoveTreeAdapter<?, ?, ?> moveTreeAdapter = this.treeAdapter.apply(request);
+ try {
+ SwingUtilities.invokeAndWait(() -> moveTreeAdapter.adaptTree(request, tree));
+ } catch (InterruptedException | InvocationTargetException e) {
+ log.error(e);
+ }
+ log.info(String.format("Move adapt tree [end..] %s from parent: %s to %s", referenceId, oldParentId, newParentId));
}
protected boolean close(MoveRequest request, EditNode<?> editNode, DataSourceEditor dataSourceEditor) {
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/move/MoveRequest.java
=====================================
@@ -26,6 +26,8 @@ import com.google.common.collect.ImmutableSet;
import fr.ird.observe.dto.reference.DataDtoReference;
import fr.ird.observe.dto.reference.DtoReference;
+import java.util.StringJoiner;
+
/**
* Created on 13/10/2020.
*
@@ -108,4 +110,17 @@ public class MoveRequest {
public boolean isSingle() {
return ids.size() == 1;
}
+
+ @Override
+ public String toString() {
+ return new StringJoiner(", ", MoveRequest.class.getSimpleName() + "[", "]")
+// .add("referenceType=" + referenceType)
+// .add("parentReferenceType=" + parentReferenceType)
+// .add("parentTargetReferenceType=" + parentTargetReferenceType)
+// .add("oldParentId='" + oldParentId + "'")
+ .add("ids=" + ids)
+ .add("newParentId='" + newParentId + "'")
+// .add("selectTarget=" + selectTarget)
+ .toString();
+ }
}
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/move/MoveTreeAdapter.java
=====================================
@@ -0,0 +1,119 @@
+package fr.ird.observe.client.datasource.editor.api.content.actions.move;
+
+/*-
+ * #%L
+ * ObServe Client :: DataSource :: Editor :: API
+ * %%
+ * Copyright (C) 2008 - 2021 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 com.google.common.collect.ImmutableSet;
+import fr.ird.observe.client.datasource.editor.api.navigation.NavigationTree;
+import fr.ird.observe.client.datasource.editor.api.navigation.tree.NavigationNode;
+
+import java.util.Objects;
+import java.util.Set;
+import java.util.function.Function;
+
+/**
+ * FIXME:Tree Create a template to generate implementations
+ * <p>
+ * Created on 12/02/2021.
+ *
+ * @author Tony Chemit - dev(a)tchemit.fr
+ * @since 8.0.6
+ */
+public abstract class MoveTreeAdapter<OldParent extends NavigationNode, NewParent extends NavigationNode, NewNode extends NavigationNode> {
+
+ private final NavigationNode incomingNode;
+ private final Function<NavigationNode, OldParent> oldParentSupplier;
+
+ protected MoveTreeAdapter(NavigationNode incomingNode, Function<NavigationNode, OldParent> oldParentSupplier) {
+ this.incomingNode = Objects.requireNonNull(incomingNode);
+ this.oldParentSupplier = Objects.requireNonNull(oldParentSupplier);
+ }
+
+ public abstract NewParent getNewParentNode(OldParent oldParentNode, String newParentId);
+
+ public abstract NewNode addMissingChildren(NewParent newParentNode);
+
+ public abstract void removeChildren(OldParent oldParentNode, Set<String> ids);
+
+ public final void adaptTree(MoveRequest request, NavigationTree tree) {
+ ImmutableSet<String> ids = request.getIds();
+ boolean selectTarget = request.isSelectTarget();
+ boolean multiple = !request.isSingle();
+ OldParent oldParentNode = getOldParentNode(getIncomingNode());
+ NewParent newParentNode = getNewParentNode(oldParentNode, request.getNewParentId());
+ NavigationNode nodeToSelect = adaptNewParentNode(newParentNode, ids);
+ if (!selectTarget) {
+ // stay on old parent node
+ nodeToSelect = oldParentNode;
+ } else {
+ if (multiple) {
+ // on multiple move select new parent node
+ nodeToSelect = newParentNode;
+ }
+ }
+ adaptOldParentNode(oldParentNode, ids);
+ doFinalSelect(selectTarget, tree, nodeToSelect);
+ }
+
+ public final OldParent getOldParentNode(NavigationNode incomingNode) {
+ return oldParentSupplier.apply(incomingNode);
+ }
+
+ public final void adaptOldParentNode(OldParent oldParentNode, ImmutableSet<String> ids) {
+ // reload node
+ oldParentNode.reloadNodeData();
+ // remove obsolete nodes
+ removeChildren(oldParentNode, ids);
+ }
+
+ public final NewNode adaptNewParentNode(NewParent newParentNode, ImmutableSet<String> ids) {
+ // reload node
+ newParentNode.reloadNodeData();
+ // add new nodes
+ NewNode newNode = addMissingChildren(newParentNode);
+ if (ids.size() == 1) {
+ //FIXME:Tree Make sure this is required, should be done by node
+ newNode.getParent().refreshToRoot();
+ }
+ return newNode;
+ }
+
+ public final void doFinalSelect(boolean selectTarget, NavigationTree tree, NavigationNode nodeToSelect) {
+ if (selectTarget) {
+ // select new node
+ tree.selectSafeNode(nodeToSelect);
+ } else {
+ if (nodeToSelect.getParent() == null) {
+ // limit case: node to select is old parent node and was removed
+ tree.selectFirstNode();
+ } else {
+ // re-select the node (to update associated form)
+ tree.reSelectSafeNode(nodeToSelect);
+ }
+ }
+ }
+
+ public NavigationNode getIncomingNode() {
+ return incomingNode;
+ }
+
+}
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/move/tree/MoveTreeAdapter.java deleted
=====================================
@@ -1,95 +0,0 @@
-package fr.ird.observe.client.datasource.editor.api.content.actions.move.tree;
-
-/*-
- * #%L
- * ObServe Client :: DataSource :: Editor :: API
- * %%
- * Copyright (C) 2008 - 2021 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 com.google.common.collect.ImmutableSet;
-import fr.ird.observe.client.datasource.editor.api.content.actions.move.MoveRequest;
-import fr.ird.observe.client.datasource.editor.api.content.data.list.ContentListUINavigationNode;
-import fr.ird.observe.client.datasource.editor.api.navigation.NavigationTree;
-import fr.ird.observe.client.datasource.editor.api.navigation.tree.NavigationNode;
-import fr.ird.observe.client.datasource.editor.api.navigation.tree.root.RootNavigationNode;
-import fr.ird.observe.dto.referential.common.ProgramReference;
-
-/**
- * To adapt navigation tree after the move operation.
- * <p>
- * Created on 15/10/2020.
- *
- * @author Tony Chemit - dev(a)tchemit.fr
- * @since 8.0.1
- */
-public interface MoveTreeAdapter {
-
- void adaptTree(MoveRequest request, NavigationTree tree);
-
- static void cleanOldParentNode(NavigationTree tree, ImmutableSet<String> ids, ContentListUINavigationNode oldParentNode) {
- if (oldParentNode.getChildCount() == ids.size() && oldParentNode.getParent().isRoot()) {
- RootNavigationNode root = (RootNavigationNode) oldParentNode.getParent();
- if (!root.getInitializer().getConfig().isLoadEmptyProgram()) {
- // limit case : node will be empty, must remove it
- root.remove(oldParentNode);
- return;
- }
- }
- // clean it
- oldParentNode.removeChildren(ids);
-
- // reload node
- oldParentNode.reloadNodeData();
-
- // re-select the node (to update associated form)
- tree.reSelectSafeNode(oldParentNode);
- }
-
- static ContentListUINavigationNode getNewParentNode(MoveRequest request, NavigationNode oldParentContainerNode) {
- String newParentId = request.getNewParentId();
- if (oldParentContainerNode.isRoot()) {
- RootNavigationNode root = (RootNavigationNode) oldParentContainerNode;
- boolean loadEmptyProgram = root.getInitializer().getConfig().isLoadEmptyProgram();
- if (!loadEmptyProgram) {
- NavigationNode result = root.findChildById(newParentId);
- if (result == null) {
- // limit case : node does not exist (was empty previously), need to create it
- ProgramReference reference = root.getInitializer().getNavigationResult().getProgram(newParentId);
- result = root.getCapability().createChildNode(reference);
- int position = root.getCapability().getNodePosition(reference);
- root.insert(result, position);
- }
- return (ContentListUINavigationNode) result;
- }
- }
- return (ContentListUINavigationNode) oldParentContainerNode.downToReferenceNode(request.getParentTargetReferenceType(), newParentId);
- }
-
- static void doFinalSelect(MoveRequest request, NavigationTree tree,NavigationNode oldParentNode, NavigationNode newParentNode ) {
- if (request.isSelectTarget()) {
- // select new parent node
- tree.selectSafeNode(newParentNode);
- } else {
- if (oldParentNode.getParent() == null) {
- // limit case: select first node in tree (previous old parent node was removed)
- tree.selectFirstNode();
- }
- }
- }
-}
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/list/ContentListUINavigationInitializer.java
=====================================
@@ -34,6 +34,8 @@ import java.util.Comparator;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
+import java.util.Set;
+import java.util.stream.Collectors;
/**
* Created on 25/10/2020.
@@ -90,6 +92,11 @@ public class ContentListUINavigationInitializer extends NavigationInitializer<Co
return references.get().toArrayList();
}
+ public List<? extends DataDtoReference> getReferencesWithout(Set<String> idsToExclude) {
+ //FIXME Add this in framework (.without(idsToExclude)
+ return references.get().stream().filter(r -> !idsToExclude.contains(r.getId())).collect(Collectors.toList());
+ }
+
public final boolean isOpen() {
return Objects.equals(getSelectedParentId(), getParentEditNodeId());
}
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/list/ContentListUINavigationNode.java
=====================================
@@ -22,8 +22,8 @@ package fr.ird.observe.client.datasource.editor.api.content.data.list;
* #L%
*/
-import com.google.common.collect.ImmutableSet;
import fr.ird.observe.client.datasource.editor.api.navigation.tree.NavigationNode;
+import fr.ird.observe.dto.IdDto;
import fr.ird.observe.dto.reference.DataDtoReference;
import fr.ird.observe.dto.reference.DtoReference;
import fr.ird.observe.dto.reference.LazyDataDtoReferenceSet;
@@ -31,6 +31,7 @@ import io.ultreia.java4all.lang.Objects2;
import java.util.List;
import java.util.Set;
+import java.util.stream.Collectors;
/**
* Created on 07/10/2020.
@@ -51,8 +52,6 @@ public abstract class ContentListUINavigationNode extends NavigationNode {
return node;
}
-// public abstract OpenableDtoServiceContext<?, ?, ?> getSpi();
-
@Override
public ContentListUINavigationInitializer getInitializer() {
return (ContentListUINavigationInitializer) super.getInitializer();
@@ -81,45 +80,21 @@ public abstract class ContentListUINavigationNode extends NavigationNode {
return getInitializer().getParentReference();
}
- public void removeChildren(ImmutableSet<String> ids) {
+ public void removeChildren(Set<String> ids) {
for (String id : ids) {
NavigationNode childNode = findChildById(id);
childNode.removeFromParent();
}
}
- public void addChildren(Set<String> ids) {
+ public NavigationNode addMissingChildren() {
ContentListUINavigationInitializer initializer = getInitializer();
- boolean notLoaded = isNotLoaded();
- reloadNodeData();
- List<? extends DataDtoReference> references = initializer.getReferences();
+ Set<String> existingIds = getChildrenReferences(getScope().getMainReferenceType()).stream().map(IdDto::getId).collect(Collectors.toSet());
+ List<? extends DataDtoReference> references = initializer.getReferencesWithout(existingIds);
ContentListUINavigationCapability<?> capability = getCapability();
+ NavigationNode result = null;
for (DataDtoReference reference : references) {
- if (notLoaded || ids.contains(reference.getId())) {
- NavigationNode childNode = capability.createChildNode(reference);
- int nodePosition = capability.getNodePosition(reference);
- insert(childNode, nodePosition);
- }
- }
- }
- public NavigationNode addChildren(String id) {
- NavigationNode result=null;
- ContentListUINavigationInitializer initializer = getInitializer();
- boolean notLoaded = isNotLoaded();
- reloadNodeData();
- List<? extends DataDtoReference> references = initializer.getReferences();
- ContentListUINavigationCapability<?> capability = getCapability();
- for (DataDtoReference reference : references) {
- boolean idEquals = id.equals(reference.getId());
- if (notLoaded || idEquals) {
-
- NavigationNode childNode = capability.createChildNode(reference);
- int nodePosition = capability.getNodePosition(reference);
- insert(childNode, nodePosition);
- if (idEquals) {
- result = childNode;
- }
- }
+ result = capability.insertChildNode(reference);
}
return result;
}
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/list/actions/MoveMultiple.java deleted
=====================================
@@ -1,77 +0,0 @@
-package fr.ird.observe.client.datasource.editor.api.content.data.list.actions;
-
-/*-
- * #%L
- * ObServe Client :: DataSource :: Editor :: API
- * %%
- * Copyright (C) 2008 - 2021 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 com.google.common.collect.ImmutableSet;
-import fr.ird.observe.client.datasource.editor.api.ObserveKeyStrokesEditorApi;
-import fr.ird.observe.client.datasource.editor.api.content.actions.ConfigureMenuAction;
-import fr.ird.observe.client.datasource.editor.api.content.actions.move.MoveExecutor;
-import fr.ird.observe.client.datasource.editor.api.content.actions.move.MoveRequest;
-import fr.ird.observe.client.datasource.editor.api.content.actions.move.MoveRequestBuilder;
-import fr.ird.observe.client.datasource.editor.api.content.actions.move.tree.DefaultMultipleMoveTreeAdapter;
-import fr.ird.observe.client.datasource.editor.api.content.actions.move.tree.MoveTreeAdapter;
-import fr.ird.observe.client.datasource.editor.api.content.data.list.ContentListUI;
-import fr.ird.observe.client.datasource.editor.api.content.data.list.ContentListUII18nHelper;
-import fr.ird.observe.dto.data.DataDto;
-import fr.ird.observe.dto.reference.DataDtoReference;
-import fr.ird.observe.dto.reference.DtoReferenceCollection;
-
-import java.awt.event.ActionEvent;
-import java.util.Objects;
-import java.util.function.BiConsumer;
-import java.util.function.Function;
-import java.util.function.Supplier;
-
-/**
- * Created by tchemit on 12/06/17.
- *
- * @author Tony Chemit - dev(a)tchemit.fr
- */
-public final class MoveMultiple<D extends DataDto, R extends DataDtoReference, U extends ContentListUI<D, R, U>> extends ContentListUIActionSupport<D, R, U> implements ConfigureMenuAction<U> {
-
- private final MoveExecutor executor;
-
- public static <D extends DataDto, R extends DataDtoReference, U extends ContentListUI<D, R, U>> void installMoveAction(U ui, Function<String, DtoReferenceCollection<?>> parentCandidates, Function<MoveRequest, BiConsumer<String, ImmutableSet<String>>> consumer) {
- Supplier<MoveRequestBuilder.StepBuild> requestBuilderSupplier = () -> MoveRequestBuilder.create(ui.getModel()).setParentCandidates(parentCandidates);
- installMoveAction(ui, requestBuilderSupplier, consumer, r -> new DefaultMultipleMoveTreeAdapter());
- }
-
- public static <D extends DataDto, R extends DataDtoReference, U extends ContentListUI<D, R, U>> void installMoveAction(U ui, Supplier<MoveRequestBuilder.StepBuild> requestBuilderSupplier, Function<MoveRequest, BiConsumer<String, ImmutableSet<String>>> requestConsumer, Function<MoveRequest, MoveTreeAdapter> treeAdapter) {
- MoveExecutor moveExecutor = new MoveExecutor(requestBuilderSupplier, requestConsumer, treeAdapter);
- MoveMultiple<D, R, U> action = new MoveMultiple<>(ui.getModel().getSource().getScope().getMainType(), moveExecutor);
- init(ui, Objects.requireNonNull(ui).getMove(), action);
- }
-
- protected MoveMultiple(Class<D> dataType, MoveExecutor executor) {
- super(dataType, null, null, "move", ObserveKeyStrokesEditorApi.KEY_STROKE_MOVE);
- this.executor = executor;
- setText(ContentListUII18nHelper.getActionMove(getDataType()));
- setTooltipText(ContentListUII18nHelper.getActionMoveTip(getDataType()));
- }
-
- @Override
- protected void doActionPerformed(ActionEvent e, U ui) {
- executor.execute(getClientUIContext().getActionExecutor(), getDataSourceEditor(), ui.getModel().getSource().getInitializer().getEditNode());
- }
-
-}
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/open/actions/MoveOpenable.java deleted
=====================================
@@ -1,78 +0,0 @@
-package fr.ird.observe.client.datasource.editor.api.content.data.open.actions;
-
-/*-
- * #%L
- * ObServe Client :: DataSource :: Editor :: API
- * %%
- * Copyright (C) 2008 - 2021 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 com.google.common.collect.ImmutableSet;
-import fr.ird.observe.client.datasource.editor.api.ObserveKeyStrokesEditorApi;
-import fr.ird.observe.client.datasource.editor.api.content.actions.ConfigureMenuAction;
-import fr.ird.observe.client.datasource.editor.api.content.actions.move.MoveExecutor;
-import fr.ird.observe.client.datasource.editor.api.content.actions.move.MoveRequest;
-import fr.ird.observe.client.datasource.editor.api.content.actions.move.MoveRequestBuilder;
-import fr.ird.observe.client.datasource.editor.api.content.actions.move.tree.DefaultSingleMoveTreeAdapter;
-import fr.ird.observe.client.datasource.editor.api.content.actions.move.tree.MoveTreeAdapter;
-import fr.ird.observe.client.datasource.editor.api.content.data.open.ContentOpenableUI;
-import fr.ird.observe.client.datasource.editor.api.content.data.open.ContentOpenableUII18nHelper;
-import fr.ird.observe.dto.data.OpenableDto;
-import fr.ird.observe.dto.reference.DtoReferenceCollection;
-
-import java.awt.event.ActionEvent;
-import java.util.Objects;
-import java.util.function.BiConsumer;
-import java.util.function.Function;
-import java.util.function.Supplier;
-
-/**
- * Created by tchemit on 12/06/17.
- *
- * @author Tony Chemit - dev(a)tchemit.fr
- */
-public final class MoveOpenable<D extends OpenableDto, U extends ContentOpenableUI<D, U>> extends ContentOpenableUIActionSupport<D, U> implements ConfigureMenuAction<U> {
-
- private final MoveExecutor executor;
-
- public static <D extends OpenableDto, U extends ContentOpenableUI<D, U>> void installAction(U ui, Function<String, DtoReferenceCollection<?>> parentCandidates, Function<MoveRequest, BiConsumer<String, ImmutableSet<String>>> consumer) {
- Supplier<MoveRequestBuilder.StepBuild> requestBuilderSupplier = () -> ui.getModel().toMoveRequest().setParentCandidates(parentCandidates);
- MoveExecutor moveExecutor = new MoveExecutor(requestBuilderSupplier, consumer, r -> new DefaultSingleMoveTreeAdapter());
- MoveOpenable<D, U> action = new MoveOpenable<>(ui.getModel().getSource().getScope().getMainType(), moveExecutor);
- init(ui, Objects.requireNonNull(ui).getMove(), action);
- }
-
- public static <D extends OpenableDto, U extends ContentOpenableUI<D, U>> void installAction(U ui, Supplier<MoveRequestBuilder.StepBuild> requestBuilderSupplier, Function<MoveRequest, BiConsumer<String, ImmutableSet<String>>> requestConsumer, Function<MoveRequest, MoveTreeAdapter> treeAdapter) {
- MoveExecutor moveExecutor = new MoveExecutor(requestBuilderSupplier, requestConsumer, treeAdapter);
- MoveOpenable<D, U> action = new MoveOpenable<>(ui.getModel().getSource().getScope().getMainType(), moveExecutor);
- init(ui, Objects.requireNonNull(ui).getMove(), action);
- }
-
- protected MoveOpenable(Class<D> dataType, MoveExecutor executor) {
- super(dataType, null, null, "move", ObserveKeyStrokesEditorApi.KEY_STROKE_MOVE);
- this.executor = executor;
- setText(ContentOpenableUII18nHelper.getActionMove(getDataType()));
- setTooltipText(ContentOpenableUII18nHelper.getActionMove(getDataType()));
- }
-
- @Override
- protected void doActionPerformed(ActionEvent e, U ui) {
- executor.execute(getClientUIContext().getActionExecutor(), getDataSourceEditor(), ui.getModel().getSource().getInitializer().getEditNode());
- }
-
-}
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/navigation/tree/NavigationNode.java
=====================================
@@ -271,6 +271,25 @@ public abstract class NavigationNode extends DefaultMutableTreeNode implements W
return result;
}
+ public final <R extends DtoReference> List<R> getChildrenReferences(Class<R> referenceType) {
+ Enumeration<?> children = children();
+ List<R> result = new LinkedList<>();
+ while (children.hasMoreElements()) {
+ NavigationNode o = (NavigationNode) children.nextElement();
+ if (o.isReference()) {
+ ReferenceCapability<?> capability = (ReferenceCapability<?>) o.getCapability();
+ DtoReference nodeReference = capability.getReference();
+ if (nodeReference.isNotPersisted()) {
+ continue;
+ }
+ if (referenceType.isAssignableFrom(nodeReference.getReferenceType())) {
+ result.add(referenceType.cast(nodeReference));
+ }
+ }
+ }
+ return result;
+ }
+
//--------------------------------------------------------------------------------------------
// Update methods
//--------------------------------------------------------------------------------------------
@@ -625,6 +644,24 @@ public abstract class NavigationNode extends DefaultMutableTreeNode implements W
return null;
}
+ /**
+ * @param siblingId id to seek
+ * @return sibling node with the given id
+ */
+ public NavigationNode findSibling(String siblingId) {
+ NavigationNode parent = getParent();
+ return parent.findChildByType(getClass(), siblingId);
+ }
+
+ /**
+ * @param siblingId id to seek
+ * @return sibling node with the given id (using parent sibling on given id)
+ */
+ public NavigationNode findParentSibling(String siblingId) {
+ NavigationNode sibling = getParent().findSibling(siblingId);
+ return sibling.findChildByType(getClass());
+ }
+
/**
* @return next sibling with exact node type matching
*/
@@ -723,20 +760,6 @@ public abstract class NavigationNode extends DefaultMutableTreeNode implements W
throw new IllegalStateException(String.format("Can't go down reference node of type: %s from node: %s", referenceType.getName(), this));
}
- public NavigationNode downToReferenceContainerNode(Class<? extends DtoReference> referenceType) {
- if (acceptReferenceContainerNode(referenceType)) {
- return this;
- }
- Enumeration<?> children = children();
- while (children.hasMoreElements()) {
- NavigationNode childrenNode = (NavigationNode) children.nextElement();
- if (childrenNode.acceptReferenceContainerNode(referenceType)) {
- return childrenNode;
- }
- }
- throw new IllegalStateException(String.format("Can't go down to reference container node of type: %s from node: %s", referenceType.getName(), this));
- }
-
//--------------------------------------------------------------------------------------------
// TreeNode override methods
//--------------------------------------------------------------------------------------------
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/navigation/tree/capability/ReferenceContainerCapability.java
=====================================
@@ -40,6 +40,13 @@ public interface ReferenceContainerCapability<N extends NavigationNode> extends
int getNodePosition(DtoReference reference);
+ default NavigationNode insertChildNode(DtoReference reference) {
+ NavigationNode result = createChildNode(reference);
+ int nodePosition = getNodePosition(reference);
+ getNode().insert(result, nodePosition);
+ return result;
+ }
+
default boolean acceptChildReferenceType(Class<? extends DtoReference> dtoReferenceType) {
return getAcceptedTypes().contains(dtoReferenceType);
}
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/navigation/tree/root/RootNavigationNode.java
=====================================
@@ -46,10 +46,6 @@ public class RootNavigationNode extends NavigationNode {
public static int nodeCount;
- public RootNavigationNode() {
- nodeCount = 0;
- }
-
public static int incrementsAndGetNodeCount() {
return ++nodeCount;
}
@@ -84,6 +80,10 @@ public class RootNavigationNode extends NavigationNode {
return node;
}
+ public RootNavigationNode() {
+ nodeCount = 0;
+ }
+
@Override
public RootNavigationInitializer getInitializer() {
return (RootNavigationInitializer) super.getInitializer();
@@ -119,6 +119,46 @@ public class RootNavigationNode extends NavigationNode {
return (RootNavigationCapability) super.getCapability();
}
+ @Override
+ public NavigationNode findChildById(String id) {
+ NavigationNode result = super.findChildById(id);
+ if (result == null) {
+ result = createMissingProgramNode(id);
+ }
+ return result;
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public <N extends NavigationNode> N findChildByType(Class<N> childType, String id) {
+ N result = super.findChildByType(childType, id);
+ if (result == null) {
+ result = (N) createMissingProgramNode(id);
+ }
+ return result;
+ }
+
+ @Override
+ public NavigationNode findChildByModelNode(NavigationModelNode<?> node) {
+ NavigationNode result = super.findChildByModelNode(node);
+ if (result == null && node.isRoot()) {
+ result = createMissingProgramNode(node.getId());
+ }
+ return result;
+ }
+
+ protected NavigationNode createMissingProgramNode(String id) {
+ // limit case : node does not exist (was empty previously), need to create it
+ ProgramReference reference = getInitializer().getNavigationResult().getProgram(id);
+ if (reference == null) {
+ throw new IllegalStateException(String.format("Could not find program: %s", id));
+ }
+ NavigationNode result = getCapability().createChildNode(reference);
+ int position = getCapability().getNodePosition(reference);
+ insert(result, position);
+ return result;
+ }
+
public NavigationNode findNodeFromPreviousSelectedNode(NavigationNode oldSelectedNode) {
NavigationNode result = this;
TreeNode[] pathToRoot = oldSelectedNode.getPath();
@@ -138,7 +178,6 @@ public class RootNavigationNode extends NavigationNode {
return result;
}
-
public NavigationNode findNode(NavigationModelNode<?> editNode) {
NavigationNode result = this;
ImmutableList<NavigationModelNode<?>> nodesFromRoot = editNode.getNodesFromRoot();
=====================================
client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/logbook/ActivitySampleUIHandler.java
=====================================
@@ -23,13 +23,9 @@ package fr.ird.observe.client.datasource.editor.ll.data.logbook;
*/
import fr.ird.observe.client.datasource.editor.api.content.ContentUIInitializer;
+import fr.ird.observe.client.datasource.editor.api.content.actions.move.MoveAction;
import fr.ird.observe.client.datasource.editor.api.content.actions.move.MoveRequestBuilder;
-import fr.ird.observe.client.datasource.editor.api.content.data.edit.actions.MoveEdit;
-import fr.ird.observe.client.datasource.editor.ll.data.logbook.sample.ActivitySampleUIMoveTreeAdapter;
import fr.ird.observe.client.datasource.editor.ll.data.logbook.sample.SampleUIHelper;
-import fr.ird.observe.dto.data.ll.common.TripReference;
-import fr.ird.observe.dto.data.ll.logbook.ActivityReference;
-import io.ultreia.java4all.i18n.I18n;
/**
* Created on 12/5/14.
@@ -54,28 +50,11 @@ public class ActivitySampleUIHandler extends GeneratedActivitySampleUIHandler {
@Override
protected void installSaveAction() {
super.installSaveAction();
- MoveEdit.installAction(ui,
- () -> {
- Boolean moveToTrip = SampleUIHelper.movetoTrip();
- if (moveToTrip == null) {
- return null;
- }
- MoveRequestBuilder.StepSetParentCandidates requestBuilder = MoveRequestBuilder
- .create(getModel());
- if (moveToTrip) {
- return requestBuilder
- .setParentTargetReferenceType(TripReference.class)
- .setParentCandidates(this.getLlLogbookActivitySampleService()::getParents);
- }
- // move to activity
- return requestBuilder
- .setParentTargetReferenceType(ActivityReference.class)
- .setAskNewParentTitle(I18n.t("observe.data.ll.logbook.Sample.action.move.choose.parent.activity.title"))
- .setAskNewParentMessage(I18n.t("observe.data.ll.logbook.Sample.action.move.choose.parent.activity.message"))
- .setParentCandidates(this.getLlLogbookActivityService()::getBrothers);
- },
- r -> getLlLogbookActivitySampleService()::move,
- r -> new ActivitySampleUIMoveTreeAdapter());
+ MoveAction.create(ui)
+ .on(SampleUIHelper.newSupplier(this, () -> MoveRequestBuilder.create(ui.getModel())))
+ .move(r -> getLlLogbookActivitySampleService()::move)
+ .then(SampleUIHelper::create)
+ .install(ui::getMove);
}
}
=====================================
client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/logbook/SampleListUIHandler.java
=====================================
@@ -22,9 +22,7 @@ package fr.ird.observe.client.datasource.editor.ll.data.logbook;
* #L%
*/
-import fr.ird.observe.client.datasource.editor.api.content.actions.move.tree.DefaultMultipleMoveTreeAdapter;
-import fr.ird.observe.client.datasource.editor.api.content.data.list.actions.MoveMultiple;
-import fr.ird.observe.client.datasource.editor.ll.data.logbook.sample.ActivitySampleUIMoveTreeAdapter;
+import fr.ird.observe.client.datasource.editor.api.content.actions.move.MoveAction;
import fr.ird.observe.client.datasource.editor.ll.data.logbook.sample.SampleUIHelper;
/**
@@ -37,9 +35,10 @@ class SampleListUIHandler extends GeneratedSampleListUIHandler {
@Override
protected void installMoveAction() {
- MoveMultiple.installMoveAction(ui,
- SampleUIHelper.newSupplier(this, getModel()::toMoveRequest),
- r -> getLlLogbookSampleService()::move,
- r -> SampleUIHelper.toTrip(r) ? new DefaultMultipleMoveTreeAdapter() : new ActivitySampleUIMoveTreeAdapter());
+ MoveAction.create(ui)
+ .on(SampleUIHelper.newSupplier(this, getModel()::toMoveRequest))
+ .move(r -> getLlLogbookSampleService()::move)
+ .then(SampleUIHelper::create)
+ .install(ui::getMove);
}
}
=====================================
client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/logbook/SampleUIHandler.java
=====================================
@@ -24,9 +24,7 @@ package fr.ird.observe.client.datasource.editor.ll.data.logbook;
import fr.ird.observe.client.datasource.editor.api.content.ContentMode;
import fr.ird.observe.client.datasource.editor.api.content.ContentUIInitializer;
-import fr.ird.observe.client.datasource.editor.api.content.actions.move.tree.DefaultSingleMoveTreeAdapter;
-import fr.ird.observe.client.datasource.editor.api.content.data.open.actions.MoveOpenable;
-import fr.ird.observe.client.datasource.editor.ll.data.logbook.sample.ActivitySampleUIMoveTreeAdapter;
+import fr.ird.observe.client.datasource.editor.api.content.actions.move.MoveAction;
import fr.ird.observe.client.datasource.editor.ll.data.logbook.sample.SampleUIHelper;
/**
@@ -66,9 +64,10 @@ class SampleUIHandler extends GeneratedSampleUIHandler {
@Override
protected void installMoveAction() {
- MoveOpenable.installAction(ui,
- SampleUIHelper.newSupplier(this, getModel()::toMoveRequest),
- r -> getLlLogbookSampleService()::move,
- r -> SampleUIHelper.toTrip(r) ? new DefaultSingleMoveTreeAdapter() : new ActivitySampleUIMoveTreeAdapter());
+ MoveAction.create(ui)
+ .on(SampleUIHelper.newSupplier(this, getModel()::toMoveRequest))
+ .move(r -> getLlLogbookSampleService()::move)
+ .then(SampleUIHelper::create)
+ .install(ui::getMove);
}
}
=====================================
client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/logbook/sample/ActivitySampleUIMoveTreeAdapter.java
=====================================
@@ -22,74 +22,39 @@ package fr.ird.observe.client.datasource.editor.ll.data.logbook.sample;
* #L%
*/
-import fr.ird.observe.client.datasource.editor.api.content.actions.move.MoveRequest;
-import fr.ird.observe.client.datasource.editor.api.content.actions.move.tree.DefaultSingleMoveTreeAdapter;
-import fr.ird.observe.client.datasource.editor.api.navigation.NavigationTree;
-import fr.ird.observe.client.datasource.editor.api.navigation.tree.NavigationNode;
+import fr.ird.observe.client.datasource.editor.api.content.actions.move.MoveTreeAdapter;
import fr.ird.observe.client.datasource.editor.ll.data.logbook.ActivitySampleUINavigationNode;
import fr.ird.observe.client.datasource.editor.ll.data.logbook.ActivityUINavigationNode;
-import fr.ird.observe.client.datasource.editor.ll.data.logbook.SampleListUINavigationNode;
-import fr.ird.observe.client.datasource.editor.ll.data.logbook.SampleUINavigationNode;
+import fr.ird.observe.dto.data.ll.logbook.ActivitySampleReference;
+
+import java.util.Set;
/**
- * Created on 15/10/2020.
+ * FIXME:Tree Generate me
+ * Created on 12/02/2021.
*
* @author Tony Chemit - dev(a)tchemit.fr
- * @since 8.0.1
+ * @since 8.0.6
*/
-public class ActivitySampleUIMoveTreeAdapter extends DefaultSingleMoveTreeAdapter {
-
- public static void moveFromActivityToActivity(NavigationTree tree, ActivitySampleUINavigationNode referenceNode, String activityId) {
- ActivityUINavigationNode newContainerNode = referenceNode.getParent().getParent()
- .getActivityUINavigationNode(activityId);
- newContainerNode.updateNode();
- ActivitySampleUINavigationNode node = newContainerNode.getActivitySampleUINavigationNode();
- tree.selectSafeNode(node);
- }
+public class ActivitySampleUIMoveTreeAdapter extends MoveTreeAdapter<ActivityUINavigationNode, ActivityUINavigationNode, ActivitySampleUINavigationNode> {
- public static void moveFromTripToActivity(NavigationTree tree, SampleUINavigationNode referenceNode, String activityId) {
- ActivityUINavigationNode newContainerNode = referenceNode.getParent().getParent()
- .getLogbookActivityListUINavigationNode().getActivityUINavigationNode(activityId);
- newContainerNode.updateNode();
- ActivitySampleUINavigationNode node = newContainerNode.getActivitySampleUINavigationNode();
- tree.selectSafeNode(node);
+ public ActivitySampleUIMoveTreeAdapter(ActivitySampleUINavigationNode incomingNode) {
+ super(incomingNode, e -> incomingNode.getParent());
}
- public static void moveFromTripToTrip(NavigationTree tree, SampleUINavigationNode referenceNode, String tripId, String sampleId) {
- SampleListUINavigationNode newContainerNode = referenceNode.getParent().getParent().getParent()
- .getTripUINavigationNode(tripId).getSampleListUINavigationNode();
- newContainerNode.reloadNodeDataToRoot();
- NavigationNode node = newContainerNode.getSampleUINavigationNode(sampleId);
- tree.selectSafeNode(node);
+ @Override
+ public ActivityUINavigationNode getNewParentNode(ActivityUINavigationNode oldParentNode, String newParentId) {
+ return oldParentNode.findParentSibling(newParentId);
}
- public static void moveFromActivityToTrip(NavigationTree tree, ActivitySampleUINavigationNode referenceNode, String tripId, String sampleId) {
- SampleListUINavigationNode newContainerNode = referenceNode.getParent().getParent().getParent().getParent()
- .getTripUINavigationNode(tripId).getSampleListUINavigationNode();
- newContainerNode.reloadNodeDataToRoot();
- NavigationNode node = newContainerNode.getSampleUINavigationNode(sampleId);
- tree.selectSafeNode(node);
+ @Override
+ public ActivitySampleUINavigationNode addMissingChildren(ActivityUINavigationNode newParentNode) {
+ ActivitySampleReference reference = newParentNode.getReference().getActivitySample();
+ return newParentNode.addActivitySampleUINavigationNode(reference);
}
@Override
- public void adaptTree(MoveRequest request, NavigationTree tree) {
- NavigationNode referenceNode = tree.getSelectedNode();
- boolean fromTrip = SampleUIHelper.fromTrip(request);
- if (SampleUIHelper.toTrip(request)) {
- if (fromTrip) {
- moveFromTripToTrip(tree, (SampleUINavigationNode) referenceNode, request.getNewParentId(), request.getId());
- } else {
- moveFromActivityToTrip(tree, (ActivitySampleUINavigationNode) referenceNode, request.getNewParentId(), request.getId());
- }
- } else {
- // move to activity
- if (fromTrip) {
- moveFromTripToActivity(tree, (SampleUINavigationNode) referenceNode, request.getNewParentId());
- } else {
- moveFromActivityToActivity(tree, (ActivitySampleUINavigationNode) referenceNode, request.getNewParentId());
- }
- }
- //FIXME Not sure we still need to do this.
- referenceNode.removeFromParent();
+ public void removeChildren(ActivityUINavigationNode oldParentNode, Set<String> ids) {
+ oldParentNode.getActivitySampleUINavigationNode().removeFromParent();
}
}
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/move/tree/DefaultMultipleMoveTreeAdapter.java → client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/logbook/sample/ActivitySampleUIMoveTreeAdapterToTrip.java
=====================================
@@ -1,8 +1,8 @@
-package fr.ird.observe.client.datasource.editor.api.content.actions.move.tree;
+package fr.ird.observe.client.datasource.editor.ll.data.logbook.sample;
/*-
* #%L
- * ObServe Client :: DataSource :: Editor :: API
+ * ObServe Client :: DataSource :: Editor :: LL
* %%
* Copyright (C) 2008 - 2021 IRD, Code Lutin, Ultreia.io
* %%
@@ -22,41 +22,40 @@ package fr.ird.observe.client.datasource.editor.api.content.actions.move.tree;
* #L%
*/
-import com.google.common.collect.ImmutableSet;
-import fr.ird.observe.client.datasource.editor.api.content.actions.move.MoveRequest;
-import fr.ird.observe.client.datasource.editor.api.content.data.list.ContentListUINavigationNode;
-import fr.ird.observe.client.datasource.editor.api.navigation.NavigationTree;
-import fr.ird.observe.client.datasource.editor.api.navigation.tree.NavigationNode;
+import fr.ird.observe.client.datasource.editor.api.content.actions.move.MoveTreeAdapter;
+import fr.ird.observe.client.datasource.editor.ll.data.logbook.ActivitySampleUINavigationNode;
+import fr.ird.observe.client.datasource.editor.ll.data.logbook.ActivityUINavigationNode;
+import fr.ird.observe.client.datasource.editor.ll.data.logbook.SampleListUINavigationNode;
+import fr.ird.observe.client.datasource.editor.ll.data.logbook.SampleUINavigationNode;
+
+import java.util.Set;
/**
- * Created on 15/10/2020.
+ * Created on 12/02/2021.
*
* @author Tony Chemit - dev(a)tchemit.fr
- * @since 8.0.1
+ * @since 8.0.6
*/
-public class DefaultMultipleMoveTreeAdapter implements MoveTreeAdapter {
-
- @Override
- public void adaptTree(MoveRequest request, NavigationTree tree) {
- ImmutableSet<String> ids = request.getIds();
+public class ActivitySampleUIMoveTreeAdapterToTrip extends MoveTreeAdapter<ActivityUINavigationNode, SampleListUINavigationNode, SampleUINavigationNode> {
- // get old parent node
- ContentListUINavigationNode oldParentNode = (ContentListUINavigationNode) tree.getSelectedNode().upToReferenceContainerNode(request.getReferenceType());
-
- // get shared ancestor of two parents
- NavigationNode parentContainerNode = oldParentNode.upToReferenceContainerNode(request.getParentReferenceType());
-
- // get new parent node
- ContentListUINavigationNode newParentNode = MoveTreeAdapter.getNewParentNode(request, parentContainerNode);
+ public ActivitySampleUIMoveTreeAdapterToTrip(ActivitySampleUINavigationNode incomingNode) {
+ super(incomingNode, e -> incomingNode.getParent());
+ }
- // update it
- newParentNode.addChildren(ids);
- // clean old paren node
- MoveTreeAdapter.cleanOldParentNode(tree, ids, oldParentNode);
+ @Override
+ public SampleListUINavigationNode getNewParentNode(ActivityUINavigationNode oldParentNode, String newParentId) {
+ return oldParentNode.getParent().getParent().getSampleListUINavigationNode();
+ }
- MoveTreeAdapter.doFinalSelect(request, tree, oldParentNode, newParentNode);
+ @Override
+ public SampleUINavigationNode addMissingChildren(SampleListUINavigationNode newParentNode) {
+ return newParentNode.addMissingChildren();
}
+ @Override
+ public void removeChildren(ActivityUINavigationNode oldParentNode, Set<String> ids) {
+ oldParentNode.getActivitySampleUINavigationNode().removeFromParent();
+ }
-}
\ No newline at end of file
+}
=====================================
client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/logbook/sample/SampleUIHelper.java
=====================================
@@ -25,6 +25,11 @@ package fr.ird.observe.client.datasource.editor.ll.data.logbook.sample;
import fr.ird.observe.client.ClientUIContext;
import fr.ird.observe.client.datasource.editor.api.content.actions.move.MoveRequest;
import fr.ird.observe.client.datasource.editor.api.content.actions.move.MoveRequestBuilder;
+import fr.ird.observe.client.datasource.editor.api.content.actions.move.MoveTreeAdapter;
+import fr.ird.observe.client.datasource.editor.ll.data.logbook.ActivitySampleUI;
+import fr.ird.observe.client.datasource.editor.ll.data.logbook.SampleListUI;
+import fr.ird.observe.client.datasource.editor.ll.data.logbook.SampleUI;
+import fr.ird.observe.client.datasource.editor.ll.data.logbook.SampleUIMoveTreeAdapter;
import fr.ird.observe.dto.data.TripAware;
import fr.ird.observe.dto.data.ll.common.TripReference;
import fr.ird.observe.dto.data.ll.logbook.ActivityReference;
@@ -32,6 +37,7 @@ import fr.ird.observe.services.ObserveServicesProvider;
import io.ultreia.java4all.i18n.I18n;
import javax.swing.JOptionPane;
+import java.util.function.Function;
import java.util.function.Supplier;
/**
@@ -46,10 +52,6 @@ public class SampleUIHelper {
return TripAware.class.isAssignableFrom(request.getParentTargetReferenceType());
}
- public static boolean fromTrip(MoveRequest request) {
- return TripAware.class.isAssignableFrom(request.getParentReferenceType());
- }
-
public static Boolean movetoTrip() {
int response = ClientUIContext.askUser(
I18n.t("observe.data.ll.logbook.Sample.action.move.choose.parent.target.title"),
@@ -88,4 +90,22 @@ public class SampleUIHelper {
.setParentCandidates(servicesProvider.getLlLogbookActivityService()::getChildren);
};
}
+
+ public static Function<MoveRequest, ? extends MoveTreeAdapter<?, ?, ?>> create(ActivitySampleUI ui) {
+ return r -> toTrip(r)
+ ? new ActivitySampleUIMoveTreeAdapterToTrip(ui.getModel().getSource())
+ : new ActivitySampleUIMoveTreeAdapter(ui.getModel().getSource());
+ }
+
+ public static Function<MoveRequest, ? extends MoveTreeAdapter<?, ?, ?>> create(SampleListUI ui) {
+ return r -> toTrip(r)
+ ? new SampleUIMoveTreeAdapter(ui.getModel().getSource())
+ : new SampleUIMoveTreeAdapterToActivity(ui.getModel().getSource());
+ }
+
+ public static Function<MoveRequest, ? extends MoveTreeAdapter<?, ?, ?>> create(SampleUI ui) {
+ return r -> toTrip(r)
+ ? new SampleUIMoveTreeAdapter(ui.getModel().getSource())
+ : new SampleUIMoveTreeAdapterToActivity(ui.getModel().getSource());
+ }
}
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/move/tree/DefaultSingleMoveTreeAdapter.java → client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/logbook/sample/SampleUIMoveTreeAdapterToActivity.java
=====================================
@@ -1,8 +1,8 @@
-package fr.ird.observe.client.datasource.editor.api.content.actions.move.tree;
+package fr.ird.observe.client.datasource.editor.ll.data.logbook.sample;
/*-
* #%L
- * ObServe Client :: DataSource :: Editor :: API
+ * ObServe Client :: DataSource :: Editor :: LL
* %%
* Copyright (C) 2008 - 2021 IRD, Code Lutin, Ultreia.io
* %%
@@ -22,48 +22,44 @@ package fr.ird.observe.client.datasource.editor.api.content.actions.move.tree;
* #L%
*/
-import fr.ird.observe.client.datasource.editor.api.content.actions.move.MoveRequest;
-import fr.ird.observe.client.datasource.editor.api.content.data.list.ContentListUINavigationNode;
-import fr.ird.observe.client.datasource.editor.api.navigation.NavigationTree;
-import fr.ird.observe.client.datasource.editor.api.navigation.tree.NavigationNode;
-import fr.ird.observe.dto.reference.DtoReference;
+import fr.ird.observe.client.datasource.editor.api.content.actions.move.MoveTreeAdapter;
+import fr.ird.observe.client.datasource.editor.ll.data.logbook.ActivitySampleUINavigationNode;
+import fr.ird.observe.client.datasource.editor.ll.data.logbook.ActivityUINavigationNode;
+import fr.ird.observe.client.datasource.editor.ll.data.logbook.SampleListUINavigationNode;
+import fr.ird.observe.client.datasource.editor.ll.data.logbook.SampleUINavigationNode;
+import fr.ird.observe.dto.data.ll.logbook.ActivitySampleReference;
+
+import java.util.Set;
/**
- * Created on 15/10/2020.
+ * Created on 12/02/2021.
*
* @author Tony Chemit - dev(a)tchemit.fr
- * @since 8.0.1
+ * @since 8.0.6
*/
-public class DefaultSingleMoveTreeAdapter implements MoveTreeAdapter {
-
- @Override
- public void adaptTree(MoveRequest request, NavigationTree tree) {
- String id = request.getId();
-
- Class<? extends DtoReference> parentReferenceType = request.getParentTargetReferenceType();
-
- Class<? extends DtoReference> referenceType = request.getReferenceType();
-
- // get old parent node
- ContentListUINavigationNode oldParentNode = (ContentListUINavigationNode) tree.getSelectedNode().upToReferenceContainerNode(referenceType);
-
- // get shared ancestor of two parents
- NavigationNode parentContainerNode = oldParentNode.upToReferenceContainerNode(parentReferenceType);
-
- // dow to new parent node
- ContentListUINavigationNode newParentNode = MoveTreeAdapter.getNewParentNode(request, parentContainerNode);
+public class SampleUIMoveTreeAdapterToActivity extends MoveTreeAdapter<SampleListUINavigationNode, ActivityUINavigationNode, ActivitySampleUINavigationNode> {
- // down to new child container node
- ContentListUINavigationNode newChildContainerNode = (ContentListUINavigationNode) newParentNode.downToReferenceContainerNode(referenceType);
+ public SampleUIMoveTreeAdapterToActivity(SampleListUINavigationNode incomingNode) {
+ super(incomingNode, e -> incomingNode);
+ }
- // update it
- NavigationNode node = newChildContainerNode.addChildren(id);
+ public SampleUIMoveTreeAdapterToActivity(SampleUINavigationNode incomingNode) {
+ super(incomingNode, e -> incomingNode.getParent());
+ }
- // clean old paren node
- MoveTreeAdapter.cleanOldParentNode(tree, request.getIds(), oldParentNode);
+ @Override
+ public ActivityUINavigationNode getNewParentNode(SampleListUINavigationNode oldParentNode, String newParentId) {
+ return oldParentNode.getParent().getLogbookActivityListUINavigationNode().getActivityUINavigationNode(newParentId);
+ }
- node.getParent().refreshToRoot();
+ @Override
+ public ActivitySampleUINavigationNode addMissingChildren(ActivityUINavigationNode newParentNode) {
+ ActivitySampleReference reference = newParentNode.getReference().getActivitySample();
+ return newParentNode.addActivitySampleUINavigationNode(reference);
+ }
- MoveTreeAdapter.doFinalSelect(request, tree, oldParentNode, node);
+ @Override
+ public void removeChildren(SampleListUINavigationNode oldParentNode, Set<String> ids) {
+ oldParentNode.removeChildren(ids);
}
}
=====================================
client/datasource/editor/spi/src/main/java/fr/ird/observe/client/datasource/editor/spi/content/GenerateContentUISupport.java
=====================================
@@ -149,20 +149,21 @@ public abstract class GenerateContentUISupport extends GenerateJavaFileSupport {
protected final boolean alwaysGenerateConcreteFile() {
return !getClass().getSimpleName().endsWith("ContentEditUIModel")
&& !getClass().getSimpleName().endsWith("EditUIHandler")
+ && !getClass().getSimpleName().endsWith("EditUIModelStates")
&& !getClass().getSimpleName().endsWith("OpenableUIHandler")
+ && !getClass().getSimpleName().endsWith("OpenableUIMoveTreeAdapter")
+ && !getClass().getSimpleName().endsWith("OpenableUIModelStates")
&& !getClass().getSimpleName().endsWith("ListUIHandler")
+ && !getClass().getSimpleName().endsWith("ListUINavigationCapability")
+// && !getClass().getSimpleName().endsWith("ListUINavigationHandler")
&& !getClass().getSimpleName().endsWith("SimpleUIHandler")
- && !getClass().getSimpleName().endsWith("TableUIHandler")
+ && !getClass().getSimpleName().endsWith("SimpleUIModelStates")
&& !getClass().getSimpleName().endsWith("NavigationScope")
&& !getClass().getSimpleName().endsWith("NavigationHandler")
-// && !getClass().getSimpleName().endsWith("ListUINavigationHandler")
- && !getClass().getSimpleName().endsWith("ListUINavigationCapability")
// && !getClass().getSimpleName().endsWith("TableUINavigationContext")
+ && !getClass().getSimpleName().endsWith("TableUIHandler")
&& !getClass().getSimpleName().endsWith("TableUITableModel")
&& !getClass().getSimpleName().endsWith("TableUIModelStates")
- && !getClass().getSimpleName().endsWith("EditUIModelStates")
- && !getClass().getSimpleName().endsWith("OpenableUIModelStates")
- && !getClass().getSimpleName().endsWith("SimpleUIModelStates")
;
}
=====================================
client/datasource/editor/spi/src/main/java/fr/ird/observe/client/datasource/editor/spi/content/data/list/GenerateContentListUINavigationNode.java
=====================================
@@ -29,6 +29,7 @@ import fr.ird.observe.client.datasource.editor.spi.content.helper.ContentUINavig
import java.nio.file.Path;
import java.util.LinkedList;
import java.util.List;
+import java.util.Set;
/**
* Created on 06/11/2020.
@@ -38,6 +39,17 @@ import java.util.List;
*/
public class GenerateContentListUINavigationNode extends GenerateContentListUISupport {
+ public static final String REMOVE_CHILDREN = "" +
+ " @Override\n" +
+ " public void removeChildren(Set<String> ids) {\n" +
+ " if (getChildCount() == ids.size() && !getParent().getInitializer().getConfig().isLoadEmptyProgram()) {\n" +
+ " // limit case : node will be empty, must remove it\n" +
+ " removeFromParent();\n" +
+ " return;\n" +
+ " }\n" +
+ " super.removeChildren(ids);\n" +
+ " }\n\n";
+
@Override
protected String generateConcreteContent(Path path, String packageName, String namePrefix) {
List<String> imports = new LinkedList<>();
@@ -51,6 +63,13 @@ public class GenerateContentListUINavigationNode extends GenerateContentListUISu
context += ContentUINavigationContextHelper.generateGetReferences(imports, referenceType);
context += ContentUINavigationContextHelper.generateGetParentReference(imports, parentReferenceType);
context += ContentUINavigationContextHelper.generateGetOpenableServiceSpi(imports, dtoType, referenceType, serviceType);
+ context += ContentUINavigationContextHelper.generateGetSibling(imports, cleanClassName);
+ context += ContentUINavigationContextHelper.generateGetParentSibling(imports, cleanClassName);
+ imports.add(Set.class.getName());
+ context += ContentUINavigationContextHelper.generateAddChildren(imports, dtoNamePrefix);
+ if (scopeBuilder.editNode.getParent().isRoot()) {
+ context += REMOVE_CHILDREN;
+ }
return uiNavigationNodeHelper.generateContent(imports, context);
}
=====================================
client/datasource/editor/spi/src/main/java/fr/ird/observe/client/datasource/editor/spi/content/data/openable/ContentOpenableUIDescriptor.java
=====================================
@@ -75,6 +75,7 @@ public class ContentOpenableUIDescriptor implements ContentUIDescriptor {
GenerateContentOpenableUINavigationNode.class,
GenerateContentOpenableUINavigationScope.class,
GenerateContentOpenableUIHandler.class,
+ GenerateContentOpenableUIMoveTreeAdapter.class,
GenerateContentOpenableUIModelStates.class
);
}
=====================================
client/datasource/editor/spi/src/main/java/fr/ird/observe/client/datasource/editor/spi/content/data/openable/GenerateContentOpenableUIMoveTreeAdapter.java
=====================================
@@ -0,0 +1,102 @@
+package fr.ird.observe.client.datasource.editor.spi.content.data.openable;
+
+/*-
+ * #%L
+ * ObServe Client :: DataSource :: Editor :: SPI
+ * %%
+ * Copyright (C) 2008 - 2021 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.datasource.editor.api.content.actions.move.MoveRequest;
+import fr.ird.observe.client.datasource.editor.api.content.actions.move.MoveTreeAdapter;
+
+import java.nio.file.Path;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+import java.util.function.Function;
+
+/**
+ * Created on 13/02/2021.
+ *
+ * @author Tony Chemit - dev(a)tchemit.fr
+ * @since 8.0.6
+ */
+public class GenerateContentOpenableUIMoveTreeAdapter extends GenerateContentOpenableUISupport {
+
+ public static final String GENERATED_CONTENT = "" +
+ "public abstract class Generated%1$sUIMoveTreeAdapter extends MoveTreeAdapter<%1$sListUINavigationNode, %1$sListUINavigationNode, %1$sUINavigationNode> {\n" +
+ "\n" +
+ " public static Function<MoveRequest, %1$sUIMoveTreeAdapter> create(%1$sListUI ui) {\n" +
+ " return r -> new %1$sUIMoveTreeAdapter(ui.getModel().getSource());\n" +
+ " }\n" +
+ "\n" +
+ " public static Function<MoveRequest, %1$sUIMoveTreeAdapter> create(%1$sUI ui) {\n" +
+ " return r -> new %1$sUIMoveTreeAdapter(ui.getModel().getSource());\n" +
+ " }\n\n" +
+ " public Generated%1$sUIMoveTreeAdapter(%1$sListUINavigationNode incomingNode) {\n" +
+ " super(incomingNode, e -> incomingNode);\n" +
+ " }\n\n" +
+ " public Generated%1$sUIMoveTreeAdapter(%1$sUINavigationNode incomingNode) {\n" +
+ " super(incomingNode, e -> incomingNode.getParent());\n" +
+ " }\n\n" +
+ " @Override\n" +
+ " public %1$sListUINavigationNode getNewParentNode(%1$sListUINavigationNode oldParentNode, String newParentId) {\n" +
+ " return oldParentNode.%2$s(newParentId);\n" +
+ " }\n" +
+ "\n" +
+ " @Override\n" +
+ " public %1$sUINavigationNode addMissingChildren(%1$sListUINavigationNode newParentNode) {\n" +
+ " return newParentNode.addMissingChildren();\n" +
+ " }\n" +
+ "\n" +
+ " @Override\n" +
+ " public void removeChildren(%1$sListUINavigationNode oldParentNode, Set<String> ids) {\n" +
+ " oldParentNode.removeChildren(ids);\n" +
+ " }\n" +
+ "}\n";
+ public static final String CONTENT = "" +
+ "public class %1$sUIMoveTreeAdapter extends Generated%1$sUIMoveTreeAdapter {\n\n" +
+ " public %1$sUIMoveTreeAdapter(%1$sListUINavigationNode incomingNode) {\n" +
+ " super(incomingNode);\n" +
+ " }\n\n" +
+ " public %1$sUIMoveTreeAdapter(%1$sUINavigationNode incomingNode) {\n" +
+ " super(incomingNode);\n" +
+ " }\n\n" +
+ "}\n";
+
+ @Override
+ protected String generateAbstractContent0(Path sourceDirectory, Path targetDirectory, Path path, String packageName, String namePrefix) {
+ List<String> imports = new LinkedList<>();
+ imports.add(Set.class.getName());
+ imports.add(MoveTreeAdapter.class.getName());
+ imports.add(MoveRequest.class.getName());
+ imports.add(Function.class.getName());
+ String siblingMethod = "findParentSibling";
+ if (scopeBuilder.selectNode.getParent().isRoot()) {
+ siblingMethod = "findSibling";
+ }
+ return generate(GENERATED_CONTENT, imports, dtoNamePrefix, siblingMethod);
+ }
+
+ @Override
+ protected String generateConcreteContent(Path path, String packageName, String namePrefix) {
+ List<String> imports = new LinkedList<>();
+ return generate(CONTENT, imports, dtoNamePrefix);
+ }
+}
=====================================
client/datasource/editor/spi/src/main/java/fr/ird/observe/client/datasource/editor/spi/content/data/openable/GenerateContentOpenableUINavigationNode.java
=====================================
@@ -51,6 +51,8 @@ public class GenerateContentOpenableUINavigationNode extends GenerateContentOpen
context += ContentUINavigationContextHelper.generateGetReference(imports, referenceType);
context += ContentUINavigationContextHelper.generateGetParentReference(imports, parentReferenceType);
context += ContentUINavigationContextHelper.generateGetOpenableServiceSpi(imports, dtoType, referenceType, serviceType);
+ context += ContentUINavigationContextHelper.generateGetSibling(imports, cleanClassName);
+ context += ContentUINavigationContextHelper.generateGetParentSibling(imports, cleanClassName);
return uiNavigationNodeHelper.generateContent(imports, context);
}
=====================================
client/datasource/editor/spi/src/main/java/fr/ird/observe/client/datasource/editor/spi/content/helper/ContentUIHandlerHelper.java
=====================================
@@ -23,13 +23,13 @@ package fr.ird.observe.client.datasource.editor.spi.content.helper;
*/
import fr.ird.observe.client.datasource.editor.api.content.actions.create.CreateNewOpenableUI;
+import fr.ird.observe.client.datasource.editor.api.content.actions.move.MoveAction;
+import fr.ird.observe.client.datasource.editor.api.content.actions.move.MoveRequestBuilder;
import fr.ird.observe.client.datasource.editor.api.content.actions.save.SaveAction;
import fr.ird.observe.client.datasource.editor.api.content.data.edit.actions.DeleteEdit;
import fr.ird.observe.client.datasource.editor.api.content.data.edit.actions.SaveContentEditUIAdapter;
import fr.ird.observe.client.datasource.editor.api.content.data.list.actions.DeleteMultiple;
-import fr.ird.observe.client.datasource.editor.api.content.data.list.actions.MoveMultiple;
import fr.ird.observe.client.datasource.editor.api.content.data.open.actions.DeleteOpenable;
-import fr.ird.observe.client.datasource.editor.api.content.data.open.actions.MoveOpenable;
import fr.ird.observe.client.datasource.editor.api.content.data.open.actions.SaveContentOpenableUIAdapter;
import fr.ird.observe.client.datasource.editor.api.content.data.simple.actions.SaveContentSimpleUIAdapter;
import fr.ird.observe.client.datasource.editor.api.content.data.table.actions.SaveContentTableUIAdapter;
@@ -72,7 +72,12 @@ public class ContentUIHandlerHelper extends ContentUIHelperSupport {
public static final String INSTALL_MOVE_SIMPLE_ACTION = "" +
" @Override\n" +
" protected void installMoveAction() {\n" +
- " MoveOpenable.installAction(ui, %1$s()::%2$s, r -> %3$s()::move);\n" +
+ " MoveAction\n" +
+ " .create(ui)\n" +
+ " .on(() -> MoveRequestBuilder.create(ui.getModel()).setParentCandidates(%1$s()::%2$s))\n" +
+ " .move(r -> %3$s()::move)\n" +
+ " .then(%4$sMoveTreeAdapter::create)\n" +
+ " .install(ui::getMove);\n" +
" }\n\n";
public static final String INSTALL_DELETE_SIMPLE_ACTION = "" +
" @Override\n" +
@@ -82,7 +87,12 @@ public class ContentUIHandlerHelper extends ContentUIHelperSupport {
public static final String INSTALL_MOVE_ACTION = "" +
" @Override\n" +
" protected void installMoveAction() {\n" +
- " MoveMultiple.installMoveAction(ui, %1$s()::%2$s, r -> %3$s()::move);\n" +
+ " MoveAction\n" +
+ " .create(ui)\n" +
+ " .on(() -> MoveRequestBuilder.create(ui.getModel()).setParentCandidates(%1$s()::%2$s))\n" +
+ " .move(r -> %3$s()::move)\n" +
+ " .then(%4$sMoveTreeAdapter::create)\n" +
+ " .install(ui::getMove);\n" +
" }\n\n";
public static final String INSTALL_DELETE_ACTION = "" +
" @Override\n" +
@@ -97,7 +107,8 @@ public class ContentUIHandlerHelper extends ContentUIHelperSupport {
public static final String INSTALL_SAVE_ACTION_METHOD = "" +
" @Override\n" +
" protected void installSaveAction() {\n" +
- " SaveAction.create(ui, %1$s.class)\n" +
+ " SaveAction\n" +
+ " .create(ui, %1$s.class)\n" +
" .on(ui.getModel().getStates()::toSaveRequest)\n" +
" .save((r, d) -> %2$s)\n" +
" .then(new %3$s<>())\n" +
@@ -169,8 +180,6 @@ public class ContentUIHandlerHelper extends ContentUIHelperSupport {
adapterType = SaveContentEditUIAdapter.class;
serviceCall += "().save(r.getParentId(), d)";
break;
- case REFERENTIAL:
- return "";
case OPEN:
dtoType = generator.scopeBuilder.dtoType;
adapterType = SaveContentOpenableUIAdapter.class;
@@ -240,14 +249,15 @@ public class ContentUIHandlerHelper extends ContentUIHelperSupport {
}
if (extraType == null) {
if (editNode != null && selectNode != null && selectNode.getType().equals(editNode.getType())) {
- imports.add(MoveOpenable.class.getName());
+ imports.add(MoveAction.class.getName());
+ imports.add(MoveRequestBuilder.class.getName());
String methodName = "getBrothers";
if (editNode.getLevel() == 1) {
methodName = "getParentBrothers";
}
imports.add(CreateNewOpenableUI.class.getName());
- extraMethods += String.format(INSTALL_MOVE_SIMPLE_ACTION, serviceParentMethod, methodName, serviceMethod);
+ extraMethods += String.format(INSTALL_MOVE_SIMPLE_ACTION, serviceParentMethod, methodName, serviceMethod, generator.cleanClassName);
}
Class<?> deleteActionType = null;
switch (generator.getDescriptor().getContentNodeType()) {
@@ -275,7 +285,8 @@ public class ContentUIHandlerHelper extends ContentUIHelperSupport {
String helperName = StringUtils.capitalize(editNode.getModule().getName().toLowerCase()) + "TripActionHelper";
imports.add(generator.packageName.substring(0, generator.packageName.lastIndexOf(".") + 1) + helperName);
imports.add(DeleteMultiple.class.getName());
- imports.add(MoveMultiple.class.getName());
+ imports.add(MoveAction.class.getName());
+ imports.add(MoveRequestBuilder.class.getName());
imports.add(CreateNewOpenableUI.class.getName());
if (editNode.getLevel() == 1) {
extraMethods += String.format(ON_END_OPEN_UI, helperName);
@@ -283,7 +294,7 @@ public class ContentUIHandlerHelper extends ContentUIHelperSupport {
}
extraMethods += generateListCreateNewAction(imports, generator);
- extraMethods += String.format(INSTALL_MOVE_ACTION, serviceParentMethod, methodName, serviceMethod);
+ extraMethods += String.format(INSTALL_MOVE_ACTION, serviceParentMethod, methodName, serviceMethod, generator.cleanClassName.replace("List", ""));
extraMethods += String.format(INSTALL_DELETE_ACTION, serviceMethod);
return generate(ContentUIHandlerHelper.UI_HANDLER_GENERATED2, imports, generator.cleanClassName, uiHandler, dtoType, extraType, extraMethods);
}
=====================================
client/datasource/editor/spi/src/main/java/fr/ird/observe/client/datasource/editor/spi/content/helper/ContentUINavigationContextHelper.java
=====================================
@@ -82,6 +82,21 @@ public class ContentUINavigationContextHelper extends ContentUIHelperSupport {
" public final %1$s get%2$s() {\n" +
" return (%1$s) super.get%2$s();\n" +
" }\n\n";
+ public static final String GET_SIBLING = "" +
+ " @Override\n" +
+ " public %1$sNavigationNode findSibling(String siblingId) {\n" +
+ " return (%1$sNavigationNode) super.findSibling(siblingId);\n" +
+ " }\n\n";
+ public static final String GET_PARENT_SIBLING = "" +
+ " @Override\n" +
+ " public %1$sNavigationNode findParentSibling(String siblingId) {\n" +
+ " return (%1$sNavigationNode) super.findParentSibling(siblingId);\n" +
+ " }\n\n";
+ public static final String ADD_CHILDREN = "" +
+ " @Override\n" +
+ " public %1$sUINavigationNode addMissingChildren() {\n" +
+ " return (%1$sUINavigationNode) super.addMissingChildren();\n" +
+ " }\n\n";
public static String generateGetReference(List<String> imports, Class<?> referenceType) {
imports.add(referenceType.getName());
@@ -99,6 +114,21 @@ public class ContentUINavigationContextHelper extends ContentUIHelperSupport {
return String.format(GET_REFERENCE, referenceType.getSimpleName(), "ParentReference");
}
+ public static String generateAddChildren(List<String> imports, String name) {
+ imports.add(OpenableDtoServiceContext.class.getName());
+ return String.format(ADD_CHILDREN, name);
+ }
+
+ public static String generateGetSibling(List<String> imports, String name) {
+ imports.add(OpenableDtoServiceContext.class.getName());
+ return String.format(GET_SIBLING, name);
+ }
+
+ public static String generateGetParentSibling(List<String> imports, String name) {
+ imports.add(OpenableDtoServiceContext.class.getName());
+ return String.format(GET_PARENT_SIBLING, name);
+ }
+
public static String generateGetOpenableServiceSpi(List<String> imports, Class<?> dtoType, Class<?> referenceType, Class<?> serviceType) {
imports.add(dtoType.getName());
imports.add(referenceType.getName());
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/71da0962713044ece2fa66112…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/71da0962713044ece2fa66112…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop] Revoir l'ordre des actions dans la popup **Actions** - Closes #1788
by Tony CHEMIT 11 Feb '21
by Tony CHEMIT 11 Feb '21
11 Feb '21
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
5b045f48 by Tony Chemit at 2021-02-11T21:54:08+01:00
Revoir l'ordre des actions dans la popup **Actions** - Closes #1788
- - - - -
24 changed files:
- client/datasource/editor/api/src/main/i18n/getters/java.getter
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/ObserveKeyStrokesEditorApi.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/ConfigureMenuAction.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/id/ChangeId.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/id/ShowTechnicalInformations.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/move/MoveRequestBuilder.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/edit/actions/MoveEdit.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/list/ContentListUI.jaxx
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/list/ContentListUIHandler.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/list/actions/MoveMultiple.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/open/ContentOpenableUI.jaxx
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/open/ContentOpenableUI.jcss
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/open/ContentOpenableUIHandler.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/open/actions/MoveOpenable.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/referential/ContentReferentialUIHandler.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/referential/actions/ShowUniqueKeysReferential.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/referential/actions/ShowUsagesReferential.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/navigation/ContentUIMenuAction.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/navigation/NavigationTreeShowPopupHandler.java
- client/datasource/editor/api/src/main/resources/fr/ird/observe/client/datasource/editor/api/content/data/list/CommonContentListUI.jcss
- client/datasource/editor/api/src/main/resources/fr/ird/observe/client/datasource/editor/api/content/data/open/CommonContentOpenableUI.jcss
- client/i18n/src/main/i18n/translations/observe_en_GB.properties
- client/i18n/src/main/i18n/translations/observe_es_ES.properties
- client/i18n/src/main/i18n/translations/observe_fr_FR.properties
Changes:
=====================================
client/datasource/editor/api/src/main/i18n/getters/java.getter
=====================================
@@ -190,10 +190,10 @@ observe.ui.action.test.remote
observe.ui.action.test.remote.tip
observe.ui.action.test.server
observe.ui.action.test.server.tip
-observe.ui.choice.apply
observe.ui.choice.cancel
observe.ui.choice.cancel.tip
observe.ui.choice.confirm.delete
+observe.ui.choice.confirm.move
observe.ui.choice.confirm.replace
observe.ui.choice.continue
observe.ui.choice.doNotSave
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/ObserveKeyStrokesEditorApi.java
=====================================
@@ -65,8 +65,13 @@ public class ObserveKeyStrokesEditorApi extends ObserveKeyStrokesSupport {
public static final KeyStroke KEY_STROKE_RESET_DATA = KeyStroke.getKeyStroke("pressed F4");
public static final KeyStroke KEY_STROKE_SAVE_DATA = KeyStroke.getKeyStroke("pressed F5");
public static final KeyStroke KEY_STROKE_DELETE_DATA_GLOBAL = KeyStroke.getKeyStroke("pressed F6");
+ public static final KeyStroke KEY_STROKE_MOVE = KeyStroke.getKeyStroke("pressed F7");
public static final KeyStroke KEY_STROKE_DUPLICATE = KeyStroke.getKeyStroke("pressed F7");
public static final KeyStroke KEY_STROKE_GENERATE = KeyStroke.getKeyStroke("pressed F9");
+ public static final KeyStroke KEY_STROKE_CHANGE_ID = KeyStroke.getKeyStroke("pressed F9");
+ public static final KeyStroke KEY_STROKE_SHOW_TECHNICAL_INFORMATIONS = KeyStroke.getKeyStroke("pressed F10");
+ public static final KeyStroke KEY_STROKE_SHOW_USAGES = KeyStroke.getKeyStroke("pressed F11");
+ public static final KeyStroke KEY_STROKE_SHOW_UNIQUE_KEYS = KeyStroke.getKeyStroke("pressed F12");
public static final KeyStroke KEY_STROKE_COPY_VALUES_AND_SAVE = KeyStroke.getKeyStroke("ctrl pressed T");
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/ConfigureMenuAction.java
=====================================
@@ -26,6 +26,7 @@ import fr.ird.observe.client.datasource.editor.api.content.ContentUI;
import org.nuiton.jaxx.runtime.swing.action.MenuAction;
import javax.swing.JPopupMenu;
+import javax.swing.KeyStroke;
/**
* Created on 25/11/2020.
@@ -41,4 +42,12 @@ public interface ConfigureMenuAction<U extends ContentUI> extends MenuAction {
default JPopupMenu getPopupMenu() {
return getUi().getConfigurePopup();
}
+
+ @Override
+ default KeyStroke getMenuKeyStroke() {
+ // always use the given key-stroke to avoid change between two content
+ // a same such action is unique on a form, so can be determine once for all
+ return (KeyStroke) getValue(ACCELERATOR_KEY);
+ }
+
}
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/id/ChangeId.java
=====================================
@@ -24,6 +24,7 @@ package fr.ird.observe.client.datasource.editor.api.content.actions.id;
import com.google.common.collect.ImmutableSet;
import fr.ird.observe.client.datasource.api.ObserveSwingDataSource;
+import fr.ird.observe.client.datasource.editor.api.ObserveKeyStrokesEditorApi;
import fr.ird.observe.client.datasource.editor.api.content.ContentUI;
import fr.ird.observe.client.datasource.editor.api.content.actions.ConfigureMenuAction;
import fr.ird.observe.client.datasource.editor.api.content.actions.ContentUIActionSupport;
@@ -92,7 +93,7 @@ public class ChangeId<U extends ContentUI> extends ContentUIActionSupport<U> imp
}
public ChangeId(ChangeIdRequest request, ChangeIdExecutor executor) {
- super(t("observe.common.ReferentialDto.action.changeId.tip"), t("observe.common.ReferentialDto.action.changeId.tip"), "changeId", null);
+ super(t("observe.common.ReferentialDto.action.changeId.tip"), t("observe.common.ReferentialDto.action.changeId.tip"), "changeId", ObserveKeyStrokesEditorApi.KEY_STROKE_CHANGE_ID);
this.request = Objects.requireNonNull(request);
this.executor = Objects.requireNonNull(executor);
}
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/id/ShowTechnicalInformations.java
=====================================
@@ -22,6 +22,7 @@ package fr.ird.observe.client.datasource.editor.api.content.actions.id;
* #L%
*/
+import fr.ird.observe.client.datasource.editor.api.ObserveKeyStrokesEditorApi;
import fr.ird.observe.client.datasource.editor.api.content.ContentMode;
import fr.ird.observe.client.datasource.editor.api.content.ContentUI;
import fr.ird.observe.client.datasource.editor.api.content.actions.ConfigureMenuAction;
@@ -110,7 +111,7 @@ public class ShowTechnicalInformations<U extends ContentUI> extends ContentUIAct
public ShowTechnicalInformations(ShowIdRequest request, ShowIdExecutor executor) {
super(n("observe.ui.action.show.technical.information.tip"), n("observe.ui.action.show.technical.information.tip"),
- "show-information", null);
+ "show-information", ObserveKeyStrokesEditorApi.KEY_STROKE_SHOW_TECHNICAL_INFORMATIONS);
this.request = Objects.requireNonNull(request);
this.executor = Objects.requireNonNull(executor);
}
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/move/MoveRequestBuilder.java
=====================================
@@ -188,8 +188,8 @@ public class MoveRequestBuilder {
selectTargetAction.putValue(Action.ACCELERATOR_KEY, keyStroke);
selectTargetAction.putValue(Action.NAME, t);
selectTarget.setFocusable(false);
- keyStroke = ObserveKeyStrokesEditorApi.KEY_STROKE_APPLY;
- t = ObserveKeyStrokesEditorApi.suffixTextWithKeyStroke(t("observe.ui.choice.apply"), keyStroke);
+ keyStroke = ObserveKeyStrokesEditorApi.KEY_STROKE_MOVE;
+ t = ObserveKeyStrokesEditorApi.suffixTextWithKeyStroke(t("observe.ui.choice.confirm.move"), keyStroke);
applyAction = new AbstractAction() {
@Override
@@ -200,7 +200,6 @@ public class MoveRequestBuilder {
};
applyAction.putValue(Action.ACCELERATOR_KEY, keyStroke);
applyAction.putValue(Action.NAME, t);
-// selectTarget.setAction(selectTargetAction);
}
public MoveRequestBuilder setParentTargetReferenceType(Class<? extends DtoReference> parentTargetReferenceType) {
@@ -296,7 +295,7 @@ public class MoveRequestBuilder {
JLayeredPane parent = (JLayeredPane) optionPane.getParent().getParent();
- InputMap inputMap = parent.getRootPane().getInputMap(2);
+ InputMap inputMap = parent.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
inputMap.put(KeyStroke.getKeyStroke("pressed ENTER"), "none");
inputMap.put(KeyStroke.getKeyStroke("ctrl pressed ENTER"), "none");
@@ -305,6 +304,7 @@ public class MoveRequestBuilder {
}
};
jButton = UsageUIHandlerSupport.findButton(optionPane, continueActionText);
+ jButton.setIcon(UIHelper.getUIManagerActionIcon("move"));
Objects.requireNonNull(jButton);
jButton.setEnabled(false);
editor.getModel().addPropertyChangeListener("selectedItem", evt -> jButton.setEnabled(evt.getNewValue() != null));
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/edit/actions/MoveEdit.java
=====================================
@@ -23,6 +23,7 @@ package fr.ird.observe.client.datasource.editor.api.content.data.edit.actions;
*/
import com.google.common.collect.ImmutableSet;
+import fr.ird.observe.client.datasource.editor.api.ObserveKeyStrokesEditorApi;
import fr.ird.observe.client.datasource.editor.api.content.actions.ConfigureMenuAction;
import fr.ird.observe.client.datasource.editor.api.content.actions.move.MoveExecutor;
import fr.ird.observe.client.datasource.editor.api.content.actions.move.MoveRequest;
@@ -56,7 +57,7 @@ public final class MoveEdit<D extends EditableDto, U extends ContentEditUI<D, U>
}
protected MoveEdit(Class<D> dataType, MoveExecutor executor) {
- super(dataType, null, null, "move", null);
+ super(dataType, null, null, "move", ObserveKeyStrokesEditorApi.KEY_STROKE_MOVE);
this.executor = executor;
setText(ContentOpenableUII18nHelper.getActionMove(getDataType()));
setTooltipText(ContentOpenableUII18nHelper.getActionMove(getDataType()));
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/list/ContentListUI.jaxx
=====================================
@@ -80,6 +80,6 @@ public abstract ContentListUIHandler<D, R, U> getHandler();
</row>
</Table>
+ <JMenuItem id='move'/>
<JMenuItem id='showTechnicalInformations'/>
- <JMenuItem id='move' styleClass="ifOpen"/>
</fr.ird.observe.client.datasource.editor.api.content.ContentUI>
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/list/ContentListUIHandler.java
=====================================
@@ -139,9 +139,9 @@ public abstract class ContentListUIHandler<D extends DataDto, R extends DataDtoR
GotoOpenData.installAction(ui);
GotoSelectedData.installAction(ui);
installDeleteAction();
- ShowTechnicalInformations.installAction(ui);
installCreateNewAction();
installMoveAction();
+ ShowTechnicalInformations.installAction(ui);
}
@Override
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/list/actions/MoveMultiple.java
=====================================
@@ -23,6 +23,7 @@ package fr.ird.observe.client.datasource.editor.api.content.data.list.actions;
*/
import com.google.common.collect.ImmutableSet;
+import fr.ird.observe.client.datasource.editor.api.ObserveKeyStrokesEditorApi;
import fr.ird.observe.client.datasource.editor.api.content.actions.ConfigureMenuAction;
import fr.ird.observe.client.datasource.editor.api.content.actions.move.MoveExecutor;
import fr.ird.observe.client.datasource.editor.api.content.actions.move.MoveRequest;
@@ -62,7 +63,7 @@ public final class MoveMultiple<D extends DataDto, R extends DataDtoReference, U
}
protected MoveMultiple(Class<D> dataType, MoveExecutor executor) {
- super(dataType, null, null, "move", null);
+ super(dataType, null, null, "move", ObserveKeyStrokesEditorApi.KEY_STROKE_MOVE);
this.executor = executor;
setText(ContentListUII18nHelper.getActionMove(getDataType()));
setTooltipText(ContentListUII18nHelper.getActionMoveTip(getDataType()));
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/open/ContentOpenableUI.jaxx
=====================================
@@ -70,7 +70,7 @@ public void resetEdit() {
</cell>
</row>
</Table>
+ <JMenuItem id='move'/>
<JMenuItem id='showTechnicalInformations'/>
- <JMenuItem id='move' styleClass="ifOpen"/>
</fr.ird.observe.client.datasource.editor.api.content.ContentUI>
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/open/ContentOpenableUI.jcss
=====================================
@@ -44,7 +44,11 @@
}
#delete {
- visible:{states.isUpdatingMode()};
+ /*visible:{states.isUpdatingMode()};*/
+ enabled:{!states.isModified()};
+}
+
+#move {
enabled:{!states.isModified()};
}
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/open/ContentOpenableUIHandler.java
=====================================
@@ -95,8 +95,8 @@ public abstract class ContentOpenableUIHandler<D extends OpenableDto, U extends
installCreateNewAction();
installResetAction();
installSaveAction();
- installMoveAction();
installDeleteAction();
+ installMoveAction();
ShowTechnicalInformations.installAction(ui);
}
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/open/actions/MoveOpenable.java
=====================================
@@ -23,6 +23,7 @@ package fr.ird.observe.client.datasource.editor.api.content.data.open.actions;
*/
import com.google.common.collect.ImmutableSet;
+import fr.ird.observe.client.datasource.editor.api.ObserveKeyStrokesEditorApi;
import fr.ird.observe.client.datasource.editor.api.content.actions.ConfigureMenuAction;
import fr.ird.observe.client.datasource.editor.api.content.actions.move.MoveExecutor;
import fr.ird.observe.client.datasource.editor.api.content.actions.move.MoveRequest;
@@ -63,7 +64,7 @@ public final class MoveOpenable<D extends OpenableDto, U extends ContentOpenable
}
protected MoveOpenable(Class<D> dataType, MoveExecutor executor) {
- super(dataType, null, null, "move", null);
+ super(dataType, null, null, "move", ObserveKeyStrokesEditorApi.KEY_STROKE_MOVE);
this.executor = executor;
setText(ContentOpenableUII18nHelper.getActionMove(getDataType()));
setTooltipText(ContentOpenableUII18nHelper.getActionMove(getDataType()));
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/referential/ContentReferentialUIHandler.java
=====================================
@@ -135,10 +135,10 @@ public class ContentReferentialUIHandler<D extends ReferentialDto, R extends Ref
BackToListReferential.installAction(ui);
DetailReferential.installAction(ui);
DeleteReferential.installAction(ui);
+ ChangeId.installAction(ui);
ShowTechnicalInformations.installAction(ui);
- ShowUniqueKeysReferential.installAction(ui);
ShowUsagesReferential.installAction(ui);
- ChangeId.installAction(ui);
+ ShowUniqueKeysReferential.installAction(ui);
installCreateAction();
installModifyAction();
installSaveAction();
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/referential/actions/ShowUniqueKeysReferential.java
=====================================
@@ -22,6 +22,7 @@ package fr.ird.observe.client.datasource.editor.api.content.referential.actions;
* #L%
*/
+import fr.ird.observe.client.datasource.editor.api.ObserveKeyStrokesEditorApi;
import fr.ird.observe.client.datasource.editor.api.content.actions.ConfigureMenuAction;
import fr.ird.observe.client.datasource.editor.api.content.referential.ContentReferentialUI;
import fr.ird.observe.client.datasource.editor.api.content.referential.ContentReferentialUII18nHelper;
@@ -67,7 +68,7 @@ public final class ShowUniqueKeysReferential<D extends ReferentialDto, R extends
}
public ShowUniqueKeysReferential(Class<D> dataType) {
- super(dataType, t("observe.referential.Referential.action.show.unique.keys.tip"), t("observe.referential.Referential.action.show.unique.keys.tip"), "show-keys", null);
+ super(dataType, t("observe.referential.Referential.action.show.unique.keys.tip"), t("observe.referential.Referential.action.show.unique.keys.tip"), "show-keys", ObserveKeyStrokesEditorApi.KEY_STROKE_SHOW_UNIQUE_KEYS);
}
@Override
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/referential/actions/ShowUsagesReferential.java
=====================================
@@ -23,6 +23,7 @@ package fr.ird.observe.client.datasource.editor.api.content.referential.actions;
*/
import fr.ird.observe.client.ClientUIContext;
+import fr.ird.observe.client.datasource.editor.api.ObserveKeyStrokesEditorApi;
import fr.ird.observe.client.datasource.editor.api.content.actions.ConfigureMenuAction;
import fr.ird.observe.client.datasource.editor.api.content.referential.ContentReferentialUI;
import fr.ird.observe.client.datasource.editor.api.content.referential.ContentReferentialUIModel;
@@ -53,7 +54,7 @@ public final class ShowUsagesReferential<D extends ReferentialDto, R extends Ref
}
public ShowUsagesReferential(Class<D> dataType) {
- super(dataType, t("observe.referential.Referential.action.show.usages.tip"), t("observe.referential.Referential.action.show.usages.tip"), "show-usages", null);
+ super(dataType, t("observe.referential.Referential.action.show.usages.tip"), t("observe.referential.Referential.action.show.usages.tip"), "show-usages", ObserveKeyStrokesEditorApi.KEY_STROKE_SHOW_USAGES);
}
@Override
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/navigation/ContentUIMenuAction.java
=====================================
@@ -80,7 +80,7 @@ public class ContentUIMenuAction extends AbstractAction implements MenuAction {
toolTipText = ObserveKeyStrokesSupport.removeKeyStroke(toolTipText);
putValue(SHORT_DESCRIPTION, toolTipText);
String name = (String) getValue(NAME);
- if (name!=null && name.isEmpty()) {
+ if (name != null && name.isEmpty()) {
putValue(NAME, toolTipText);
}
}
@@ -114,19 +114,11 @@ public class ContentUIMenuAction extends AbstractAction implements MenuAction {
editor.setEnabled(action.isEnabled());
}
- @Override
- public void initUI() {
- if (!isWithKeyStroke()) {
- KeyStroke keyStroke = getMenuKeyStroke();
- setKeyStroke(keyStroke);
- }
- AbstractButton editor = getEditor();
- getPopupMenu().add(editor);
- initEditor();
- }
-
@Override
public KeyStroke getMenuKeyStroke() {
+ if (isWithKeyStroke()) {
+ return (KeyStroke) getValue(ACCELERATOR_KEY);
+ }
int usedCount = (int) Arrays.stream(getPopupMenu().getSubElements()).filter(p -> !((ContentUIMenuAction) ((AbstractButton) p).getAction()).isWithKeyStroke()).count();
return getMenuKeyStroke(usedCount);
}
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/navigation/NavigationTreeShowPopupHandler.java
=====================================
@@ -93,12 +93,12 @@ public class NavigationTreeShowPopupHandler implements KeyListener, MouseListene
popup.addSeparator();
length = popup.getSubElements().length;
}
- Arrays.stream(selectedContentUI.getInsertPopup().getSubElements()).forEach(a -> new ContentUIMenuAction(popup, (AbstractButton) a).init());
+ Arrays.stream(selectedContentUI.getConfigurePopup().getSubElements()).forEach(a -> ContentUIMenuAction.createWithKeyStroke(popup, (AbstractButton) a).init());
if (popup.getSubElements().length > length) {
popup.addSeparator();
}
- Arrays.stream(selectedContentUI.getConfigurePopup().getSubElements()).forEach(a -> new ContentUIMenuAction(popup, (AbstractButton) a).init());
length = popup.getSubElements().length;
+ Arrays.stream(selectedContentUI.getInsertPopup().getSubElements()).forEach(a -> new ContentUIMenuAction(popup, (AbstractButton) a).init());
if (length == 0) {
popup.add(noAction);
}
=====================================
client/datasource/editor/api/src/main/resources/fr/ird/observe/client/datasource/editor/api/content/data/list/CommonContentListUI.jcss
=====================================
@@ -24,6 +24,3 @@
enabled: true;
}
-.ifOpen {
- enabled:{states.isUpdatingMode()};
-}
=====================================
client/datasource/editor/api/src/main/resources/fr/ird/observe/client/datasource/editor/api/content/data/open/CommonContentOpenableUI.jcss
=====================================
@@ -49,6 +49,3 @@ BeanCheckBox {
horizontalTextPosition:{BeanCheckBox.LEFT};
}
-.ifOpen {
- enabled:{states.isUpdatingMode() && !states.isModified()};
-}
=====================================
client/i18n/src/main/i18n/translations/observe_en_GB.properties
=====================================
@@ -1300,6 +1300,7 @@ observe.ui.choice.cancel=Cancel
observe.ui.choice.cancel.tip=To cancel, press ESCAPE key.
observe.ui.choice.confirm.delete=Confirm delete
observe.ui.choice.confirm.insert=Confirm to insert
+observe.ui.choice.confirm.move=Move
observe.ui.choice.confirm.replace=Replace
observe.ui.choice.continue=Continue
observe.ui.choice.dcp.default=Other opérations or objects (FOB)
=====================================
client/i18n/src/main/i18n/translations/observe_es_ES.properties
=====================================
@@ -1300,6 +1300,7 @@ observe.ui.choice.cancel=Cancelar
observe.ui.choice.cancel.tip=To cancel, press ESCAPE key. \#TODO
observe.ui.choice.confirm.delete=Eliminar
observe.ui.choice.confirm.insert=Confirmer l'insertion \#TODO
+observe.ui.choice.confirm.move=Cambiar
observe.ui.choice.confirm.replace=Reemplazar
observe.ui.choice.continue=Continuar
observe.ui.choice.dcp.default=Other opérations or objects (FOB) \#TODO
=====================================
client/i18n/src/main/i18n/translations/observe_fr_FR.properties
=====================================
@@ -1300,6 +1300,7 @@ observe.ui.choice.cancel=Annuler
observe.ui.choice.cancel.tip=Pour annuler, presser la touche ÉCHAP.
observe.ui.choice.confirm.delete=Supprimer
observe.ui.choice.confirm.insert=Confirmer l'insertion
+observe.ui.choice.confirm.move=Déplacer
observe.ui.choice.confirm.replace=Remplacer
observe.ui.choice.continue=Continuer
observe.ui.choice.dcp.default=Autre opérations et types d'objets (FOB)
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/5b045f480095dead439711916…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/5b045f480095dead439711916…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop] 2 commits: Problème de contexte d'édition lors de déplacement - Closes #1789
by Tony CHEMIT 11 Feb '21
by Tony CHEMIT 11 Feb '21
11 Feb '21
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
3d3fda15 by Tony Chemit at 2021-02-11T19:04:53+01:00
Problème de contexte d'édition lors de déplacement - Closes #1789
- - - - -
20b77f77 by Tony Chemit at 2021-02-11T19:06:32+01:00
Déplacement de marées pas effectif - Closes #1786
Revue pour le déplacement simple.
- - - - -
5 changed files:
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/move/MoveExecutor.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/move/tree/DefaultMultipleMoveTreeAdapter.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/move/tree/DefaultSingleMoveTreeAdapter.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/move/tree/MoveTreeAdapter.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/list/ContentListUINavigationNode.java
Changes:
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/move/MoveExecutor.java
=====================================
@@ -27,7 +27,6 @@ import fr.ird.observe.client.datasource.editor.api.DataSourceEditor;
import fr.ird.observe.client.datasource.editor.api.content.actions.mode.ChangeMode;
import fr.ird.observe.client.datasource.editor.api.content.actions.move.tree.MoveTreeAdapter;
import fr.ird.observe.client.datasource.editor.api.navigation.NavigationTree;
-import fr.ird.observe.dto.data.TripAware;
import fr.ird.observe.toolkit.dto.navigation.edit.EditNode;
import fr.ird.observe.toolkit.dto.navigation.edit.close.CloseEditNodeVetoException;
import org.apache.logging.log4j.LogManager;
@@ -103,13 +102,7 @@ public class MoveExecutor {
}
protected boolean close(MoveRequest request, EditNode<?> editNode, DataSourceEditor dataSourceEditor) {
- if (TripAware.class.isAssignableFrom(request.getReferenceType())) {
- // while moving trip, we do not close them
- //FIXME Maybe this should be driven by request (with doClose parameter)
- return true;
- }
- String id = request.getIds().iterator().next();
- if (editNode != null && Objects.equals(id, editNode.getId())) {
+ if (editNode != null && request.getIds().contains(editNode.getId())) {
try {
ChangeMode.closeData(dataSourceEditor, editNode);
} catch (CloseEditNodeVetoException e) {
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/move/tree/DefaultMultipleMoveTreeAdapter.java
=====================================
@@ -27,8 +27,6 @@ import fr.ird.observe.client.datasource.editor.api.content.actions.move.MoveRequ
import fr.ird.observe.client.datasource.editor.api.content.data.list.ContentListUINavigationNode;
import fr.ird.observe.client.datasource.editor.api.navigation.NavigationTree;
import fr.ird.observe.client.datasource.editor.api.navigation.tree.NavigationNode;
-import fr.ird.observe.client.datasource.editor.api.navigation.tree.root.RootNavigationNode;
-import fr.ird.observe.dto.referential.common.ProgramReference;
/**
* Created on 15/10/2020.
@@ -41,69 +39,24 @@ public class DefaultMultipleMoveTreeAdapter implements MoveTreeAdapter {
@Override
public void adaptTree(MoveRequest request, NavigationTree tree) {
ImmutableSet<String> ids = request.getIds();
+
// get old parent node
ContentListUINavigationNode oldParentNode = (ContentListUINavigationNode) tree.getSelectedNode().upToReferenceContainerNode(request.getReferenceType());
- // get shared ancestor of tow parents
+ // get shared ancestor of two parents
NavigationNode parentContainerNode = oldParentNode.upToReferenceContainerNode(request.getParentReferenceType());
// get new parent node
- ContentListUINavigationNode newParentNode = getNewParentNode(request, parentContainerNode);
+ ContentListUINavigationNode newParentNode = MoveTreeAdapter.getNewParentNode(request, parentContainerNode);
// update it
newParentNode.addChildren(ids);
// clean old paren node
- cleanOldParentNode(tree, ids, oldParentNode);
-
- if (request.isSelectTarget()) {
- // select new parent node
- tree.selectSafeNode(newParentNode);
- } else {
- if (oldParentNode.getParent() == null) {
- // limit case: select first node in tree (previous old parent node was removed)
- tree.selectFirstNode();
- }
- }
- }
+ MoveTreeAdapter.cleanOldParentNode(tree, ids, oldParentNode);
- protected void cleanOldParentNode(NavigationTree tree, ImmutableSet<String> ids, ContentListUINavigationNode oldParentNode) {
- if (oldParentNode.getChildCount() == ids.size() && oldParentNode.getParent().isRoot()) {
- RootNavigationNode root = (RootNavigationNode) oldParentNode.getParent();
- if (!root.getInitializer().getConfig().isLoadEmptyProgram()) {
- // limit case : node will be empty, must remove it
- root.remove(oldParentNode);
- return;
- }
- }
- // clean it
- oldParentNode.removeChildren(ids);
-
- // reload node
- oldParentNode.reloadNodeData();
-
- // re-select the node (to update associated form)
- tree.reSelectSafeNode(oldParentNode);
+ MoveTreeAdapter.doFinalSelect(request, tree, oldParentNode, newParentNode);
}
- protected ContentListUINavigationNode getNewParentNode(MoveRequest request, NavigationNode oldParentContainerNode) {
- String newParentId = request.getNewParentId();
- if (oldParentContainerNode.isRoot()) {
- RootNavigationNode root = (RootNavigationNode) oldParentContainerNode;
- boolean loadEmptyProgram = root.getInitializer().getConfig().isLoadEmptyProgram();
- if (!loadEmptyProgram) {
- NavigationNode result = root.findChildById(newParentId);
- if (result == null) {
- // limit case : node does not exist (was empty previously), need to create it
- ProgramReference reference = root.getInitializer().getNavigationResult().getProgram(newParentId);
- result = root.getCapability().createChildNode(reference);
- int position = root.getCapability().getNodePosition(reference);
- root.insert(result, position);
- }
- return (ContentListUINavigationNode) result;
- }
- }
- return (ContentListUINavigationNode) oldParentContainerNode.downToReferenceNode(request.getParentTargetReferenceType(), newParentId);
- }
}
\ No newline at end of file
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/move/tree/DefaultSingleMoveTreeAdapter.java
=====================================
@@ -23,6 +23,7 @@ package fr.ird.observe.client.datasource.editor.api.content.actions.move.tree;
*/
import fr.ird.observe.client.datasource.editor.api.content.actions.move.MoveRequest;
+import fr.ird.observe.client.datasource.editor.api.content.data.list.ContentListUINavigationNode;
import fr.ird.observe.client.datasource.editor.api.navigation.NavigationTree;
import fr.ird.observe.client.datasource.editor.api.navigation.tree.NavigationNode;
import fr.ird.observe.dto.reference.DtoReference;
@@ -37,47 +38,32 @@ public class DefaultSingleMoveTreeAdapter implements MoveTreeAdapter {
@Override
public void adaptTree(MoveRequest request, NavigationTree tree) {
+ String id = request.getId();
Class<? extends DtoReference> parentReferenceType = request.getParentTargetReferenceType();
- // selected node
- NavigationNode node = tree.getSelectedNode();
+ Class<? extends DtoReference> referenceType = request.getReferenceType();
- Class<? extends DtoReference> referenceType = node.getScope().getMainReferenceType();
+ // get old parent node
+ ContentListUINavigationNode oldParentNode = (ContentListUINavigationNode) tree.getSelectedNode().upToReferenceContainerNode(referenceType);
- // up to old container reference node
- NavigationNode oldChildContainerNode = node.upToReferenceContainerNode(referenceType);
-
- // remove node from old child container node
- node.removeFromParent();
-
- // reload old child container node
- oldChildContainerNode.nodeChanged();
-
- // up to old parent container node
- NavigationNode oldParentContainerNode = oldChildContainerNode.upToReferenceContainerNode(parentReferenceType);
+ // get shared ancestor of two parents
+ NavigationNode parentContainerNode = oldParentNode.upToReferenceContainerNode(parentReferenceType);
// dow to new parent node
- NavigationNode newParentNode = oldParentContainerNode.downToReferenceNode(parentReferenceType, request.getNewParentId());
+ ContentListUINavigationNode newParentNode = MoveTreeAdapter.getNewParentNode(request, parentContainerNode);
// down to new child container node
- NavigationNode newChildContainerNode = newParentNode.downToReferenceContainerNode(referenceType);
-
- // insert node into new child container node
- newChildContainerNode.add(node);
+ ContentListUINavigationNode newChildContainerNode = (ContentListUINavigationNode) newParentNode.downToReferenceContainerNode(referenceType);
- // reload new child container node
- newChildContainerNode.nodeChanged();
+ // update it
+ NavigationNode node = newChildContainerNode.addChildren(id);
- // select final node parent (need to do this, otherwise next command has no effect (node stays the same)
- tree.selectSafeNode(newChildContainerNode);
-
- // get back brand new node (otherwise tree model is broken)
- node = newChildContainerNode.downToReferenceNode(referenceType, request.getId());
-
- // select final node
- tree.selectSafeNode(node);
+ // clean old paren node
+ MoveTreeAdapter.cleanOldParentNode(tree, request.getIds(), oldParentNode);
node.getParent().refreshToRoot();
+
+ MoveTreeAdapter.doFinalSelect(request, tree, oldParentNode, node);
}
}
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/move/tree/MoveTreeAdapter.java
=====================================
@@ -22,8 +22,13 @@ package fr.ird.observe.client.datasource.editor.api.content.actions.move.tree;
* #L%
*/
+import com.google.common.collect.ImmutableSet;
import fr.ird.observe.client.datasource.editor.api.content.actions.move.MoveRequest;
+import fr.ird.observe.client.datasource.editor.api.content.data.list.ContentListUINavigationNode;
import fr.ird.observe.client.datasource.editor.api.navigation.NavigationTree;
+import fr.ird.observe.client.datasource.editor.api.navigation.tree.NavigationNode;
+import fr.ird.observe.client.datasource.editor.api.navigation.tree.root.RootNavigationNode;
+import fr.ird.observe.dto.referential.common.ProgramReference;
/**
* To adapt navigation tree after the move operation.
@@ -37,4 +42,54 @@ public interface MoveTreeAdapter {
void adaptTree(MoveRequest request, NavigationTree tree);
+ static void cleanOldParentNode(NavigationTree tree, ImmutableSet<String> ids, ContentListUINavigationNode oldParentNode) {
+ if (oldParentNode.getChildCount() == ids.size() && oldParentNode.getParent().isRoot()) {
+ RootNavigationNode root = (RootNavigationNode) oldParentNode.getParent();
+ if (!root.getInitializer().getConfig().isLoadEmptyProgram()) {
+ // limit case : node will be empty, must remove it
+ root.remove(oldParentNode);
+ return;
+ }
+ }
+ // clean it
+ oldParentNode.removeChildren(ids);
+
+ // reload node
+ oldParentNode.reloadNodeData();
+
+ // re-select the node (to update associated form)
+ tree.reSelectSafeNode(oldParentNode);
+ }
+
+ static ContentListUINavigationNode getNewParentNode(MoveRequest request, NavigationNode oldParentContainerNode) {
+ String newParentId = request.getNewParentId();
+ if (oldParentContainerNode.isRoot()) {
+ RootNavigationNode root = (RootNavigationNode) oldParentContainerNode;
+ boolean loadEmptyProgram = root.getInitializer().getConfig().isLoadEmptyProgram();
+ if (!loadEmptyProgram) {
+ NavigationNode result = root.findChildById(newParentId);
+ if (result == null) {
+ // limit case : node does not exist (was empty previously), need to create it
+ ProgramReference reference = root.getInitializer().getNavigationResult().getProgram(newParentId);
+ result = root.getCapability().createChildNode(reference);
+ int position = root.getCapability().getNodePosition(reference);
+ root.insert(result, position);
+ }
+ return (ContentListUINavigationNode) result;
+ }
+ }
+ return (ContentListUINavigationNode) oldParentContainerNode.downToReferenceNode(request.getParentTargetReferenceType(), newParentId);
+ }
+
+ static void doFinalSelect(MoveRequest request, NavigationTree tree,NavigationNode oldParentNode, NavigationNode newParentNode ) {
+ if (request.isSelectTarget()) {
+ // select new parent node
+ tree.selectSafeNode(newParentNode);
+ } else {
+ if (oldParentNode.getParent() == null) {
+ // limit case: select first node in tree (previous old parent node was removed)
+ tree.selectFirstNode();
+ }
+ }
+ }
}
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/list/ContentListUINavigationNode.java
=====================================
@@ -102,4 +102,25 @@ public abstract class ContentListUINavigationNode extends NavigationNode {
}
}
}
+ public NavigationNode addChildren(String id) {
+ NavigationNode result=null;
+ ContentListUINavigationInitializer initializer = getInitializer();
+ boolean notLoaded = isNotLoaded();
+ reloadNodeData();
+ List<? extends DataDtoReference> references = initializer.getReferences();
+ ContentListUINavigationCapability<?> capability = getCapability();
+ for (DataDtoReference reference : references) {
+ boolean idEquals = id.equals(reference.getId());
+ if (notLoaded || idEquals) {
+
+ NavigationNode childNode = capability.createChildNode(reference);
+ int nodePosition = capability.getNodePosition(reference);
+ insert(childNode, nodePosition);
+ if (idEquals) {
+ result = childNode;
+ }
+ }
+ }
+ return result;
+ }
}
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/b4cc38f9f70524a924d4df25…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/b4cc38f9f70524a924d4df25…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop] Mauvaise disposition de l'encadré des espèces et quelques améliorations sur...
by Tony CHEMIT 11 Feb '21
by Tony CHEMIT 11 Feb '21
11 Feb '21
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
b4cc38f9 by Tony Chemit at 2021-02-11T17:42:58+01:00
Mauvaise disposition de l'encadré des espèces et quelques améliorations sur les deux écrans - Closes #1781
- - - - -
5 changed files:
- client/datasource/editor/api/src/main/resources/fr/ird/observe/client/datasource/editor/api/content/data/sample/CommonSample.jcss
- client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/observation/DiscardedTargetSampleUI.jaxx
- client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/observation/KeptTargetSampleUI.jaxx
- client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/observation/NonTargetSampleUI.jaxx
- services/i18n/src/main/i18n/translations/services_fr_FR.properties
Changes:
=====================================
client/datasource/editor/api/src/main/resources/fr/ird/observe/client/datasource/editor/api/content/data/sample/CommonSample.jcss
=====================================
@@ -25,7 +25,7 @@
}
#acquisitionModePanel {
- border:{new TitledBorder(new javax.swing.border.EmptyBorder(0,0,0,0), t("observe.data.Data.acquisitionMode"))};
+ border:{new TitledBorder(t("observe.data.Data.acquisitionMode"))};
}
#acquisitionModeNumber {
@@ -45,7 +45,7 @@
}
#speciesAndMeasureTypesPanel {
- border:{new TitledBorder(new javax.swing.border.EmptyBorder(0,0,0,0), t("observe.data.Data.speciesAndMeasureTypes"))};
+ border:{new TitledBorder(t("observe.data.Data.speciesAndMeasureTypes"))};
}
#sizeMeasureType {
=====================================
client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/observation/DiscardedTargetSampleUI.jaxx
=====================================
@@ -72,13 +72,13 @@
<!-- mode de saisie - espèce - type de mesures -->
<row>
- <cell>
+ <cell columns="2">
<JPanel id='acquisitionModePanel' layout="{new GridLayout(0, 1)}">
<JRadioButton id='acquisitionModeNumber'/>
<JRadioButton id='acquisitionModeIndividual'/>
</JPanel>
</cell>
- <cell weightx='1' anchor='east'>
+ <cell columns="2" weightx='1' anchor='east'>
<Table id='speciesAndMeasureTypesPanel' fill='both' insets='1'>
<row>
<cell>
@@ -119,6 +119,7 @@
</row>
<!-- length -->
+ <!-- lengthMeasureMethod -->
<row>
<cell>
<JLabel id='lengthLabel' styleClass="i18n"/>
@@ -126,9 +127,6 @@
<cell weightx='1' anchor='east'>
<NumberEditor id='length' styleClass="float1"/>
</cell>
- </row>
- <!-- lengthMeasureMethod -->
- <row>
<cell>
<JLabel id='lengthMeasureMethodLabel'/>
</cell>
@@ -138,6 +136,7 @@
</row>
<!-- weight -->
+ <!-- weightMeasureMethod -->
<row>
<cell>
<JLabel id='weightLabel' styleClass="i18n"/>
@@ -145,9 +144,6 @@
<cell weightx='1' anchor='east'>
<NumberEditor id='weight' styleClass="float2"/>
</cell>
- </row>
- <!-- weightMeasureMethod -->
- <row>
<cell>
<JLabel id='weightMeasureMethodLabel'/>
</cell>
@@ -157,6 +153,7 @@
</row>
<!-- count -->
+ <!-- tagNumber -->
<row>
<cell>
<JLabel id='countLabel' styleClass="i18n"/>
@@ -164,10 +161,6 @@
<cell weightx='1' anchor='east'>
<NumberEditor id='count' styleClass="int6"/>
</cell>
- </row>
-
- <!-- tagNumber -->
- <row>
<cell anchor='west'>
<JLabel id='tagNumberLabel' styleClass="i18n"/>
</cell>
@@ -175,7 +168,6 @@
<NormalTextEditor id='tagNumber'/>
</cell>
</row>
-
</Table>
<Table id='extraZone' fill='both' weightx='1' insets='0'>
=====================================
client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/observation/KeptTargetSampleUI.jaxx
=====================================
@@ -63,21 +63,18 @@
errorTableModel='{getErrorTableModel()}' context='update' parentValidator='{validator}'/>
<ButtonGroup id='acquisitionModeGroup'/>
- <JLabel id='hideFormInformation' styleClass='skipI18n'
- text="observe.data.ps.observation.KeptTargetSample.message.cantAdd"/>
-
<Table id='editorPanel' fill='both' insets='1' beanScope="tableEditBean"
_tableEditors='{newComponentArray(species,sex,sizeMeasureType,length,weight,count)}'>
<!-- mode de saisie - espèce - type de mesures -->
<row>
- <cell>
+ <cell columns="2">
<JPanel id='acquisitionModePanel' layout="{new GridLayout(0, 1)}">
<JRadioButton id='acquisitionModeNumber'/>
<JRadioButton id='acquisitionModeIndividual'/>
</JPanel>
</cell>
- <cell weightx='1' anchor='east'>
+ <cell columns="2" weightx='1' anchor='east'>
<Table id='speciesAndMeasureTypesPanel' fill='both' insets='1'>
<row>
<cell>
@@ -118,6 +115,7 @@
</row>
<!-- length -->
+ <!-- lengthMeasureMethod -->
<row>
<cell>
<JLabel id='lengthLabel' styleClass="i18n"/>
@@ -125,9 +123,6 @@
<cell weightx='1' anchor='east'>
<NumberEditor id='length' styleClass="float1"/>
</cell>
- </row>
- <!-- lengthMeasureMethod -->
- <row>
<cell>
<JLabel id='lengthMeasureMethodLabel'/>
</cell>
@@ -137,6 +132,7 @@
</row>
<!-- weight -->
+ <!-- weightMeasureMethod -->
<row>
<cell>
<JLabel id='weightLabel' styleClass="i18n"/>
@@ -144,9 +140,6 @@
<cell weightx='1' anchor='east'>
<NumberEditor id='weight' styleClass="float2"/>
</cell>
- </row>
- <!-- weightMeasureMethod -->
- <row>
<cell>
<JLabel id='weightMeasureMethodLabel'/>
</cell>
@@ -156,6 +149,7 @@
</row>
<!-- count -->
+ <!-- tagNumber -->
<row>
<cell>
<JLabel id='countLabel' styleClass="i18n"/>
@@ -163,10 +157,6 @@
<cell weightx='1' anchor='east'>
<NumberEditor id='count' styleClass="int6"/>
</cell>
- </row>
-
- <!-- tagNumber -->
- <row>
<cell anchor='west'>
<JLabel id='tagNumberLabel' styleClass="i18n"/>
</cell>
@@ -177,6 +167,9 @@
</Table>
+ <JLabel id='hideFormInformation' styleClass='skipI18n'
+ text="observe.data.ps.observation.KeptTargetSample.message.cantAdd"/>
+
<Table id='extraZone' fill='both' weightx='1' insets='0'>
<row>
<cell weighty='1'>
=====================================
client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/observation/NonTargetSampleUI.jaxx
=====================================
@@ -73,13 +73,13 @@
<!-- mode de saisie - espèce - type de mesures -->
<row>
- <cell>
+ <cell columns="2">
<JPanel id='acquisitionModePanel' layout="{new GridLayout(0, 1)}">
<JRadioButton id='acquisitionModeNumber'/>
<JRadioButton id='acquisitionModeIndividual'/>
</JPanel>
</cell>
- <cell weightx='1' anchor='east'>
+ <cell columns="2" weightx='1' anchor='east'>
<Table id='speciesAndMeasureTypesPanel' fill='both' insets='1'>
<row>
<cell>
@@ -110,6 +110,7 @@
</row>
<!-- length -->
+ <!-- count -->
<row>
<cell>
<JLabel id='lengthLabel'/>
@@ -117,9 +118,16 @@
<cell weightx='1' anchor='east'>
<NumberEditor id='length' styleClass="float1"/>
</cell>
+ <cell>
+ <JLabel id='countLabel'/>
+ </cell>
+ <cell weightx='1' anchor='east'>
+ <NumberEditor id='count' styleClass="int6"/>
+ </cell>
</row>
<!-- weight -->
+ <!-- weightMeasureMethod -->
<row>
<cell>
<JLabel id='weightLabel'/>
@@ -127,9 +135,6 @@
<cell weightx='1' anchor='east'>
<NumberEditor id='weight' styleClass="float2"/>
</cell>
- </row>
- <!-- weightMeasureMethod -->
- <row>
<cell>
<JLabel id='weightMeasureMethodLabel'/>
</cell>
@@ -138,17 +143,8 @@
</cell>
</row>
- <!-- count -->
- <row>
- <cell>
- <JLabel id='countLabel'/>
- </cell>
- <cell weightx='1' anchor='east'>
- <NumberEditor id='count' styleClass="int6"/>
- </cell>
- </row>
-
<!-- sex -->
+ <!-- speciesFate -->
<row>
<cell>
<JLabel id='sexLabel'/>
@@ -156,10 +152,6 @@
<cell weightx='1' anchor='east'>
<JaxxComboBox id='sex' genericType='SexReference'/>
</cell>
- </row>
-
- <!-- speciesFate -->
- <row>
<cell>
<JLabel id='speciesFateLabel'/>
</cell>
@@ -169,6 +161,7 @@
</row>
<!-- reference pĥoto -->
+ <!-- tagNumber -->
<row>
<cell>
<JLabel id='picturesReferencesLabel'/>
@@ -176,10 +169,6 @@
<cell weightx='1' anchor='east'>
<NormalTextEditor id='picturesReferences'/>
</cell>
- </row>
-
- <!-- tagNumber -->
- <row>
<cell anchor='west'>
<JLabel id='tagNumberLabel'/>
</cell>
@@ -187,7 +176,6 @@
<NormalTextEditor id='tagNumber'/>
</cell>
</row>
-
</Table>
<Table id='extraZone' fill='both' weightx='1' insets='0'>
=====================================
services/i18n/src/main/i18n/translations/services_fr_FR.properties
=====================================
@@ -13,7 +13,7 @@ observe.Id.sex=Sexe
observe.Id.sizeMeasureType=Type de mensuration
observe.Id.validation.required.latitude=La latitude doit être renseignée.
observe.Id.validation.required.longitude=La longitude doit être renseignée.
-observe.Id.weightMeasureType=Type de mesure de poids
+observe.Id.weightMeasureType=Type de pesée
observe.Id.whenArriving=À l'arrivée
observe.Id.whenLeaving=Au départ
observe.business.module.common.common.referential.title=Référentiel commun
@@ -665,7 +665,7 @@ observe.referential.common.VesselSizeCategory.gaugeLabel=Libellé jauge
observe.referential.common.VesselSizeCategory.type=Catégorie de bateau
observe.referential.common.VesselType.type=Type de pêcherie
observe.referential.common.WeightMeasureMethod.type=Méthode de mesure de poids
-observe.referential.common.WeightMeasureType.type=Type de mesure de poids
+observe.referential.common.WeightMeasureType.type=Type de pesée
observe.referential.common.Wind.speedRange=Libellé vitesse vent
observe.referential.common.Wind.type=Vent Beaufort
observe.referential.common.Wind.waveHeight=Libellé Hauteur moyenne vagues
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/b4cc38f9f70524a924d4df25e…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/b4cc38f9f70524a924d4df25e…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop] 9 commits: Review some start action accelerator (replace Alt+Q by Alt+S) (the first one...
by Tony CHEMIT 11 Feb '21
by Tony CHEMIT 11 Feb '21
11 Feb '21
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
905a3a8f by Tony Chemit at 2021-02-11T09:09:38+01:00
Review some start action accelerator (replace Alt+Q by Alt+S) (the first one looks more than a quit command...)
- - - - -
e961cb3b by Tony Chemit at 2021-02-11T09:10:43+01:00
Improve data management messages
- - - - -
eb3f89cf by Tony Chemit at 2021-02-11T09:55:53+01:00
Déplacement de marées pas effectif - See #1786
Pouvoir appliquer l'action sur une sélection multiple
- - - - -
db1c77ff by Tony Chemit at 2021-02-11T12:14:55+01:00
Add nice NavigationResult.getProgram method
- - - - -
3a7b5612 by Tony Chemit at 2021-02-11T12:16:19+01:00
Déplacement de marées pas effectif - See #1786
Mauvais paramétrage des provider de nœuds
- - - - -
cbb69419 by Tony Chemit at 2021-02-11T12:16:43+01:00
Déplacement de marées pas effectif - See #1786
Suppression capability non utilisée
- - - - -
ae75ca80 by Tony Chemit at 2021-02-11T14:23:04+01:00
Déplacement de marées pas effectif - See #1786
Rendre effective le déplacement multiple depuis un nœud de type liste.
- - - - -
5b9d1633 by Tony Chemit at 2021-02-11T15:02:24+01:00
On en voit plus les DCP! - Closes #1782
Déplacement de marées pas effectif - Closes #1786
- - - - -
31e9b8fe by Tony Chemit at 2021-02-11T17:24:33+01:00
On en voit plus les DCP! - Closes #1782
Déplacement de marées pas effectif - Closes #1786
Amélioration de la boite de dialogue de suppression - Closes #1787
- - - - -
24 changed files:
- client/datasource/actions/src/main/i18n/getters/java.getter
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/actions/DataManager.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/data/actions/Apply.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/referential/ng/actions/Apply.java
- client/datasource/editor/api/src/main/i18n/getters/java.getter
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/ObserveKeyStrokesEditorApi.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/id/ChangeId.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/move/MoveRequest.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/move/MoveRequestBuilder.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/move/tree/DefaultMultipleMoveTreeAdapter.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/list/ContentListUI.jcss
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/list/ContentListUINavigationNode.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/navigation/tree/NavigationNode.java
- − client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/navigation/tree/capability/ReferenceListContainerCapability.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/navigation/tree/root/RootNavigationCapability.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/navigation/tree/root/RootNavigationTreeNodeProvider.java
- client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/LlRootNavigationTreeNodeProvider.java
- client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/PsRootNavigationTreeNodeProvider.java
- client/i18n/src/main/i18n/translations/observe_en_GB.properties
- client/i18n/src/main/i18n/translations/observe_es_ES.properties
- client/i18n/src/main/i18n/translations/observe_fr_FR.properties
- models/dto/java/src/main/java/fr/ird/observe/dto/referential/common/ProgramReference.java
- pom.xml
- services/api/src/main/java/fr/ird/observe/services/service/data/NavigationResult.java
Changes:
=====================================
client/datasource/actions/src/main/i18n/getters/java.getter
=====================================
@@ -40,10 +40,16 @@ observe.ui.datasource.editor.actions.consolidate.message.trip
observe.ui.datasource.editor.actions.consolidate.start.trip
observe.ui.datasource.editor.actions.consolidate.title
observe.ui.datasource.editor.actions.consolidate.title.tip
+observe.ui.datasource.editor.actions.data.copy
+observe.ui.datasource.editor.actions.data.delete
+observe.ui.datasource.editor.actions.data.delete.result
+observe.ui.datasource.editor.actions.data.export.result
+observe.ui.datasource.editor.actions.data.import.add.missing.referential
+observe.ui.datasource.editor.actions.data.import.add.missing.referential.for.type
+observe.ui.datasource.editor.actions.data.import.result
+observe.ui.datasource.editor.actions.data.import.title.require.add.missing.referential
observe.ui.datasource.editor.actions.exportData
observe.ui.datasource.editor.actions.exportData.description
-observe.ui.datasource.editor.actions.exportData.message.add.missing.referential
-observe.ui.datasource.editor.actions.exportData.message.add.missing.referentials2
observe.ui.datasource.editor.actions.exportData.message.not.possible
observe.ui.datasource.editor.actions.exportData.message.operation.needFix
observe.ui.datasource.editor.actions.exportData.message.prepare.data
@@ -88,11 +94,6 @@ observe.ui.datasource.editor.actions.synchro.data.deleteFromRight.tip
observe.ui.datasource.editor.actions.synchro.data.description
observe.ui.datasource.editor.actions.synchro.data.launch.operation
observe.ui.datasource.editor.actions.synchro.data.message.data.loaded
-observe.ui.datasource.editor.actions.synchro.data.prepare.copyToTask
-observe.ui.datasource.editor.actions.synchro.data.prepare.deleteTask
-observe.ui.datasource.editor.actions.synchro.data.result.delete.trip
-observe.ui.datasource.editor.actions.synchro.data.result.export.trip
-observe.ui.datasource.editor.actions.synchro.data.result.import.trip
observe.ui.datasource.editor.actions.synchro.data.task.copyToLeft
observe.ui.datasource.editor.actions.synchro.data.task.copyToRight
observe.ui.datasource.editor.actions.synchro.data.task.deleteFromLeft
@@ -190,7 +191,6 @@ observe.ui.datasource.storage.config.source.storage
observe.ui.datasource.storage.step.label
observe.ui.message.no.report.selected
observe.ui.message.select.report
-observe.ui.title.can.not.export.data2
observe.ui.title.choose.db.dump.directory
observe.ui.title.choose.reportFile
observe.ui.title.storage.info
=====================================
client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/actions/DataManager.java
=====================================
@@ -49,13 +49,14 @@ import io.ultreia.java4all.lang.Strings;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
-import org.nuiton.decorator.Decorator;
import org.nuiton.jaxx.runtime.swing.wizard.ext.WizardState;
import javax.swing.JOptionPane;
import java.util.Collection;
import java.util.Objects;
import java.util.Set;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
import static io.ultreia.java4all.i18n.I18n.n;
import static io.ultreia.java4all.i18n.I18n.t;
@@ -119,6 +120,7 @@ public class DataManager {
return targetSourceLabel;
}
+ @SuppressWarnings({"unchecked", "rawtypes"})
public WizardState insertMissingReferential(Collection<String> idsToCopy) {
progressModel.increments();
@@ -141,7 +143,7 @@ public class DataManager {
UsageForDisplayUI<ReferentialDtoReference> usagesUI = UsageForDisplayUIHandler.showMissingReferential(getMessage(), usages);
int response = ClientUIContext.askUser(null,
- t("observe.ui.title.can.not.export.data2", getTargetSourceLabel()),
+ t("observe.ui.datasource.editor.actions.data.import.title.require.add.missing.referential", getTargetSourceLabel()),
usagesUI,
JOptionPane.WARNING_MESSAGE,
new Object[]{
@@ -154,18 +156,18 @@ public class DataManager {
return WizardState.CANCELED;
}
- log.info(String.format("Base «%s» - Insertion des référentiels manquants.", getTargetSourceLabel()));
-
+ StringBuilder parameters = new StringBuilder();
DecoratorService decoratorService = action.getDecoratorService();
for (Class<? extends ReferentialDtoReference> key : ReferentialDtoReference.filterReferentialReference(usages.types())) {
Set<? extends ReferentialDtoReference> references = usages.get(key);
String type = t(ContentReferentialUII18nHelper.getType(key));
- action.sendMessage(t("observe.ui.datasource.editor.actions.exportData.message.add.missing.referentials2", getTargetSourceLabel(), references.size(), type));
- Decorator<?> decorator = decoratorService.getReferenceDecorator(key);
- for (DtoReference reference : references) {
- action.sendMessage(t("observe.ui.datasource.editor.actions.exportData.message.add.missing.referential", reference));
- }
+ decoratorService.installDecorator(key, (Stream) references.stream());
+ String labels = references.stream().map(Object::toString).collect(Collectors.joining("\n\t * "));
+ parameters.append(t("observe.ui.datasource.editor.actions.data.import.add.missing.referential.for.type", getTargetSourceLabel(), references.size(), type, labels));
+ parameters.append("\n");
}
+ action.sendMessage(t("observe.ui.datasource.editor.actions.data.import.add.missing.referential", getTargetSourceLabel(), parameters.toString()));
+
progressModel.increments();
targetReferentialService.insertMissingReferential(missingReferentialResult.getSqlCode());
return WizardState.SUCCESSED;
@@ -178,11 +180,11 @@ public class DataManager {
String tripId = trip.getId();
- action.sendMessage(t("observe.ui.datasource.editor.actions.synchro.data.prepare.deleteTask", getTargetSourceLabel(), program, trip));
+ action.sendMessage(t("observe.ui.datasource.editor.actions.data.delete", getTargetSourceLabel(), program, trip));
progressModel.increments();
DeleteTripRequest deleteTripRequest = new DeleteTripRequest(programId, tripId);
DeleteTripResult deleteTripResult = targetSource.getTripManagementService().deleteTrip(deleteTripRequest);
- logDeleteResult(n("observe.ui.datasource.editor.actions.synchro.data.result.delete.trip"),
+ logDeleteResult(n("observe.ui.datasource.editor.actions.data.delete.result"),
getTargetSourceLabel(),
deleteTripResult,
program,
@@ -199,11 +201,11 @@ public class DataManager {
decoratorService.registerDecoratorInReference(program);
decoratorService.registerDecoratorInReference((DtoReference) trip);
- action.sendMessage(t("observe.ui.datasource.editor.actions.synchro.data.prepare.copyToTask", targetSourceLabel, program, trip));
+ action.sendMessage(t("observe.ui.datasource.editor.actions.data.copy", targetSourceLabel, program, trip));
progressModel.increments();
ExportTripRequest exportTripRequest = new ExportTripRequest(!targetSource.isLocal(), programId, tripId);
ExportTripResult exportTripResult = incomingSource.getTripManagementService().exportTrip(exportTripRequest);
- logExportResult(n("observe.ui.datasource.editor.actions.synchro.data.result.export.trip"),
+ logExportResult(n("observe.ui.datasource.editor.actions.data.export.result"),
getIncomingSourceLabel(),
exportTripResult,
program,
@@ -211,10 +213,10 @@ public class DataManager {
progressModel.increments();
ImportTripRequest importTripRequest = new ImportTripRequest(exportTripResult);
- log.info("Use import script: "+importTripRequest.getSqlContent().getLocation());
+ log.info("Use import script: " + importTripRequest.getSqlContent().getLocation());
ImportTripResult importTripResult = targetSource.getTripManagementService().importTrip(importTripRequest);
- logImportResult(n("observe.ui.datasource.editor.actions.synchro.data.result.import.trip"),
- n("observe.ui.datasource.editor.actions.synchro.data.result.delete.trip"),
+ logImportResult(n("observe.ui.datasource.editor.actions.data.import.result"),
+ n("observe.ui.datasource.editor.actions.data.delete.result"),
targetSourceLabel,
importTripResult,
program,
=====================================
client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/data/actions/Apply.java
=====================================
@@ -52,7 +52,7 @@ import static io.ultreia.java4all.i18n.I18n.t;
public class Apply extends DataSynchroUIActionSupport {
public Apply() {
- super(t("observe.ui.action.apply"), t("observe.ui.action.apply"), "accept", 'Q');
+ super(t("observe.ui.action.apply"), t("observe.ui.action.apply"), "accept", 'S');
}
@Override
=====================================
client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/referential/ng/actions/Apply.java
=====================================
@@ -54,7 +54,7 @@ import static io.ultreia.java4all.i18n.I18n.t;
public class Apply extends ReferentialSynchroUIActionSupport {
public Apply() {
- super(t("observe.ui.action.apply"), t("observe.ui.action.apply"), "accept", 'Q');
+ super(t("observe.ui.action.apply"), t("observe.ui.action.apply"), "accept", 'S');
}
@Override
=====================================
client/datasource/editor/api/src/main/i18n/getters/java.getter
=====================================
@@ -190,7 +190,9 @@ observe.ui.action.test.remote
observe.ui.action.test.remote.tip
observe.ui.action.test.server
observe.ui.action.test.server.tip
+observe.ui.choice.apply
observe.ui.choice.cancel
+observe.ui.choice.cancel.tip
observe.ui.choice.confirm.delete
observe.ui.choice.confirm.replace
observe.ui.choice.continue
@@ -293,6 +295,7 @@ observe.ui.message.show.usage.for.desactivated
observe.ui.message.show.usages
observe.ui.message.table.editBean.modified
observe.ui.message.table.editBean.modified.but.invalid
+observe.ui.move.selectTarget
observe.ui.title.can.not.delete.referentiel
observe.ui.title.can.not.export.obstuna
observe.ui.title.choose.db.dump
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/ObserveKeyStrokesEditorApi.java
=====================================
@@ -70,6 +70,8 @@ public class ObserveKeyStrokesEditorApi extends ObserveKeyStrokesSupport {
public static final KeyStroke KEY_STROKE_COPY_VALUES_AND_SAVE = KeyStroke.getKeyStroke("ctrl pressed T");
+ public static final KeyStroke KEY_STROKE_SELECT_TARGET = KeyStroke.getKeyStroke("pressed F2");
+
public static final KeyStroke KEY_STROKE_GO_TO_OPEN = KeyStroke.getKeyStroke("alt pressed O");
public static final KeyStroke KEY_STROKE_TOGGLE_OBSERVATION_AVAILABILITY = KeyStroke.getKeyStroke("ctrl pressed F1");
public static final KeyStroke KEY_STROKE_TOGGLE_LOGBOOK_AVAILABILITY = KeyStroke.getKeyStroke("ctrl pressed F2");
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/id/ChangeId.java
=====================================
@@ -72,6 +72,8 @@ public class ChangeId<U extends ContentUI> extends ContentUIActionSupport<U> imp
ui.open();
NavigationTree tree = ui.getHandler().getDataSourceEditor().getNavigationUI().getTree();
NavigationNode selectedNode = tree.getSelectedNode();
+ //FIXME:Tree No on a such referential node, there is no child! no no need to do this
+ //FIXME:Test use a less brutal node method
selectedNode.updateNode();
selectedNode.nodeChanged();
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/move/MoveRequest.java
=====================================
@@ -58,14 +58,19 @@ public class MoveRequest {
* Id of parent data where move.
*/
private final String newParentId;
+ /**
+ * to select target node after move operation.
+ */
+ private final boolean selectTarget;
- public MoveRequest(Class<? extends DataDtoReference> referenceType, Class<? extends DtoReference> parentReferenceType, Class<? extends DtoReference> parentTargetReferenceType, String oldParentId, ImmutableSet<String> ids, String newParentId) {
+ public MoveRequest(Class<? extends DataDtoReference> referenceType, Class<? extends DtoReference> parentReferenceType, Class<? extends DtoReference> parentTargetReferenceType, String oldParentId, ImmutableSet<String> ids, String newParentId, boolean selectTarget) {
this.referenceType = referenceType;
this.parentReferenceType = parentReferenceType;
this.parentTargetReferenceType = parentTargetReferenceType;
this.oldParentId = oldParentId;
this.ids = ids;
this.newParentId = newParentId;
+ this.selectTarget = selectTarget;
}
public Class<? extends DataDtoReference> getReferenceType() {
@@ -96,6 +101,10 @@ public class MoveRequest {
return ids.iterator().next();
}
+ public boolean isSelectTarget() {
+ return selectTarget;
+ }
+
public boolean isSingle() {
return ids.size() == 1;
}
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/move/MoveRequestBuilder.java
=====================================
@@ -24,6 +24,7 @@ package fr.ird.observe.client.datasource.editor.api.content.actions.move;
import com.google.common.collect.ImmutableSet;
import fr.ird.observe.client.ClientUIContextApplicationComponent;
+import fr.ird.observe.client.datasource.editor.api.ObserveKeyStrokesEditorApi;
import fr.ird.observe.client.datasource.editor.api.content.data.edit.ContentEditUIModel;
import fr.ird.observe.client.datasource.editor.api.content.data.list.ContentListUIModel;
import fr.ird.observe.client.datasource.editor.api.content.data.open.ContentOpenableUII18nHelper;
@@ -38,11 +39,25 @@ import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.nuiton.decorator.JXPathDecorator;
+import javax.swing.AbstractAction;
+import javax.swing.Action;
+import javax.swing.ActionMap;
+import javax.swing.InputMap;
import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JComponent;
import javax.swing.JLabel;
+import javax.swing.JLayeredPane;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
+import javax.swing.JSeparator;
+import javax.swing.KeyStroke;
+import javax.swing.SwingConstants;
+import javax.swing.SwingUtilities;
import java.awt.BorderLayout;
+import java.awt.Font;
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
@@ -56,6 +71,7 @@ import static io.ultreia.java4all.i18n.I18n.t;
* @author Tony Chemit - dev(a)tchemit.fr
* @since 8.0.1
*/
+@SuppressWarnings("UnusedReturnValue")
public class MoveRequestBuilder {
private static final Logger log = LogManager.getLogger(MoveRequestBuilder.class);
@@ -75,6 +91,12 @@ public class MoveRequestBuilder {
* Ids to move.
*/
private final ImmutableSet<String> ids;
+ /**
+ * To get selected target request value.
+ */
+ private final JCheckBox selectTarget;
+ private final AbstractAction selectTargetAction;
+ private final AbstractAction applyAction;
/**
* To get parent candidates.
*/
@@ -91,6 +113,8 @@ public class MoveRequestBuilder {
* Message of dialog to select new parent.
*/
private String askNewParentMessage;
+ private JButton jButton;
+ private JOptionPane optionPane;
static class BuilderImpl implements StepSetParentCandidates, StepBuild {
private final MoveRequestBuilder builder;
@@ -151,6 +175,32 @@ public class MoveRequestBuilder {
this.parentReferenceType = Objects.requireNonNull(parentReferenceType);
this.oldParentId = Objects.requireNonNull(oldParentId);
this.ids = Objects.requireNonNull(ids);
+ KeyStroke keyStroke = ObserveKeyStrokesEditorApi.KEY_STROKE_SELECT_TARGET;
+ String t = ObserveKeyStrokesEditorApi.suffixTextWithKeyStroke(t("observe.ui.move.selectTarget"), keyStroke);
+ this.selectTarget = new JCheckBox(t);
+ selectTargetAction = new AbstractAction() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ selectTarget.setSelected(!selectTarget.isSelected());
+ log.info(String.format("select target? %s", selectTarget.isSelected()));
+ }
+ };
+ selectTargetAction.putValue(Action.ACCELERATOR_KEY, keyStroke);
+ selectTargetAction.putValue(Action.NAME, t);
+ selectTarget.setFocusable(false);
+ keyStroke = ObserveKeyStrokesEditorApi.KEY_STROKE_APPLY;
+ t = ObserveKeyStrokesEditorApi.suffixTextWithKeyStroke(t("observe.ui.choice.apply"), keyStroke);
+
+ applyAction = new AbstractAction() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ log.info("Apply :)");
+ jButton.doClick();
+ }
+ };
+ applyAction.putValue(Action.ACCELERATOR_KEY, keyStroke);
+ applyAction.putValue(Action.NAME, t);
+// selectTarget.setAction(selectTargetAction);
}
public MoveRequestBuilder setParentTargetReferenceType(Class<? extends DtoReference> parentTargetReferenceType) {
@@ -189,7 +239,7 @@ public class MoveRequestBuilder {
if (newParentId == null) {
return Optional.empty();
}
- return Optional.of(new MoveRequest(referenceType, parentReferenceType, parentTargetReferenceType, oldParentId, ids, newParentId));
+ return Optional.of(new MoveRequest(referenceType, parentReferenceType, parentTargetReferenceType, oldParentId, ids, newParentId, selectTarget.isSelected()));
}
private Optional<String> askNewParent(List<? extends DtoReference> parentCandidates, String dialogTitle, String dialogMessage) {
@@ -199,20 +249,66 @@ public class MoveRequestBuilder {
(JXPathDecorator) ClientUIContextApplicationComponent.value().getDecoratorService().getReferenceDecorator(parentTargetReferenceType),
parentCandidates);
- String continueActionText = t("observe.ui.choice.continue");
- Object[] options = {continueActionText, t("observe.ui.choice.cancel")};
- JPanel panel = new JPanel(new BorderLayout());
- panel.add(BorderLayout.NORTH, new JLabel(t(dialogMessage)));
- panel.add(BorderLayout.CENTER, editor);
+ String continueActionText = (String) applyAction.getValue(Action.NAME);
+ Object[] options = {continueActionText};
+ JPanel panel = new JPanel(new BorderLayout(3, 3));
+
+ JPanel panel0 = new JPanel(new BorderLayout(3, 3));
+
+ JPanel panel2 = new JPanel(new GridLayout(0, 1));
+
+ panel0.add(BorderLayout.NORTH, new JLabel(t(dialogMessage)));
+ panel0.add(BorderLayout.CENTER, editor);
+ panel0.add(BorderLayout.SOUTH, panel2);
+
+ //FIXME:Move Add a default client configuration option to set this value
+ selectTarget.setSelected(false);
+
+ panel2.add(new JLabel());
+ panel2.add(selectTarget);
+
+ JLabel information = new JLabel(t("observe.ui.choice.cancel.tip"), UIHelper.getUIManagerActionIcon("information"), SwingConstants.LEFT);
+ information.setFont(information.getFont().deriveFont(Font.ITALIC).deriveFont(11f));
+
+ JPanel panel4 = new JPanel(new GridLayout(0, 1));
+ JPanel panel5 = new JPanel(new BorderLayout());
+ panel4.add(panel5);
+ panel4.add(BorderLayout.NORTH, new JSeparator(SwingConstants.HORIZONTAL));
+ panel4.add(BorderLayout.CENTER, information);
- JOptionPane pane = new JOptionPane(panel, JOptionPane.QUESTION_MESSAGE, JOptionPane.DEFAULT_OPTION, null, options, options[0]);
+ panel.add(BorderLayout.NORTH, panel0);
+ panel.add(BorderLayout.SOUTH, panel4);
- JButton jButton = UsageUIHandlerSupport.findButton(pane, continueActionText);
+ InputMap inputMap1 = panel.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
+ inputMap1.put((KeyStroke) selectTargetAction.getValue(Action.ACCELERATOR_KEY), "selectTarget");
+
+ InputMap inputMap = panel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
+ inputMap.put((KeyStroke) selectTargetAction.getValue(Action.ACCELERATOR_KEY), "selectTarget");
+ inputMap.put((KeyStroke) applyAction.getValue(Action.ACCELERATOR_KEY), "apply");
+
+ ActionMap actionMap = panel.getActionMap();
+ actionMap.put("selectTarget", selectTargetAction);
+ actionMap.put("apply", applyAction);
+
+ optionPane = new JOptionPane(panel, JOptionPane.QUESTION_MESSAGE, JOptionPane.DEFAULT_OPTION, null, options, options[0]) {
+ @Override
+ public void selectInitialValue() {
+
+ JLayeredPane parent = (JLayeredPane) optionPane.getParent().getParent();
+
+ InputMap inputMap = parent.getRootPane().getInputMap(2);
+
+ inputMap.put(KeyStroke.getKeyStroke("pressed ENTER"), "none");
+ inputMap.put(KeyStroke.getKeyStroke("ctrl pressed ENTER"), "none");
+
+ SwingUtilities.invokeLater(editor.getCombobox()::requestFocus);
+ }
+ };
+ jButton = UsageUIHandlerSupport.findButton(optionPane, continueActionText);
Objects.requireNonNull(jButton);
jButton.setEnabled(false);
editor.getModel().addPropertyChangeListener("selectedItem", evt -> jButton.setEnabled(evt.getNewValue() != null));
-
- int response = UIHelper.askUser(ClientUIContextApplicationComponent.value().getMainUI(), pane, t(dialogTitle), options);
+ int response = UIHelper.askUser(ClientUIContextApplicationComponent.value().getMainUI(), optionPane, t(dialogTitle), options);
DtoReference newParent = null;
if (response == 0) {
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/move/tree/DefaultMultipleMoveTreeAdapter.java
=====================================
@@ -22,9 +22,13 @@ package fr.ird.observe.client.datasource.editor.api.content.actions.move.tree;
* #L%
*/
+import com.google.common.collect.ImmutableSet;
import fr.ird.observe.client.datasource.editor.api.content.actions.move.MoveRequest;
+import fr.ird.observe.client.datasource.editor.api.content.data.list.ContentListUINavigationNode;
import fr.ird.observe.client.datasource.editor.api.navigation.NavigationTree;
import fr.ird.observe.client.datasource.editor.api.navigation.tree.NavigationNode;
+import fr.ird.observe.client.datasource.editor.api.navigation.tree.root.RootNavigationNode;
+import fr.ird.observe.dto.referential.common.ProgramReference;
/**
* Created on 15/10/2020.
@@ -36,15 +40,70 @@ public class DefaultMultipleMoveTreeAdapter implements MoveTreeAdapter {
@Override
public void adaptTree(MoveRequest request, NavigationTree tree) {
+ ImmutableSet<String> ids = request.getIds();
+ // get old parent node
+ ContentListUINavigationNode oldParentNode = (ContentListUINavigationNode) tree.getSelectedNode().upToReferenceContainerNode(request.getReferenceType());
- NavigationNode selectedNode = tree.getSelectedNode();
- NavigationNode oldChildContainerNode = selectedNode.upToReferenceContainerNode(request.getParentReferenceType());
- oldChildContainerNode.updateNode();
+ // get shared ancestor of tow parents
+ NavigationNode parentContainerNode = oldParentNode.upToReferenceContainerNode(request.getParentReferenceType());
- NavigationNode oldParentContainerReferenceNode = selectedNode.upToReferenceContainerNode(request.getParentReferenceType());
+ // get new parent node
+ ContentListUINavigationNode newParentNode = getNewParentNode(request, parentContainerNode);
- NavigationNode newParentNode = oldParentContainerReferenceNode.downToReferenceNode(request.getParentTargetReferenceType(), request.getNewParentId());
- newParentNode.updateNode();
+ // update it
+ newParentNode.addChildren(ids);
+
+ // clean old paren node
+ cleanOldParentNode(tree, ids, oldParentNode);
+
+ if (request.isSelectTarget()) {
+ // select new parent node
+ tree.selectSafeNode(newParentNode);
+ } else {
+ if (oldParentNode.getParent() == null) {
+ // limit case: select first node in tree (previous old parent node was removed)
+ tree.selectFirstNode();
+ }
+ }
+ }
+
+ protected void cleanOldParentNode(NavigationTree tree, ImmutableSet<String> ids, ContentListUINavigationNode oldParentNode) {
+ if (oldParentNode.getChildCount() == ids.size() && oldParentNode.getParent().isRoot()) {
+ RootNavigationNode root = (RootNavigationNode) oldParentNode.getParent();
+ if (!root.getInitializer().getConfig().isLoadEmptyProgram()) {
+ // limit case : node will be empty, must remove it
+ root.remove(oldParentNode);
+ return;
+ }
+ }
+ // clean it
+ oldParentNode.removeChildren(ids);
+
+ // reload node
+ oldParentNode.reloadNodeData();
+
+ // re-select the node (to update associated form)
+ tree.reSelectSafeNode(oldParentNode);
+ }
+
+ protected ContentListUINavigationNode getNewParentNode(MoveRequest request, NavigationNode oldParentContainerNode) {
+ String newParentId = request.getNewParentId();
+ if (oldParentContainerNode.isRoot()) {
+ RootNavigationNode root = (RootNavigationNode) oldParentContainerNode;
+ boolean loadEmptyProgram = root.getInitializer().getConfig().isLoadEmptyProgram();
+ if (!loadEmptyProgram) {
+ NavigationNode result = root.findChildById(newParentId);
+ if (result == null) {
+ // limit case : node does not exist (was empty previously), need to create it
+ ProgramReference reference = root.getInitializer().getNavigationResult().getProgram(newParentId);
+ result = root.getCapability().createChildNode(reference);
+ int position = root.getCapability().getNodePosition(reference);
+ root.insert(result, position);
+ }
+ return (ContentListUINavigationNode) result;
+ }
+ }
+ return (ContentListUINavigationNode) oldParentContainerNode.downToReferenceNode(request.getParentTargetReferenceType(), newParentId);
}
-}
+}
\ No newline at end of file
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/list/ContentListUI.jcss
=====================================
@@ -60,12 +60,8 @@
visible:{states.isEditable()};
}
-/*#create {
- enabled:{states.isEditable()};
-}*/
-
#move {
- enabled:{states.isUpdatingMode() && states.isOneOrMoreSelectedData()};
+ enabled:{states.isEditable() && states.isOneOrMoreSelectedData()};
}
#delete {
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/list/ContentListUINavigationNode.java
=====================================
@@ -22,6 +22,7 @@ package fr.ird.observe.client.datasource.editor.api.content.data.list;
* #L%
*/
+import com.google.common.collect.ImmutableSet;
import fr.ird.observe.client.datasource.editor.api.navigation.tree.NavigationNode;
import fr.ird.observe.dto.reference.DataDtoReference;
import fr.ird.observe.dto.reference.DtoReference;
@@ -29,6 +30,7 @@ import fr.ird.observe.dto.reference.LazyDataDtoReferenceSet;
import io.ultreia.java4all.lang.Objects2;
import java.util.List;
+import java.util.Set;
/**
* Created on 07/10/2020.
@@ -79,4 +81,25 @@ public abstract class ContentListUINavigationNode extends NavigationNode {
return getInitializer().getParentReference();
}
+ public void removeChildren(ImmutableSet<String> ids) {
+ for (String id : ids) {
+ NavigationNode childNode = findChildById(id);
+ childNode.removeFromParent();
+ }
+ }
+
+ public void addChildren(Set<String> ids) {
+ ContentListUINavigationInitializer initializer = getInitializer();
+ boolean notLoaded = isNotLoaded();
+ reloadNodeData();
+ List<? extends DataDtoReference> references = initializer.getReferences();
+ ContentListUINavigationCapability<?> capability = getCapability();
+ for (DataDtoReference reference : references) {
+ if (notLoaded || ids.contains(reference.getId())) {
+ NavigationNode childNode = capability.createChildNode(reference);
+ int nodePosition = capability.getNodePosition(reference);
+ insert(childNode, nodePosition);
+ }
+ }
+ }
}
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/navigation/tree/NavigationNode.java
=====================================
@@ -30,7 +30,6 @@ import fr.ird.observe.client.datasource.editor.api.navigation.tree.capability.Nu
import fr.ird.observe.client.datasource.editor.api.navigation.tree.capability.ReferenceCapability;
import fr.ird.observe.client.datasource.editor.api.navigation.tree.capability.ReferenceContainerCapability;
import fr.ird.observe.client.datasource.editor.api.navigation.tree.root.RootNavigationNode;
-import fr.ird.observe.dto.reference.DataDtoReference;
import fr.ird.observe.dto.reference.DtoReference;
import fr.ird.observe.toolkit.dto.navigation.NavigationModelNode;
import fr.ird.observe.toolkit.dto.navigation.edit.EditNode;
@@ -276,7 +275,7 @@ public abstract class NavigationNode extends DefaultMutableTreeNode implements W
// Update methods
//--------------------------------------------------------------------------------------------
- public final <R extends DataDtoReference> int getChildrenPosition(R reference, Comparator<R> referenceComparator) {
+ public final <R extends DtoReference> int getChildrenPosition(R reference, Comparator<R> referenceComparator) {
List<R> list = getChildrenReferences(reference);
list.add(reference);
list.sort(referenceComparator);
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/navigation/tree/capability/ReferenceListContainerCapability.java deleted
=====================================
@@ -1,35 +0,0 @@
-package fr.ird.observe.client.datasource.editor.api.navigation.tree.capability;
-
-/*-
- * #%L
- * ObServe Client :: DataSource :: Editor :: API
- * %%
- * Copyright (C) 2008 - 2021 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.datasource.editor.api.navigation.tree.NavigationNode;
-
-/**
- * Created on 08/11/2020.
- *
- * @author Tony Chemit - dev(a)tchemit.fr
- * @since 8.0.1
- */
-public interface ReferenceListContainerCapability<N extends NavigationNode> extends ContainerCapability<N> {
-
-}
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/navigation/tree/root/RootNavigationCapability.java
=====================================
@@ -28,7 +28,6 @@ import fr.ird.observe.client.configuration.NavigationTreeConfig;
import fr.ird.observe.client.datasource.editor.api.content.referential.ReferentialHomeUINavigationNode;
import fr.ird.observe.client.datasource.editor.api.navigation.tree.NavigationNode;
import fr.ird.observe.client.datasource.editor.api.navigation.tree.capability.ReferenceContainerCapability;
-import fr.ird.observe.client.datasource.editor.api.navigation.tree.capability.ReferenceListContainerCapability;
import fr.ird.observe.dto.reference.DtoReference;
import fr.ird.observe.dto.referential.ReferentialDto;
import fr.ird.observe.dto.referential.common.ProgramReference;
@@ -45,7 +44,7 @@ import java.util.stream.Collectors;
* @author Tony Chemit - dev(a)tchemit.fr
* @since 8.0.1
*/
-public class RootNavigationCapability implements ReferenceContainerCapability<RootNavigationNode>, ReferenceListContainerCapability<RootNavigationNode> {
+public class RootNavigationCapability implements ReferenceContainerCapability<RootNavigationNode> {
private final RootNavigationNode node;
@@ -55,7 +54,7 @@ public class RootNavigationCapability implements ReferenceContainerCapability<Ro
public RootNavigationCapability(RootNavigationNode node) {
this.node = Objects.requireNonNull(node);
this.acceptedNodeTypes = SingletonSupplier.of(() -> getNode().getInitializer().getRootNodeProviders().stream().flatMap(m -> m.getAcceptedNodeTypes().stream()).collect(ImmutableList.toImmutableList()));
- this.acceptedTypes = SingletonSupplier.of(() -> getNode().getInitializer().getRootNodeProviders().stream().map(RootNavigationTreeNodeProvider::getAcceptedType).filter(Objects::nonNull).collect(ImmutableList.toImmutableList()));
+ this.acceptedTypes = SingletonSupplier.of(() -> getNode().getInitializer().getRootNodeProviders().stream().map(RootNavigationTreeNodeProvider::getAcceptedType).filter(Objects::nonNull).distinct().collect(ImmutableList.toImmutableList()));
}
@Override
@@ -95,7 +94,7 @@ public class RootNavigationCapability implements ReferenceContainerCapability<Ro
@Override
public int getNodePosition(DtoReference reference) {
- return 0;
+ return getNode().getChildrenPosition((ProgramReference) reference, ProgramReference.COMPARATOR_WITH_GEAR_PREFIX);
}
public RootNavigationTreeNodeProvider<?> getProvider(ProgramReference referenceType) {
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/navigation/tree/root/RootNavigationTreeNodeProvider.java
=====================================
@@ -28,7 +28,7 @@ import fr.ird.observe.client.configuration.NavigationTreeConfig;
import fr.ird.observe.client.datasource.editor.api.content.data.list.ContentListUINavigationNode;
import fr.ird.observe.client.datasource.editor.api.content.referential.ReferentialHomeUINavigationNode;
import fr.ird.observe.client.datasource.editor.api.navigation.tree.NavigationNode;
-import fr.ird.observe.dto.reference.DataDtoReference;
+import fr.ird.observe.dto.reference.DtoReference;
import fr.ird.observe.dto.referential.ReferentialDto;
import fr.ird.observe.dto.referential.common.ProgramReference;
import fr.ird.observe.services.service.data.NavigationResult;
@@ -53,7 +53,7 @@ public abstract class RootNavigationTreeNodeProvider<B extends fr.ird.observe.sp
private final B module;
private final int priority;
private final ImmutableList<Class<? extends NavigationNode>> acceptedNodeTypes;
- private final Class<? extends DataDtoReference> acceptedType;
+ private final Class<? extends DtoReference> acceptedType;
public static synchronized List<RootNavigationTreeNodeProvider<?>> getProviders() {
if (PROVIDERS == null) {
@@ -66,7 +66,7 @@ public abstract class RootNavigationTreeNodeProvider<B extends fr.ird.observe.sp
return PROVIDERS;
}
- protected RootNavigationTreeNodeProvider(BusinessProject project, B module, ImmutableList<Class<? extends NavigationNode>> acceptedNodeTypes, Class<? extends DataDtoReference> acceptedType) {
+ protected RootNavigationTreeNodeProvider(BusinessProject project, B module, ImmutableList<Class<? extends NavigationNode>> acceptedNodeTypes, Class<? extends DtoReference> acceptedType) {
this.module = Objects.requireNonNull(module);
this.acceptedNodeTypes = acceptedNodeTypes;
this.acceptedType = acceptedType;
@@ -112,7 +112,7 @@ public abstract class RootNavigationTreeNodeProvider<B extends fr.ird.observe.sp
return acceptedNodeTypes;
}
- public Class<? extends DataDtoReference> getAcceptedType() {
+ public Class<? extends DtoReference> getAcceptedType() {
return acceptedType;
}
=====================================
client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/LlRootNavigationTreeNodeProvider.java
=====================================
@@ -27,7 +27,6 @@ import com.google.common.collect.ImmutableList;
import fr.ird.observe.client.datasource.editor.api.navigation.tree.root.RootNavigationNode;
import fr.ird.observe.client.datasource.editor.api.navigation.tree.root.RootNavigationTreeNodeProvider;
import fr.ird.observe.client.datasource.editor.ll.data.common.TripListUINavigationNode;
-import fr.ird.observe.dto.data.ll.common.TripReference;
import fr.ird.observe.dto.referential.common.ProgramReference;
import fr.ird.observe.spi.module.ObserveBusinessProject;
import fr.ird.observe.spi.module.ll.BusinessModule;
@@ -45,7 +44,7 @@ public class LlRootNavigationTreeNodeProvider extends RootNavigationTreeNodeProv
fr.ird.observe.client.datasource.editor.ll.referential.common.ReferentialHomeUINavigationNode.class,
fr.ird.observe.client.datasource.editor.ll.referential.landing.ReferentialHomeUINavigationNode.class,
fr.ird.observe.client.datasource.editor.ll.referential.observation.ReferentialHomeUINavigationNode.class),
- TripReference.class);
+ ProgramReference.class);
}
@Override
=====================================
client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/PsRootNavigationTreeNodeProvider.java
=====================================
@@ -27,7 +27,6 @@ import com.google.common.collect.ImmutableList;
import fr.ird.observe.client.datasource.editor.api.navigation.tree.root.RootNavigationNode;
import fr.ird.observe.client.datasource.editor.api.navigation.tree.root.RootNavigationTreeNodeProvider;
import fr.ird.observe.client.datasource.editor.ps.data.common.TripListUINavigationNode;
-import fr.ird.observe.dto.data.ll.common.TripReference;
import fr.ird.observe.dto.referential.common.ProgramReference;
import fr.ird.observe.spi.module.ObserveBusinessProject;
import fr.ird.observe.spi.module.ps.BusinessModule;
@@ -44,7 +43,7 @@ public class PsRootNavigationTreeNodeProvider extends RootNavigationTreeNodeProv
ImmutableList.of(TripListUINavigationNode.class,
fr.ird.observe.client.datasource.editor.ps.referential.common.ReferentialHomeUINavigationNode.class,
fr.ird.observe.client.datasource.editor.ps.referential.observation.ReferentialHomeUINavigationNode.class),
- TripReference.class);
+ ProgramReference.class);
}
@Override
=====================================
client/i18n/src/main/i18n/translations/observe_en_GB.properties
=====================================
@@ -1295,7 +1295,9 @@ observe.ui.action.test.server.tip=Click here to validate server connexion
observe.ui.action.translate=Translate
observe.ui.action.translate.tip=Translate application
observe.ui.action.validate.config.generateReport=Generate validation report
+observe.ui.choice.apply=Apply
observe.ui.choice.cancel=Cancel
+observe.ui.choice.cancel.tip=To cancel, press ESCAPE key.
observe.ui.choice.confirm.delete=Confirm delete
observe.ui.choice.confirm.insert=Confirm to insert
observe.ui.choice.confirm.replace=Replace
@@ -1326,10 +1328,16 @@ observe.ui.datasource.editor.actions.consolidate.message.trip=Data consolidate f
observe.ui.datasource.editor.actions.consolidate.start.trip=Start consolidate data on trip %s / %s (%s)
observe.ui.datasource.editor.actions.consolidate.title=Consolidate data
observe.ui.datasource.editor.actions.consolidate.title.tip=Consolidate observed data
+observe.ui.datasource.editor.actions.data.copy=Database «%s» - Register operation copy to database\: %s - %s
+observe.ui.datasource.editor.actions.data.delete=Database «%s» - Register operation delete from database\: %s - %s
+observe.ui.datasource.editor.actions.data.delete.result=Database «%s» - Trip %s - %s was removed from database.
+observe.ui.datasource.editor.actions.data.export.result=Database «%s» - Trip %s - %s was exported from database.
+observe.ui.datasource.editor.actions.data.import.add.missing.referential=Database «%s» - Insert all missing referentials\n%s
+observe.ui.datasource.editor.actions.data.import.add.missing.referential.for.type=Database «%s» - Insert %s missing referentials of type «%s»\:%s
+observe.ui.datasource.editor.actions.data.import.result=Database «%s» - Trip %s - %s was imported into database.
+observe.ui.datasource.editor.actions.data.import.title.require.add.missing.referential=Need to confirm missing referential insertion
observe.ui.datasource.editor.actions.exportData=Export data
observe.ui.datasource.editor.actions.exportData.description=Export data
-observe.ui.datasource.editor.actions.exportData.message.add.missing.referential=\t%s
-observe.ui.datasource.editor.actions.exportData.message.add.missing.referentials2=Database «%s» - Insert %s missing referentials of type «%s»
observe.ui.datasource.editor.actions.exportData.message.not.possible=Export is not possible (see above messages)
observe.ui.datasource.editor.actions.exportData.message.operation.needFix=Select data to export.
observe.ui.datasource.editor.actions.exportData.message.prepare.data=Prepare data to export...
@@ -1392,11 +1400,6 @@ observe.ui.datasource.editor.actions.synchro.data.deleteFromRight.tip=Delete sel
observe.ui.datasource.editor.actions.synchro.data.description=Advanced data management
observe.ui.datasource.editor.actions.synchro.data.launch.operation=Get data fro databases
observe.ui.datasource.editor.actions.synchro.data.message.data.loaded=Database «%s» - Data loaded
-observe.ui.datasource.editor.actions.synchro.data.prepare.copyToTask=Database «%s» - Register operation copy to database\: %s - %s
-observe.ui.datasource.editor.actions.synchro.data.prepare.deleteTask=Database «%s» - Register operation delete from database\: %s - %s
-observe.ui.datasource.editor.actions.synchro.data.result.delete.trip=Database «%s» - Trip %s - %s was removed from database.
-observe.ui.datasource.editor.actions.synchro.data.result.export.trip=Database «%s» - Trip %s - %s was exported from database.
-observe.ui.datasource.editor.actions.synchro.data.result.import.trip=Database «%s» - Trip %s - %s was imported into database.
observe.ui.datasource.editor.actions.synchro.data.task.copyToLeft=Copy to left database\: <i>%s</i> - «<b>%s</b>»
observe.ui.datasource.editor.actions.synchro.data.task.copyToRight=Copy to right database\: <i>%s</i> - «<b>%s</b>»
observe.ui.datasource.editor.actions.synchro.data.task.deleteFromLeft=Delete from left database\: <i>%s</i> - «<b>%s</b>»
@@ -1672,22 +1675,20 @@ observe.ui.message.reload.i18n=You have modified i18n, application must be resta
observe.ui.message.save.configuration=Save configuration in file %1$s
observe.ui.message.select.report=Select a report
observe.ui.message.server.info=Local database %1$s is ready in server mode.
-observe.ui.message.show.missing.referential=List of missing referential
observe.ui.message.show.usage.for.delete=Referential %1$s "%2$s" can be deleted if you choose a replacement.
observe.ui.message.show.usage.for.delete2=Some data are using this referential, see following references.
observe.ui.message.show.usage.for.delete3=Choose a replacement reference to be able to delete.
observe.ui.message.show.usage.for.desactivated=Referential %1$s "%2$s" will be disabled.
observe.ui.message.show.usage.for.desactivated2=Some data are using this referential, see following reference
observe.ui.message.show.usage.for.desactivated3=Those data need to use another enabled referential to be saved.
-observe.ui.message.show.usage.for.missingReferentials2=There is some referentials present in «%s» source but not in the «%s» one.
observe.ui.message.show.usages=List of usage of referential %1$s\: '%2$s'
observe.ui.message.table.editBean.modified=Current entry is modifed and valid.
observe.ui.message.table.editBean.modified.but.invalid=Current entry is modified but not valid.
observe.ui.message.warning.will.be.delete=%1$s\n\nBe ware, export will replace existing data.
+observe.ui.move.selectTarget=Select new parent node after move?
observe.ui.textArea.tip=<html><body><ul><li>To focus on next widget, use accelerator <b>Ctrl + Tab</b></li><li>To focus on previous widget, use accelerator <b>Ctrl + Shift + Tab</b></body></html>
observe.ui.title.about=About
observe.ui.title.can.not.delete.referentiel=Impossible to delete a referentiel data...
-observe.ui.title.can.not.export.data2=Could not export data to «%s» source
observe.ui.title.can.not.export.obstuna=Could not export obstuna data...
observe.ui.title.choose.db.dump=Choose a database backup
observe.ui.title.choose.db.dump.directory=Chhose directory of backup
=====================================
client/i18n/src/main/i18n/translations/observe_es_ES.properties
=====================================
@@ -1295,7 +1295,9 @@ observe.ui.action.test.server.tip=Pulsar para comprobar la conexión con el serv
observe.ui.action.translate=Traduire \#TODO
observe.ui.action.translate.tip=Traduire l'application \#TODO
observe.ui.action.validate.config.generateReport=Generar un informe de validación
+observe.ui.choice.apply=Utilizar
observe.ui.choice.cancel=Cancelar
+observe.ui.choice.cancel.tip=To cancel, press ESCAPE key. \#TODO
observe.ui.choice.confirm.delete=Eliminar
observe.ui.choice.confirm.insert=Confirmer l'insertion \#TODO
observe.ui.choice.confirm.replace=Reemplazar
@@ -1326,10 +1328,16 @@ observe.ui.datasource.editor.actions.consolidate.message.trip=Datos calculados p
observe.ui.datasource.editor.actions.consolidate.start.trip=Démarrage de la consolidation pour la marée %s / %s (%s) \#TODO
observe.ui.datasource.editor.actions.consolidate.title=Consolidar los datos observados
observe.ui.datasource.editor.actions.consolidate.title.tip=Consolidar los datos observados
+observe.ui.datasource.editor.actions.data.copy=Base «%s» - Preparación de la copia \: %s - %s
+observe.ui.datasource.editor.actions.data.delete=Base «%s» - Preparación de la eliminación de la base \: %s - %s
+observe.ui.datasource.editor.actions.data.delete.result=Base «%s» - Eliminación de la marea %s - %s en la base.
+observe.ui.datasource.editor.actions.data.export.result=Base «%s» - Exportación de la marea %s - %s desde la base.
+observe.ui.datasource.editor.actions.data.import.add.missing.referential=Database «%s» - Insert all missing referentials\n%s
+observe.ui.datasource.editor.actions.data.import.add.missing.referential.for.type=Base «%s» - Insertion de %s référentiels de type «%s»\:%s\#TODO
+observe.ui.datasource.editor.actions.data.import.result=Base «%s» - Inserción de la marea %s - %s en la base.
+observe.ui.datasource.editor.actions.data.import.title.require.add.missing.referential=Need to confirm missing referential insertion \#TODO
observe.ui.datasource.editor.actions.exportData=Exportar los datos observados
observe.ui.datasource.editor.actions.exportData.description=Exportar los datos observados en la base central
-observe.ui.datasource.editor.actions.exportData.message.add.missing.referential=\t%s
-observe.ui.datasource.editor.actions.exportData.message.add.missing.referentials2=Base «%s» - Insertion de %s référentiels de type «%s»\#TODO
observe.ui.datasource.editor.actions.exportData.message.not.possible=La exportación no es posible (vea el mensaje anterior).
observe.ui.datasource.editor.actions.exportData.message.operation.needFix=Seleccione las mareas a exportar.
observe.ui.datasource.editor.actions.exportData.message.prepare.data=Preparación de los datos a exportar...
@@ -1392,11 +1400,6 @@ observe.ui.datasource.editor.actions.synchro.data.deleteFromRight.tip=Eliminar l
observe.ui.datasource.editor.actions.synchro.data.description=Gestión avanzada de los datos de los usuarios
observe.ui.datasource.editor.actions.synchro.data.launch.operation=Recuperar los datos de las fuentes de datos
observe.ui.datasource.editor.actions.synchro.data.message.data.loaded=Base «%s» - Datos recuperadas.
-observe.ui.datasource.editor.actions.synchro.data.prepare.copyToTask=Base «%s» - Preparación de la copia \: %s - %s
-observe.ui.datasource.editor.actions.synchro.data.prepare.deleteTask=Base «%s» - Preparación de la eliminación de la base \: %s - %s
-observe.ui.datasource.editor.actions.synchro.data.result.delete.trip=Base «%s» - Eliminación de la marea %s - %s en la base.
-observe.ui.datasource.editor.actions.synchro.data.result.export.trip=Base «%s» - Exportación de la marea %s - %s desde la base.
-observe.ui.datasource.editor.actions.synchro.data.result.import.trip=Base «%s» - Inserción de la marea %s - %s en la base.
observe.ui.datasource.editor.actions.synchro.data.task.copyToLeft=Copiar en la base de la izquierda \: <i>%s</i> - «<b>%s</b>»
observe.ui.datasource.editor.actions.synchro.data.task.copyToRight=Copiar en la base de la derecha \: <i>%s</i> - «<b>%s</b>»
observe.ui.datasource.editor.actions.synchro.data.task.deleteFromLeft=Eliminar en la base de la izquierda \: <i>%s</i> - «<b>%s</b>»
@@ -1672,22 +1675,20 @@ observe.ui.message.reload.i18n=Vous avez modifié des traductions, le redémarra
observe.ui.message.save.configuration=Guardar la configuración en el archivo %1$s
observe.ui.message.select.report=Seleccione informe
observe.ui.message.server.info=Información modo servidor
-observe.ui.message.show.missing.referential=List of missing referential \#TODO
observe.ui.message.show.usage.for.delete=El referencial %1$s "%2$s" no se puede eliminar sin hacer una sustitución antes.
observe.ui.message.show.usage.for.delete2=Los objetos están usando actualmente las referencias que se enumeran a continuación.
observe.ui.message.show.usage.for.delete3=Elija una referencia de reemplazo para poder borrar.
observe.ui.message.show.usage.for.desactivated=El referencial %1$s "%2$s" se desactivará.
observe.ui.message.show.usage.for.desactivated2=Los objetos están usando actualmente las referencias que se enumeran a continuación..
observe.ui.message.show.usage.for.desactivated3=Estos objetos deben usar otro referencial (no desactivado) para poder actualizarse.
-observe.ui.message.show.usage.for.missingReferentials2=There is some referentials present in «%s» source but not in the «%s» one.
observe.ui.message.show.usages=Listas de usos de referenciales %1$s \: '%2$s'
observe.ui.message.table.editBean.modified=El registro actual se ha modificado y es válido.
observe.ui.message.table.editBean.modified.but.invalid=El registro actual se ha modificado pero no es válido.
observe.ui.message.warning.will.be.delete=%1$s\n\nAtención, la exportación reemplazará la marea existente.
+observe.ui.move.selectTarget=Select new parent node after move? \#TODO
observe.ui.textArea.tip=<html><body><ul><li>To focus on next widget, use accelerator <b>Ctrl + Tab</b></li><li>To focus on previous widget, use accelerator <b>Ctrl + Shift + Tab</b></body></html> \#TODO
observe.ui.title.about=A proposito de ObServe...
observe.ui.title.can.not.delete.referentiel=Impossible eliminar un referencial en proceso de utilización...
-observe.ui.title.can.not.export.data2=Impossible d'exporter les données vers la base «%s»... \#TODO
observe.ui.title.can.not.export.obstuna=Impossible exportar los datos de obstuna...
observe.ui.title.choose.db.dump=Seleccionar una copia de seguridad de base local
observe.ui.title.choose.db.dump.directory=Seleccionar e directorio de destinación de la copia de seguridad
=====================================
client/i18n/src/main/i18n/translations/observe_fr_FR.properties
=====================================
@@ -1295,7 +1295,9 @@ observe.ui.action.test.server.tip=Cliquer pour valider la connexion au serveur
observe.ui.action.translate=Traduire
observe.ui.action.translate.tip=Traduire l'application
observe.ui.action.validate.config.generateReport=Générer un rapport de validation
+observe.ui.choice.apply=Appliquer
observe.ui.choice.cancel=Annuler
+observe.ui.choice.cancel.tip=Pour annuler, presser la touche ÉCHAP.
observe.ui.choice.confirm.delete=Supprimer
observe.ui.choice.confirm.insert=Confirmer l'insertion
observe.ui.choice.confirm.replace=Remplacer
@@ -1326,10 +1328,16 @@ observe.ui.datasource.editor.actions.consolidate.message.trip=Données calculée
observe.ui.datasource.editor.actions.consolidate.start.trip=Démarrage de la consolidation pour la marée %s / %s (%s)
observe.ui.datasource.editor.actions.consolidate.title=Consolider les données observateur
observe.ui.datasource.editor.actions.consolidate.title.tip=Consolider les données observateur
+observe.ui.datasource.editor.actions.data.copy=Source «%s» - Préparation de la recopie \: %s - %s
+observe.ui.datasource.editor.actions.data.delete=Source «%s» - Préparation de la suppression \: %s - %s
+observe.ui.datasource.editor.actions.data.delete.result=Source «%s» - Suppression de la marée %s - %s effectuée.
+observe.ui.datasource.editor.actions.data.export.result=Source «%s» - Export de la marée %s - %s effectuée.
+observe.ui.datasource.editor.actions.data.import.add.missing.referential=Source «%s» - Insertion de %d référentiels manquants\n%s
+observe.ui.datasource.editor.actions.data.import.add.missing.referential.for.type=Source «%s» - Insertion de %s référentiels de type «%s» \:%s
+observe.ui.datasource.editor.actions.data.import.result=Source «%s» - Insertion de la marée %s - %s effectuée.
+observe.ui.datasource.editor.actions.data.import.title.require.add.missing.referential=Confirmation requise pour insérer les référentiels manquants
observe.ui.datasource.editor.actions.exportData=Exporter les données observateurs
observe.ui.datasource.editor.actions.exportData.description=Exporter les données observateurs vers la base centrale
-observe.ui.datasource.editor.actions.exportData.message.add.missing.referential=\t%s
-observe.ui.datasource.editor.actions.exportData.message.add.missing.referentials2=Source «%s» - Insertion de %s référentiels de type «%s»
observe.ui.datasource.editor.actions.exportData.message.not.possible=L'opération d'export n'est pas possible (voir les messages précédents).
observe.ui.datasource.editor.actions.exportData.message.operation.needFix=Veuillez sélectionner les marées à exporter.
observe.ui.datasource.editor.actions.exportData.message.prepare.data=Préparation des données à exporter...
@@ -1392,11 +1400,6 @@ observe.ui.datasource.editor.actions.synchro.data.deleteFromRight.tip=Supprimer
observe.ui.datasource.editor.actions.synchro.data.description=Gestion avancée des données utilisateurs
observe.ui.datasource.editor.actions.synchro.data.launch.operation=Récupérer les données des sources de données
observe.ui.datasource.editor.actions.synchro.data.message.data.loaded=Source «%s» - Données récupérées.
-observe.ui.datasource.editor.actions.synchro.data.prepare.copyToTask=Source «%s» - Préparation de la recopie \: %s - %s
-observe.ui.datasource.editor.actions.synchro.data.prepare.deleteTask=Source «%s» - Préparation de la suppression \: %s - %s
-observe.ui.datasource.editor.actions.synchro.data.result.delete.trip=Source «%s» - Suppression de la marée %s - %s effectuée.
-observe.ui.datasource.editor.actions.synchro.data.result.export.trip=Source «%s» - Export de la marée %s - %s effectuée.
-observe.ui.datasource.editor.actions.synchro.data.result.import.trip=Source «%s» - Insertion de la marée %s - %s effectuée.
observe.ui.datasource.editor.actions.synchro.data.task.copyToLeft=Copier vers la base de gauche \: <i>%s</i> - «<b>%s</b>»
observe.ui.datasource.editor.actions.synchro.data.task.copyToRight=Copier vers la base de droite \: <i>%s</i> - «<b>%s</b>»
observe.ui.datasource.editor.actions.synchro.data.task.deleteFromLeft=Supprimer de la base de gauche \: <i>%s</i> - «<b>%s</b>»
@@ -1672,22 +1675,20 @@ observe.ui.message.reload.i18n=Vous avez modifié des traductions, le redémarra
observe.ui.message.save.configuration=Sauvegarde de la configuration dans le fichier %1$s
observe.ui.message.select.report=Choisissez une requête
observe.ui.message.server.info=La base locale %1$s est démarrée en mode serveur.
-observe.ui.message.show.missing.referential=Liste des référentiels manquants
observe.ui.message.show.usage.for.delete=Le référentiel %1$s "%2$s" ne peut pas être supprimé sans effectuer au préalable un remplacement.
observe.ui.message.show.usage.for.delete2=Des objets utilisent actuellement cet entité dont les références sont citées plus bas.
observe.ui.message.show.usage.for.delete3=Pour pouvoir supprimer l'objet, vous devez choisir une autre référence de remplacement.
observe.ui.message.show.usage.for.desactivated=Le référentiel %1$s "%2$s" va être désactivé.
observe.ui.message.show.usage.for.desactivated2=Des objets utilisent actuellement cet entité dont les références sont citées plus bas.
observe.ui.message.show.usage.for.desactivated3=Ces objets devront utiliser un autre référentiel (non désactivé) pour pouvoir être mis à jour.
-observe.ui.message.show.usage.for.missingReferentials2=Il existe des référentiels présents dans la base «%s» mais non présents dans la base «%s».
observe.ui.message.show.usages=Listes des utilisations du référentiel %1$s \: '%2$s'
observe.ui.message.table.editBean.modified=L'entrée en cours d'édition a été modifiée et est valide.
observe.ui.message.table.editBean.modified.but.invalid=L'entrée en cours d'édition a été modifiée, mais n'est pas valide.
observe.ui.message.warning.will.be.delete=%1$s\n\nAttention, l'export remplacera la marée existante.
+observe.ui.move.selectTarget=Se positionner sur le nœud destination après le déplacement ?
observe.ui.textArea.tip=<html><body><ul><li>Pour accéder au composant suivant, utilisez les raccourci clavier <b>Ctrl + Tab</b></li><li>Pour accéder au composant précédent, utilisez les raccourci clavier <b>Ctrl + Shift + Tab</b></body></html>
observe.ui.title.about=A propos d'ObServe...
observe.ui.title.can.not.delete.referentiel=Impossible de supprimer un référentiel en cours d'utilisation...
-observe.ui.title.can.not.export.data2=Impossible d'exporter les données vers la base «%s»...
observe.ui.title.can.not.export.obstuna=Impossible d'exporter des données d'obstuna...
observe.ui.title.choose.db.dump=Choisir une sauvegarder de base locale
observe.ui.title.choose.db.dump.directory=Choisir le répertoire de destination de la sauvegarde
=====================================
models/dto/java/src/main/java/fr/ird/observe/dto/referential/common/ProgramReference.java
=====================================
@@ -37,7 +37,7 @@ import static io.ultreia.java4all.i18n.I18n.t;
@GenerateJavaBeanDefinition
public class ProgramReference extends GeneratedProgramReference {
- public static Comparator<ProgramReference> COMPARATOR_WITH_GEAR_PREFIX = Comparator.comparing(p -> p.getGearTypePrefix() + " " + p.getLabel());
+ public static Comparator<ProgramReference> COMPARATOR_WITH_GEAR_PREFIX = Comparator.<ProgramReference>comparingInt(p->isProgramLongline(p) ? 0 : -1).thenComparing(p -> p.getGearTypePrefix() + " " + p.getLabel());
public static boolean isProgramLongline(ProgramReference programDtoRef) {
boolean result = false;
=====================================
pom.xml
=====================================
@@ -147,7 +147,7 @@
<maven.build.timestamp.format>dd/MM/yyyy HH:mm z</maven.build.timestamp.format>
<buildDate>${maven.build.timestamp}</buildDate>
- <toolkit.version>5.0.2-SNAPSHOT</toolkit.version>
+ <toolkit.version>5.0.2</toolkit.version>
<lib.version.ognl>3.1.28</lib.version.ognl>
<!--can't use 1.4.197 (date has changed + blob also)-->
=====================================
services/api/src/main/java/fr/ird/observe/services/service/data/NavigationResult.java
=====================================
@@ -77,4 +77,8 @@ public class NavigationResult implements ObserveDto {
public Date getTimestamp() {
return timestamp;
}
+
+ public ProgramReference getProgram(String programId) {
+ return programs.stream().filter(p->programId.equals(p.getId())).findFirst().orElseThrow();
+ }
}
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/c1620875650a55fab1e9ba07…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/c1620875650a55fab1e9ba07…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop] Problème sur la gestion des référentiels manquant lors d'un import - Closes #1784
by Tony CHEMIT 10 Feb '21
by Tony CHEMIT 10 Feb '21
10 Feb '21
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
c1620875 by Tony Chemit at 2021-02-10T18:23:08+01:00
Problème sur la gestion des référentiels manquant lors d'un import - Closes #1784
- - - - -
1 changed file:
- services/local-impl/src/main/java/fr/ird/observe/services/local/service/referential/ReferentialShellBuilder.java
Changes:
=====================================
services/local-impl/src/main/java/fr/ird/observe/services/local/service/referential/ReferentialShellBuilder.java
=====================================
@@ -42,22 +42,6 @@ public class ReferentialShellBuilder {
private final GetEntityReferentialShellVisitor visitor;
- private ReferentialShellBuilder(ImmutableSetStringMap incomingReferentialIds) {
- visitor = new GetEntityReferentialShellVisitor(incomingReferentialIds);
- }
-
- public static ReferentialShellBuilder builder(ImmutableSetStringMap incomingReferentialIds) {
- return new ReferentialShellBuilder(incomingReferentialIds);
- }
-
- void scan(TopiaEntity entity) {
- entity.accept(visitor);
- }
-
- public ImmutableSetStringMap build() {
- return visitor.missingReferentialIds.build();
- }
-
private static class GetEntityReferentialShellVisitor implements TopiaEntityVisitor {
private final Set<String> hitIds;
@@ -100,11 +84,11 @@ public class ReferentialShellBuilder {
@Override
public void visit(TopiaEntity entity, String propertyName, Class<?> collectionType, Class<?> type, Object value) {
- if (TopiaEntity.class.isAssignableFrom(type))
- for (Object child : ((Collection<?>) value)) {
- ((TopiaEntity) child).accept(this);
+ if (TopiaEntity.class.isAssignableFrom(type)) {
+ for (Object child : ((Collection<?>) value)) {
+ ((TopiaEntity) child).accept(this);
+ }
}
-
}
@Override
@@ -120,4 +104,20 @@ public class ReferentialShellBuilder {
}
}
+ public static ReferentialShellBuilder builder(ImmutableSetStringMap incomingReferentialIds) {
+ return new ReferentialShellBuilder(incomingReferentialIds);
+ }
+
+ private ReferentialShellBuilder(ImmutableSetStringMap incomingReferentialIds) {
+ visitor = new GetEntityReferentialShellVisitor(incomingReferentialIds);
+ }
+
+ void scan(TopiaEntity entity) {
+ entity.accept(visitor);
+ }
+
+ public ImmutableSetStringMap build() {
+ return visitor.missingReferentialIds.build();
+ }
+
}
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/c1620875650a55fab1e9ba07e…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/c1620875650a55fab1e9ba07e…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop-7.x] Problème sur la gestion des référentiels manquant lors d'un import - Closes #1784
by Tony CHEMIT 10 Feb '21
by Tony CHEMIT 10 Feb '21
10 Feb '21
Tony CHEMIT pushed to branch develop-7.x at ultreiaio / ird-observe
Commits:
87dd7e14 by Tony Chemit at 2021-02-10T18:11:16+01:00
Problème sur la gestion des référentiels manquant lors d'un import - Closes #1784
- - - - -
1 changed file:
- services-local/src/main/java/fr/ird/observe/services/local/service/referential/ReferentialShellBuilder.java
Changes:
=====================================
services-local/src/main/java/fr/ird/observe/services/local/service/referential/ReferentialShellBuilder.java
=====================================
@@ -28,6 +28,7 @@ import fr.ird.observe.spi.map.ImmutableSetStringMap;
import org.nuiton.topia.persistence.TopiaEntity;
import org.nuiton.topia.persistence.TopiaEntityVisitor;
+import java.util.Collection;
import java.util.Set;
import java.util.TreeSet;
@@ -99,7 +100,11 @@ public class ReferentialShellBuilder {
@Override
public void visit(TopiaEntity entity, String propertyName, Class<?> collectionType, Class<?> type, Object value) {
-
+ if (TopiaEntity.class.isAssignableFrom(type)) {
+ for (Object child : ((Collection<?>) value)) {
+ ((TopiaEntity) child).accept(this);
+ }
+ }
}
@Override
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/87dd7e14da1f7ce7eb956809b…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/87dd7e14da1f7ce7eb956809b…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop] fix application-assembly profiles: should be able to get a minimal assembly...
by Tony CHEMIT 10 Feb '21
by Tony CHEMIT 10 Feb '21
10 Feb '21
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
bd51318e by Tony Chemit at 2021-02-10T17:32:01+01:00
fix application-assembly profiles: should be able to get a minimal assembly zip on not release build.
- - - - -
2 changed files:
- client/runner/pom.xml
- pom.xml
Changes:
=====================================
client/runner/pom.xml
=====================================
@@ -261,9 +261,20 @@
<goal>run</goal>
</goals>
</execution>
+ <execution>
+ <id>Prepare release files</id>
+ <phase>integration-test</phase>
+ <configuration>
+ <target>
+ <copy failonerror="true" overwrite="true" file="${project.build.directory}/${project.build.finalName}.jar" tofile="${project.build.directory}/${applicationJarName}.jar" />
+ </target>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
</executions>
</plugin>
-
</plugins>
</build>
@@ -280,22 +291,17 @@
<properties>
<devMode>false</devMode>
</properties>
-
<build>
-
<plugins>
-
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<inherited>false</inherited>
<executions>
-
<execution>
<id>Prepare release files</id>
<phase>integration-test</phase>
<configuration>
<target>
- <copy failonerror="true" overwrite="true" file="${project.build.directory}/${project.build.finalName}.jar" tofile="${project.build.directory}/${applicationJarName}.jar" />
<copy failonerror="true" overwrite="true" file="${project.build.directory}/${project.build.finalName}.exe" tofile="${project.build.directory}/${applicationJarName}.exe" />
</target>
</configuration>
@@ -305,9 +311,9 @@
</execution>
</executions>
</plugin>
-
</plugins>
</build>
</profile>
+
</profiles>
</project>
=====================================
pom.xml
=====================================
@@ -24,7 +24,7 @@
<parent>
<groupId>io.ultreia.maven</groupId>
<artifactId>pom</artifactId>
- <version>2021.8</version>
+ <version>2021.9</version>
</parent>
<groupId>fr.ird.observe</groupId>
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/bd51318e2eec8d0e117e07611…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/bd51318e2eec8d0e117e07611…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop] fix application-assembly profiles: should be able to get a minimal assembly...
by Tony CHEMIT 10 Feb '21
by Tony CHEMIT 10 Feb '21
10 Feb '21
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
1fd71dca by Tony Chemit at 2021-02-10T17:15:40+01:00
fix application-assembly profiles: should be able to get a minimal assembly zip on not release build.
- - - - -
1 changed file:
- pom.xml
Changes:
=====================================
pom.xml
=====================================
@@ -24,7 +24,7 @@
<parent>
<groupId>io.ultreia.maven</groupId>
<artifactId>pom</artifactId>
- <version>2021.8</version>
+ <version>2021.9</version>
</parent>
<groupId>fr.ird.observe</groupId>
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/1fd71dcae9da83c749b6d0001…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/1fd71dcae9da83c749b6d0001…
You're receiving this email because of your account on gitlab.com.
1
0
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
efc3fb98 by Tony Chemit at 2021-02-10T16:01:57+01:00
Fix simple gitlab build
- - - - -
1 changed file:
- client/runner/pom.xml
Changes:
=====================================
client/runner/pom.xml
=====================================
@@ -261,9 +261,21 @@
<goal>run</goal>
</goals>
</execution>
+ <execution>
+ <id>Prepare release files</id>
+ <phase>integration-test</phase>
+ <configuration>
+ <target>
+ <copy failonerror="true" overwrite="true" file="${project.build.directory}/${project.build.finalName}.jar" tofile="${project.build.directory}/${applicationJarName}.jar" />
+ <copy failonerror="true" overwrite="true" file="${project.build.directory}/${project.build.finalName}.exe" tofile="${project.build.directory}/${applicationJarName}.exe" />
+ </target>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
</executions>
</plugin>
-
</plugins>
</build>
@@ -280,34 +292,6 @@
<properties>
<devMode>false</devMode>
</properties>
-
- <build>
-
- <plugins>
-
- <plugin>
- <artifactId>maven-antrun-plugin</artifactId>
- <inherited>false</inherited>
- <executions>
-
- <execution>
- <id>Prepare release files</id>
- <phase>integration-test</phase>
- <configuration>
- <target>
- <copy failonerror="true" overwrite="true" file="${project.build.directory}/${project.build.finalName}.jar" tofile="${project.build.directory}/${applicationJarName}.jar" />
- <copy failonerror="true" overwrite="true" file="${project.build.directory}/${project.build.finalName}.exe" tofile="${project.build.directory}/${applicationJarName}.exe" />
- </target>
- </configuration>
- <goals>
- <goal>run</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
-
- </plugins>
- </build>
</profile>
</profiles>
</project>
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/efc3fb98912fe9034d6a877d1…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/efc3fb98912fe9034d6a877d1…
You're receiving this email because of your account on gitlab.com.
1
0