Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: 4b04e28c by Tony Chemit at 2023-02-07T10:52:59+01:00 Persistence migration - Add tck buyers temporary (will be remove it when using real referential) - See #2621 - - - - - cd14da91 by Tony Chemit at 2023-02-07T10:55:12+01:00 Usage of new TransmittingBuoyOperation 99 - See #2619 - - - - - 6a7efe35 by Tony Chemit at 2023-02-07T11:54:18+01:00 Amélioration de l'éditeur des matériaux de DCP - Closes #2623 - - - - - b863e557 by Tony Chemit at 2023-02-07T11:57:23+01:00 Floating object - improve TypeTransmittingBuoyOperation code - - - - - 6 changed files: - client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/dcp/DcpUIAdapter.java - client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/dcp/FloatingObjectPartsTreeNode.java - client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/logbook/FloatingObjectUI.jaxx - client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/observation/FloatingObjectUI.jaxx - core/api/dto/src/main/java/fr/ird/observe/dto/data/ps/TypeTransmittingBuoyOperation.java - core/persistence/migration/src/main/java/fr/ird/observe/spi/migration/v9/DataSourceMigrationForVersion_9_1.java Changes: ===================================== client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/dcp/DcpUIAdapter.java ===================================== @@ -162,7 +162,7 @@ public interface DcpUIAdapter<T extends TransmittingBuoyAware> extends JAXXObjec default void onOpenAfterOpenModel(DcpUIModelStates<?, ?> states) { processDataBinding("typeOperation.selectedItem"); TypeTransmittingBuoyOperation typeOperation = getTypeOperation().getSelectedValue(); - changeTypeOperation(states, typeOperation, false); + changeTypeTransmittingBuoyOperation(states, typeOperation, false); } default void stopEditUI() { @@ -173,9 +173,9 @@ public interface DcpUIAdapter<T extends TransmittingBuoyAware> extends JAXXObjec getValidatorBuoy2().setBean(null); } - default void changeTypeOperation(ItemEvent event, DcpUIModelStates<?, ?> states) { + default void changeTypeTransmittingBuoyOperation(ItemEvent event, DcpUIModelStates<?, ?> states) { if (event.getStateChange() == ItemEvent.SELECTED && states.isEditing()) { - changeTypeOperation(states, getTypeOperation().getSelectedValue(), true); + changeTypeTransmittingBuoyOperation(states, getTypeOperation().getSelectedValue(), true); states.setModified(true); } } @@ -191,7 +191,7 @@ public interface DcpUIAdapter<T extends TransmittingBuoyAware> extends JAXXObjec states.setModified(states.isCreatingMode()); } - default void changeTypeOperation(DcpUIModelStates<?, ?> states, TypeTransmittingBuoyOperation typeOperation, boolean reset) { + default void changeTypeTransmittingBuoyOperation(DcpUIModelStates<?, ?> states, TypeTransmittingBuoyOperation typeOperation, boolean reset) { if (Objects.requireNonNull(typeOperation).isWithCoordinate()) { addTransmittingBuoyCoordinate(); @@ -208,7 +208,7 @@ public interface DcpUIAdapter<T extends TransmittingBuoyAware> extends JAXXObjec } if (withBuoy) { - // always reset balise lues of editBean to avoid side-effects + // always reset buoys of editBean to avoid side-effects bean.getTransmittingBuoy().clear(); } @@ -221,45 +221,47 @@ public interface DcpUIAdapter<T extends TransmittingBuoyAware> extends JAXXObjec getValidatorBuoy2().setBean(null); } - String[] codeOperations = typeOperation.getCodeOperation(); - JComponent focusOwner = null; - switch (typeOperation) { - case noBuoy: + String[] transmittingBuoyOperationCodes = typeOperation.getTransmittingBuoyOperationCodes(); + JComponent focusOwner; + switch (typeOperation.getBuoyCount()) { + case 0: + // no buoy editorPanel.add(getNoBuoyEditor()); focusOwner = getComment(); break; - case grabAndChange: + case 1: + // one buoy if (reset) { - states.bindEmptyBuoy(states.getReferenceCache(), bean, getTransmittingBuoy1(), states.getBuoyOperation(codeOperations[0])); - states.bindEmptyBuoy(states.getReferenceCache(), bean, getTransmittingBuoy2(), states.getBuoyOperation(codeOperations[1])); + states.bindEmptyBuoy(states.getReferenceCache(), bean, getTransmittingBuoy1(), states.getBuoyOperation(transmittingBuoyOperationCodes[0])); } else { states.bindExistingBuoy(bean, getTransmittingBuoy1(), modelBuoyList.get(0)); - states.bindExistingBuoy(bean, getTransmittingBuoy2(), modelBuoyList.get(1)); } editorPanel.add(getTransmittingBuoy1EditorPanel()); - editorPanel.add(getTransmittingBuoy2EditorPanel()); if (states.isEditing()) { getValidatorBuoy1().setBean(getTransmittingBuoy1()); - getValidatorBuoy2().setBean(getTransmittingBuoy2()); } focusOwner = getTransmittingBuoyType1(); break; - case visit: - case grab: - case posing: - case lost: - case endOfUse: + case 2: + // two buoy if (reset) { - states.bindEmptyBuoy(states.getReferenceCache(), bean, getTransmittingBuoy1(), states.getBuoyOperation(codeOperations[0])); + states.bindEmptyBuoy(states.getReferenceCache(), bean, getTransmittingBuoy1(), states.getBuoyOperation(transmittingBuoyOperationCodes[0])); + states.bindEmptyBuoy(states.getReferenceCache(), bean, getTransmittingBuoy2(), states.getBuoyOperation(transmittingBuoyOperationCodes[1])); } else { states.bindExistingBuoy(bean, getTransmittingBuoy1(), modelBuoyList.get(0)); + states.bindExistingBuoy(bean, getTransmittingBuoy2(), modelBuoyList.get(1)); } editorPanel.add(getTransmittingBuoy1EditorPanel()); + editorPanel.add(getTransmittingBuoy2EditorPanel()); if (states.isEditing()) { getValidatorBuoy1().setBean(getTransmittingBuoy1()); + getValidatorBuoy2().setBean(getTransmittingBuoy2()); } focusOwner = getTransmittingBuoyType1(); break; + default: + // can't happen + throw new IllegalArgumentException(String.format("Can't have %d buoy count", typeOperation.getBuoyCount())); } //FIXME:Focus update zone focus owner JComponent finalFocusOwner = focusOwner; ===================================== client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/dcp/FloatingObjectPartsTreeNode.java ===================================== @@ -119,19 +119,19 @@ public class FloatingObjectPartsTreeNode extends AbstractMutableTreeTableNode im throw new IllegalStateException(); } - void setValueAt(Object aValue, int column) { + void setValueAt(String value, int column) { text = null; switch (column) { case 1: // when arriving - uiModelStates.setWhenArriving(dto.getId(), aValue == null ? null : String.valueOf(aValue)); + uiModelStates.setWhenArriving(dto.getId(), value); if (useValidation) { - valueValidOnArriving = dto.isValid(aValue); + valueValidOnArriving = dto.isValid(value); } return; case 2: // when leaving - uiModelStates.setWhenLeaving(dto.getId(), aValue == null ? null : String.valueOf(aValue)); + uiModelStates.setWhenLeaving(dto.getId(), value); if (useValidation) { - valueValidOnLeaving = dto.isValid(aValue); + valueValidOnLeaving = dto.isValid(value); } return; } @@ -250,7 +250,11 @@ public class FloatingObjectPartsTreeNode extends AbstractMutableTreeTableNode im @Override public void setValueAt(Object aValue, int column) { - getUserObject().setValueAt(aValue, column); + String value = aValue == null ? null : String.valueOf(aValue).trim(); + if (Objects.equals("", value)) { + value = null; + } + getUserObject().setValueAt(value, column); } @Override ===================================== client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/logbook/FloatingObjectUI.jaxx ===================================== @@ -199,7 +199,7 @@ <cell anchor='east' weightx="1" fill="both"> <BeanEnumEditor id='typeOperation' genericType='TypeTransmittingBuoyOperation' constructorParams='TypeTransmittingBuoyOperation.class' - onItemStateChanged='changeTypeOperation(event,getStates());'/> + onItemStateChanged='changeTypeTransmittingBuoyOperation(event,getStates());'/> </cell> </row> </Table> ===================================== client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/observation/FloatingObjectUI.jaxx ===================================== @@ -199,7 +199,7 @@ <cell anchor='east' weightx="1" fill="both"> <BeanEnumEditor id='typeOperation' genericType='TypeTransmittingBuoyOperation' constructorParams='TypeTransmittingBuoyOperation.class' - onItemStateChanged='changeTypeOperation(event,getStates());'/> + onItemStateChanged='changeTypeTransmittingBuoyOperation(event,getStates());'/> </cell> </row> </Table> ===================================== core/api/dto/src/main/java/fr/ird/observe/dto/data/ps/TypeTransmittingBuoyOperation.java ===================================== @@ -26,6 +26,8 @@ import fr.ird.observe.dto.referential.ps.common.TransmittingBuoyOperationReferen import io.ultreia.java4all.i18n.spi.enumeration.TranslateEnumeration; import java.util.List; +import java.util.Set; +import java.util.TreeSet; /** * @author Tony Chemit - dev@tchemit.fr @@ -34,71 +36,74 @@ import java.util.List; public enum TypeTransmittingBuoyOperation { // no buoy noBuoy(false), - // one buoy visit(false, "1"), grab(false, "2"), posing(false, "3"), lost(true, "4"), - unknown(false, "99"), endOfUse(true, "5"), - + unknown(false, "99"), // two buoy grabAndChange(false, "2", "3"); - /** * TransmittingBuoyOperation codes associated to this type. */ - private final String[] codeOperation; + private final String[] transmittingBuoyOperationCodes; + /** + * Number of buoy authorized for this type. + */ + private final int buoyCount; /** * Use coordinate? */ private final boolean withCoordinate; public static TypeTransmittingBuoyOperation guessTransmittingBuoyOperation(List<TransmittingBuoyOperationReference> transmittingBuoy) { - if (transmittingBuoy.isEmpty()) { - - // no buoy - return TypeTransmittingBuoyOperation.noBuoy; - } - if (transmittingBuoy.size() == 1) { - // one buoy - TransmittingBuoyOperationReference operation = transmittingBuoy.iterator().next(); - String code = operation.getCode(); - switch (Integer.parseInt(code)) { - case 1: - return TypeTransmittingBuoyOperation.visit; - case 2: - return TypeTransmittingBuoyOperation.grab; - case 3: - return TypeTransmittingBuoyOperation.posing; - case 4: - return TypeTransmittingBuoyOperation.lost; - case 5: - return TypeTransmittingBuoyOperation.endOfUse; - default: - throw new IllegalStateException(String.format("operation must be between 1 to 5, but was %s", code)); - } - } - if (transmittingBuoy.size() == 2) { - // two buoy - return TypeTransmittingBuoyOperation.grabAndChange; + int transmittingBuoyCount = transmittingBuoy.size(); + switch (transmittingBuoyCount) { + case 0: + // no buoy + return TypeTransmittingBuoyOperation.noBuoy; + case 1: + // one buoy + TransmittingBuoyOperationReference operation = transmittingBuoy.iterator().next(); + String code = operation.getCode(); + for (TypeTransmittingBuoyOperation typeTransmittingBuoyOperation : TypeTransmittingBuoyOperation.values()) { + if (typeTransmittingBuoyOperation.getBuoyCount() == 1 && typeTransmittingBuoyOperation.getTransmittingBuoyOperationCodes()[0].equals(code)) { + return typeTransmittingBuoyOperation; + } + } + Set<String> availableCodes = new TreeSet<>(); + for (TypeTransmittingBuoyOperation typeTransmittingBuoyOperation : TypeTransmittingBuoyOperation.values()) { + if (typeTransmittingBuoyOperation.getBuoyCount() == 1) { + availableCodes.add(typeTransmittingBuoyOperation.getTransmittingBuoyOperationCodes()[0]); + } + } + throw new IllegalStateException(String.format("When having a single buoy, TransmittingBuoyOperation code must be among: %s, but was %s", availableCodes, code)); + case 2: + // two buoy + return TypeTransmittingBuoyOperation.grabAndChange; + default: + throw new IllegalStateException(String.format("A floating object, can only have 0, 1 or 2 buoy(s) but found %d buoys", transmittingBuoyCount)); } - throw new IllegalStateException(String.format("A dcp, can only have 0, 1 or 2 buoys, found %d", transmittingBuoy.size())); - } - TypeTransmittingBuoyOperation(boolean withCoordinate, String... codeOperation) { - this.codeOperation = codeOperation; + TypeTransmittingBuoyOperation(boolean withCoordinate, String... transmittingBuoyOperationCodes) { + this.transmittingBuoyOperationCodes = transmittingBuoyOperationCodes; this.withCoordinate = withCoordinate; + this.buoyCount = transmittingBuoyOperationCodes.length; } public boolean isWithCoordinate() { return withCoordinate; } - public String[] getCodeOperation() { - return codeOperation; + public String[] getTransmittingBuoyOperationCodes() { + return transmittingBuoyOperationCodes; + } + + public int getBuoyCount() { + return buoyCount; } public String getLabel() { ===================================== core/persistence/migration/src/main/java/fr/ird/observe/spi/migration/v9/DataSourceMigrationForVersion_9_1.java ===================================== @@ -288,7 +288,8 @@ public class DataSourceMigrationForVersion_9_1 extends ByMajorMigrationVersionRe // See https://gitlab.com/ultreiaio/ird-observe/-/issues/2619 addNewTable(executor, withIds, "07", "table-ps_localmarket_buyer"); executor.addScript("07", "adapt-table-ps_localmarket_batch"); - if (withIds && isForTck()) { + //FIXME Set this back to tck (or remove simply it when we will have some data) + if (withIds /**&& isForTck()**/) { // Add some referential with no usage inside others referential to make possible delete test // See fr.ird.observe.persistence.test.request.DeleteReferentialRequestTest executor.addScript("07-tck", "fill-table-ps_localmarket_buyer"); View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/290d4e764c86cc9077b293a71... -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/290d4e764c86cc9077b293a71... You're receiving this email because of your account on gitlab.com.