r146 - in trunk/tutti-ui-swing/src/main: java/fr/ifremer/tutti/ui/swing/content/operation java/fr/ifremer/tutti/ui/swing/content/operation/fishing/environment java/fr/ifremer/tutti/ui/swing/content/operation/fishing/gearshooting java/fr/ifremer/tutti/ui/swing/content/operation/fishing/hydrology java/fr/ifremer/tutti/ui/swing/content/protocol resources/i18n
Author: kmorin Date: 2013-01-02 19:51:13 +0100 (Wed, 02 Jan 2013) New Revision: 146 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/146 Log: refs #1810: [PROTOCOLE] Ecrarefs #1812: [Ecran Trait] Tableaux de pmfm - am?\195?\169lioration du code (mod?\195?\168le g?\195?\169r?\195?\169 seulement dans les rows) - possibilit?\195?\169 de supprimer des lignes 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/EditFishingOperationUIModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/environment/EnvironmentTabUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/environment/EnvironmentTabUI.jaxx 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/GearShootingRowModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/gearshooting/GearShootingTabUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/gearshooting/GearShootingTabUI.jaxx 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/HydrologyTabUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/hydrology/HydrologyTabUI.jaxx 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/content/protocol/EditProtocolUIHandler.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/content/operation/EditFishingOperationUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java 2013-01-02 18:17:45 UTC (rev 145) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java 2013-01-02 18:51:13 UTC (rev 146) @@ -25,7 +25,6 @@ */ 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.data.Program; import fr.ifremer.tutti.persistence.entities.referential.FishingOperationLocation; @@ -103,10 +102,7 @@ EditFishingOperationUIModel.PROPERTY_FISHING_OPERATION_VALID, EditFishingOperationUIModel.PROPERTY_LOCATION, EditFishingOperationUIModel.PROPERTY_COMMENT, - EditFishingOperationUIModel.PROPERTY_SAISISSEUR, - EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_CARACTERISTICS, - EditFishingOperationUIModel.PROPERTY_ENVIRONMENT_CARACTERISTICS, - EditFishingOperationUIModel.PROPERTY_HYDROLOGY_CARACTERISTICS); + EditFishingOperationUIModel.PROPERTY_SAISISSEUR); } @Override @@ -239,50 +235,15 @@ GearShootingTabUIModel gearShootingModel = ui.getGearShootingTabContent().getModel(); gearShootingModel.setAvailableCaracteristics(persistenceService.getAllFishingOperationGearCaracteristic()); - gearShootingModel.addPropertyChangeListener( - EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_CARACTERISTICS, - new PropertyChangeListener() { - public void propertyChange(PropertyChangeEvent evt) { - model.setGearShootingCaracteristics((CaracteristicMap) evt.getNewValue()); - } - } - ); - CaracteristicMap gearShootingCaracteristics = model.getGearShootingCaracteristics(); - getModel().setGearShootingCaracteristics(gearShootingCaracteristics); - gearShootingModel.setGearShootingCaracteristics(gearShootingCaracteristics); - //init environment EnvironmentTabUIModel environmentModel = ui.getEnvironmentTabContent().getModel(); environmentModel.setAvailableCaracteristics(persistenceService.getAllFishingOperationEnvironmentCaracteristic()); - environmentModel.addPropertyChangeListener( - EditFishingOperationUIModel.PROPERTY_ENVIRONMENT_CARACTERISTICS, - new PropertyChangeListener() { - public void propertyChange(PropertyChangeEvent evt) { - model.setEnvironmentCaracteristics((CaracteristicMap) evt.getNewValue()); - } - } - ); - CaracteristicMap environmentCaracteristics = model.getEnvironmentCaracteristics(); - getModel().setEnvironmentCaracteristics(environmentCaracteristics); - environmentModel.setEnvironmentCaracteristics(environmentCaracteristics); - //init hydrology HydrologyTabUIModel hydrologyModel = ui.getHydrologyTabContent().getModel(); hydrologyModel.setAvailableCaracteristics(persistenceService.getAllFishingOperationHydrologicCaracteristic()); - hydrologyModel.addPropertyChangeListener( - EditFishingOperationUIModel.PROPERTY_HYDROLOGY_CARACTERISTICS, - new PropertyChangeListener() { - - public void propertyChange(PropertyChangeEvent evt) { - model.setHydrologyCaracteristics((CaracteristicMap) evt.getNewValue()); - } - } - ); - CaracteristicMap hydrologyCaracteristics = model.getHydrologyCaracteristics(); - hydrologyModel.setHydrologyCaracteristics(hydrologyCaracteristics); } @Override @@ -303,7 +264,7 @@ } public void selectFishingOperation(FishingOperation bean) { - + if (fishingOperationMonitor.wasModified()) { // previous fishingOperation was modified, let's save it @@ -387,18 +348,15 @@ //reset gear shooting GearShootingTabUI gearShootingTab = ui.getGearShootingTabContent(); - gearShootingTab.getModel().setGearShootingCaracteristics(model.getGearShootingCaracteristics()); - gearShootingTab.getHandler().reset(); + gearShootingTab.getHandler().reset(bean); //reset environment EnvironmentTabUI environmentTab = ui.getEnvironmentTabContent(); - environmentTab.getModel().setEnvironmentCaracteristics(model.getEnvironmentCaracteristics()); - environmentTab.getHandler().reset(); + environmentTab.getHandler().reset(bean); //reset hydrology HydrologyTabUI hydrologyTab = ui.getHydrologyTabContent(); - hydrologyTab.getModel().setHydrologyCaracteristics(model.getHydrologyCaracteristics()); - hydrologyTab.getHandler().reset(); + hydrologyTab.getHandler().reset(bean); fishingOperationMonitor.clearModified(); } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel.java 2013-01-02 18:17:45 UTC (rev 145) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel.java 2013-01-02 18:51:13 UTC (rev 146) @@ -88,12 +88,6 @@ public static final String PROPERTY_SAISISSEUR = "saisisseur"; - public static final String PROPERTY_GEAR_SHOOTING_CARACTERISTICS = "gearShootingCaracteristics"; - - public static final String PROPERTY_ENVIRONMENT_CARACTERISTICS = "environmentCaracteristics"; - - public static final String PROPERTY_HYDROLOGY_CARACTERISTICS = "hydrologyCaracteristics"; - /** * Flag when there is no fishing operation selected. * @@ -153,12 +147,6 @@ protected List<Person> saisisseur; - protected CaracteristicMap gearShootingCaracteristics; - - protected CaracteristicMap environmentCaracteristics; - - protected CaracteristicMap hydrologyCaracteristics; - protected FishingOperation fishingOperation; protected static Binder<EditFishingOperationUIModel, FishingOperation> toBeanBinder = @@ -386,34 +374,4 @@ protected FishingOperation newEntity() { return fishingOperation; } - - public CaracteristicMap getGearShootingCaracteristics() { - return gearShootingCaracteristics; - } - - public void setGearShootingCaracteristics(CaracteristicMap gearShootingParameters) { - Object oldValue = getGearShootingCaracteristics(); - this.gearShootingCaracteristics = gearShootingParameters; - firePropertyChange(PROPERTY_GEAR_SHOOTING_CARACTERISTICS, oldValue, gearShootingParameters); - } - - public CaracteristicMap getEnvironmentCaracteristics() { - return environmentCaracteristics; - } - - public void setEnvironmentCaracteristics(CaracteristicMap environmentParameters) { - Object oldValue = getEnvironmentCaracteristics(); - this.environmentCaracteristics = environmentParameters; - firePropertyChange(PROPERTY_ENVIRONMENT_CARACTERISTICS, oldValue, environmentParameters); - } - - public CaracteristicMap getHydrologyCaracteristics() { - return hydrologyCaracteristics; - } - - public void setHydrologyCaracteristics(CaracteristicMap hydrologyParameters) { - Object oldValue = getHydrologyCaracteristics(); - this.hydrologyCaracteristics = hydrologyParameters; - firePropertyChange(PROPERTY_HYDROLOGY_CARACTERISTICS, oldValue, hydrologyParameters); - } } \ No newline at end of file Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/environment/EnvironmentTabUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/environment/EnvironmentTabUI.css 2013-01-02 18:17:45 UTC (rev 145) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/environment/EnvironmentTabUI.css 2013-01-02 18:51:13 UTC (rev 146) @@ -42,4 +42,15 @@ selectionBackground: {null}; selectionForeground: {Color.BLACK}; sortable: false; +} + +#tablePopup { + label: "tutti.title.batchActions"; +} + +#removeCaracteristicMenu { + text: "tutti.action.removeCaracteristic"; + mnemonic: R; + actionIcon: batch-delete; + enabled: {model.isRemoveCaracteristicEnabled()}; } \ No newline at end of file Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/environment/EnvironmentTabUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/environment/EnvironmentTabUI.jaxx 2013-01-02 18:17:45 UTC (rev 145) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/environment/EnvironmentTabUI.jaxx 2013-01-02 18:51:13 UTC (rev 146) @@ -26,7 +26,7 @@ <import> fr.ifremer.tutti.ui.swing.content.operation.EditFishingOperationUI - fr.ifremer.tutti.ui.swing.util.table.CaracteristicRow + fr.ifremer.tutti.persistence.entities.referential.Caracteristic jaxx.runtime.swing.editor.bean.BeanComboBox @@ -42,10 +42,15 @@ <EnvironmentTabUIModel id='model' initializer='getContextValue(EnvironmentTabUIModel.class)'/> + <JPopupMenu id='tablePopup'> + <JMenuItem id='removeCaracteristicMenu' + onActionPerformed='handler.removeCaracteristic()'/> + </JPopupMenu> + <row fill='both'> <cell fill='both' weightx='1'> <BeanComboBox id='newRowKey' constructorParams='this' - genericType='CaracteristicRow'/> + genericType='Caracteristic'/> </cell> <cell fill='both'> <JButton id='addRow' onActionPerformed='handler.addRow()'/> @@ -54,7 +59,8 @@ <row fill='both' weighty='1'> <cell fill='both' columns='2'> <JScrollPane> - <JXTable id='environmentTable'/> + <JXTable id='environmentTable' + onMouseClicked='handler.autoSelectRowInTable(event, tablePopup)'/> </JScrollPane> </cell> </row> 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-02 18:17:45 UTC (rev 145) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/environment/EnvironmentTabUIHandler.java 2013-01-02 18:51:13 UTC (rev 146) @@ -24,8 +24,11 @@ * #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.referential.Caracteristic; import fr.ifremer.tutti.ui.swing.content.operation.EditFishingOperationUI; import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor; @@ -33,15 +36,14 @@ import fr.ifremer.tutti.ui.swing.util.editor.CaracteristicValueRenderer; import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIHandler; import fr.ifremer.tutti.ui.swing.util.table.CaracteristicRow; +import java.util.Collection; +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.Collection; -import java.util.List; - /** * @author kmorin * @since 0.3 @@ -97,7 +99,26 @@ @Override protected void saveSelectedRowIfRequired(TuttiBeanMonitor<EnvironmentRowModel> rowMonitor, EnvironmentRowModel row) { -// getModel().setCaracteristic(row.getKey(), row.getValue()); + 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"); + } + + showInformationMessage( + "[ Trait - Environnement ] " + + "Sauvegarde des modifications de " + row + "."); + + saveRow(row); + + // clear modified flag on the monitor + rowMonitor.clearModified(); + } + } } //------------------------------------------------------------------------// @@ -120,7 +141,7 @@ initUI(ui); initBeanComboBox(ui.getNewRowKey(), - Lists.<CaracteristicRow>newArrayList(), null); + Lists.<Caracteristic>newArrayList(), null); JXTable table = getTable(); @@ -158,6 +179,16 @@ 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 --// @@ -165,32 +196,36 @@ /** Adds a row with the parameter selected in the combo box */ public void addRow() { - BeanComboBox<CaracteristicRow> keyCombo = ui.getNewRowKey(); - CaracteristicRow selectedItem = (CaracteristicRow) keyCombo.getSelectedItem(); - Caracteristic caracteristic = selectedItem.getCaracteristics()[0]; + BeanComboBox<Caracteristic> keyCombo = ui.getNewRowKey(); + Caracteristic selectedItem = (Caracteristic) keyCombo.getSelectedItem(); + EnvironmentRowModel row = getTableModel().createNewRow(); - row.setKey(caracteristic); + row.setKey(selectedItem); getTableModel().addNewRow(row); -// getModel().setCaracteristic(caracteristic, null); + + EnvironmentTableModel tableModel = getTableModel(); + int rowIndex = tableModel.getRowCount() - 1; + tableModel.fireTableRowsInserted(rowIndex, rowIndex); keyCombo.removeItem(selectedItem); selectFirstInCombo(keyCombo); } /** Resets the table with the data from the database */ - public void reset() { + public void reset(FishingOperation fishingOperation) { EnvironmentTableModel tableModel = getTableModel(); - EnvironmentTabUIModel model = getModel(); + model.setFishingOperation(fishingOperation); - CaracteristicMap environmentCaracteristics = model.getEnvironmentCaracteristics(); + CaracteristicMap environmentCaracteristics = fishingOperation.getEnvironmentCaracteristics(); if (environmentCaracteristics == null) { environmentCaracteristics = new CaracteristicMap(); } List<EnvironmentRowModel> rows = Lists.newArrayList(); Collection<Caracteristic> caracteristics = environmentCaracteristics.keySet(); - for (Caracteristic key : environmentCaracteristics.keySet()) { + + for (Caracteristic key : caracteristics) { EnvironmentRowModel newRow = tableModel.createNewRow(); newRow.setKey(key); newRow.setValue(environmentCaracteristics.get(key)); @@ -199,16 +234,70 @@ model.setRows(rows); - List<CaracteristicRow> caracteristicList = Lists.newArrayList(); + List<Caracteristic> caracteristicList = Lists.newArrayList(); for (Caracteristic caracteristic : model.getAvailableCaracteristics()) { if (!caracteristics.contains(caracteristic)) { - CaracteristicRow row = new CaracteristicRow(caracteristic.getName(), caracteristic); - caracteristicList.add(row); + caracteristicList.add(caracteristic); } } ui.getNewRowKey().setData(caracteristicList); selectFirstInCombo(ui.getNewRowKey()); } + + 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); + + fishingOperation.getEnvironmentCaracteristics().remove(row.getKey()); + + if (TuttiEntities.isNew(fishingOperation)) { + + fishingOperation = persistenceService.createFishingOperation(fishingOperation); + } else { + persistenceService.saveFishingOperation(fishingOperation); + } + + //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); + + } + + //------------------------------------------------------------------------// + //-- Protected methods --// + //------------------------------------------------------------------------// + + protected void saveRow(EnvironmentRowModel row) { + + FishingOperation fishingOperation = getModel().getFishingOperation(); + Preconditions.checkNotNull(fishingOperation); + + if (fishingOperation.getEnvironmentCaracteristics() == null) { + fishingOperation.setEnvironmentCaracteristics(new CaracteristicMap()); + } + fishingOperation.getEnvironmentCaracteristics().put(row.getKey(), row.getValue()); + + if (TuttiEntities.isNew(fishingOperation)) { + + fishingOperation = persistenceService.createFishingOperation(fishingOperation); + } else { + persistenceService.saveFishingOperation(fishingOperation); + } + } } 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-02 18:17:45 UTC (rev 145) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/environment/EnvironmentTabUIModel.java 2013-01-02 18:51:13 UTC (rev 146) @@ -42,10 +42,24 @@ public class EnvironmentTabUIModel extends AbstractTuttiTableUIModel<FishingOperation, EnvironmentRowModel, EnvironmentTabUIModel> { private static final long serialVersionUID = 1L; + + public static final String PROPERTY_REMOVE_CARACTERISTIC_ENABLED = "removeCaracteristicEnabled"; - protected CaracteristicMap environmentCaracteristics = new CaracteristicMap(); - 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(); @@ -57,28 +71,29 @@ super(FishingOperation.class, fromBeanBinder, toBeanBinder); } - public CaracteristicMap getEnvironmentCaracteristics() { - return environmentCaracteristics; + public List<Caracteristic> getAvailableCaracteristics() { + return availableCaracteristics; } - public void setEnvironmentCaracteristics(CaracteristicMap environmentCaracteristics) { - if (environmentCaracteristics == null) { - environmentCaracteristics = new CaracteristicMap(); - } - this.environmentCaracteristics = environmentCaracteristics; + public void setAvailableCaracteristics(List<Caracteristic> caracteristics) { + availableCaracteristics = caracteristics; } - public void setCaracteristic(Caracteristic caracteristic, Serializable value) { - Object oldValue = environmentCaracteristics.clone(); - environmentCaracteristics.put(caracteristic, value); - firePropertyChange(EditFishingOperationUIModel.PROPERTY_ENVIRONMENT_CARACTERISTICS, oldValue, environmentCaracteristics); + public FishingOperation getFishingOperation() { + return fishingOperation; } - public List<Caracteristic> getAvailableCaracteristics() { - return availableCaracteristics; + public void setFishingOperation(FishingOperation fishingOperation) { + this.fishingOperation = fishingOperation; } + + public boolean isRemoveCaracteristicEnabled() { + return removeCaracteristicEnabled; + } - public void setAvailableCaracteristics(List<Caracteristic> caracteristics) { - availableCaracteristics = caracteristics; + 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/gearshooting/GearShootingRowModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/gearshooting/GearShootingRowModel.java 2013-01-02 18:17:45 UTC (rev 145) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/gearshooting/GearShootingRowModel.java 2013-01-02 18:51:13 UTC (rev 146) @@ -27,11 +27,10 @@ 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.nuiton.util.beans.Binder; import org.nuiton.util.beans.BinderFactory; -import java.io.Serializable; - /** * @author kmorin * @since 0.3 Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/gearshooting/GearShootingTabUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/gearshooting/GearShootingTabUI.css 2013-01-02 18:17:45 UTC (rev 145) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/gearshooting/GearShootingTabUI.css 2013-01-02 18:51:13 UTC (rev 146) @@ -42,4 +42,15 @@ selectionBackground: {null}; selectionForeground: {Color.BLACK}; sortable: false; +} + +#tablePopup { + label: "tutti.title.batchActions"; +} + +#removeCaracteristicMenu { + text: "tutti.action.removeCaracteristic"; + mnemonic: R; + actionIcon: batch-delete; + enabled: {model.isRemoveCaracteristicEnabled()}; } \ No newline at end of file Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/gearshooting/GearShootingTabUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/gearshooting/GearShootingTabUI.jaxx 2013-01-02 18:17:45 UTC (rev 145) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/gearshooting/GearShootingTabUI.jaxx 2013-01-02 18:51:13 UTC (rev 146) @@ -26,7 +26,7 @@ <import> fr.ifremer.tutti.ui.swing.content.operation.EditFishingOperationUI - fr.ifremer.tutti.ui.swing.util.table.CaracteristicRow + fr.ifremer.tutti.persistence.entities.referential.Caracteristic jaxx.runtime.swing.editor.bean.BeanComboBox org.jdesktop.swingx.JXTable @@ -40,10 +40,15 @@ <GearShootingTabUIModel id='model' initializer='getContextValue(GearShootingTabUIModel.class)'/> + <JPopupMenu id='tablePopup'> + <JMenuItem id='removeCaracteristicMenu' + onActionPerformed='handler.removeCaracteristic()'/> + </JPopupMenu> + <row fill='both'> <cell fill='both' weightx='1'> <BeanComboBox id='newRowKey' constructorParams='this' - genericType='CaracteristicRow'/> + genericType='Caracteristic'/> </cell> <cell fill='both'> <JButton id='addRow' actionIcon='add' @@ -53,7 +58,8 @@ <row fill='both' weighty='1'> <cell fill='both' columns='2'> <JScrollPane> - <JXTable id='gearShootingTable'/> + <JXTable id='gearShootingTable' + onMouseClicked='handler.autoSelectRowInTable(event, tablePopup)'/> </JScrollPane> </cell> </row> 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-02 18:17:45 UTC (rev 145) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/gearshooting/GearShootingTabUIHandler.java 2013-01-02 18:51:13 UTC (rev 146) @@ -24,10 +24,18 @@ * #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.data.SpeciesBatch; +import fr.ifremer.tutti.persistence.entities.data.SpeciesBatchFrequency; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.ui.swing.content.operation.EditFishingOperationUI; +import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchRowModel; +import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyRowModel; +import fr.ifremer.tutti.ui.swing.content.operation.fishing.environment.EnvironmentRowModel; import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor; import fr.ifremer.tutti.ui.swing.util.editor.CaracteristicValueEditor; import fr.ifremer.tutti.ui.swing.util.editor.CaracteristicValueRenderer; @@ -40,6 +48,7 @@ import org.jdesktop.swingx.table.DefaultTableColumnModelExt; import java.util.Collection; +import java.util.Collections; import java.util.List; /** @@ -98,8 +107,26 @@ protected void saveSelectedRowIfRequired(TuttiBeanMonitor<GearShootingRowModel> rowMonitor, GearShootingRowModel row) { - //TODO Check row was modified and is valid ? - getModel().setCaracteristic(row.getKey(), row.getValue()); + 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"); + } + + showInformationMessage( + "[ Trait - Engin ] " + + "Sauvegarde des modifications de " + row + "."); + + saveRow(row); + + // clear modified flag on the monitor + rowMonitor.clearModified(); + } + } } //------------------------------------------------------------------------// @@ -122,7 +149,7 @@ initUI(ui); initBeanComboBox(ui.getNewRowKey(), - Lists.<CaracteristicRow>newArrayList(), null); + Lists.<Caracteristic>newArrayList(), null); JXTable table = getTable(); @@ -162,6 +189,16 @@ 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 --// @@ -169,50 +206,108 @@ /** Adds a row with the parameter selected in the combo box */ public void addRow() { - BeanComboBox<CaracteristicRow> keyCombo = ui.getNewRowKey(); - CaracteristicRow selectedItem = (CaracteristicRow) keyCombo.getSelectedItem(); - Caracteristic caracteristic = selectedItem.getCaracteristics()[0]; + BeanComboBox<Caracteristic> keyCombo = ui.getNewRowKey(); + Caracteristic selectedItem = (Caracteristic) keyCombo.getSelectedItem(); + GearShootingRowModel row = getTableModel().createNewRow(); - row.setKey(caracteristic); - getTableModel().addNewRow(row); - getModel().setCaracteristic(caracteristic, null); + row.setKey(selectedItem); + getModel().getRows().add(row); + + GearShootingTableModel tableModel = getTableModel(); + int rowIndex = tableModel.getRowCount() - 1; + tableModel.fireTableRowsInserted(rowIndex, rowIndex); keyCombo.removeItem(selectedItem); selectFirstInCombo(keyCombo); } /** Resets the table with the data from the database */ - public void reset() { + public void reset(FishingOperation fishingOperation) { GearShootingTableModel tableModel = getTableModel(); GearShootingTabUIModel model = getModel(); + model.setFishingOperation(fishingOperation); - CaracteristicMap gearShootingCaracteristics = model.getGearShootingCaracteristics(); + CaracteristicMap gearShootingCaracteristics = fishingOperation.getGearShootingCaracteristics(); if (gearShootingCaracteristics == null) { gearShootingCaracteristics = new CaracteristicMap(); } - + List<GearShootingRowModel> rows = Lists.newArrayList(); Collection<Caracteristic> caracteristics = gearShootingCaracteristics.keySet(); - for (Caracteristic key : gearShootingCaracteristics.keySet()) { + + for (Caracteristic key : caracteristics) { GearShootingRowModel newRow = tableModel.createNewRow(); newRow.setKey(key); newRow.setValue(gearShootingCaracteristics.get(key)); rows.add(newRow); } - model.setRows(rows); - List<CaracteristicRow> caracteristicList = Lists.newArrayList(); + List<Caracteristic> caracteristicList = Lists.newArrayList(); for (Caracteristic caracteristic : model.getAvailableCaracteristics()) { if (!caracteristics.contains(caracteristic)) { - CaracteristicRow row = new CaracteristicRow(caracteristic.getName(), caracteristic); - caracteristicList.add(row); + caracteristicList.add(caracteristic); } } ui.getNewRowKey().setData(caracteristicList); selectFirstInCombo(ui.getNewRowKey()); } + + public void removeCaracteristic() { + int rowIndex = getTable().getSelectedRow(); + Preconditions.checkState(rowIndex != -1, + "Cant remove caracteristic if no caracteristic selected"); + + GearShootingRowModel row = getTableModel().getEntry(rowIndex); + + FishingOperation fishingOperation = getModel().getFishingOperation(); + Preconditions.checkNotNull(fishingOperation); + + fishingOperation.getGearShootingCaracteristics().remove(row.getKey()); + + if (TuttiEntities.isNew(fishingOperation)) { + + fishingOperation = persistenceService.createFishingOperation(fishingOperation); + } else { + persistenceService.saveFishingOperation(fishingOperation); + } + + //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); + + } + + //------------------------------------------------------------------------// + //-- Protected methods --// + //------------------------------------------------------------------------// + + protected void saveRow(GearShootingRowModel row) { + + FishingOperation fishingOperation = getModel().getFishingOperation(); + Preconditions.checkNotNull(fishingOperation); + + if (fishingOperation.getGearShootingCaracteristics() == null) { + fishingOperation.setGearShootingCaracteristics(new CaracteristicMap()); + } + fishingOperation.getGearShootingCaracteristics().put(row.getKey(), row.getValue()); + + if (TuttiEntities.isNew(fishingOperation)) { + + fishingOperation = persistenceService.createFishingOperation(fishingOperation); + } else { + persistenceService.saveFishingOperation(fishingOperation); + } + } + } 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-02 18:17:45 UTC (rev 145) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/gearshooting/GearShootingTabUIModel.java 2013-01-02 18:51:13 UTC (rev 146) @@ -35,6 +35,8 @@ import java.io.Serializable; import java.util.List; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; /** @@ -44,10 +46,26 @@ public class GearShootingTabUIModel extends AbstractTuttiTableUIModel<FishingOperation, GearShootingRowModel, GearShootingTabUIModel> { private static final long serialVersionUID = 1L; - - protected CaracteristicMap gearShootingCaracteristics = new CaracteristicMap(); - + + private static final Log log = LogFactory.getLog(GearShootingTabUIModel.class); + + 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(); @@ -59,28 +77,30 @@ super(FishingOperation.class, fromBeanBinder, toBeanBinder); } - public CaracteristicMap getGearShootingCaracteristics() { - return gearShootingCaracteristics; + public List<Caracteristic> getAvailableCaracteristics() { + return availableCaracteristics; } - public void setGearShootingCaracteristics(CaracteristicMap gearShootingCaracteristics) { - if (gearShootingCaracteristics == null) { - gearShootingCaracteristics = new CaracteristicMap(); - } - this.gearShootingCaracteristics = gearShootingCaracteristics; + public void setAvailableCaracteristics(List<Caracteristic> availableCaracteristics) { + this.availableCaracteristics = availableCaracteristics; } - - public void setCaracteristic(Caracteristic caracteristic, Serializable value) { - Object oldValue = Maps.newLinkedHashMap(gearShootingCaracteristics); - gearShootingCaracteristics.put(caracteristic, value); - firePropertyChange(EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_CARACTERISTICS, oldValue, gearShootingCaracteristics); + + public FishingOperation getFishingOperation() { + return fishingOperation; } - public List<Caracteristic> getAvailableCaracteristics() { - return availableCaracteristics; + public void setFishingOperation(FishingOperation fishingOperation) { + this.fishingOperation = fishingOperation; } + + public boolean isRemoveCaracteristicEnabled() { + return removeCaracteristicEnabled; + } - public void setAvailableCaracteristics(List<Caracteristic> availableCaracteristics) { - this.availableCaracteristics = availableCaracteristics; + 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/HydrologyTabUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/hydrology/HydrologyTabUI.css 2013-01-02 18:17:45 UTC (rev 145) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/hydrology/HydrologyTabUI.css 2013-01-02 18:51:13 UTC (rev 146) @@ -42,4 +42,15 @@ selectionBackground: {null}; selectionForeground: {Color.BLACK}; sortable: false; +} + +#tablePopup { + label: "tutti.title.batchActions"; +} + +#removeCaracteristicMenu { + text: "tutti.action.removeCaracteristic"; + mnemonic: R; + actionIcon: batch-delete; + enabled: {model.isRemoveCaracteristicEnabled()}; } \ No newline at end of file Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/hydrology/HydrologyTabUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/hydrology/HydrologyTabUI.jaxx 2013-01-02 18:17:45 UTC (rev 145) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/hydrology/HydrologyTabUI.jaxx 2013-01-02 18:51:13 UTC (rev 146) @@ -42,7 +42,11 @@ <HydrologyTabUIModel id='model' initializer='getContextValue(HydrologyTabUIModel.class)'/> - + <JPopupMenu id='tablePopup'> + <JMenuItem id='removeCaracteristicMenu' + onActionPerformed='handler.removeCaracteristic()'/> + </JPopupMenu> + <row fill='both'> <cell fill='both' weightx='1'> <BeanComboBox id='newRowKey' constructorParams='this' @@ -55,7 +59,8 @@ <row fill='both' weighty='1'> <cell fill='both' columns='2'> <JScrollPane> - <JXTable id='hydrologyTable'/> + <JXTable id='hydrologyTable' + onMouseClicked='handler.autoSelectRowInTable(event, tablePopup)'/> </JScrollPane> </cell> </row> 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-02 18:17:45 UTC (rev 145) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/hydrology/HydrologyTabUIHandler.java 2013-01-02 18:51:13 UTC (rev 146) @@ -24,18 +24,23 @@ * #L% */ +import com.google.common.base.Preconditions; import com.google.common.collect.Lists; import com.google.common.collect.Maps; 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.referential.Caracteristic; import fr.ifremer.tutti.ui.swing.content.operation.EditFishingOperationUI; import fr.ifremer.tutti.ui.swing.content.operation.fishing.environment.EnvironmentRowModel; +import fr.ifremer.tutti.ui.swing.content.operation.fishing.gearshooting.GearShootingRowModel; 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.editor.CaracteristicValueEditor; import fr.ifremer.tutti.ui.swing.util.editor.CaracteristicValueRenderer; import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIHandler; +import fr.ifremer.tutti.ui.swing.util.table.CaracteristicRow; import jaxx.runtime.swing.editor.bean.BeanComboBox; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -114,24 +119,26 @@ protected void saveSelectedRowIfRequired(TuttiBeanMonitor<HydrologyRowModel> rowMonitor, HydrologyRowModel row) { - Map<Type, Caracteristic> caracteristics = - availableCaracteristics.get(row.getKey()); - CaracteristicMap map = new CaracteristicMap(); - for (Type type : caracteristics.keySet()) { - Serializable value = null; - switch (type) { - case START: - value = row.getGearShootingStartValue(); - break; - case END: - value = row.getGearShootingEndValue(); - break; - case AVERAGE: - value = row.getAverageValue(); + 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"); + } + + showInformationMessage( + "[ Trait - Hydro ] " + + "Sauvegarde des modifications de " + row + "."); + + saveRow(row); + + // clear modified flag on the monitor + rowMonitor.clearModified(); } - map.put(caracteristics.get(type), value); } - getModel().addCaracteristics(map); } //------------------------------------------------------------------------// @@ -231,6 +238,16 @@ } } + @Override + protected void onAfterSelectedRowChanged(int oldRowIndex, + HydrologyRowModel oldRow, + int newRowIndex, + HydrologyRowModel newRow) { + + super.onAfterSelectedRowChanged(oldRowIndex, oldRow, newRowIndex, newRow); + getModel().setRemoveCaracteristicEnabled(newRow != null); + } + //------------------------------------------------------------------------// //-- Public methods --// //------------------------------------------------------------------------// @@ -238,32 +255,33 @@ /** Adds a row with the parameter selected in the combo box */ public void addRow() { BeanComboBox<Caracteristic> keyCombo = ui.getNewRowKey(); - Caracteristic key = (Caracteristic) keyCombo.getSelectedItem(); + Caracteristic selectedItem = (Caracteristic) keyCombo.getSelectedItem(); + HydrologyRowModel row = getTableModel().createNewRow(); - row.setKey(key); - getTableModel().addNewRow(row); + row.setKey(selectedItem); + getModel().getRows().add(row); + + HydrologyTableModel tableModel = getTableModel(); + int rowIndex = tableModel.getRowCount() - 1; + tableModel.fireTableRowsInserted(rowIndex, rowIndex); - Map<Type, Caracteristic> caracteristics = availableCaracteristics.get(key); - CaracteristicMap map = new CaracteristicMap(); - for (Caracteristic caracteristic : caracteristics.values()) { - map.put(caracteristic, null); - } - getModel().addCaracteristics(map); - - keyCombo.removeItem(key); + keyCombo.removeItem(selectedItem); selectFirstInCombo(keyCombo); } /** Resets the table with the data from the database */ - public void reset() { - + public void reset(FishingOperation fishingOperation) { HydrologyTableModel tableModel = getTableModel(); - - CaracteristicMap hydrologyCaracteristics = getModel().getHydrologyCaracteristics(); - + HydrologyTabUIModel model = getModel(); + model.setFishingOperation(fishingOperation); + + CaracteristicMap hydrologyCaracteristics = fishingOperation.getHydrologyCaracteristics(); + if (hydrologyCaracteristics == null) { + hydrologyCaracteristics = new CaracteristicMap(); + } + List<HydrologyRowModel> rows = Lists.newArrayList(); List<Caracteristic> caracteristicList = Lists.newArrayList(); - Collection<Caracteristic> selectedCaracteristics = hydrologyCaracteristics.keySet(); Set<Caracteristic> globalCaracteristics = availableCaracteristics.keySet(); @@ -289,10 +307,85 @@ } } - getModel().setRows(rows); + model.setRows(rows); ui.getNewRowKey().setData(caracteristicList); selectFirstInCombo(ui.getNewRowKey()); } + + public void removeCaracteristic() { + int rowIndex = getTable().getSelectedRow(); + Preconditions.checkState(rowIndex != -1, + "Cant remove caracteristic if no caracteristic selected"); + + HydrologyRowModel row = getTableModel().getEntry(rowIndex); + + FishingOperation fishingOperation = getModel().getFishingOperation(); + Preconditions.checkNotNull(fishingOperation); + + Map<Type, Caracteristic> caracteristics = availableCaracteristics.get(row.getKey()); + for (Type type : caracteristics.keySet()) { + Caracteristic caracteristic = caracteristics.get(type); + fishingOperation.getHydrologyCaracteristics().remove(caracteristic); + } + + if (TuttiEntities.isNew(fishingOperation)) { + + fishingOperation = persistenceService.createFishingOperation(fishingOperation); + } else { + persistenceService.saveFishingOperation(fishingOperation); + } + + //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); + + } + + //------------------------------------------------------------------------// + //-- Protected methods --// + //------------------------------------------------------------------------// + + protected void saveRow(HydrologyRowModel row) { + + FishingOperation fishingOperation = getModel().getFishingOperation(); + Preconditions.checkNotNull(fishingOperation); + + if (fishingOperation.getHydrologyCaracteristics() == null) { + fishingOperation.setHydrologyCaracteristics(new CaracteristicMap()); + } + Map<Type, Caracteristic> caracteristics = availableCaracteristics.get(row.getKey()); + CaracteristicMap map = new CaracteristicMap(); + for (Type type : caracteristics.keySet()) { + Serializable value = null; + switch (type) { + case START: + value = row.getGearShootingStartValue(); + break; + case END: + value = row.getGearShootingEndValue(); + break; + case AVERAGE: + value = row.getAverageValue(); + } + map.put(caracteristics.get(type), value); + } + fishingOperation.getHydrologyCaracteristics().putAll(map); + + if (TuttiEntities.isNew(fishingOperation)) { + + fishingOperation = persistenceService.createFishingOperation(fishingOperation); + } else { + persistenceService.saveFishingOperation(fishingOperation); + } + } + } 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-02 18:17:45 UTC (rev 145) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/hydrology/HydrologyTabUIModel.java 2013-01-02 18:51:13 UTC (rev 146) @@ -44,12 +44,26 @@ private static final long serialVersionUID = 1L; + public static final String PROPERTY_REMOVE_CARACTERISTIC_ENABLED = "removeCaracteristicEnabled"; + public static final String PROPERTY_AVAILABLE_CARACTERISTICS = "availableCaracteristics"; - protected CaracteristicMap hydrologyCaracteristics = new CaracteristicMap(); - 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(); @@ -60,23 +74,6 @@ super(FishingOperation.class, fromBeanBinder, toBeanBinder); } - public CaracteristicMap getHydrologyCaracteristics() { - return hydrologyCaracteristics; - } - - public void setHydrologyCaracteristics(CaracteristicMap hydrologyCaracteristics) { - if (hydrologyCaracteristics == null) { - hydrologyCaracteristics = new CaracteristicMap(); - } - this.hydrologyCaracteristics = hydrologyCaracteristics; - } - - public void addCaracteristics(CaracteristicMap caracteristics) { - Object oldValue = Maps.newLinkedHashMap(hydrologyCaracteristics); - hydrologyCaracteristics.putAll(caracteristics); - firePropertyChange(EditFishingOperationUIModel.PROPERTY_HYDROLOGY_CARACTERISTICS, oldValue, hydrologyCaracteristics); - } - public List<Caracteristic> getAvailableCaracteristics() { return availableCaracteristics; } @@ -86,4 +83,22 @@ 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/content/protocol/EditProtocolUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java 2013-01-02 18:17:45 UTC (rev 145) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java 2013-01-02 18:51:13 UTC (rev 146) @@ -436,12 +436,12 @@ // getModel().setModify(true); } + /** Removes a species */ public void removeSpecies() { - //TODO int rowIndex = getTable().getSelectedRow(); Preconditions.checkState(rowIndex != -1, - "Cant remove sub batch if no batch selected"); + "Cant remove species if no species selected"); // remove the row from the model getModel().getRows().remove(rowIndex); 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-02 18:17:45 UTC (rev 145) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-01-02 18:51:13 UTC (rev 146) @@ -23,6 +23,7 @@ tutti.action.reload.actions=Recharger les actions tutti.action.reload.application=Recharger l'application tutti.action.reload.ui=Recharger l'interface graphique +tutti.action.removeCaracteristic=Supprimer la caractéristique tutti.action.removeSpecies=Supprimer l'espèce tutti.action.removeSpeciesSubBatch=Supprimer les lots tutti.action.reset.fishingOperationValidState=Réinitialiser @@ -184,6 +185,7 @@ tutti.table.benthos.batch.header.speciesByGenusCode=Espèce tutti.table.benthos.batch.header.toConfirm=A Confirmer tutti.table.benthos.batch.header.weight=Poids +tutti.table.fishing.caracteristic.header.key= tutti.table.fishing.environment.header.key=Clé tutti.table.fishing.environment.header.value=Valeur tutti.table.fishing.gearShooting.header.key=Clé
participants (1)
-
kmorin@users.forge.codelutin.com