Author: kmorin Date: 2012-12-28 17:41:38 +0100 (Fri, 28 Dec 2012) New Revision: 122 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/122 Log: refs ##1810: [PROTOCOLE] Ecran de saisie colonnes des esp?\195?\168ces ordonnables Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesColumnIdentifier.java Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesTableModel.java 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/EditProtocolUIModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/ColumnIdentifier.java Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesColumnIdentifier.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesColumnIdentifier.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesColumnIdentifier.java 2012-12-28 16:41:38 UTC (rev 122) @@ -0,0 +1,35 @@ + +package fr.ifremer.tutti.ui.swing.content.protocol; + +import fr.ifremer.tutti.persistence.entities.protocol.SampleCategoryEnum; +import fr.ifremer.tutti.ui.swing.util.table.ColumnIdentifier; + +/** + * Column identifier containing the SampleCategoryEnum associated to the column + * + * @author kmorin <kmorin@codelutin.com> + * @since 0.3 + */ +public class EditProtocolSpeciesColumnIdentifier extends ColumnIdentifier<EditProtocolSpeciesRowModel> { + + /** SampleCategoryEnum associated to the column. It is used to retain order of the columns */ + protected SampleCategoryEnum sampleCategory; + + protected EditProtocolSpeciesColumnIdentifier(String propertyName, String headerI18nKey, String headerTipI18nKey, SampleCategoryEnum sampleCategory) { + super(propertyName, headerI18nKey, headerTipI18nKey); + this.sampleCategory = sampleCategory; + } + + public static EditProtocolSpeciesColumnIdentifier newId(String propertyName, String headerI18nKey, String headerTipI18nKey, SampleCategoryEnum sampleCategory) { + return new EditProtocolSpeciesColumnIdentifier(propertyName, headerI18nKey, headerTipI18nKey, sampleCategory); + } + + public SampleCategoryEnum getSampleCategory() { + return sampleCategory; + } + + public void setSampleCategory(SampleCategoryEnum sampleCategory) { + this.sampleCategory = sampleCategory; + } + +} Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesTableModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesTableModel.java 2012-12-28 16:35:52 UTC (rev 121) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesTableModel.java 2012-12-28 16:41:38 UTC (rev 122) @@ -24,6 +24,7 @@ * #L% */ +import fr.ifremer.tutti.persistence.entities.protocol.SampleCategoryEnum; import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableModel; import fr.ifremer.tutti.ui.swing.util.table.ColumnIdentifier; import javax.swing.table.TableColumnModel; @@ -37,35 +38,41 @@ */ public class EditProtocolSpeciesTableModel extends AbstractTuttiTableModel<EditProtocolSpeciesRowModel> { - public static final ColumnIdentifier<EditProtocolSpeciesRowModel> SPECIES_ID = ColumnIdentifier.newId( + public static final ColumnIdentifier<EditProtocolSpeciesRowModel> SPECIES_ID = EditProtocolSpeciesColumnIdentifier.newId( EditProtocolSpeciesRowModel.PROPERTY_SPECIES, n_("tutti.table.protocol.species.header.speciesId"), - n_("tutti.table.protocol.species.header.speciesId")); + n_("tutti.table.protocol.species.header.speciesId"), + SampleCategoryEnum.speciesId); - public static final ColumnIdentifier<EditProtocolSpeciesRowModel> SORTED_UNSORTED_ENABLED = ColumnIdentifier.newId( + public static final ColumnIdentifier<EditProtocolSpeciesRowModel> SORTED_UNSORTED_ENABLED = EditProtocolSpeciesColumnIdentifier.newId( EditProtocolSpeciesRowModel.PROPERTY_SORTED_UNSORTED_ENABLED, n_("tutti.table.protocol.species.header.sortedUnsorted"), - n_("tutti.table.protocol.species.header.sortedUnsorted")); + n_("tutti.table.protocol.species.header.sortedUnsorted"), + SampleCategoryEnum.sortedUnsorted); - public static final ColumnIdentifier<EditProtocolSpeciesRowModel> SIZE_CATEGORY_ENABLED = ColumnIdentifier.newId( + public static final ColumnIdentifier<EditProtocolSpeciesRowModel> SIZE_CATEGORY_ENABLED = EditProtocolSpeciesColumnIdentifier.newId( EditProtocolSpeciesRowModel.PROPERTY_SIZE_CATEGORY_ENABLED, n_("tutti.table.protocol.species.header.sizeCategory"), - n_("tutti.table.protocol.species.header.sizeCategory")); + n_("tutti.table.protocol.species.header.sizeCategory"), + SampleCategoryEnum.size); - public static final ColumnIdentifier<EditProtocolSpeciesRowModel> SEX_ENABLED = ColumnIdentifier.newId( + public static final ColumnIdentifier<EditProtocolSpeciesRowModel> SEX_ENABLED = EditProtocolSpeciesColumnIdentifier.newId( EditProtocolSpeciesRowModel.PROPERTY_SEX_ENABLED, n_("tutti.table.protocol.species.header.sex"), - n_("tutti.table.protocol.species.header.sex")); + n_("tutti.table.protocol.species.header.sex"), + SampleCategoryEnum.sex); - public static final ColumnIdentifier<EditProtocolSpeciesRowModel> MATURITY_ENABLED = ColumnIdentifier.newId( + public static final ColumnIdentifier<EditProtocolSpeciesRowModel> MATURITY_ENABLED = EditProtocolSpeciesColumnIdentifier.newId( EditProtocolSpeciesRowModel.PROPERTY_MATURITY_ENABLED, n_("tutti.table.protocol.species.header.maturity"), - n_("tutti.table.protocol.species.header.maturity")); + n_("tutti.table.protocol.species.header.maturity"), + SampleCategoryEnum.maturity); - public static final ColumnIdentifier<EditProtocolSpeciesRowModel> SIZE_FRENQUENCY_PMFM_ID = ColumnIdentifier.newId( + public static final ColumnIdentifier<EditProtocolSpeciesRowModel> SIZE_FRENQUENCY_PMFM_ID = EditProtocolSpeciesColumnIdentifier.newId( EditProtocolSpeciesRowModel.PROPERTY_SIZE_FRENQUENCY_PMFM, n_("tutti.table.protocol.species.header.sizeFrequency"), - n_("tutti.table.protocol.species.header.sizeFrequency")); + n_("tutti.table.protocol.species.header.sizeFrequency"), + SampleCategoryEnum.age); private static final long serialVersionUID = 1L; 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 2012-12-28 16:35:52 UTC (rev 121) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java 2012-12-28 16:41:38 UTC (rev 122) @@ -29,6 +29,7 @@ import com.google.common.collect.Maps; import com.google.common.collect.Multimap; import fr.ifremer.tutti.persistence.entities.TuttiEntities; +import fr.ifremer.tutti.persistence.entities.protocol.SampleCategoryEnum; import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; @@ -37,20 +38,27 @@ import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.ui.swing.TuttiScreen; import fr.ifremer.tutti.ui.swing.TuttiUIContext; +import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolSpeciesColumnIdentifier; import fr.ifremer.tutti.ui.swing.util.HydrologicCaracteristicUtil; import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor; import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableModel; import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIHandler; +import fr.ifremer.tutti.ui.swing.util.table.ColumnIdentifier; import fr.ifremer.tutti.ui.swing.util.table.TableRowModificationListener; import java.util.Collection; import java.util.List; import java.util.Map; import javax.swing.DefaultComboBoxModel; import javax.swing.JComboBox; +import javax.swing.event.ChangeEvent; import javax.swing.event.ListDataEvent; import javax.swing.event.ListDataListener; +import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; +import javax.swing.event.TableColumnModelEvent; +import javax.swing.event.TableColumnModelListener; import javax.swing.table.TableCellRenderer; +import javax.swing.table.TableColumn; import javax.swing.table.TableColumnModel; import jaxx.runtime.swing.editor.bean.BeanDoubleList; import jaxx.runtime.validator.swing.SwingValidatorMessageTableRenderer; @@ -139,51 +147,50 @@ (JXPathDecorator<Caracteristic>) decoratorService.getDecoratorByType(Caracteristic.class); DefaultTableColumnModelExt columnModel = new DefaultTableColumnModelExt(); - { + EditProtocolUIModel model = ui.getModel(); + List<SampleCategoryEnum> sampleOrders = model.getSampleCategoryOrder(); + for (SampleCategoryEnum sampleOrder : sampleOrders) { + switch (sampleOrder) { + case speciesId: + addColumnToModel(columnModel, + null, + newTableCellRender(Species.class), + EditProtocolSpeciesTableModel.SPECIES_ID); + break; + + case sortedUnsorted: + addBooleanColumnToModel(columnModel, + EditProtocolSpeciesTableModel.SORTED_UNSORTED_ENABLED, + table); + break; + + case size: + addBooleanColumnToModel(columnModel, + EditProtocolSpeciesTableModel.SIZE_CATEGORY_ENABLED, + table); + break; - addColumnToModel(columnModel, - null, - newTableCellRender(Species.class), - EditProtocolSpeciesTableModel.SPECIES_ID); - } - - { + case sex: + addBooleanColumnToModel(columnModel, + EditProtocolSpeciesTableModel.SEX_ENABLED, + table); + break; + + case maturity: + addBooleanColumnToModel(columnModel, + EditProtocolSpeciesTableModel.MATURITY_ENABLED, + table); + break; - addBooleanColumnToModel(columnModel, - EditProtocolSpeciesTableModel.SORTED_UNSORTED_ENABLED, - table); + case age: + addComboDataColumnToModel(columnModel, + EditProtocolSpeciesTableModel.SIZE_FRENQUENCY_PMFM_ID, + decorator, + Lists.newArrayList(allLengthStepPmfm.values())); + + } } - - { - addBooleanColumnToModel(columnModel, - EditProtocolSpeciesTableModel.SIZE_CATEGORY_ENABLED, - table); - } - - { - - addBooleanColumnToModel(columnModel, - EditProtocolSpeciesTableModel.SEX_ENABLED, - table); - } - - { - - addBooleanColumnToModel(columnModel, - EditProtocolSpeciesTableModel.MATURITY_ENABLED, - table); - } - - { - - addComboDataColumnToModel(columnModel, - EditProtocolSpeciesTableModel.SIZE_FRENQUENCY_PMFM_ID, - decorator, - Lists.newArrayList(allLengthStepPmfm.values())); - } - - return columnModel; } @@ -196,7 +203,7 @@ if (protocolId == null) { // create new protocol - + if (log.isDebugEnabled()) { log.debug("Will create a new protocol"); } @@ -211,6 +218,7 @@ log.debug("Will edit protocol: " + protocolId); } } + listModelIsModify(model); ui.setContextValue(model); @@ -275,8 +283,31 @@ }); JXTable table = ui.getSpeciesTable(); - TableColumnModel columnModel = createTableColumnModel( + final TableColumnModel columnModel = createTableColumnModel( table.getDefaultRenderer(Object.class)); + columnModel.addColumnModelListener(new TableColumnModelListener() { + + public void columnAdded(TableColumnModelEvent e) { + } + + public void columnRemoved(TableColumnModelEvent e) { + } + + public void columnMoved(TableColumnModelEvent e) { + if (e.getFromIndex() != e.getToIndex()) { + List<SampleCategoryEnum> sampleOrders = getModel().getSampleCategoryOrder(); + SampleCategoryEnum sampleOrder = sampleOrders.remove(e.getFromIndex()); + sampleOrders.add(e.getToIndex(), sampleOrder); + } + } + + public void columnMarginChanged(ChangeEvent e) { + } + + public void columnSelectionChanged(ListSelectionEvent e) { + } + }); + EditProtocolSpeciesTableModel tableModel = new EditProtocolSpeciesTableModel(columnModel); @@ -395,8 +426,10 @@ // split the hydro grouped pmfm List<String> hydroPmfm = bean.getHydrologyPmfmId(); List<String> allIds = Lists.newArrayList(); - for (String id : hydroPmfm) { - allIds.addAll(hydroCaracteristics.get(id)); + if (hydroPmfm != null) { + for (String id : hydroPmfm) { + allIds.addAll(hydroCaracteristics.get(id)); + } } bean.setHydrologyPmfmId(allIds); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java 2012-12-28 16:35:52 UTC (rev 121) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java 2012-12-28 16:41:38 UTC (rev 122) @@ -25,6 +25,7 @@ */ import com.google.common.collect.Lists; +import fr.ifremer.tutti.persistence.entities.protocol.SampleCategoryEnum; import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; @@ -52,6 +53,8 @@ public static final String PROPERTY_HYDROLOGY_PMFM_ID = "hydrologyPmfmId"; public static final String PROPERTY_SPECIES = "species"; + + public static final String PROPERTY_SAMPLE_CATEGORY_ORDER = "sampleCategoryOrder"; protected String name; @@ -65,6 +68,14 @@ protected List<SpeciesProtocol> species; + protected List<SampleCategoryEnum> sampleCategoryOrder = Lists.newArrayList( + SampleCategoryEnum.speciesId, + SampleCategoryEnum.sortedUnsorted, + SampleCategoryEnum.size, + SampleCategoryEnum.sex, + SampleCategoryEnum.maturity, + SampleCategoryEnum.age); + protected static Binder<EditProtocolUIModel, TuttiProtocol> toBeanBinder = BinderFactory.newBinder(EditProtocolUIModel.class, TuttiProtocol.class); @@ -160,4 +171,14 @@ this.species = species; firePropertyChange(PROPERTY_SPECIES, oldValue, species); } + + public List<SampleCategoryEnum> getSampleCategoryOrder() { + return sampleCategoryOrder; + } + + public void setSampleCategoryOrder(List<SampleCategoryEnum> sampleCategoryOrder) { + Object oldValue = getSampleCategoryOrder(); + this.sampleCategoryOrder = sampleCategoryOrder; + firePropertyChange(PROPERTY_SAMPLE_CATEGORY_ORDER, oldValue, sampleCategoryOrder); + } } \ No newline at end of file Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/ColumnIdentifier.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/ColumnIdentifier.java 2012-12-28 16:35:52 UTC (rev 121) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/ColumnIdentifier.java 2012-12-28 16:41:38 UTC (rev 122) @@ -50,7 +50,7 @@ headerTipI18nKey); } - ColumnIdentifier(String propertyName, + protected ColumnIdentifier(String propertyName, String headerI18nKey, String headerTipI18nKey) { this.propertyName = propertyName;