Author: kmorin Date: 2013-01-28 10:08:49 +0100 (Mon, 28 Jan 2013) New Revision: 245 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/245 Log: - refactor - refs #1845 [ERGO] - Principe d'enregistrement lors de la fermeture de l'?\195?\169cran Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/CaracteristicRowModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/CaracteristicTabUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/CaracteristicTabUIModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/gearshooting/GearShootingRowModel.java Removed: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/gearshooting/GearShootingRowModel.java Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/AbstractTuttiUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/SaveFishingOperationAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/environment/EnvironmentRowModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/environment/EnvironmentTabUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/environment/EnvironmentTabUIModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/gearshooting/GearShootingTabUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/gearshooting/GearShootingTabUIModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/hydrology/HydrologyRowModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/hydrology/HydrologyTabUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/hydrology/HydrologyTabUIModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiTabContainerUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/CaracteristicRow.java trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/AbstractTuttiUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/AbstractTuttiUIHandler.java 2013-01-24 15:34:52 UTC (rev 244) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/AbstractTuttiUIHandler.java 2013-01-28 09:08:49 UTC (rev 245) @@ -77,7 +77,10 @@ import java.util.List; import java.util.Map; import java.util.Set; +import javax.swing.JOptionPane; +import static org.nuiton.i18n.I18n._; + /** * Contract of any UI handler. * @@ -213,6 +216,15 @@ public void closeDialog(TuttiUI ui) { SwingUtil.getParentContainer(ui, JDialog.class).setVisible(false); } + + public int askSaveBeforeLeaving(Component parent) { + int i = JOptionPane.showConfirmDialog( + parent, + _("tutti.dialog.askSaveBeforeLeaving.message"), + _("tutti.dialog.askSaveBeforeLeaving.title"), + JOptionPane.YES_NO_CANCEL_OPTION); + return i; + } //------------------------------------------------------------------------// //-- Internal methods --// Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java 2013-01-24 15:34:52 UTC (rev 244) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java 2013-01-28 09:08:49 UTC (rev 245) @@ -38,6 +38,7 @@ import fr.ifremer.tutti.ui.swing.AbstractTuttiBeanUIModel; import fr.ifremer.tutti.ui.swing.MainUI; import fr.ifremer.tutti.ui.swing.TuttiUIContext; +import fr.ifremer.tutti.ui.swing.content.operation.fishing.CaracteristicTabUIModel; import fr.ifremer.tutti.ui.swing.content.operation.fishing.environment.EnvironmentTabUI; import fr.ifremer.tutti.ui.swing.content.operation.fishing.environment.EnvironmentTabUIModel; import fr.ifremer.tutti.ui.swing.content.operation.fishing.gearshooting.GearShootingTabUI; @@ -45,6 +46,7 @@ import fr.ifremer.tutti.ui.swing.content.operation.fishing.hydrology.HydrologyTabUI; import fr.ifremer.tutti.ui.swing.content.operation.fishing.hydrology.HydrologyTabUIModel; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiTabContainerUIHandler; +import fr.ifremer.tutti.ui.swing.util.TabHandler; import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor; import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import java.awt.BorderLayout; @@ -52,6 +54,7 @@ import java.beans.PropertyChangeListener; import java.util.List; import javax.swing.JLabel; +import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTabbedPane; import org.apache.commons.collections.CollectionUtils; @@ -64,7 +67,8 @@ * @author tchemit <chemit@codelutin.com> * @since 0.1 */ -public class EditFishingOperationUIHandler extends AbstractTuttiTabContainerUIHandler<EditFishingOperationUIModel> { +public class EditFishingOperationUIHandler extends AbstractTuttiTabContainerUIHandler<EditFishingOperationUIModel> + implements TabHandler { /** Logger. */ private static final Log log = @@ -308,6 +312,31 @@ } @Override + public boolean onHideTab() { + boolean result = true; + if (isAModelModified()) { + int answer = askSaveBeforeLeaving(ui); + switch (answer) { + case JOptionPane.OK_OPTION: + ui.getSaveFishingOperationAction().actionPerformed(null); + break; + + case JOptionPane.NO_OPTION: + parentUi.getHandler().reloadFishingOperation(); + break; + + case JOptionPane.CANCEL_OPTION: + result = false; + } + } + return result; + } + + @Override + public void onShowTab() { + } + + @Override protected JTabbedPane getTabPanel() { return ui.getFishingOperationTabPane(); } @@ -321,6 +350,14 @@ //-- Public methods --// //------------------------------------------------------------------------// + public CaracteristicTabUIModel[] getSubModels() { + return new CaracteristicTabUIModel[] { + ui.getGearShootingTabContent().getModel(), + ui.getEnvironmentTabContent().getModel(), + ui.getHydrologyTabContent().getModel() + }; + } + public void clearFishingOperation() { EditFishingOperationUIModel model = getModel(); model.fromBean(new FishingOperation()); @@ -336,8 +373,7 @@ boolean empty = bean == null; EditFishingOperationUIModel model = getModel(); - - if (empty || !bean.equals(model.getFishingOperation()) || fishingOperationMonitor.wasModified()) { + if (empty || !bean.equals(model.getFishingOperation()) || isAModelModified()) { if (empty) { bean = new FishingOperation(); } @@ -491,11 +527,21 @@ } protected boolean areAllModelsValid() { - GearShootingTabUIModel gearShootingModel = ui.getGearShootingTabContent().getModel(); - EnvironmentTabUIModel environmentModel = ui.getEnvironmentTabContent().getModel(); - HydrologyTabUIModel hydrologyModel = ui.getHydrologyTabContent().getModel(); - return getModel().isValid() && gearShootingModel.isValid() - && environmentModel.isValid() && hydrologyModel.isValid(); + boolean result = getModel().isValid(); + CaracteristicTabUIModel[] subModels = getSubModels(); + for (CaracteristicTabUIModel subModel : subModels) { + result &= subModel.isValid(); + } + return result; } - + + protected boolean isAModelModified() { + boolean result = getModel().isModify(); + CaracteristicTabUIModel[] subModels = getSubModels(); + for (CaracteristicTabUIModel subModel : subModels) { + result |= subModel.isModify(); + } + return result; + } + } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIHandler.java 2013-01-24 15:34:52 UTC (rev 244) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIHandler.java 2013-01-28 09:08:49 UTC (rev 245) @@ -144,6 +144,7 @@ model.addPropertyChangeListener(FishingOperationsUIModel.PROPERTY_SELECTED_FISHING_OPERATION, new PropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent evt) { + log.debug("propertyChange " + FishingOperationsUIModel.PROPERTY_SELECTED_FISHING_OPERATION); selectFishingOperation((FishingOperation) evt.getNewValue()); } }); @@ -151,6 +152,7 @@ model.addPropertyChangeListener(FishingOperationsUIModel.PROPERTY_FISHING_OPERATION, new PropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent evt) { + log.debug("propertyChange " + FishingOperationsUIModel.PROPERTY_FISHING_OPERATION); ui.getFishingOperationComboBox().setData(null); ui.getFishingOperationComboBox().setData((List<FishingOperation>) evt.getNewValue()); } @@ -221,9 +223,7 @@ if (log.isInfoEnabled()) { log.info("New selected fishingOperation: " + fishingOperation); } - // back to fishingOperation tab - ui.getTabPane().setSelectedIndex(0); - + // back to general tab of fishingOperation tabs ui.getFishingOperationTabContent().getFishingOperationTabPane().setSelectedIndex(0); @@ -237,6 +237,10 @@ // propagate fishingOperation to his tabs ui.getFishingOperationTabContent().getHandler().selectFishingOperation(fishingOperation); + if (ui.getFishingOperationTabContent().getModel().isCreate()) { + // back to fishingOperation tab + ui.getTabPane().setSelectedIndex(0); + } ui.getCatchesTabContent().getHandler().selectFishingOperation(fishingOperation, fishingOperationText); @@ -246,6 +250,8 @@ } else { ui.getFishingOperationTabContent().getHandler().clearFishingOperation(); + // back to fishingOperation tab + ui.getTabPane().setSelectedIndex(0); } } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/SaveFishingOperationAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/SaveFishingOperationAction.java 2013-01-24 15:34:52 UTC (rev 244) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/SaveFishingOperationAction.java 2013-01-28 09:08:49 UTC (rev 245) @@ -25,8 +25,13 @@ * #L% */ +import fr.ifremer.tutti.persistence.entities.CaracteristicMap; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.ui.swing.AbstractTuttiAction; +import fr.ifremer.tutti.ui.swing.content.operation.fishing.CaracteristicTabUIModel; +import fr.ifremer.tutti.ui.swing.content.operation.fishing.environment.EnvironmentTabUIModel; +import fr.ifremer.tutti.ui.swing.content.operation.fishing.gearshooting.GearShootingTabUIModel; +import fr.ifremer.tutti.ui.swing.content.operation.fishing.hydrology.HydrologyTabUIModel; import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor; import fr.ifremer.tutti.ui.swing.util.editor.CoordinateEditorType; import org.apache.commons.logging.Log; @@ -80,6 +85,22 @@ // save modified fishing operation FishingOperation toSave = beanToSave.toBean(); + + CaracteristicTabUIModel[] subModels = handler.getSubModels(); + for (CaracteristicTabUIModel subModel : subModels) { + Class modelClass = subModel.getClass(); + CaracteristicMap caracteristics = subModel.getCaracteristicMap(); + + if (modelClass.isAssignableFrom(EnvironmentTabUIModel.class)) { + toSave.setEnvironmentCaracteristics(caracteristics); + + } else if (modelClass.isAssignableFrom(GearShootingTabUIModel.class)) { + toSave.setGearShootingCaracteristics(caracteristics); + + } else if (modelClass.isAssignableFrom(HydrologyTabUIModel.class)) { + toSave.setHydrologyCaracteristics(caracteristics); + } + } handler.showInformationMessage( "[ Trait - Caractéristiques générales ] " + Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/CaracteristicRowModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/CaracteristicRowModel.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/CaracteristicRowModel.java 2013-01-28 09:08:49 UTC (rev 245) @@ -0,0 +1,53 @@ + +package fr.ifremer.tutti.ui.swing.content.operation.fishing; + +import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; +import fr.ifremer.tutti.ui.swing.AbstractTuttiBeanUIModel; +import java.io.Serializable; + +/** + * + * @author kmorin <kmorin@codelutin.com> + */ +public abstract class CaracteristicRowModel<RM extends CaracteristicRowModel<RM>> extends AbstractTuttiBeanUIModel<Serializable, RM> { + + private static final long serialVersionUID = 1L; + + public static final String PROPERTY_KEY = "key"; + + public static final String PROPERTY_VALUE = "value"; + + protected Caracteristic key; + + protected Serializable value; + + public CaracteristicRowModel() { + super(Serializable.class, null, null); + } + + public CaracteristicRowModel(Caracteristic key, Serializable value) { + this(); + this.key = key; + this.value = value; + } + + public Caracteristic getKey() { + return key; + } + + public void setKey(Caracteristic key) { + Object oldValue = getKey(); + this.key = key; + firePropertyChange(PROPERTY_KEY, oldValue, key); + } + + public Serializable getValue() { + return value; + } + + public void setValue(Serializable value) { + Object oldValue = getValue(); + this.value = value; + firePropertyChange(PROPERTY_VALUE, oldValue, value); + } +} Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/CaracteristicTabUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/CaracteristicTabUIHandler.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/CaracteristicTabUIHandler.java 2013-01-28 09:08:49 UTC (rev 245) @@ -0,0 +1,248 @@ + +package fr.ifremer.tutti.ui.swing.content.operation.fishing; + +import com.google.common.base.Preconditions; +import com.google.common.collect.Lists; +import fr.ifremer.tutti.persistence.entities.CaracteristicMap; +import fr.ifremer.tutti.persistence.entities.TuttiEntities; +import fr.ifremer.tutti.persistence.entities.data.FishingOperation; +import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; +import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; +import fr.ifremer.tutti.ui.swing.TuttiUI; +import fr.ifremer.tutti.ui.swing.content.operation.EditFishingOperationUI; +import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor; +import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; +import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableModel; +import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIHandler; +import java.util.List; +import jaxx.runtime.swing.editor.bean.BeanComboBox; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * + * @author kmorin <kmorin@codelutin.com> + */ +public abstract class CaracteristicTabUIHandler + <RM extends CaracteristicRowModel<RM>, + M extends CaracteristicTabUIModel<RM, M>, + TM extends AbstractTuttiTableModel<RM>> + extends AbstractTuttiTableUIHandler<RM, M> { + + private static final Log log = LogFactory.getLog(CaracteristicTabUIHandler.class); + + public CaracteristicTabUIHandler(EditFishingOperationUI parentUi, String... properties) { + super(parentUi.getHandler().getContext(), properties); + } + + //------------------------------------------------------------------------// + //-- AbstractTuttiTableUIHandler methods --// + //------------------------------------------------------------------------// + + @Override + protected TM getTableModel() { + return (TM) getTable().getModel(); + } + + @Override + protected boolean isRowValid(RM row) { + //TODO + return row.getValue() != null; + } + + @Override + protected void onRowModified(int rowIndex, RM row, String propertyName, Object oldValue, Object newValue) { + recomputeRowValidState(row); + super.onRowModified(rowIndex, row, propertyName, oldValue, newValue); + } + + @Override + protected void saveSelectedRowIfRequired(TuttiBeanMonitor<RM> rowMonitor, RM row) { + if (row.isValid()) { + // there is a valid bean attached to the monitor + + if (rowMonitor.wasModified()) { + + // monitored bean was modified, save it + if (log.isInfoEnabled()) { + log.info("Row " + row + " was modified, will save it"); + } + + saveRow(row); + + } + } + } + + //------------------------------------------------------------------------// + //-- AbstractTuttiUIHandler methods --// + //------------------------------------------------------------------------// + + @Override + public M getModel() { + return (M) getUI().getModel(); + } + + @Override + protected void onAfterSelectedRowChanged(int oldRowIndex, + RM oldRow, + int newRowIndex, + RM newRow) { + + super.onAfterSelectedRowChanged(oldRowIndex, oldRow, newRowIndex, newRow); + getModel().setRemoveCaracteristicEnabled(newRow != null); + } + + @Override + public void beforeInitUI() { + M model = createModel(); + getUI().setContextValue(model); + } + + @Override + public void afterInitUI() { + initUI(getUI()); + + initBeanComboBox(getKeyCombo(), Lists.<Caracteristic>newArrayList(), null); + + } + + @Override + public void onCloseUI() { + if (log.isInfoEnabled()) { + log.info("closing: " + getUI()); + } + } + + //------------------------------------------------------------------------// + //-- Protected methods --// + //------------------------------------------------------------------------// + + protected void saveRow(RM row) { + + if (row.isValid()) { + CaracteristicMap caracteristics = getModel().getCaracteristicMap(); + Preconditions.checkNotNull(caracteristics); + + caracteristics.put(row.getKey(), row.getValue()); + } + } + + protected abstract M createModel(); + + protected abstract TuttiUI getUI(); + + protected abstract BeanComboBox<Caracteristic> getKeyCombo(); + + protected abstract CaracteristicMap getCaracteristics(FishingOperation operation); + + protected abstract List<String> getProtocolPmfmIds(TuttiProtocol protocol); + + //------------------------------------------------------------------------// + //-- Public methods --// + //------------------------------------------------------------------------// + + /** Adds a row with the parameter selected in the combo box */ + public void addRow() { + BeanComboBox<Caracteristic> keyCombo = getKeyCombo(); + Caracteristic selectedItem = (Caracteristic) keyCombo.getSelectedItem(); + TM tableModel = getTableModel(); + + RM row = tableModel.createNewRow(); + row.setKey(selectedItem); +// tableModel.addNewRow(row); + getModel().getRows().add(row); + + int rowIndex = tableModel.getRowCount() - 1; + tableModel.fireTableRowsInserted(rowIndex, rowIndex); + + keyCombo.removeItem(selectedItem); + selectFirstInCombo(keyCombo); + + M model = getModel(); + model.setModify(true); + recomputeRowValidState(row); + } + + /** Resets the table with the data from the database */ + public void reset(FishingOperation fishingOperation) { + TM tableModel = getTableModel(); + M model = getModel(); + + CaracteristicMap caracteristicMap = getCaracteristics(fishingOperation); + if (caracteristicMap == null) { + caracteristicMap = new CaracteristicMap(); + } + model.setCaracteristicMap(caracteristicMap); + + TuttiProtocol protocol = TuttiUIUtil.getProtocol(getUI()); + List<String> pmfmIds = Lists.newArrayList(); + if (protocol != null) { + List<String> protocolPmfmId = getProtocolPmfmIds(protocol); + if (protocolPmfmId != null) { + pmfmIds.addAll(protocolPmfmId); + } + } + + List<RM> rows = Lists.newArrayList(); + List<Caracteristic> caracteristics = Lists.newArrayList(caracteristicMap.keySet()); + + List<Caracteristic> availableCaracteristics = model.getAvailableCaracteristics(); + for (String id : pmfmIds) { + Caracteristic caracteristic = TuttiEntities.findById(availableCaracteristics, id); + if (!caracteristics.contains(caracteristic)) { + caracteristics.add(caracteristic); + } + } + + for (Caracteristic key : caracteristics) { + RM newRow = tableModel.createNewRow(); + newRow.setKey(key); + newRow.setValue(caracteristicMap.get(key)); + rows.add(newRow); + } + + model.setRows(rows); + + List<Caracteristic> caracteristicList = Lists.newArrayList(); + + for (Caracteristic caracteristic : availableCaracteristics) { + if (!caracteristics.contains(caracteristic)) { + caracteristicList.add(caracteristic); + } + } + + BeanComboBox<Caracteristic> keyCombo = getKeyCombo(); + keyCombo.setData(caracteristicList); + selectFirstInCombo(keyCombo); + model.setModify(false); + } + + public void removeCaracteristic() { + int rowIndex = getTable().getSelectedRow(); + + Preconditions.checkState(rowIndex != -1, + "Cant remove caracteristic if no caracteristic selected"); + + RM row = getTableModel().getEntry(rowIndex); + + CaracteristicMap caracteristicMap = getModel().getCaracteristicMap(); + if (caracteristicMap != null) { + caracteristicMap.remove(row.getKey()); + } + + //add the row in the combo + BeanComboBox keyCombo = getKeyCombo(); + keyCombo.addItem(row.getKey()); + selectFirstInCombo(keyCombo); + + // remove the row from the model + getModel().getRows().remove(rowIndex); + + // refresh all the table + getTableModel().fireTableRowsDeleted(rowIndex, rowIndex); + + getModel().removeRowInError(row); + + } +} Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/CaracteristicTabUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/CaracteristicTabUIModel.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/CaracteristicTabUIModel.java 2013-01-28 09:08:49 UTC (rev 245) @@ -0,0 +1,76 @@ + +package fr.ifremer.tutti.ui.swing.content.operation.fishing; + +import fr.ifremer.tutti.persistence.entities.CaracteristicMap; +import fr.ifremer.tutti.persistence.entities.data.FishingOperation; +import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; +import fr.ifremer.tutti.ui.swing.AbstractTuttiBeanUIModel; +import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIModel; +import fr.ifremer.tutti.ui.swing.util.table.CaracteristicRow; +import java.io.Serializable; +import java.util.List; + +/** + * + * @author kmorin <kmorin@codelutin.com> + * @since 1.0 + */ +public abstract class CaracteristicTabUIModel<RM extends AbstractTuttiBeanUIModel<Serializable, RM>, M extends CaracteristicTabUIModel<RM, M>> + extends AbstractTuttiTableUIModel<FishingOperation, RM, M> { + + public static final String PROPERTY_CARACTERISTIC_MAP = "caracteristicMap"; + + public static final String PROPERTY_REMOVE_CARACTERISTIC_ENABLED = "removeCaracteristicEnabled"; + + public static final String PROPERTY_AVAILABLE_CARACTERISTICS = "availableCaracteristics"; + + protected List<Caracteristic> availableCaracteristics; + + /** + * Caracteristics + * + * @since 1.0 + */ + protected CaracteristicMap caracteristicMap; + + /** + * Can user remove a selected caracteristic? + * + * @since 1.0 + */ + protected boolean removeCaracteristicEnabled; + + public CaracteristicTabUIModel() { + super(FishingOperation.class, null, null); + } + + public List<Caracteristic> getAvailableCaracteristics() { + return availableCaracteristics; + } + + public void setAvailableCaracteristics(List<Caracteristic> availableCaracteristics) { + Object oldValue = getAvailableCaracteristics(); + this.availableCaracteristics = availableCaracteristics; + firePropertyChange(PROPERTY_AVAILABLE_CARACTERISTICS, oldValue, availableCaracteristics); + } + + public CaracteristicMap getCaracteristicMap() { + return caracteristicMap; + } + + public void setCaracteristicMap(CaracteristicMap caracteristicMap) { + Object oldValue = getCaracteristicMap(); + this.caracteristicMap = caracteristicMap != null ? (CaracteristicMap) caracteristicMap.clone() : null; + firePropertyChange(PROPERTY_CARACTERISTIC_MAP, oldValue, this.caracteristicMap); + } + + public boolean isRemoveCaracteristicEnabled() { + return removeCaracteristicEnabled; + } + + public void setRemoveCaracteristicEnabled(boolean removeCaracteristicEnabled) { + Object oldValue = isRemoveCaracteristicEnabled(); + this.removeCaracteristicEnabled = removeCaracteristicEnabled; + firePropertyChange(PROPERTY_REMOVE_CARACTERISTIC_ENABLED, oldValue, removeCaracteristicEnabled); + } +} Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/environment/EnvironmentRowModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/environment/EnvironmentRowModel.java 2013-01-24 15:34:52 UTC (rev 244) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/environment/EnvironmentRowModel.java 2013-01-28 09:08:49 UTC (rev 245) @@ -1,89 +1,12 @@ + package fr.ifremer.tutti.ui.swing.content.operation.fishing.environment; -/* - * #%L - * Tutti :: UI - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2012 Ifremer - * %% - * 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.ifremer.tutti.ui.swing.content.operation.fishing.CaracteristicRowModel; -import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; -import fr.ifremer.tutti.ui.swing.AbstractTuttiBeanUIModel; -import fr.ifremer.tutti.ui.swing.util.table.CaracteristicRow; -import org.nuiton.util.beans.Binder; -import org.nuiton.util.beans.BinderFactory; - -import java.io.Serializable; - /** - * @author kmorin - * @since 0.3 + * + * @author kmorin <kmorin@codelutin.com> */ -public class EnvironmentRowModel extends AbstractTuttiBeanUIModel<CaracteristicRow, EnvironmentRowModel> { +public class EnvironmentRowModel extends CaracteristicRowModel<EnvironmentRowModel> { - private static final long serialVersionUID = 1L; - - public static final String PROPERTY_KEY = "key"; - - public static final String PROPERTY_VALUE = "value"; - - protected static final Binder<CaracteristicRow, EnvironmentRowModel> fromBeanBinder = - BinderFactory.newBinder(CaracteristicRow.class, - EnvironmentRowModel.class); - - protected static final Binder<EnvironmentRowModel, CaracteristicRow> toBeanBinder = - BinderFactory.newBinder(EnvironmentRowModel.class, - CaracteristicRow.class); - - protected Caracteristic key; - - protected Serializable value; - - public EnvironmentRowModel() { - super(CaracteristicRow.class, fromBeanBinder, toBeanBinder); - } - - public EnvironmentRowModel(Caracteristic key, Serializable value) { - this(); - this.key = key; - this.value = value; - } - - public Caracteristic getKey() { - return key; - } - - public void setKey(Caracteristic key) { - Object oldValue = getKey(); - this.key = key; - firePropertyChange(PROPERTY_KEY, oldValue, key); - } - - public Serializable getValue() { - return value; - } - - public void setValue(Serializable value) { - Object oldValue = getValue(); - this.value = value; - firePropertyChange(PROPERTY_VALUE, oldValue, value); - } - } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/environment/EnvironmentTabUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/environment/EnvironmentTabUIHandler.java 2013-01-24 15:34:52 UTC (rev 244) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/environment/EnvironmentTabUIHandler.java 2013-01-28 09:08:49 UTC (rev 245) @@ -24,33 +24,28 @@ * #L% */ -import com.google.common.base.Preconditions; -import com.google.common.collect.Lists; import fr.ifremer.tutti.persistence.entities.CaracteristicMap; -import fr.ifremer.tutti.persistence.entities.TuttiEntities; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.service.DecoratorService; +import fr.ifremer.tutti.ui.swing.TuttiUI; import fr.ifremer.tutti.ui.swing.content.operation.EditFishingOperationUI; -import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor; -import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; +import fr.ifremer.tutti.ui.swing.content.operation.fishing.CaracteristicTabUIHandler; import fr.ifremer.tutti.ui.swing.util.editor.CaracteristicValueEditor; import fr.ifremer.tutti.ui.swing.util.editor.CaracteristicValueRenderer; -import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIHandler; +import java.util.List; import jaxx.runtime.swing.editor.bean.BeanComboBox; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jdesktop.swingx.JXTable; import org.jdesktop.swingx.table.DefaultTableColumnModelExt; -import java.util.List; - /** * @author kmorin * @since 0.3 */ -public class EnvironmentTabUIHandler extends AbstractTuttiTableUIHandler<EnvironmentRowModel, EnvironmentTabUIModel> { +public class EnvironmentTabUIHandler extends CaracteristicTabUIHandler<EnvironmentRowModel, EnvironmentTabUIModel, EnvironmentTableModel> { private final static Log log = LogFactory.getLog(EnvironmentTabUIHandler.class); @@ -64,82 +59,56 @@ public EnvironmentTabUIHandler(EditFishingOperationUI parentUi, EnvironmentTabUI ui) { - super(parentUi.getHandler().getContext(), - EnvironmentRowModel.PROPERTY_VALUE); + super(parentUi, EnvironmentRowModel.PROPERTY_VALUE); this.ui = ui; } //------------------------------------------------------------------------// - //-- AbstractTuttiTableUIHandler methods --// + //-- CaracteristicTabUIHandler methods --// //------------------------------------------------------------------------// @Override - protected EnvironmentTableModel getTableModel() { - return (EnvironmentTableModel) getTable().getModel(); + protected TuttiUI getUI() { + return ui; } @Override - protected JXTable getTable() { - return ui.getEnvironmentTable(); + protected BeanComboBox<Caracteristic> getKeyCombo() { + return ui.getNewRowKey(); } - + @Override - protected boolean isRowValid(EnvironmentRowModel row) { - //TODO - return row.getValue() != null; + protected EnvironmentTabUIModel createModel() { + return new EnvironmentTabUIModel(); } @Override - protected void onRowModified(int rowIndex, - EnvironmentRowModel row, - String propertyName, - Object oldValue, - Object newValue) { - recomputeRowValidState(row); - super.onRowModified(rowIndex, row, propertyName, oldValue, newValue); + protected CaracteristicMap getCaracteristics(FishingOperation operation) { + return operation.getEnvironmentCaracteristics(); } - + @Override - protected void saveSelectedRowIfRequired(TuttiBeanMonitor<EnvironmentRowModel> rowMonitor, - EnvironmentRowModel row) { - if (row.isValid()) { - // there is a valid bean attached to the monitor - - if (rowMonitor.wasModified()) { - - // monitored bean was modified, save it - if (log.isInfoEnabled()) { - log.info("Row " + row + " was modified, will save it"); - } - - saveRow(row); - - } - } + protected List<String> getProtocolPmfmIds(TuttiProtocol protocol) { + return protocol.getEnvironmentPmfmId(); } - + //------------------------------------------------------------------------// - //-- AbstractTuttiUIHandler methods --// + //-- AbstractTuttiTableUIHandler methods --// //------------------------------------------------------------------------// @Override - public EnvironmentTabUIModel getModel() { - return ui.getModel(); + protected JXTable getTable() { + return ui.getEnvironmentTable(); } - @Override - public void beforeInitUI() { - EnvironmentTabUIModel model = new EnvironmentTabUIModel(); - ui.setContextValue(model); - } + //------------------------------------------------------------------------// + //-- AbstractTuttiUIHandler methods --// + //------------------------------------------------------------------------// @Override public void afterInitUI() { - initUI(ui); + super.afterInitUI(); - initBeanComboBox(ui.getNewRowKey(), - Lists.<Caracteristic>newArrayList(), null); - JXTable table = getTable(); // create table column model @@ -170,149 +139,4 @@ initTable(table); } - @Override - public void onCloseUI() { - if (log.isInfoEnabled()) { - log.info("closing: " + ui); - } - } - - @Override - protected void onAfterSelectedRowChanged(int oldRowIndex, - EnvironmentRowModel oldRow, - int newRowIndex, - EnvironmentRowModel newRow) { - - super.onAfterSelectedRowChanged(oldRowIndex, oldRow, newRowIndex, newRow); - getModel().setRemoveCaracteristicEnabled(newRow != null); - } - - //------------------------------------------------------------------------// - //-- Public methods --// - //------------------------------------------------------------------------// - - /** Adds a row with the parameter selected in the combo box */ - public void addRow() { - BeanComboBox<Caracteristic> keyCombo = ui.getNewRowKey(); - Caracteristic selectedItem = (Caracteristic) keyCombo.getSelectedItem(); - - EnvironmentRowModel row = getTableModel().createNewRow(); - row.setKey(selectedItem); - getTableModel().addNewRow(row); - - EnvironmentTableModel tableModel = getTableModel(); - int rowIndex = tableModel.getRowCount() - 1; - tableModel.fireTableRowsInserted(rowIndex, rowIndex); - - keyCombo.removeItem(selectedItem); - selectFirstInCombo(keyCombo); - - EnvironmentTabUIModel model = getModel(); - model.setModify(true); - recomputeRowValidState(row); - } - - /** Resets the table with the data from the database */ - public void reset(FishingOperation fishingOperation) { - EnvironmentTableModel tableModel = getTableModel(); - EnvironmentTabUIModel model = getModel(); - model.setFishingOperation(fishingOperation); - - CaracteristicMap environmentCaracteristics = fishingOperation.getEnvironmentCaracteristics(); - if (environmentCaracteristics == null) { - environmentCaracteristics = new CaracteristicMap(); - } - - TuttiProtocol protocol = TuttiUIUtil.getProtocol(ui); - List<String> environmentPmfmIds = Lists.newArrayList(); - if (protocol != null) { - List<String> protocolEnvironmentPmfmId = protocol.getEnvironmentPmfmId(); - if (protocolEnvironmentPmfmId != null) { - environmentPmfmIds.addAll(protocolEnvironmentPmfmId); - } - } - - List<EnvironmentRowModel> rows = Lists.newArrayList(); - List<Caracteristic> caracteristics = Lists.newArrayList(environmentCaracteristics.keySet()); - - List<Caracteristic> availableCaracteristics = model.getAvailableCaracteristics(); - for (String id : environmentPmfmIds) { - Caracteristic caracteristic = TuttiEntities.findById(availableCaracteristics, id); - if (!caracteristics.contains(caracteristic)) { - caracteristics.add(caracteristic); - } - } - - for (Caracteristic key : caracteristics) { - EnvironmentRowModel newRow = tableModel.createNewRow(); - newRow.setKey(key); - newRow.setValue(environmentCaracteristics.get(key)); - rows.add(newRow); - } - - model.setRows(rows); - - List<Caracteristic> caracteristicList = Lists.newArrayList(); - - for (Caracteristic caracteristic : availableCaracteristics) { - if (!caracteristics.contains(caracteristic)) { - caracteristicList.add(caracteristic); - } - } - - ui.getNewRowKey().setData(caracteristicList); - selectFirstInCombo(ui.getNewRowKey()); - model.setModify(false); - } - - public void removeCaracteristic() { - int rowIndex = getTable().getSelectedRow(); - - Preconditions.checkState(rowIndex != -1, - "Cant remove caracteristic if no caracteristic selected"); - - EnvironmentRowModel row = getTableModel().getEntry(rowIndex); - - FishingOperation fishingOperation = getModel().getFishingOperation(); - Preconditions.checkNotNull(fishingOperation); - - CaracteristicMap caracteristicMap = fishingOperation.getEnvironmentCaracteristics(); - if (caracteristicMap != null) { - caracteristicMap.remove(row.getKey()); - } - - - //add the row in the combo - BeanComboBox keyCombo = ui.getNewRowKey(); - keyCombo.addItem(row.getKey()); - selectFirstInCombo(keyCombo); - - // remove the row from the model - getModel().getRows().remove(rowIndex); - - // refresh all the table - getTableModel().fireTableRowsDeleted(rowIndex, rowIndex); - - getModel().removeRowInError(row); - - } - - //------------------------------------------------------------------------// - //-- Protected methods --// - //------------------------------------------------------------------------// - - protected void saveRow(EnvironmentRowModel row) { - - if (row.isValid()) { - FishingOperation fishingOperation = getModel().getFishingOperation(); - Preconditions.checkNotNull(fishingOperation); - - if (fishingOperation.getEnvironmentCaracteristics() == null) { - fishingOperation.setEnvironmentCaracteristics(new CaracteristicMap()); - } - - fishingOperation.getEnvironmentCaracteristics().put(row.getKey(), row.getValue()); - } - } - } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/environment/EnvironmentTabUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/environment/EnvironmentTabUIModel.java 2013-01-24 15:34:52 UTC (rev 244) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/environment/EnvironmentTabUIModel.java 2013-01-28 09:08:49 UTC (rev 245) @@ -24,87 +24,21 @@ * #L% */ -import com.google.common.collect.Lists; -import fr.ifremer.tutti.persistence.entities.CaracteristicMap; -import fr.ifremer.tutti.persistence.entities.data.FishingOperation; -import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; -import fr.ifremer.tutti.ui.swing.content.operation.EditFishingOperationUIModel; -import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIModel; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; -import org.nuiton.util.beans.Binder; -import org.nuiton.util.beans.BinderModelBuilder; +import fr.ifremer.tutti.ui.swing.content.operation.fishing.CaracteristicTabUIModel; -import java.io.Serializable; -import java.util.List; - /** * @author kmorin * @since 0.3 */ -public class EnvironmentTabUIModel extends AbstractTuttiTableUIModel<FishingOperation, EnvironmentRowModel, EnvironmentTabUIModel> { +public class EnvironmentTabUIModel extends CaracteristicTabUIModel<EnvironmentRowModel, EnvironmentTabUIModel> { private static final long serialVersionUID = 1L; public static final String TITLE = "tutti.label.tab.fishingOperation.environment"; - public static final String PROPERTY_REMOVE_CARACTERISTIC_ENABLED = "removeCaracteristicEnabled"; - - protected List<Caracteristic> availableCaracteristics; - - /** - * Fishing operation associated with the caracteristics - * - * @since 0.3 - */ - protected FishingOperation fishingOperation; - - /** - * Can user remove a selected caracteristic? - * - * @since 0.3 - */ - protected boolean removeCaracteristicEnabled; - - protected static final Binder<FishingOperation, EnvironmentTabUIModel> fromBeanBinder = BinderModelBuilder.newEmptyBuilder(FishingOperation.class, EnvironmentTabUIModel.class) - .toBinder(); - - protected static final Binder<EnvironmentTabUIModel, FishingOperation> toBeanBinder = BinderModelBuilder.newEmptyBuilder(EnvironmentTabUIModel.class, FishingOperation.class) - .toBinder(); - - public EnvironmentTabUIModel() { - super(FishingOperation.class, fromBeanBinder, toBeanBinder); - } - @Override public String getTitle() { return TITLE; } - - public List<Caracteristic> getAvailableCaracteristics() { - return availableCaracteristics; - } - - public void setAvailableCaracteristics(List<Caracteristic> caracteristics) { - availableCaracteristics = caracteristics; - } - - public FishingOperation getFishingOperation() { - return fishingOperation; - } - - public void setFishingOperation(FishingOperation fishingOperation) { - this.fishingOperation = fishingOperation; - } - public boolean isRemoveCaracteristicEnabled() { - return removeCaracteristicEnabled; - } - - public void setRemoveCaracteristicEnabled(boolean removeCaracteristicEnabled) { - Object oldValue = isRemoveCaracteristicEnabled(); - this.removeCaracteristicEnabled = removeCaracteristicEnabled; - firePropertyChange(PROPERTY_REMOVE_CARACTERISTIC_ENABLED, oldValue, removeCaracteristicEnabled); - } - } Deleted: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/gearshooting/GearShootingRowModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/gearshooting/GearShootingRowModel.java 2013-01-24 15:34:52 UTC (rev 244) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/gearshooting/GearShootingRowModel.java 2013-01-28 09:08:49 UTC (rev 245) @@ -1,86 +0,0 @@ -package fr.ifremer.tutti.ui.swing.content.operation.fishing.gearshooting; - -/* - * #%L - * Tutti :: UI - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2012 Ifremer - * %% - * 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.ifremer.tutti.persistence.entities.referential.Caracteristic; -import fr.ifremer.tutti.ui.swing.AbstractTuttiBeanUIModel; -import fr.ifremer.tutti.ui.swing.util.table.CaracteristicRow; -import java.io.Serializable; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.nuiton.util.beans.Binder; -import org.nuiton.util.beans.BinderFactory; - -/** - * @author kmorin - * @since 0.3 - */ -public class GearShootingRowModel extends AbstractTuttiBeanUIModel<CaracteristicRow, GearShootingRowModel> { - - private static final long serialVersionUID = 1L; - - private static final Log log = LogFactory.getLog(GearShootingRowModel.class); - - public static final String PROPERTY_KEY = "key"; - - public static final String PROPERTY_VALUE = "value"; - - protected static final Binder<CaracteristicRow, GearShootingRowModel> fromBeanBinder = - BinderFactory.newBinder(CaracteristicRow.class, - GearShootingRowModel.class); - - protected static final Binder<GearShootingRowModel, CaracteristicRow> toBeanBinder = - BinderFactory.newBinder(GearShootingRowModel.class, - CaracteristicRow.class); - - protected Caracteristic key; - - protected Serializable value; - - public GearShootingRowModel() { - super(CaracteristicRow.class, fromBeanBinder, toBeanBinder); - } - - public Caracteristic getKey() { - return key; - } - - public void setKey(Caracteristic key) { - Object oldValue = getKey(); - this.key = key; - firePropertyChange(PROPERTY_KEY, oldValue, key); - } - - public Serializable getValue() { - return value; - } - - public void setValue(Serializable value) { - Object oldValue = getValue(); - this.value = value; - firePropertyChange(PROPERTY_VALUE, oldValue, value); - } - -} Copied: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/gearshooting/GearShootingRowModel.java (from rev 244, trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/environment/EnvironmentRowModel.java) =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/gearshooting/GearShootingRowModel.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/gearshooting/GearShootingRowModel.java 2013-01-28 09:08:49 UTC (rev 245) @@ -0,0 +1,12 @@ + +package fr.ifremer.tutti.ui.swing.content.operation.fishing.gearshooting; + +import fr.ifremer.tutti.ui.swing.content.operation.fishing.CaracteristicRowModel; + +/** + * + * @author kmorin <kmorin@codelutin.com> + */ +public class GearShootingRowModel extends CaracteristicRowModel<GearShootingRowModel> { + +} Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/gearshooting/GearShootingTabUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/gearshooting/GearShootingTabUIHandler.java 2013-01-24 15:34:52 UTC (rev 244) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/gearshooting/GearShootingTabUIHandler.java 2013-01-28 09:08:49 UTC (rev 245) @@ -25,32 +25,28 @@ */ import com.google.common.base.Preconditions; -import com.google.common.collect.Lists; import fr.ifremer.tutti.persistence.entities.CaracteristicMap; -import fr.ifremer.tutti.persistence.entities.TuttiEntities; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.service.DecoratorService; +import fr.ifremer.tutti.ui.swing.TuttiUI; import fr.ifremer.tutti.ui.swing.content.operation.EditFishingOperationUI; -import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor; -import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; +import fr.ifremer.tutti.ui.swing.content.operation.fishing.CaracteristicTabUIHandler; import fr.ifremer.tutti.ui.swing.util.editor.CaracteristicValueEditor; import fr.ifremer.tutti.ui.swing.util.editor.CaracteristicValueRenderer; -import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIHandler; +import java.util.List; import jaxx.runtime.swing.editor.bean.BeanComboBox; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jdesktop.swingx.JXTable; import org.jdesktop.swingx.table.DefaultTableColumnModelExt; -import java.util.List; - /** * @author kmorin * @since 0.3 */ -public class GearShootingTabUIHandler extends AbstractTuttiTableUIHandler<GearShootingRowModel, GearShootingTabUIModel> { +public class GearShootingTabUIHandler extends CaracteristicTabUIHandler<GearShootingRowModel, GearShootingTabUIModel, GearShootingTableModel> { private final static Log log = LogFactory.getLog(GearShootingTabUIHandler.class); @@ -64,83 +60,56 @@ public GearShootingTabUIHandler(EditFishingOperationUI parentUi, GearShootingTabUI ui) { - super(parentUi.getHandler().getContext(), - GearShootingRowModel.PROPERTY_VALUE); + super(parentUi, GearShootingRowModel.PROPERTY_VALUE); this.ui = ui; } - + //------------------------------------------------------------------------// - //-- AbstractTuttiTableUIHandler methods --// + //-- CaracteristicTabUIHandler methods --// //------------------------------------------------------------------------// @Override - protected GearShootingTableModel getTableModel() { - return (GearShootingTableModel) getTable().getModel(); + protected TuttiUI getUI() { + return ui; } @Override - protected JXTable getTable() { - return ui.getGearShootingTable(); + protected BeanComboBox<Caracteristic> getKeyCombo() { + return ui.getNewRowKey(); } - + @Override - protected boolean isRowValid(GearShootingRowModel row) { - //TODO - return row.getValue() != null; + protected GearShootingTabUIModel createModel() { + return new GearShootingTabUIModel(); } - + @Override - protected void onRowModified(int rowIndex, - GearShootingRowModel row, - String propertyName, - Object oldValue, - Object newValue) { - recomputeRowValidState(row); - super.onRowModified(rowIndex, row, propertyName, oldValue, newValue); + protected CaracteristicMap getCaracteristics(FishingOperation operation) { + return operation.getGearShootingCaracteristics(); } @Override - protected void saveSelectedRowIfRequired(TuttiBeanMonitor<GearShootingRowModel> rowMonitor, - GearShootingRowModel row) { - - if (row.isValid()) { - // there is a valid bean attached to the monitor - - if (rowMonitor.wasModified()) { - - // monitored bean was modified, save it - if (log.isInfoEnabled()) { - log.info("Row " + row + " was modified, will save it"); - } - - saveRow(row); - - } - } + protected List<String> getProtocolPmfmIds(TuttiProtocol protocol) { + return protocol.getGearPmfmId(); } - + //------------------------------------------------------------------------// - //-- AbstractTuttiUIHandler methods --// + //-- AbstractTuttiTableUIHandler methods --// //------------------------------------------------------------------------// @Override - public GearShootingTabUIModel getModel() { - return ui.getModel(); + protected JXTable getTable() { + return ui.getGearShootingTable(); } - @Override - public void beforeInitUI() { - GearShootingTabUIModel model = new GearShootingTabUIModel(); - ui.setContextValue(model); - } + //------------------------------------------------------------------------// + //-- AbstractTuttiUIHandler methods --// + //------------------------------------------------------------------------// @Override public void afterInitUI() { - initUI(ui); + super.afterInitUI(); - initBeanComboBox(ui.getNewRowKey(), - Lists.<Caracteristic>newArrayList(), null); - JXTable table = getTable(); // create table column model @@ -173,100 +142,10 @@ initTable(table); } - @Override - public void onCloseUI() { - if (log.isInfoEnabled()) { - log.info("closing: " + ui); - } - } - - @Override - protected void onAfterSelectedRowChanged(int oldRowIndex, - GearShootingRowModel oldRow, - int newRowIndex, - GearShootingRowModel newRow) { - - super.onAfterSelectedRowChanged(oldRowIndex, oldRow, newRowIndex, newRow); - getModel().setRemoveCaracteristicEnabled(newRow != null); - } - //------------------------------------------------------------------------// //-- Public methods --// //------------------------------------------------------------------------// - /** Adds a row with the parameter selected in the combo box */ - public void addRow() { - BeanComboBox<Caracteristic> keyCombo = ui.getNewRowKey(); - Caracteristic selectedItem = (Caracteristic) keyCombo.getSelectedItem(); - - GearShootingRowModel row = getTableModel().createNewRow(); - row.setKey(selectedItem); - getModel().getRows().add(row); - - GearShootingTableModel tableModel = getTableModel(); - int rowIndex = tableModel.getRowCount() - 1; - tableModel.fireTableRowsInserted(rowIndex, rowIndex); - - keyCombo.removeItem(selectedItem); - selectFirstInCombo(keyCombo); - - GearShootingTabUIModel model = getModel(); - model.setModify(true); - recomputeRowValidState(row); - } - - /** Resets the table with the data from the database */ - public void reset(FishingOperation fishingOperation) { - GearShootingTableModel tableModel = getTableModel(); - GearShootingTabUIModel model = getModel(); - model.setFishingOperation(fishingOperation); - - CaracteristicMap gearShootingCaracteristics = fishingOperation.getGearShootingCaracteristics(); - if (gearShootingCaracteristics == null) { - gearShootingCaracteristics = new CaracteristicMap(); - } - - TuttiProtocol protocol = TuttiUIUtil.getProtocol(ui); - List<String> gearPmfmIds = Lists.newArrayList(); - if (protocol != null) { - List<String> protocolGearPmfmId = protocol.getGearPmfmId(); - if (protocolGearPmfmId != null) { - gearPmfmIds.addAll(protocolGearPmfmId); - } - } - - List<GearShootingRowModel> rows = Lists.newArrayList(); - List<Caracteristic> caracteristics = Lists.newArrayList(gearShootingCaracteristics.keySet()); - - List<Caracteristic> availableCaracteristics = model.getAvailableCaracteristics(); - for (String id : gearPmfmIds) { - Caracteristic caracteristic = TuttiEntities.findById(availableCaracteristics, id); - if (!caracteristics.contains(caracteristic)) { - caracteristics.add(caracteristic); - } - } - - for (Caracteristic key : caracteristics) { - GearShootingRowModel newRow = tableModel.createNewRow(); - newRow.setKey(key); - newRow.setValue(gearShootingCaracteristics.get(key)); - rows.add(newRow); - } - model.setRows(rows); - - List<Caracteristic> caracteristicList = Lists.newArrayList(); - - for (Caracteristic caracteristic : availableCaracteristics) { - if (!caracteristics.contains(caracteristic)) { - caracteristicList.add(caracteristic); - } - } - - ui.getNewRowKey().setData(caracteristicList); - selectFirstInCombo(ui.getNewRowKey()); - model.setModify(false); - } - public void removeCaracteristic() { int rowIndex = getTable().getSelectedRow(); @@ -275,10 +154,7 @@ GearShootingRowModel row = getTableModel().getEntry(rowIndex); - FishingOperation fishingOperation = getModel().getFishingOperation(); - Preconditions.checkNotNull(fishingOperation); - - CaracteristicMap caracteristicMap = fishingOperation.getGearShootingCaracteristics(); + CaracteristicMap caracteristicMap = getModel().getCaracteristicMap(); if (caracteristicMap != null) { caracteristicMap.remove(row.getKey()); } @@ -298,20 +174,4 @@ } - //------------------------------------------------------------------------// - //-- Protected methods --// - //------------------------------------------------------------------------// - - protected void saveRow(GearShootingRowModel row) { - if (row.isValid()) { - FishingOperation fishingOperation = getModel().getFishingOperation(); - Preconditions.checkNotNull(fishingOperation); - - if (fishingOperation.getGearShootingCaracteristics() == null) { - fishingOperation.setGearShootingCaracteristics(new CaracteristicMap()); - } - fishingOperation.getGearShootingCaracteristics().put(row.getKey(), row.getValue()); - } - } - } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/gearshooting/GearShootingTabUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/gearshooting/GearShootingTabUIModel.java 2013-01-24 15:34:52 UTC (rev 244) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/gearshooting/GearShootingTabUIModel.java 2013-01-28 09:08:49 UTC (rev 245) @@ -24,17 +24,8 @@ * #L% */ -import com.google.common.collect.Maps; -import fr.ifremer.tutti.persistence.entities.CaracteristicMap; -import fr.ifremer.tutti.persistence.entities.data.FishingOperation; -import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; -import fr.ifremer.tutti.ui.swing.content.operation.EditFishingOperationUIModel; -import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIModel; -import org.nuiton.util.beans.Binder; -import org.nuiton.util.beans.BinderModelBuilder; - -import java.io.Serializable; -import java.util.List; +import fr.ifremer.tutti.ui.swing.content.operation.fishing.CaracteristicRowModel; +import fr.ifremer.tutti.ui.swing.content.operation.fishing.CaracteristicTabUIModel; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -43,71 +34,17 @@ * @author kmorin * @since 0.3 */ -public class GearShootingTabUIModel extends AbstractTuttiTableUIModel<FishingOperation, GearShootingRowModel, GearShootingTabUIModel> { +public class GearShootingTabUIModel extends CaracteristicTabUIModel<GearShootingRowModel, GearShootingTabUIModel> { private static final long serialVersionUID = 1L; private static final Log log = LogFactory.getLog(GearShootingTabUIModel.class); public static final String TITLE = "tutti.label.tab.fishingOperation.gearShooting"; - - public static final String PROPERTY_REMOVE_CARACTERISTIC_ENABLED = "removeCaracteristicEnabled"; - - protected List<Caracteristic> availableCaracteristics; - - /** - * Fishing operation associated with the caracteristics - * - * @since 0.3 - */ - protected FishingOperation fishingOperation; - - /** - * Can user remove a selected caracteristic? - * - * @since 0.3 - */ - protected boolean removeCaracteristicEnabled; - protected static final Binder<FishingOperation, GearShootingTabUIModel> fromBeanBinder = BinderModelBuilder.newEmptyBuilder(FishingOperation.class, GearShootingTabUIModel.class) - .toBinder(); - - protected static final Binder<GearShootingTabUIModel, FishingOperation> toBeanBinder = BinderModelBuilder.newEmptyBuilder(GearShootingTabUIModel.class, FishingOperation.class) - .toBinder(); - - public GearShootingTabUIModel() { - super(FishingOperation.class, fromBeanBinder, toBeanBinder); - } - @Override public String getTitle() { return TITLE; } - - public List<Caracteristic> getAvailableCaracteristics() { - return availableCaracteristics; - } - - public void setAvailableCaracteristics(List<Caracteristic> availableCaracteristics) { - this.availableCaracteristics = availableCaracteristics; - } - public FishingOperation getFishingOperation() { - return fishingOperation; - } - - public void setFishingOperation(FishingOperation fishingOperation) { - this.fishingOperation = fishingOperation; - } - - public boolean isRemoveCaracteristicEnabled() { - return removeCaracteristicEnabled; - } - - public void setRemoveCaracteristicEnabled(boolean removeCaracteristicEnabled) { - Object oldValue = isRemoveCaracteristicEnabled(); - this.removeCaracteristicEnabled = removeCaracteristicEnabled; - firePropertyChange(PROPERTY_REMOVE_CARACTERISTIC_ENABLED, oldValue, removeCaracteristicEnabled); - } - } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/hydrology/HydrologyRowModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/hydrology/HydrologyRowModel.java 2013-01-24 15:34:52 UTC (rev 244) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/hydrology/HydrologyRowModel.java 2013-01-28 09:08:49 UTC (rev 245) @@ -26,6 +26,8 @@ import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.ui.swing.AbstractTuttiBeanUIModel; +import fr.ifremer.tutti.ui.swing.content.operation.fishing.CaracteristicRowModel; +import fr.ifremer.tutti.ui.swing.util.table.CaracteristicRow; import org.nuiton.util.beans.Binder; import org.nuiton.util.beans.BinderFactory; @@ -35,28 +37,16 @@ * @author kmorin * @since 0.3 */ -public class HydrologyRowModel extends AbstractTuttiBeanUIModel<Caracteristic, HydrologyRowModel> { +public class HydrologyRowModel extends CaracteristicRowModel<HydrologyRowModel> { private static final long serialVersionUID = 1L; - public static final String PROPERTY_KEY = "key"; - public static final String PROPERTY_GEAR_SHOOTING_START_VALUE = "gearShootingStartValue"; public static final String PROPERTY_GEAR_SHOOTING_END_VALUE = "gearShootingEndValue"; public static final String PROPERTY_AVERAGE_VALUE = "averageValue"; - protected static final Binder<Caracteristic, HydrologyRowModel> fromBeanBinder = - BinderFactory.newBinder(Caracteristic.class, - HydrologyRowModel.class); - - protected static final Binder<HydrologyRowModel, Caracteristic> toBeanBinder = - BinderFactory.newBinder(HydrologyRowModel.class, - Caracteristic.class); - - protected Caracteristic key; - protected Serializable gearShootingStartValue; protected Serializable gearShootingEndValue; @@ -64,7 +54,7 @@ protected Serializable averageValue; public HydrologyRowModel() { - super(Caracteristic.class, fromBeanBinder, toBeanBinder); + super(); } public HydrologyRowModel(Caracteristic key) { @@ -80,16 +70,6 @@ this.averageValue = averageValue; } - public Caracteristic getKey() { - return key; - } - - public void setKey(Caracteristic key) { - Object oldValue = getKey(); - this.key = key; - firePropertyChange(PROPERTY_KEY, oldValue, key); - } - public Serializable getGearShootingStartValue() { return gearShootingStartValue; } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/hydrology/HydrologyTabUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/hydrology/HydrologyTabUIHandler.java 2013-01-24 15:34:52 UTC (rev 244) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/hydrology/HydrologyTabUIHandler.java 2013-01-28 09:08:49 UTC (rev 245) @@ -33,32 +33,31 @@ import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.service.DecoratorService; +import fr.ifremer.tutti.ui.swing.TuttiUI; import fr.ifremer.tutti.ui.swing.content.operation.EditFishingOperationUI; +import fr.ifremer.tutti.ui.swing.content.operation.fishing.CaracteristicTabUIHandler; import fr.ifremer.tutti.ui.swing.util.HydrologicCaracteristicUtil; import fr.ifremer.tutti.ui.swing.util.HydrologicCaracteristicUtil.Type; -import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor; import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import fr.ifremer.tutti.ui.swing.util.editor.CaracteristicValueEditor; import fr.ifremer.tutti.ui.swing.util.editor.CaracteristicValueRenderer; -import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIHandler; -import jaxx.runtime.swing.editor.bean.BeanComboBox; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.jdesktop.swingx.JXTable; -import org.jdesktop.swingx.table.DefaultTableColumnModelExt; - import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.io.Serializable; import java.util.List; import java.util.Map; import java.util.Set; +import jaxx.runtime.swing.editor.bean.BeanComboBox; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.jdesktop.swingx.JXTable; +import org.jdesktop.swingx.table.DefaultTableColumnModelExt; /** * @author kmorin * @since 0.3 */ -public class HydrologyTabUIHandler extends AbstractTuttiTableUIHandler<HydrologyRowModel, HydrologyTabUIModel> { +public class HydrologyTabUIHandler extends CaracteristicTabUIHandler<HydrologyRowModel, HydrologyTabUIModel, HydrologyTableModel> { private final static Log log = LogFactory.getLog(HydrologyTabUIHandler.class); @@ -74,7 +73,7 @@ public HydrologyTabUIHandler(EditFishingOperationUI parentUi, HydrologyTabUI ui) { - super(parentUi.getHandler().getContext(), + super(parentUi, HydrologyRowModel.PROPERTY_GEAR_SHOOTING_START_VALUE, HydrologyRowModel.PROPERTY_AVERAGE_VALUE, HydrologyRowModel.PROPERTY_GEAR_SHOOTING_END_VALUE @@ -82,57 +81,51 @@ this.ui = ui; } + //------------------------------------------------------------------------// - //-- AbstractTuttiTableUIHandler methods --// + //-- CaracteristicTabUIHandler methods --// //------------------------------------------------------------------------// @Override - protected JXTable getTable() { - return ui.getHydrologyTable(); + protected TuttiUI getUI() { + return ui; } @Override - protected HydrologyTableModel getTableModel() { - return (HydrologyTableModel) getTable().getModel(); + protected BeanComboBox<Caracteristic> getKeyCombo() { + return ui.getNewRowKey(); } - + @Override - protected boolean isRowValid(HydrologyRowModel row) { - //TODO - return row.getGearShootingStartValue() != null || - row.getGearShootingEndValue() != null || - row.getAverageValue() != null; + protected HydrologyTabUIModel createModel() { + return new HydrologyTabUIModel(); } + + @Override + protected CaracteristicMap getCaracteristics(FishingOperation operation) { + return operation.getHydrologyCaracteristics(); + } - @Override - protected void onRowModified(int rowIndex, - HydrologyRowModel row, - String propertyName, - Object oldValue, - Object newValue) { - recomputeRowValidState(row); - super.onRowModified(rowIndex, row, propertyName, oldValue, newValue); + protected List<String> getProtocolPmfmIds(TuttiProtocol protocol) { + return protocol.getHydrologyPmfmId(); } + + //------------------------------------------------------------------------// + //-- AbstractTuttiTableUIHandler methods --// + //------------------------------------------------------------------------// @Override - protected void saveSelectedRowIfRequired(TuttiBeanMonitor<HydrologyRowModel> rowMonitor, - HydrologyRowModel row) { + protected JXTable getTable() { + return ui.getHydrologyTable(); + } - if (row.isValid()) { - // there is a valid bean attached to the monitor - - if (rowMonitor.wasModified()) { - - // monitored bean was modified, save it - if (log.isInfoEnabled()) { - log.info("Row " + row + " was modified, will save it"); - } - - saveRow(row); - - } - } + @Override + protected boolean isRowValid(HydrologyRowModel row) { + //TODO + return row.getGearShootingStartValue() != null || + row.getGearShootingEndValue() != null || + row.getAverageValue() != null; } //------------------------------------------------------------------------// @@ -140,11 +133,6 @@ //------------------------------------------------------------------------// @Override - public HydrologyTabUIModel getModel() { - return ui.getModel(); - } - - @Override public void beforeInitUI() { HydrologyTabUIModel model = new HydrologyTabUIModel(); ui.setContextValue(model); @@ -173,11 +161,8 @@ @Override public void afterInitUI() { - initUI(ui); + super.afterInitUI(); - initBeanComboBox(ui.getNewRowKey(), - Lists.<Caracteristic>newArrayList(), null); - JXTable table = getTable(); // create table column model @@ -225,58 +210,21 @@ initTable(table); } - @Override - public void onCloseUI() { - if (log.isInfoEnabled()) { - log.info("closing: " + ui); - } - } - - @Override - protected void onAfterSelectedRowChanged(int oldRowIndex, - HydrologyRowModel oldRow, - int newRowIndex, - HydrologyRowModel newRow) { - - super.onAfterSelectedRowChanged(oldRowIndex, oldRow, newRowIndex, newRow); - getModel().setRemoveCaracteristicEnabled(newRow != null); - } - //------------------------------------------------------------------------// //-- Public methods --// //------------------------------------------------------------------------// - /** Adds a row with the parameter selected in the combo box */ - public void addRow() { - BeanComboBox<Caracteristic> keyCombo = ui.getNewRowKey(); - Caracteristic selectedItem = (Caracteristic) keyCombo.getSelectedItem(); - - HydrologyRowModel row = getTableModel().createNewRow(); - row.setKey(selectedItem); - getModel().getRows().add(row); - - HydrologyTableModel tableModel = getTableModel(); - int rowIndex = tableModel.getRowCount() - 1; - tableModel.fireTableRowsInserted(rowIndex, rowIndex); - - keyCombo.removeItem(selectedItem); - selectFirstInCombo(keyCombo); - - HydrologyTabUIModel model = getModel(); - model.setModify(true); - recomputeRowValidState(row); - } - /** Resets the table with the data from the database */ + @Override public void reset(FishingOperation fishingOperation) { HydrologyTableModel tableModel = getTableModel(); HydrologyTabUIModel model = getModel(); - model.setFishingOperation(fishingOperation); CaracteristicMap hydrologyCaracteristics = fishingOperation.getHydrologyCaracteristics(); if (hydrologyCaracteristics == null) { hydrologyCaracteristics = new CaracteristicMap(); } + model.setCaracteristicMap(hydrologyCaracteristics); TuttiProtocol protocol = TuttiUIUtil.getProtocol(ui); List<String> gearPmfmIds = Lists.newArrayList(); @@ -330,6 +278,7 @@ model.setModify(false); } + @Override public void removeCaracteristic() { int rowIndex = getTable().getSelectedRow(); @@ -338,14 +287,11 @@ HydrologyRowModel row = getTableModel().getEntry(rowIndex); - FishingOperation fishingOperation = getModel().getFishingOperation(); - Preconditions.checkNotNull(fishingOperation); - Map<Type, Caracteristic> caracteristics = availableGlobalCaracteristics.get(row.getKey()); for (Type type : caracteristics.keySet()) { Caracteristic caracteristic = caracteristics.get(type); - CaracteristicMap caracteristicMap = fishingOperation.getHydrologyCaracteristics(); + CaracteristicMap caracteristicMap = getModel().getCaracteristicMap(); if (caracteristicMap != null) { caracteristicMap.remove(caracteristic); } @@ -369,14 +315,12 @@ //-- Protected methods --// //------------------------------------------------------------------------// + @Override protected void saveRow(HydrologyRowModel row) { if (row.isValid()) { - FishingOperation fishingOperation = getModel().getFishingOperation(); - Preconditions.checkNotNull(fishingOperation); + CaracteristicMap caracteristicMap = getModel().getCaracteristicMap(); + Preconditions.checkNotNull(caracteristicMap); - if (fishingOperation.getHydrologyCaracteristics() == null) { - fishingOperation.setHydrologyCaracteristics(new CaracteristicMap()); - } Map<Type, Caracteristic> caracteristics = availableGlobalCaracteristics.get(row.getKey()); CaracteristicMap map = new CaracteristicMap(); for (Type type : caracteristics.keySet()) { @@ -393,7 +337,7 @@ } map.put(caracteristics.get(type), value); } - fishingOperation.getHydrologyCaracteristics().putAll(map); + caracteristicMap.putAll(map); } } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/hydrology/HydrologyTabUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/hydrology/HydrologyTabUIModel.java 2013-01-24 15:34:52 UTC (rev 244) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/hydrology/HydrologyTabUIModel.java 2013-01-28 09:08:49 UTC (rev 245) @@ -24,18 +24,7 @@ * #L% */ -import com.google.common.collect.Maps; -import fr.ifremer.tutti.persistence.entities.CaracteristicMap; -import fr.ifremer.tutti.persistence.entities.data.FishingOperation; -import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; -import fr.ifremer.tutti.ui.swing.content.operation.EditFishingOperationUIModel; -import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIModel; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; -import org.nuiton.util.beans.Binder; -import org.nuiton.util.beans.BinderModelBuilder; - -import java.util.List; +import fr.ifremer.tutti.ui.swing.content.operation.fishing.CaracteristicTabUIModel; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -44,7 +33,7 @@ * @author kmorin * @since 0.3 */ -public class HydrologyTabUIModel extends AbstractTuttiTableUIModel<FishingOperation, HydrologyRowModel, HydrologyTabUIModel> { +public class HydrologyTabUIModel extends CaracteristicTabUIModel<HydrologyRowModel, HydrologyTabUIModel> { private static final long serialVersionUID = 1L; @@ -52,66 +41,8 @@ public static final String TITLE = "tutti.label.tab.fishingOperation.hydrology"; - public static final String PROPERTY_REMOVE_CARACTERISTIC_ENABLED = "removeCaracteristicEnabled"; - - public static final String PROPERTY_AVAILABLE_CARACTERISTICS = "availableCaracteristics"; - - protected List<Caracteristic> availableCaracteristics; - - /** - * Fishing operation associated with the caracteristics - * - * @since 0.3 - */ - protected FishingOperation fishingOperation; - - /** - * Can user remove a selected caracteristic? - * - * @since 0.3 - */ - protected boolean removeCaracteristicEnabled; - - protected static final Binder<FishingOperation, HydrologyTabUIModel> fromBeanBinder = BinderModelBuilder.newEmptyBuilder(FishingOperation.class, HydrologyTabUIModel.class) - .toBinder(); - - protected static final Binder<HydrologyTabUIModel, FishingOperation> toBeanBinder = BinderModelBuilder.newEmptyBuilder(HydrologyTabUIModel.class, FishingOperation.class) - .toBinder(); - - public HydrologyTabUIModel() { - super(FishingOperation.class, fromBeanBinder, toBeanBinder); - } - @Override public String getTitle() { return TITLE; } - - public List<Caracteristic> getAvailableCaracteristics() { - return availableCaracteristics; - } - - public void setAvailableCaracteristics(List<Caracteristic> availableCaracteristics) { - Object oldValue = getAvailableCaracteristics(); - this.availableCaracteristics = availableCaracteristics; - firePropertyChange(PROPERTY_AVAILABLE_CARACTERISTICS, oldValue, availableCaracteristics); - } - - public FishingOperation getFishingOperation() { - return fishingOperation; - } - - public void setFishingOperation(FishingOperation fishingOperation) { - this.fishingOperation = fishingOperation; - } - - public boolean isRemoveCaracteristicEnabled() { - return removeCaracteristicEnabled; - } - - public void setRemoveCaracteristicEnabled(boolean removeCaracteristicEnabled) { - Object oldValue = isRemoveCaracteristicEnabled(); - this.removeCaracteristicEnabled = removeCaracteristicEnabled; - firePropertyChange(PROPERTY_REMOVE_CARACTERISTIC_ENABLED, oldValue, removeCaracteristicEnabled); - } } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiTabContainerUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiTabContainerUIHandler.java 2013-01-24 15:34:52 UTC (rev 244) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiTabContainerUIHandler.java 2013-01-28 09:08:49 UTC (rev 245) @@ -113,9 +113,9 @@ int currentIndex = tabPanel.getSelectedIndex(); boolean mustChangeTab = onTabChanged(currentIndex, index); - if (mustChangeTab) { - super.setSelectedIndex(index); - } + if (mustChangeTab) { + super.setSelectedIndex(index); + } } }); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/CaracteristicRow.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/CaracteristicRow.java 2013-01-24 15:34:52 UTC (rev 244) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/CaracteristicRow.java 2013-01-28 09:08:49 UTC (rev 245) @@ -35,33 +35,33 @@ private static final long serialVersionUID = 1L; - protected Caracteristic[] caracteristics; + protected Object[] values; - protected String name; + protected Caracteristic key; - public CaracteristicRow(String name, Caracteristic... caracteristics) { - this.name = name; - this.caracteristics = caracteristics; + public CaracteristicRow(Caracteristic key, Object... values) { + this.key = key; + this.values = values; } - public Caracteristic[] getCaracteristics() { - return caracteristics; + public Object[] getValues() { + return values; } - public void setCaracteristics(Caracteristic... caracteristics) { - this.caracteristics = caracteristics; + public void setValues(Object... values) { + this.values = values; } - public String getName() { - return name; + public Caracteristic getKey() { + return key; } - public void setName(String name) { - this.name = name; + public void setKey(Caracteristic key) { + this.key = key; } @Override public String getLabel() { - return name; + return key.getName(); } } Modified: trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties =================================================================== --- trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-01-24 15:34:52 UTC (rev 244) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-01-28 09:08:49 UTC (rev 245) @@ -96,6 +96,8 @@ tutti.config.ui.shortcut.closePopup=Fermer une popup tutti.config.ui.showNumberEditorButton=Afficher le pavé numérique de saisie tutti.config.ui.useSexagecimalEditor=Utiliser l'éditeur sexagécimal pour entrer des coordonnées +tutti.dialog.askSaveBeforeLeaving.message=Vous avez fait des modifications qu vous n'avez pas enregistrées. Voulez-vous les enregistrer ? +tutti.dialog.askSaveBeforeLeaving.title=Modifications non enregistrées tutti.duration.format=dj Hh m'm' tutti.errorTable.title=Table d'erreurs tutti.file.protocol=Extension d'un fichier de protocole Tutti