Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
-
af5bc111
by Tony Chemit at 2023-10-09T10:59:59+02:00
-
a489cc05
by Tony Chemit at 2023-10-09T11:03:52+02:00
4 changed files:
- client/core/src/main/java/fr/ird/observe/client/util/table/EditableTableModelWithCache.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/GearUseFeaturesMeasurementsTableModelSupport.java
- client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/common/TripGearUseFeaturesUI.jaxx
- client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/common/TripGearUseFeaturesUI.jaxx
Changes:
| ... | ... | @@ -86,7 +86,7 @@ public abstract class EditableTableModelWithCache<E extends BusinessDto & Inline |
| 86 | 86 | }
|
| 87 | 87 | }
|
| 88 | 88 | |
| 89 | - public final void onBeforeResetRow(String prefix, int editingRow, JTable table) {
|
|
| 89 | + public void onBeforeResetRow(String prefix, int editingRow, JTable table) {
|
|
| 90 | 90 | if (!isEditable()) {
|
| 91 | 91 | return;
|
| 92 | 92 | }
|
| ... | ... | @@ -33,6 +33,7 @@ import fr.ird.observe.client.util.table.EditableTableModelWithCache; |
| 33 | 33 | import fr.ird.observe.client.util.table.JXTableUtil;
|
| 34 | 34 | import fr.ird.observe.dto.BusinessDto;
|
| 35 | 35 | import fr.ird.observe.dto.data.ContainerChildDto;
|
| 36 | +import fr.ird.observe.dto.data.ContainerDto;
|
|
| 36 | 37 | import fr.ird.observe.dto.data.GearUseFeaturesAware;
|
| 37 | 38 | import fr.ird.observe.dto.data.GearUseFeaturesMeasurementAware;
|
| 38 | 39 | import fr.ird.observe.dto.referential.common.GearCharacteristicListItemReference;
|
| ... | ... | @@ -46,6 +47,7 @@ import org.apache.logging.log4j.Logger; |
| 46 | 47 | import org.nuiton.jaxx.validator.swing.SwingValidator;
|
| 47 | 48 | |
| 48 | 49 | import javax.swing.JScrollPane;
|
| 50 | +import javax.swing.JTable;
|
|
| 49 | 51 | import java.util.ArrayList;
|
| 50 | 52 | import java.util.List;
|
| 51 | 53 | import java.util.Objects;
|
| ... | ... | @@ -66,19 +68,21 @@ public abstract class GearUseFeaturesMeasurementsTableModelSupport<E extends Bus |
| 66 | 68 | private FilterableComboBox<GearCharacteristicReference> gearCharacteristicEditor;
|
| 67 | 69 | private List<GearCharacteristicReference> allowedCharacteristics;
|
| 68 | 70 | |
| 71 | + private ContentTableUI<?, P, ?> ui;
|
|
| 72 | + |
|
| 69 | 73 | @SuppressWarnings("unchecked")
|
| 70 | 74 | public static <E extends BusinessDto & GearUseFeaturesMeasurementAware, P extends ContainerChildDto & GearUseFeaturesAware> void onInit(ContentTableUI<?, P, ?> ui, JScrollPane scrollPane, EditableTable<E, ?> table, SwingValidator<E> rowValidator) {
|
| 71 | 75 | table.setRowHeight(22);
|
| 72 | 76 | GearUseFeaturesMeasurementsTableModelSupport<E, P> model = (GearUseFeaturesMeasurementsTableModelSupport<E, P>) table.getModel();
|
| 73 | 77 | ui.getTableModel().registerInlineModel(model, table);
|
| 74 | - |
|
| 78 | + model.ui = ui;
|
|
| 75 | 79 | ContentTableUITableModel<?, P, ?> tableUIModel = ui.getTableModel();
|
| 76 | 80 | @SuppressWarnings("unchecked") P tableEditBean = (P) ui.getTableEditBean();
|
| 77 | - tableEditBean.addPropertyChangeListener("gear", evt -> model.onGearChanged(tableUIModel, (GearReference) evt.getNewValue()));
|
|
| 81 | + tableEditBean.addPropertyChangeListener("gear", evt -> model.onGearChanged(ui, tableUIModel, (GearReference) evt.getNewValue(), false));
|
|
| 78 | 82 | tableUIModel.addPropertyChangeListener(ContentTableUITableModel.SELECTED_ROW_PROPERTY, evt -> {
|
| 79 | 83 | int newValue = (int) evt.getNewValue();
|
| 80 | 84 | if (newValue != -1) {
|
| 81 | - model.onGearChanged(tableUIModel, tableEditBean.getGear());
|
|
| 85 | + model.onGearChanged(ui, tableUIModel, tableEditBean.getGear(), true);
|
|
| 82 | 86 | }
|
| 83 | 87 | });
|
| 84 | 88 | model.gearsById = Maps.uniqueIndex(ui.getHandler().getReferentialService().loadDtoList(GearDto.class), GearDto::getId);
|
| ... | ... | @@ -104,7 +108,24 @@ public abstract class GearUseFeaturesMeasurementsTableModelSupport<E extends Bus |
| 104 | 108 | super(listProperty);
|
| 105 | 109 | }
|
| 106 | 110 | |
| 107 | - private void onGearChanged(ContentTableUITableModel<?, P, ?> tableModel, GearReference newGear) {
|
|
| 111 | + @Override
|
|
| 112 | + public void onBeforeResetRow(String prefix, int editingRow, JTable table) {
|
|
| 113 | + if (!isEditable()) {
|
|
| 114 | + return;
|
|
| 115 | + }
|
|
| 116 | + log.info(String.format("%sBefore reset edit bean at row: %d", prefix, editingRow));
|
|
| 117 | + UIHelper.cancelEditing(table);
|
|
| 118 | + @SuppressWarnings("unchecked") ContainerDto<P> containerBean = (ContainerDto<P>) ui.getBean();
|
|
| 119 | + List<P> children = containerBean.getChildren();
|
|
| 120 | + P bean = children.get(editingRow);
|
|
| 121 | + @SuppressWarnings("unchecked") List<E> gearUseFeaturesMeasurement = (List<E>) bean.getGearUseFeaturesMeasurement();
|
|
| 122 | + cache().replace(editingRow, gearUseFeaturesMeasurement);
|
|
| 123 | + List<E> newData = cache().get(editingRow);
|
|
| 124 | + setData(newData);
|
|
| 125 | + validate();
|
|
| 126 | + }
|
|
| 127 | + |
|
| 128 | + private void onGearChanged(ContentTableUI<?, P, ?> ui, ContentTableUITableModel<?, P, ?> tableModel, GearReference newGear, boolean selectionRowChanged) {
|
|
| 108 | 129 | if (!tableModel.isEditable()) {
|
| 109 | 130 | return;
|
| 110 | 131 | }
|
| ... | ... | @@ -112,35 +133,14 @@ public abstract class GearUseFeaturesMeasurementsTableModelSupport<E extends Bus |
| 112 | 133 | return;
|
| 113 | 134 | }
|
| 114 | 135 | String gearId = newGear == null ? null : newGear.getId();
|
| 115 | - log.info("Use gear: {}", gearId);
|
|
| 116 | - updateAllowedCharacteristics(gearId);
|
|
| 117 | - if (tableModel.isCreate()) {
|
|
| 118 | - // add default measurements
|
|
| 136 | + log.info("Use gear: {}, selection row changed? {}, existing measurements ({})", gearId, selectionRowChanged, getRowCount());
|
|
| 137 | + if (!selectionRowChanged && !ui.getStates().isResetEdit()) {
|
|
| 138 | + // This means user has changed the gear, need to reset measurement, then add default ones
|
|
| 119 | 139 | setDefaultMeasurementsOnSelectedRow(gearId, tableModel.getSelectedRow());
|
| 120 | 140 | }
|
| 141 | + updateAllowedCharacteristics(gearId);
|
|
| 121 | 142 | }
|
| 122 | 143 | |
| 123 | -// public void onAfterLoadRowBeanToEdit(int editingRow, P tableEditBean, boolean newRow) {
|
|
| 124 | -// List<E> measurements = get(editingRow);
|
|
| 125 | -// if (measurements == null) {
|
|
| 126 | -// log.info(String.format("init measurements for row %d", editingRow));
|
|
| 127 | -// // first time coming on this row
|
|
| 128 | -// if (newRow) {
|
|
| 129 | -// // create mode: just init with empty list
|
|
| 130 | -// measurements = Collections.emptyList();
|
|
| 131 | -// log.info("create mode, use an empty list");
|
|
| 132 | -// } else {
|
|
| 133 | -// measurements = new ArrayList<>(getGearUseFeaturesMeasurement(tableEditBean));
|
|
| 134 | -// }
|
|
| 135 | -// // init measurements
|
|
| 136 | -// put(editingRow, measurements);
|
|
| 137 | -// } else {
|
|
| 138 | -// log.info(String.format("Using existing measurements for row %d : %d", editingRow, measurements.size()));
|
|
| 139 | -// }
|
|
| 140 | -// setData(measurements);
|
|
| 141 | -// setModified(false);
|
|
| 142 | -// }
|
|
| 143 | - |
|
| 144 | 144 | @Override
|
| 145 | 145 | public final int getColumnCount() {
|
| 146 | 146 | return 2;
|
| ... | ... | @@ -176,7 +176,7 @@ public abstract class GearUseFeaturesMeasurementsTableModelSupport<E extends Bus |
| 176 | 176 | |
| 177 | 177 | public void setDefaultMeasurementsOnSelectedRow(String gearId, int editingRow) {
|
| 178 | 178 | List<E> measurements = getDefaultGearUseFeaturesMeasurement(gearId);
|
| 179 | - log.info(String.format("Create mode, use default measurements: %d", measurements.size()));
|
|
| 179 | + log.info(String.format("User mode, use default measurements: %d", measurements.size()));
|
|
| 180 | 180 | //FIXME Error no list for row -1
|
| 181 | 181 | cache().replace(editingRow, measurements);
|
| 182 | 182 | setData(measurements);
|
| ... | ... | @@ -58,54 +58,55 @@ |
| 58 | 58 | |
| 59 | 59 | <Table id='editorPanel' fill='both' insets='0' beanScope="tableEditBean">
|
| 60 | 60 | <row>
|
| 61 | - <cell weightx="0.5">
|
|
| 62 | - <JXTitledPanel id="definitionPanel" contentContainer='{definitionForm}'>
|
|
| 63 | - <Table id='definitionForm' fill='both' insets='1'>
|
|
| 64 | - <!-- gear -->
|
|
| 65 | - <row>
|
|
| 66 | - <cell>
|
|
| 67 | - <JLabel id='gearLabel'/>
|
|
| 68 | - </cell>
|
|
| 69 | - <cell weightx='1' anchor='east'>
|
|
| 70 | - <FilterableComboBox id='gear' genericType='GearReference'/>
|
|
| 71 | - </cell>
|
|
| 72 | - </row>
|
|
| 73 | - <!-- number -->
|
|
| 74 | - <row>
|
|
| 75 | - <cell>
|
|
| 76 | - <JLabel id='numberLabel'/>
|
|
| 77 | - </cell>
|
|
| 78 | - <cell weightx='1' anchor='east'>
|
|
| 79 | - <NumberEditor id='number' styleClass="int6"/>
|
|
| 80 | - </cell>
|
|
| 81 | - </row>
|
|
| 82 | - <!-- usedInTrip -->
|
|
| 83 | - <row>
|
|
| 84 | - <cell>
|
|
| 85 | - <JLabel id='usedInTripLabel'/>
|
|
| 86 | - </cell>
|
|
| 87 | - <cell weightx='1' anchor='east'>
|
|
| 88 | - <BooleanEditor id='usedInTrip'/>
|
|
| 89 | - </cell>
|
|
| 90 | - </row>
|
|
| 91 | - <!-- comment -->
|
|
| 92 | - <row>
|
|
| 93 | - <cell columns="2" weighty='1'>
|
|
| 94 | - <BigTextEditor id="comment"/>
|
|
| 95 | - </cell>
|
|
| 96 | - </row>
|
|
| 97 | - </Table>
|
|
| 98 | - </JXTitledPanel>
|
|
| 99 | - </cell>
|
|
| 100 | - <cell weightx="0.5">
|
|
| 101 | - <JXTitledPanel id="measurementsPanel" contentContainer='{measurementsInternalPanel}'>
|
|
| 102 | - <JPanel id="measurementsInternalPanel" layout='{new GridLayout()}'>
|
|
| 103 | - <JScrollPane id='measurementsScrollPane'>
|
|
| 104 | - <EditableTable id='measurementsTable' constructorParams='measurementsTableModel' genericType="GearUseFeaturesMeasurementDto, GearUseFeaturesMeasurementsTableModel"/>
|
|
| 105 | - </JScrollPane>
|
|
| 106 | - </JPanel>
|
|
| 107 | - </JXTitledPanel>
|
|
| 61 | + <cell weightx="1">
|
|
| 62 | + <JPanel layout="{new GridLayout()}">
|
|
| 63 | + <JXTitledPanel id="definitionPanel" contentContainer='{definitionForm}'>
|
|
| 64 | + <Table id='definitionForm' fill='both' insets='1'>
|
|
| 65 | + <!-- gear -->
|
|
| 66 | + <row>
|
|
| 67 | + <cell>
|
|
| 68 | + <JLabel id='gearLabel'/>
|
|
| 69 | + </cell>
|
|
| 70 | + <cell weightx='1' anchor='east'>
|
|
| 71 | + <FilterableComboBox id='gear' genericType='GearReference'/>
|
|
| 72 | + </cell>
|
|
| 73 | + </row>
|
|
| 74 | + <!-- number -->
|
|
| 75 | + <row>
|
|
| 76 | + <cell>
|
|
| 77 | + <JLabel id='numberLabel'/>
|
|
| 78 | + </cell>
|
|
| 79 | + <cell weightx='1' anchor='east'>
|
|
| 80 | + <NumberEditor id='number' styleClass="int6"/>
|
|
| 81 | + </cell>
|
|
| 82 | + </row>
|
|
| 83 | + <!-- usedInTrip -->
|
|
| 84 | + <row>
|
|
| 85 | + <cell>
|
|
| 86 | + <JLabel id='usedInTripLabel'/>
|
|
| 87 | + </cell>
|
|
| 88 | + <cell weightx='1' anchor='east'>
|
|
| 89 | + <BooleanEditor id='usedInTrip'/>
|
|
| 90 | + </cell>
|
|
| 91 | + </row>
|
|
| 92 | + <!-- comment -->
|
|
| 93 | + <row>
|
|
| 94 | + <cell columns="2" weighty='1'>
|
|
| 95 | + <BigTextEditor id="comment"/>
|
|
| 96 | + </cell>
|
|
| 97 | + </row>
|
|
| 98 | + </Table>
|
|
| 99 | + </JXTitledPanel>
|
|
| 100 | + <JXTitledPanel id="measurementsPanel" contentContainer='{measurementsInternalPanel}'>
|
|
| 101 | + <JPanel id="measurementsInternalPanel" layout='{new GridLayout()}'>
|
|
| 102 | + <JScrollPane id='measurementsScrollPane'>
|
|
| 103 | + <EditableTable id='measurementsTable' constructorParams='measurementsTableModel' genericType="GearUseFeaturesMeasurementDto, GearUseFeaturesMeasurementsTableModel"/>
|
|
| 104 | + </JScrollPane>
|
|
| 105 | + </JPanel>
|
|
| 106 | + </JXTitledPanel>
|
|
| 107 | + </JPanel>
|
|
| 108 | 108 | </cell>
|
| 109 | 109 | </row>
|
| 110 | 110 | </Table>
|
| 111 | + <JMenuItem id='moveAll' styleClass='editableAndNotModifiedAndTableNotEmpty'/>
|
|
| 111 | 112 | </fr.ird.observe.client.datasource.editor.api.content.data.table.ContentTableUI> |
| ... | ... | @@ -58,53 +58,53 @@ |
| 58 | 58 | |
| 59 | 59 | <Table id='editorPanel' fill='both' insets='0' beanScope="tableEditBean">
|
| 60 | 60 | <row>
|
| 61 | - <cell weightx="0.5">
|
|
| 62 | - <JXTitledPanel id="definitionPanel" contentContainer='{definitionForm}'>
|
|
| 63 | - <Table id='definitionForm' fill='both' insets='1'>
|
|
| 64 | - <!-- gear -->
|
|
| 65 | - <row>
|
|
| 66 | - <cell>
|
|
| 67 | - <JLabel id='gearLabel'/>
|
|
| 68 | - </cell>
|
|
| 69 | - <cell weightx='1' anchor='east'>
|
|
| 70 | - <FilterableComboBox id='gear' genericType='GearReference'/>
|
|
| 71 | - </cell>
|
|
| 72 | - </row>
|
|
| 73 | - <!-- number -->
|
|
| 74 | - <row>
|
|
| 75 | - <cell>
|
|
| 76 | - <JLabel id='numberLabel'/>
|
|
| 77 | - </cell>
|
|
| 78 | - <cell weightx='1' anchor='east'>
|
|
| 79 | - <NumberEditor id='number' styleClass="int6"/>
|
|
| 80 | - </cell>
|
|
| 81 | - </row>
|
|
| 82 | - <!-- usedInTrip -->
|
|
| 83 | - <row>
|
|
| 84 | - <cell>
|
|
| 85 | - <JLabel id='usedInTripLabel'/>
|
|
| 86 | - </cell>
|
|
| 87 | - <cell weightx='1' anchor='east'>
|
|
| 88 | - <BooleanEditor id='usedInTrip'/>
|
|
| 89 | - </cell>
|
|
| 90 | - </row>
|
|
| 91 | - <!-- comment -->
|
|
| 92 | - <row>
|
|
| 93 | - <cell columns="2" weighty='1'>
|
|
| 94 | - <BigTextEditor id="comment"/>
|
|
| 95 | - </cell>
|
|
| 96 | - </row>
|
|
| 97 | - </Table>
|
|
| 98 | - </JXTitledPanel>
|
|
| 99 | - </cell>
|
|
| 100 | - <cell weightx="0.5">
|
|
| 101 | - <JXTitledPanel id="measurementsPanel" contentContainer='{measurementsInternalPanel}'>
|
|
| 102 | - <JPanel id="measurementsInternalPanel" layout='{new GridLayout()}'>
|
|
| 103 | - <JScrollPane id='measurementsScrollPane'>
|
|
| 104 | - <EditableTable id='measurementsTable' constructorParams='measurementsTableModel' genericType="GearUseFeaturesMeasurementDto, GearUseFeaturesMeasurementsTableModel"/>
|
|
| 105 | - </JScrollPane>
|
|
| 106 | - </JPanel>
|
|
| 107 | - </JXTitledPanel>
|
|
| 61 | + <cell weightx="1">
|
|
| 62 | + <JPanel layout="{new GridLayout()}">
|
|
| 63 | + <JXTitledPanel id="definitionPanel" contentContainer='{definitionForm}'>
|
|
| 64 | + <Table id='definitionForm' fill='both' insets='1'>
|
|
| 65 | + <!-- gear -->
|
|
| 66 | + <row>
|
|
| 67 | + <cell>
|
|
| 68 | + <JLabel id='gearLabel'/>
|
|
| 69 | + </cell>
|
|
| 70 | + <cell weightx='1' anchor='east'>
|
|
| 71 | + <FilterableComboBox id='gear' genericType='GearReference'/>
|
|
| 72 | + </cell>
|
|
| 73 | + </row>
|
|
| 74 | + <!-- number -->
|
|
| 75 | + <row>
|
|
| 76 | + <cell>
|
|
| 77 | + <JLabel id='numberLabel'/>
|
|
| 78 | + </cell>
|
|
| 79 | + <cell weightx='1' anchor='east'>
|
|
| 80 | + <NumberEditor id='number' styleClass="int6"/>
|
|
| 81 | + </cell>
|
|
| 82 | + </row>
|
|
| 83 | + <!-- usedInTrip -->
|
|
| 84 | + <row>
|
|
| 85 | + <cell>
|
|
| 86 | + <JLabel id='usedInTripLabel'/>
|
|
| 87 | + </cell>
|
|
| 88 | + <cell weightx='1' anchor='east'>
|
|
| 89 | + <BooleanEditor id='usedInTrip'/>
|
|
| 90 | + </cell>
|
|
| 91 | + </row>
|
|
| 92 | + <!-- comment -->
|
|
| 93 | + <row>
|
|
| 94 | + <cell columns="2" weighty='1'>
|
|
| 95 | + <BigTextEditor id="comment"/>
|
|
| 96 | + </cell>
|
|
| 97 | + </row>
|
|
| 98 | + </Table>
|
|
| 99 | + </JXTitledPanel>
|
|
| 100 | + <JXTitledPanel id="measurementsPanel" contentContainer='{measurementsInternalPanel}'>
|
|
| 101 | + <JPanel id="measurementsInternalPanel" layout='{new GridLayout()}'>
|
|
| 102 | + <JScrollPane id='measurementsScrollPane'>
|
|
| 103 | + <EditableTable id='measurementsTable' constructorParams='measurementsTableModel' genericType="GearUseFeaturesMeasurementDto, GearUseFeaturesMeasurementsTableModel"/>
|
|
| 104 | + </JScrollPane>
|
|
| 105 | + </JPanel>
|
|
| 106 | + </JXTitledPanel>
|
|
| 107 | + </JPanel>
|
|
| 108 | 108 | </cell>
|
| 109 | 109 | </row>
|
| 110 | 110 | </Table>
|