Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: bdcb5034 by Tony CHEMIT at 2017-08-04T20:53:41+02:00 Amélioration de l'onglet des ObjectMaterials (See #828) - - - - - 8 changed files: - client/src/main/java/fr/ird/observe/client/db/ObserveDataSourcesManager.java - client/src/main/java/fr/ird/observe/client/db/ObserveMainDataSourceServicesProvider.java - client/src/main/java/fr/ird/observe/client/ui/content/impl/seine/FloatingObjectUIHandler.java - client/src/main/java/fr/ird/observe/client/ui/content/impl/seine/FloatingObjectUIModel.java - client/src/main/resources/i18n/client_en_GB.properties - client/src/main/resources/i18n/client_es_ES.properties - client/src/main/resources/i18n/client_fr_FR.properties - pom.xml Changes: ===================================== client/src/main/java/fr/ird/observe/client/db/ObserveDataSourcesManager.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/db/ObserveDataSourcesManager.java +++ b/client/src/main/java/fr/ird/observe/client/db/ObserveDataSourcesManager.java @@ -287,6 +287,7 @@ public class ObserveDataSourcesManager implements Closeable { // une base locale existe, on l'ouvre ObserveSwingDataSource dataSource = newLocalDatasource(config); + dataSource.setProgressModel(new ProgressModel()); try { @@ -566,7 +567,7 @@ public class ObserveDataSourcesManager implements Closeable { } if (source.canWriteData()) { - applicationContext.getFloatingObjectReferencesManager().sanitize(progressModel,source); + applicationContext.getFloatingObjectReferencesManager().sanitize(progressModel, source); } dataContext.populateOpens(openIds); ===================================== client/src/main/java/fr/ird/observe/client/db/ObserveMainDataSourceServicesProvider.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/db/ObserveMainDataSourceServicesProvider.java +++ b/client/src/main/java/fr/ird/observe/client/db/ObserveMainDataSourceServicesProvider.java @@ -25,7 +25,6 @@ package fr.ird.observe.client.db; import fr.ird.observe.client.ObserveSwingApplicationContext; import fr.ird.observe.services.ObserveServicesProviderSupport; import fr.ird.observe.services.service.ObserveService; -import java.util.function.Supplier; /** * Created by tchemit on 03/08/17. @@ -34,19 +33,13 @@ import java.util.function.Supplier; */ public class ObserveMainDataSourceServicesProvider extends ObserveServicesProviderSupport { - private final Supplier<ObserveSwingDataSource> dataSourceSupplier; - - ObserveMainDataSourceServicesProvider() { - this.dataSourceSupplier = ObserveSwingApplicationContext.get().getDataSourcesManager()::getMainDataSource; - } - @Override public void close() { } @Override public <S extends ObserveService> S getService(Class<S> serviceType) { - return dataSourceSupplier.get().getService(serviceType); + return ObserveSwingApplicationContext.get().getDataSourcesManager().getMainDataSource().getService(serviceType); } } ===================================== client/src/main/java/fr/ird/observe/client/ui/content/impl/seine/FloatingObjectUIHandler.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/content/impl/seine/FloatingObjectUIHandler.java +++ b/client/src/main/java/fr/ird/observe/client/ui/content/impl/seine/FloatingObjectUIHandler.java @@ -50,11 +50,13 @@ import java.util.EventObject; import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Optional; import java.util.Set; import java.util.TreeMap; import javax.swing.Icon; import javax.swing.JTable; +import javax.swing.JTree; import javax.swing.SwingUtilities; import javax.swing.event.CellEditorListener; import javax.swing.event.TableModelListener; @@ -64,13 +66,19 @@ import javax.swing.table.TableCellRenderer; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.log4j.lf5.viewer.categoryexplorer.TreeModelAdapter; +import org.jdesktop.swingx.JXTable; import org.jdesktop.swingx.JXTreeTable; +import org.jdesktop.swingx.table.ColumnFactory; +import org.jdesktop.swingx.table.TableColumnExt; +import org.jdesktop.swingx.tree.DefaultXTreeCellRenderer; import org.jdesktop.swingx.treetable.DefaultMutableTreeTableNode; import org.jdesktop.swingx.treetable.DefaultTreeTableModel; +import org.nuiton.decorator.Decorator; import org.nuiton.jaxx.runtime.spi.UIHandler; import org.nuiton.jaxx.runtime.swing.SwingUtil; import org.nuiton.jaxx.validator.swing.SwingValidatorMessage; import org.nuiton.jaxx.validator.swing.SwingValidatorMessageTableModel; +import org.nuiton.jaxx.validator.swing.SwingValidatorUtil; import org.nuiton.validator.NuitonValidatorScope; @@ -345,6 +353,8 @@ public class FloatingObjectUIHandler extends ContentUIHandler<FloatingObjectDto, } }); + getModel().addPropertyChangeListener(FloatingObjectUIModel.PROPERTY_PARTS_MODIFIED, e -> getModel().recomputeComputedValues()); + getBean().addPropertyChangeListener(FloatingObjectDto.PROPERTY_OBJECT_OPERATION, e -> updateMaterials((ReferentialReference) e.getNewValue())); } @@ -362,10 +372,18 @@ public class FloatingObjectUIHandler extends ContentUIHandler<FloatingObjectDto, private static final Icon ICON_NOT_A_REFERENCE = SwingUtil.createImageIcon("star-empty.png"); private static final Icon ICON_IS_A_REFERENCE = SwingUtil.createImageIcon("star.png"); - private void initTable(List<ObjectMaterialHierarchyDto> dtos, JXTreeTable table) { + private void initTable(List<ObjectMaterialHierarchyDto> materials, JXTreeTable table) { + + DefaultMutableTreeTableNode root = getModel().createRoot(getDecoratorService().getDecoratorByType(ObjectMaterialDto.class), materials); + DefaultTreeTableModel treeModel = new DefaultTreeTableModel(root, Arrays.asList( + t("observe.content.floatingObject.table.type"), + t("observe.common.whenArriving"), + t("observe.common.whenLeaving"))) { - DefaultMutableTreeTableNode root = getModel().createRoot(getDecoratorService().getDecoratorByType(ObjectMaterialDto.class), dtos); - DefaultTreeTableModel treeModel = new DefaultTreeTableModel(root, Arrays.asList("Type", "À l'arrivée", "Au départ")) { + @Override + public int getColumnCount() { + return 3; + } @Override public Class<?> getColumnClass(int column) { @@ -379,20 +397,61 @@ public class FloatingObjectUIHandler extends ContentUIHandler<FloatingObjectDto, } throw new IllegalStateException(); } + + @Override + public boolean isCellEditable(Object node, int column) { + if (node instanceof FloatingObjectPartsTreeNode) { + boolean rowEnabled = ((FloatingObjectPartsTreeNode) node).getUserObject().isEnabled(); + if (!rowEnabled) { + return false; + } + } + return super.isCellEditable(node, column); + } }; table.setTreeTableModel(treeModel); - table.setLeafIcon(null); - table.setOpenIcon(null); - table.setClosedIcon(null); - table.setCollapsedIcon(null); + table.setColumnFactory(new ColumnFactory() { + + @Override + public void configureColumnWidths(JXTable table, TableColumnExt columnExt) { + if (table.getColumn(0).equals(columnExt)) { + columnExt.setPreferredWidth(getUi().getPreferredSize().width - 200); + columnExt.setMinWidth(columnExt.getPreferredWidth()); + return; + } + super.configureColumnWidths(table, columnExt); + columnExt.setMinWidth(columnExt.getPreferredWidth()); + } + }); treeModel.addTreeModelListener(new TreeModelAdapter() { @Override public void treeNodesChanged(TreeModelEvent e) { getModel().setModified(true); + getModel().setPartsModified(); } }); + DefaultXTreeCellRenderer cellRenderer = new DefaultXTreeCellRenderer() { + + Decorator<ObjectMaterialDto> decorator = getDecoratorService().getDecoratorByType(ObjectMaterialDto.class); + + @Override + public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) { + if (!(value instanceof FloatingObjectPartsTreeNode)) { + return super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus); + } + FloatingObjectPartsTreeNode node = (FloatingObjectPartsTreeNode) value; + Component result = super.getTreeCellRendererComponent(tree, decorator.toString(node.getUserObject()), sel, expanded, leaf, row, hasFocus); + result.setEnabled(node.getUserObject().isEnabled()); + return result; + } + }; + + cellRenderer.setLeafIcon(null); + cellRenderer.setOpenIcon(null); + cellRenderer.setClosedIcon(null); + table.setTreeCellRenderer(cellRenderer); TableCellRenderer defaultRenderer = new MyRenderer(table.getDefaultRenderer(Boolean.class), table.getDefaultRenderer(String.class)); table.setDefaultRenderer(Object.class, defaultRenderer); table.setDefaultEditor(Object.class, new MyTableCellEditor(table.getDefaultEditor(Boolean.class), table.getDefaultEditor(String.class))); @@ -441,17 +500,25 @@ public class FloatingObjectUIHandler extends ContentUIHandler<FloatingObjectDto, @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { - if (table.isCellEditable(row, column)) { - FloatingObjectPartsTreeNode node = (FloatingObjectPartsTreeNode) ((JXTreeTable) table).getPathForRow(row).getLastPathComponent(); + FloatingObjectPartsTreeNode node = (FloatingObjectPartsTreeNode) ((JXTreeTable) table).getPathForRow(row).getLastPathComponent(); + Objects.requireNonNull(node); + TableCellRenderer renderer = notEditableRenderer; + Object newValue = value; + boolean enabled = true; + if (node.getUserObject().getObjectMaterialType() != null && (!node.getUserObject().isEnabled() || table.isCellEditable(row, column))) { String objectMaterialType = node.getUserObject().getObjectMaterialType().getId(); if ("fr.ird.observe.entities.referentiel.seine.ObjectMaterialType#0#0".equals(objectMaterialType)) { - value = value == null ? null : Boolean.valueOf(String.valueOf(value)); - return editableRenderer.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); - } else - return notEditableRenderer.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); + newValue = value == null ? null : Boolean.valueOf(String.valueOf(value)); + renderer = editableRenderer; + } + enabled = node.getUserObject().isEnabled(); } else { - return notEditableRenderer.getTableCellRendererComponent(table, "", isSelected, hasFocus, row, column); + newValue = ""; } + + Component component = renderer.getTableCellRendererComponent(table, newValue, isSelected, hasFocus, row, column); + component.setEnabled(enabled); + return component; } } @@ -487,7 +554,7 @@ public class FloatingObjectUIHandler extends ContentUIHandler<FloatingObjectDto, editor = stringEditor; break; default: - throw new IllegalStateException("Cant manage with type: " + objectMaterialType); + throw new IllegalStateException("Can't manage type: " + objectMaterialType); } return editor.getTableCellEditorComponent(table, value, isSelected, row, column); ===================================== client/src/main/java/fr/ird/observe/client/ui/content/impl/seine/FloatingObjectUIModel.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/content/impl/seine/FloatingObjectUIModel.java +++ b/client/src/main/java/fr/ird/observe/client/ui/content/impl/seine/FloatingObjectUIModel.java @@ -57,6 +57,8 @@ import static org.nuiton.i18n.I18n.t; public class FloatingObjectUIModel extends ContentUIModel<FloatingObjectDto> { private static final long serialVersionUID = 1L; + static final String PROPERTY_PARTS_MODIFIED = "partsModified"; + private final ReferenceBinderEngine referenceBinderEngine; private final ReferentialLocale referentialLocale; @@ -132,9 +134,17 @@ public class FloatingObjectUIModel extends ContentUIModel<FloatingObjectDto> { return result.build(); } + void setPartsModified() { + firePropertyChange(PROPERTY_PARTS_MODIFIED, true); + } + public void reset() { whenArriving.clear(); whenLeaving.clear(); + fireComputedValuesChanged(); + } + + private void fireComputedValuesChanged() { firePropertyChange("computedWhenArrivingBiodegradableValue", getComputedWhenArrivingBiodegradableValue()); firePropertyChange("computedWhenArrivingNonEntanglingValue", getComputedWhenArrivingNonEntanglingValue()); firePropertyChange("computedWhenArrivingSimplifiedObjectTypeValue", getComputedWhenArrivingSimplifiedObjectTypeValue()); @@ -161,7 +171,7 @@ public class FloatingObjectUIModel extends ContentUIModel<FloatingObjectDto> { this.referentialMap = referentialMap; } - public void setWhenArriving(String id, String value) { + void setWhenArriving(String id, String value) { ObjectMaterialDto dto = referentialMap.get(id); if (dto == null) { return; @@ -169,7 +179,7 @@ public class FloatingObjectUIModel extends ContentUIModel<FloatingObjectDto> { whenArriving.put(dto, value); } - public void setWhenLeaving(String id, String value) { + void setWhenLeaving(String id, String value) { ObjectMaterialDto dto = referentialMap.get(id); if (dto == null) { return; @@ -250,4 +260,17 @@ public class FloatingObjectUIModel extends ContentUIModel<FloatingObjectDto> { log.debug("setLeaving: " + leaving); firePropertyChange(PROPERTY_LEAVING, leaving); } + + void recomputeComputedValues() { + FloatingObjectDto bean = getBean(); + + log.info("Computed values need to be recomputed."); + bean.setComputedWhenArrivingBiodegradable(null); + bean.setComputedWhenArrivingNonEntangling(null); + bean.setComputedWhenArrivingSimplifiedObjectType(null); + bean.setComputedWhenLeavingBiodegradable(null); + bean.setComputedWhenLeavingNonEntangling(null); + bean.setComputedWhenLeavingSimplifiedObjectType(null); + fireComputedValuesChanged(); + } } ===================================== client/src/main/resources/i18n/client_en_GB.properties ===================================== --- a/client/src/main/resources/i18n/client_en_GB.properties +++ b/client/src/main/resources/i18n/client_en_GB.properties @@ -762,6 +762,7 @@ observe.content.floatingObject.message.updating=updating a floating object observe.content.floatingObject.not.a.reference=Floating object is not a reference. observe.content.floatingObject.tab.general=General caracteristics observe.content.floatingObject.tab.materials=Materials +observe.content.floatingObject.table.type=Type observe.content.floatingObject.title=DCP observe.content.floatingObjectTransmittingBuoyOperation.title=Transmitting buoy operations observe.content.floatlinesComposition.action.create=Insert this floatline ===================================== client/src/main/resources/i18n/client_es_ES.properties ===================================== --- a/client/src/main/resources/i18n/client_es_ES.properties +++ b/client/src/main/resources/i18n/client_es_ES.properties @@ -762,6 +762,7 @@ observe.content.floatingObject.message.updating=Se está modificando el objeto f observe.content.floatingObject.not.a.reference=L'objet flottant n'est pas une référence. \#TODO observe.content.floatingObject.tab.general=Características generales observe.content.floatingObject.tab.materials=Materials \#TODO +observe.content.floatingObject.table.type=Typo observe.content.floatingObject.title=Objeto flotante observe.content.floatingObjectTransmittingBuoyOperation.title=Operación sur balises observe.content.floatlinesComposition.action.create=Insertar este orinque ===================================== client/src/main/resources/i18n/client_fr_FR.properties ===================================== --- a/client/src/main/resources/i18n/client_fr_FR.properties +++ b/client/src/main/resources/i18n/client_fr_FR.properties @@ -762,6 +762,7 @@ observe.content.floatingObject.message.updating=L'objet flottant est en cours de observe.content.floatingObject.not.a.reference=L'objet flottant n'est pas une référence. observe.content.floatingObject.tab.general=Caractéristiques générales observe.content.floatingObject.tab.materials=Matériaux +observe.content.floatingObject.table.type=Type observe.content.floatingObject.title=Objet flottant observe.content.floatingObjectTransmittingBuoyOperation.title=Opération sur balises observe.content.floatlinesComposition.action.create=Insérer cet orin ===================================== pom.xml ===================================== --- a/pom.xml +++ b/pom.xml @@ -171,7 +171,7 @@ <eugenePluginVersion>3.0-alpha-11</eugenePluginVersion> <processorPluginVersion>1.3</processorPluginVersion> - <jaxxVersion>3.0-alpha-9</jaxxVersion> + <jaxxVersion>3.0-alpha-10</jaxxVersion> <nuitonI18nVersion>4.0-alpha-3</nuitonI18nVersion> <nuitonConfigVersion>3.2</nuitonConfigVersion> <topiaVersion>3.2.1</topiaVersion> View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/bdcb50349cf0155ce142370ab1c5... --- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/bdcb50349cf0155ce142370ab1c5... You're receiving this email because of your account on gitlab.com.
participants (1)
-
Tony CHEMIT