Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: af5bc111 by Tony Chemit at 2023-10-09T10:59:59+02:00 L'UI équipement n'interdit pas d'associer à un équipement une caractéristique qui ne lui est pas destinée - Closes 2793 - - - - - a489cc05 by Tony Chemit at 2023-10-09T11:03:52+02:00 Elargir l'affichage du panneau Caractéristiques (d'un équipement) - Closes 2794 - - - - - 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: ===================================== client/core/src/main/java/fr/ird/observe/client/util/table/EditableTableModelWithCache.java ===================================== @@ -86,7 +86,7 @@ public abstract class EditableTableModelWithCache<E extends BusinessDto & Inline } } - public final void onBeforeResetRow(String prefix, int editingRow, JTable table) { + public void onBeforeResetRow(String prefix, int editingRow, JTable table) { if (!isEditable()) { return; } ===================================== client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/GearUseFeaturesMeasurementsTableModelSupport.java ===================================== @@ -33,6 +33,7 @@ import fr.ird.observe.client.util.table.EditableTableModelWithCache; import fr.ird.observe.client.util.table.JXTableUtil; import fr.ird.observe.dto.BusinessDto; import fr.ird.observe.dto.data.ContainerChildDto; +import fr.ird.observe.dto.data.ContainerDto; import fr.ird.observe.dto.data.GearUseFeaturesAware; import fr.ird.observe.dto.data.GearUseFeaturesMeasurementAware; import fr.ird.observe.dto.referential.common.GearCharacteristicListItemReference; @@ -46,6 +47,7 @@ import org.apache.logging.log4j.Logger; import org.nuiton.jaxx.validator.swing.SwingValidator; import javax.swing.JScrollPane; +import javax.swing.JTable; import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -66,19 +68,21 @@ public abstract class GearUseFeaturesMeasurementsTableModelSupport<E extends Bus private FilterableComboBox<GearCharacteristicReference> gearCharacteristicEditor; private List<GearCharacteristicReference> allowedCharacteristics; + private ContentTableUI<?, P, ?> ui; + @SuppressWarnings("unchecked") public static <E extends BusinessDto & GearUseFeaturesMeasurementAware, P extends ContainerChildDto & GearUseFeaturesAware> void onInit(ContentTableUI<?, P, ?> ui, JScrollPane scrollPane, EditableTable<E, ?> table, SwingValidator<E> rowValidator) { table.setRowHeight(22); GearUseFeaturesMeasurementsTableModelSupport<E, P> model = (GearUseFeaturesMeasurementsTableModelSupport<E, P>) table.getModel(); ui.getTableModel().registerInlineModel(model, table); - + model.ui = ui; ContentTableUITableModel<?, P, ?> tableUIModel = ui.getTableModel(); @SuppressWarnings("unchecked") P tableEditBean = (P) ui.getTableEditBean(); - tableEditBean.addPropertyChangeListener("gear", evt -> model.onGearChanged(tableUIModel, (GearReference) evt.getNewValue())); + tableEditBean.addPropertyChangeListener("gear", evt -> model.onGearChanged(ui, tableUIModel, (GearReference) evt.getNewValue(), false)); tableUIModel.addPropertyChangeListener(ContentTableUITableModel.SELECTED_ROW_PROPERTY, evt -> { int newValue = (int) evt.getNewValue(); if (newValue != -1) { - model.onGearChanged(tableUIModel, tableEditBean.getGear()); + model.onGearChanged(ui, tableUIModel, tableEditBean.getGear(), true); } }); model.gearsById = Maps.uniqueIndex(ui.getHandler().getReferentialService().loadDtoList(GearDto.class), GearDto::getId); @@ -104,7 +108,24 @@ public abstract class GearUseFeaturesMeasurementsTableModelSupport<E extends Bus super(listProperty); } - private void onGearChanged(ContentTableUITableModel<?, P, ?> tableModel, GearReference newGear) { + @Override + public void onBeforeResetRow(String prefix, int editingRow, JTable table) { + if (!isEditable()) { + return; + } + log.info(String.format("%sBefore reset edit bean at row: %d", prefix, editingRow)); + UIHelper.cancelEditing(table); + @SuppressWarnings("unchecked") ContainerDto<P> containerBean = (ContainerDto<P>) ui.getBean(); + List<P> children = containerBean.getChildren(); + P bean = children.get(editingRow); + @SuppressWarnings("unchecked") List<E> gearUseFeaturesMeasurement = (List<E>) bean.getGearUseFeaturesMeasurement(); + cache().replace(editingRow, gearUseFeaturesMeasurement); + List<E> newData = cache().get(editingRow); + setData(newData); + validate(); + } + + private void onGearChanged(ContentTableUI<?, P, ?> ui, ContentTableUITableModel<?, P, ?> tableModel, GearReference newGear, boolean selectionRowChanged) { if (!tableModel.isEditable()) { return; } @@ -112,35 +133,14 @@ public abstract class GearUseFeaturesMeasurementsTableModelSupport<E extends Bus return; } String gearId = newGear == null ? null : newGear.getId(); - log.info("Use gear: {}", gearId); - updateAllowedCharacteristics(gearId); - if (tableModel.isCreate()) { - // add default measurements + log.info("Use gear: {}, selection row changed? {}, existing measurements ({})", gearId, selectionRowChanged, getRowCount()); + if (!selectionRowChanged && !ui.getStates().isResetEdit()) { + // This means user has changed the gear, need to reset measurement, then add default ones setDefaultMeasurementsOnSelectedRow(gearId, tableModel.getSelectedRow()); } + updateAllowedCharacteristics(gearId); } -// public void onAfterLoadRowBeanToEdit(int editingRow, P tableEditBean, boolean newRow) { -// List<E> measurements = get(editingRow); -// if (measurements == null) { -// log.info(String.format("init measurements for row %d", editingRow)); -// // first time coming on this row -// if (newRow) { -// // create mode: just init with empty list -// measurements = Collections.emptyList(); -// log.info("create mode, use an empty list"); -// } else { -// measurements = new ArrayList<>(getGearUseFeaturesMeasurement(tableEditBean)); -// } -// // init measurements -// put(editingRow, measurements); -// } else { -// log.info(String.format("Using existing measurements for row %d : %d", editingRow, measurements.size())); -// } -// setData(measurements); -// setModified(false); -// } - @Override public final int getColumnCount() { return 2; @@ -176,7 +176,7 @@ public abstract class GearUseFeaturesMeasurementsTableModelSupport<E extends Bus public void setDefaultMeasurementsOnSelectedRow(String gearId, int editingRow) { List<E> measurements = getDefaultGearUseFeaturesMeasurement(gearId); - log.info(String.format("Create mode, use default measurements: %d", measurements.size())); + log.info(String.format("User mode, use default measurements: %d", measurements.size())); //FIXME Error no list for row -1 cache().replace(editingRow, measurements); setData(measurements); ===================================== client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/common/TripGearUseFeaturesUI.jaxx ===================================== @@ -58,54 +58,55 @@ <Table id='editorPanel' fill='both' insets='0' beanScope="tableEditBean"> <row> - <cell weightx="0.5"> - <JXTitledPanel id="definitionPanel" contentContainer='{definitionForm}'> - <Table id='definitionForm' fill='both' insets='1'> - <!-- gear --> - <row> - <cell> - <JLabel id='gearLabel'/> - </cell> - <cell weightx='1' anchor='east'> - <FilterableComboBox id='gear' genericType='GearReference'/> - </cell> - </row> - <!-- number --> - <row> - <cell> - <JLabel id='numberLabel'/> - </cell> - <cell weightx='1' anchor='east'> - <NumberEditor id='number' styleClass="int6"/> - </cell> - </row> - <!-- usedInTrip --> - <row> - <cell> - <JLabel id='usedInTripLabel'/> - </cell> - <cell weightx='1' anchor='east'> - <BooleanEditor id='usedInTrip'/> - </cell> - </row> - <!-- comment --> - <row> - <cell columns="2" weighty='1'> - <BigTextEditor id="comment"/> - </cell> - </row> - </Table> - </JXTitledPanel> - </cell> - <cell weightx="0.5"> - <JXTitledPanel id="measurementsPanel" contentContainer='{measurementsInternalPanel}'> - <JPanel id="measurementsInternalPanel" layout='{new GridLayout()}'> - <JScrollPane id='measurementsScrollPane'> - <EditableTable id='measurementsTable' constructorParams='measurementsTableModel' genericType="GearUseFeaturesMeasurementDto, GearUseFeaturesMeasurementsTableModel"/> - </JScrollPane> - </JPanel> - </JXTitledPanel> + <cell weightx="1"> + <JPanel layout="{new GridLayout()}"> + <JXTitledPanel id="definitionPanel" contentContainer='{definitionForm}'> + <Table id='definitionForm' fill='both' insets='1'> + <!-- gear --> + <row> + <cell> + <JLabel id='gearLabel'/> + </cell> + <cell weightx='1' anchor='east'> + <FilterableComboBox id='gear' genericType='GearReference'/> + </cell> + </row> + <!-- number --> + <row> + <cell> + <JLabel id='numberLabel'/> + </cell> + <cell weightx='1' anchor='east'> + <NumberEditor id='number' styleClass="int6"/> + </cell> + </row> + <!-- usedInTrip --> + <row> + <cell> + <JLabel id='usedInTripLabel'/> + </cell> + <cell weightx='1' anchor='east'> + <BooleanEditor id='usedInTrip'/> + </cell> + </row> + <!-- comment --> + <row> + <cell columns="2" weighty='1'> + <BigTextEditor id="comment"/> + </cell> + </row> + </Table> + </JXTitledPanel> + <JXTitledPanel id="measurementsPanel" contentContainer='{measurementsInternalPanel}'> + <JPanel id="measurementsInternalPanel" layout='{new GridLayout()}'> + <JScrollPane id='measurementsScrollPane'> + <EditableTable id='measurementsTable' constructorParams='measurementsTableModel' genericType="GearUseFeaturesMeasurementDto, GearUseFeaturesMeasurementsTableModel"/> + </JScrollPane> + </JPanel> + </JXTitledPanel> + </JPanel> </cell> </row> </Table> + <JMenuItem id='moveAll' styleClass='editableAndNotModifiedAndTableNotEmpty'/> </fr.ird.observe.client.datasource.editor.api.content.data.table.ContentTableUI> ===================================== client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/common/TripGearUseFeaturesUI.jaxx ===================================== @@ -58,53 +58,53 @@ <Table id='editorPanel' fill='both' insets='0' beanScope="tableEditBean"> <row> - <cell weightx="0.5"> - <JXTitledPanel id="definitionPanel" contentContainer='{definitionForm}'> - <Table id='definitionForm' fill='both' insets='1'> - <!-- gear --> - <row> - <cell> - <JLabel id='gearLabel'/> - </cell> - <cell weightx='1' anchor='east'> - <FilterableComboBox id='gear' genericType='GearReference'/> - </cell> - </row> - <!-- number --> - <row> - <cell> - <JLabel id='numberLabel'/> - </cell> - <cell weightx='1' anchor='east'> - <NumberEditor id='number' styleClass="int6"/> - </cell> - </row> - <!-- usedInTrip --> - <row> - <cell> - <JLabel id='usedInTripLabel'/> - </cell> - <cell weightx='1' anchor='east'> - <BooleanEditor id='usedInTrip'/> - </cell> - </row> - <!-- comment --> - <row> - <cell columns="2" weighty='1'> - <BigTextEditor id="comment"/> - </cell> - </row> - </Table> - </JXTitledPanel> - </cell> - <cell weightx="0.5"> - <JXTitledPanel id="measurementsPanel" contentContainer='{measurementsInternalPanel}'> - <JPanel id="measurementsInternalPanel" layout='{new GridLayout()}'> - <JScrollPane id='measurementsScrollPane'> - <EditableTable id='measurementsTable' constructorParams='measurementsTableModel' genericType="GearUseFeaturesMeasurementDto, GearUseFeaturesMeasurementsTableModel"/> - </JScrollPane> - </JPanel> - </JXTitledPanel> + <cell weightx="1"> + <JPanel layout="{new GridLayout()}"> + <JXTitledPanel id="definitionPanel" contentContainer='{definitionForm}'> + <Table id='definitionForm' fill='both' insets='1'> + <!-- gear --> + <row> + <cell> + <JLabel id='gearLabel'/> + </cell> + <cell weightx='1' anchor='east'> + <FilterableComboBox id='gear' genericType='GearReference'/> + </cell> + </row> + <!-- number --> + <row> + <cell> + <JLabel id='numberLabel'/> + </cell> + <cell weightx='1' anchor='east'> + <NumberEditor id='number' styleClass="int6"/> + </cell> + </row> + <!-- usedInTrip --> + <row> + <cell> + <JLabel id='usedInTripLabel'/> + </cell> + <cell weightx='1' anchor='east'> + <BooleanEditor id='usedInTrip'/> + </cell> + </row> + <!-- comment --> + <row> + <cell columns="2" weighty='1'> + <BigTextEditor id="comment"/> + </cell> + </row> + </Table> + </JXTitledPanel> + <JXTitledPanel id="measurementsPanel" contentContainer='{measurementsInternalPanel}'> + <JPanel id="measurementsInternalPanel" layout='{new GridLayout()}'> + <JScrollPane id='measurementsScrollPane'> + <EditableTable id='measurementsTable' constructorParams='measurementsTableModel' genericType="GearUseFeaturesMeasurementDto, GearUseFeaturesMeasurementsTableModel"/> + </JScrollPane> + </JPanel> + </JXTitledPanel> + </JPanel> </cell> </row> </Table> View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/d6624be7806c07e795b9323d8... -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/d6624be7806c07e795b9323d8... You're receiving this email because of your account on gitlab.com.
participants (1)
-
Tony CHEMIT (@tchemit)