From kmorin@users.forge.codelutin.com Tue Dec 18 14:07:34 2012 From: kmorin@users.forge.codelutin.com To: tutti-commits@list.forge.codelutin.com Subject: [Tutti-commits] r87 - in trunk/tutti-ui-swing/src/main: java/fr/ifremer/tutti/ui/swing/content/operation java/fr/ifremer/tutti/ui/swing/content/operation/fishing java/fr/ifremer/tutti/ui/swing/content/operation/species java/fr/ifremer/tutti/ui/swing/util/editor resources/i18n Date: Tue, 18 Dec 2012 14:07:34 +0100 Message-ID: <20121218130734.9613F15A95@nuiton.codelutin.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============9183711150791901465==" --===============9183711150791901465== Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Author: kmorin Date: 2012-12-18 14:07:34 +0100 (Tue, 18 Dec 2012) New Revision: 87 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/87 Log: - use a table instead of a form in the environment tab - keep the ofcus on the table after exiting an editor Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/opera= tion/fishing/ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/opera= tion/fishing/EnvironmentRowModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/opera= tion/fishing/EnvironmentTabUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/opera= tion/fishing/EnvironmentTabUI.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/opera= tion/fishing/EnvironmentTabUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/opera= tion/fishing/EnvironmentTabUIModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/opera= tion/fishing/EnvironmentTableModel.java Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/opera= tion/FishingOperationTabUI.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/opera= tion/FishingOperationTabUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/opera= tion/species/FrequencyCellComponent.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/editor/A= ttachmentCellComponent.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/editor/A= ttachmentEditorUI.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/editor/A= ttachmentEditorUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/editor/L= ongTextCellComponent.java trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properti= es Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/conten= t/operation/FishingOperationTabUI.jaxx =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/oper= ation/FishingOperationTabUI.jaxx 2012-12-18 10:50:00 UTC (rev 86) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/oper= ation/FishingOperationTabUI.jaxx 2012-12-18 13:07:34 UTC (rev 87) @@ -32,6 +32,7 @@ fr.ifremer.tutti.persistence.entities.referential.Person =20 fr.ifremer.tutti.ui.swing.util.editor.SimpleTimeEditor + fr.ifremer.tutti.ui.swing.content.operation.fishing.EnvironmentTabUI =20 jaxx.runtime.swing.editor.bean.BeanComboBox jaxx.runtime.swing.editor.bean.BeanListHeader @@ -43,6 +44,7 @@ jaxx.runtime.validator.swing.SwingValidatorMessageTableModel =20 org.jdesktop.swingx.JXDatePicker + org.jdesktop.swingx.JXTable =20 java.awt.Dimension =20 @@ -386,9 +388,10 @@ =20 - + + + Beaufort scale=20 @@ -399,7 +402,7 @@ =20 - + Wind direction=20 @@ -409,7 +412,7 @@ =20 - + Sea state @@ -419,7 +422,7 @@ genericType=3D'SeaState'/> -
+ -->
=20 { + =20 + public static final String PROPERTY_KEY =3D "key"; + public static final String PROPERTY_VALUE =3D "value"; + =20 + protected static final Binder fromBeanBinde= r =3D + BinderFactory.newBinder(Object.class, + EnvironmentRowModel.class); + + protected static final Binder toBeanBinder = =3D + BinderFactory.newBinder(EnvironmentRowModel.class, + Object.class); + =20 + protected String key; + =20 + protected String value; + + public EnvironmentRowModel() { + super(Object.class, fromBeanBinder, toBeanBinder); + } + =20 + public EnvironmentRowModel(String key) { + this(); + this.key =3D key; + } +// +// public FishingOperationEnvironmentRowModel(Object o, +// List frequencies) { +// this(); +// fromBean(aBatch); +// List frequencyRows =3D +// SpeciesFrequencyRowModel.fromBeans(frequencies); +// frequency.addAll(frequencyRows); +// Collections.sort(frequency); +// updateTotalFromFrequencies(); +// } + + public String getKey() { + return key; + } + + public void setKey(String key) { + Object oldValue =3D getKey(); + this.key =3D key; + firePropertyChange(PROPERTY_KEY, oldValue, key); + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + Object oldValue =3D getValue(); + this.value =3D value; + firePropertyChange(PROPERTY_VALUE, oldValue, value); + } + =20 +} Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/o= peration/fishing/EnvironmentTabUI.css =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/oper= ation/fishing/EnvironmentTabUI.css (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/oper= ation/fishing/EnvironmentTabUI.css 2012-12-18 13:07:34 UTC (rev 87) @@ -0,0 +1,6 @@ +#environmentTable { + selectionMode: {ListSelectionModel.SINGLE_SELECTION}; + selectionBackground: {null}; + selectionForeground: {Color.BLACK}; + sortable: false; +} \ No newline at end of file Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/o= peration/fishing/EnvironmentTabUI.jaxx =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/oper= ation/fishing/EnvironmentTabUI.jaxx (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/oper= ation/fishing/EnvironmentTabUI.jaxx 2012-12-18 13:07:34 UTC (rev 87) @@ -0,0 +1,46 @@ + + =20 + + org.jdesktop.swingx.JXTable + fr.ifremer.tutti.ui.swing.content.operation.FishingOperationTabUI + javax.swing.ListSelectionModel + java.awt.Color + + =20 + + + + =20 + + + + + + + + + + + + + + + + + =20 +
\ No newline at end of file Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/o= peration/fishing/EnvironmentTabUIHandler.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/oper= ation/fishing/EnvironmentTabUIHandler.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/oper= ation/fishing/EnvironmentTabUIHandler.java 2012-12-18 13:07:34 UTC (rev 87) @@ -0,0 +1,170 @@ +package fr.ifremer.tutti.ui.swing.content.operation.fishing; + +import com.google.common.collect.Lists; +import fr.ifremer.tutti.ui.swing.content.operation.FishingOperationTabUI; +import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableModel; +import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIHandler; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; +import java.util.List; +import java.util.logging.Logger; +import javax.swing.DefaultComboBoxModel; +import javax.swing.JComboBox; +import javax.swing.event.ListDataEvent; +import javax.swing.event.ListDataListener; +import javax.swing.plaf.basic.BasicComboBoxUI.ListDataHandler; +import javax.swing.table.TableColumnModel; +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 EnvironmentTabUIHandler extends AbstractTuttiTableUIHandler { + + private final static Log log =3D LogFactory.getLog(EnvironmentTabUIHandl= er.class); + =20 + protected EnvironmentTabUI ui; + =20 + public EnvironmentTabUIHandler(FishingOperationTabUI parentUi, Environme= ntTabUI ui) { + super(parentUi.getHandler().getContext()); + this.ui =3D ui; + } + =20 + @Override + protected JXTable getTable() { + return ui.getEnvironmentTable(); + } + + @Override + protected AbstractTuttiTableModel getTableModel() { + return (EnvironmentTableModel) getTable().getModel(); + } + + @Override + protected TableColumnModel createTableColumnModel() { + DefaultTableColumnModelExt columnModel =3D + new DefaultTableColumnModelExt(); + + { + + addColumnToModel(columnModel, EnvironmentTableModel.KEY); + } + =20 + { + + addColumnToModel(columnModel, EnvironmentTableModel.VALUE); + } + + + return columnModel; + } + + @Override + protected void onRowModified(EnvironmentRowModel row, String propertyNam= e, Object oldValue, Object newValue) { + } + + @Override + protected void onRowValidStateChanged(EnvironmentRowModel row, Boolean o= ldValue, Boolean newValue) { + } + + @Override + protected void onRowModifyStateChanged(EnvironmentRowModel row, Boolean = oldValue, Boolean newValue) { + } + + @Override + public void beforeInitUI() { + EnvironmentTabUIModel model =3D new EnvironmentTabUIModel(); + ui.setContextValue(model); + } + + @Override + public void afterInitUI() { + initUI(ui); + =20 + JXTable table =3D getTable(); + + // create table column model + TableColumnModel columnModel =3D createTableColumnModel(); + + // create table model + EnvironmentTableModel tableModel =3D + new EnvironmentTableModel(columnModel); + + table.setModel(tableModel); + table.setColumnModel(columnModel); + =20 + final JComboBox keyCombo =3D ui.getNewRowKey(); + keyCombo.setModel(new DefaultComboBoxModel()); + =20 + keyCombo.addItemListener(new ItemListener() { + + public void itemStateChanged(ItemEvent e) { + log.debug("item state changed " + e.paramString()); + } + }); + keyCombo.getModel().addListDataListener(new ListDataListener() { + + public void intervalAdded(ListDataEvent e) { + keyCombo.setEnabled(true); + ui.getAddRow().setEnabled(true); + } + + public void intervalRemoved(ListDataEvent e) { + if (keyCombo.getItemCount() =3D=3D 0) { + keyCombo.setEnabled(false); + ui.getAddRow().setEnabled(false); + } + } + + public void contentsChanged(ListDataEvent e) { + keyCombo.setEnabled(true); + ui.getAddRow().setEnabled(true); + } + }); + =20 + reset(); + } + =20 + @Override + public void onCloseUI() { + } + + @Override + protected EnvironmentTabUIModel getModel() { + return ui.getModel(); + } + =20 + public void addRow() { + JComboBox keyCombo =3D ui.getNewRowKey(); + String key =3D (String) keyCombo.getSelectedItem(); + EnvironmentRowModel row =3D new EnvironmentRowModel(key); + getTableModel().addNewRow(getTable().getRowCount(), row); + =20 + keyCombo.removeItem(key); + } + =20 + public void reset() { + List rows =3D Lists.newArrayList(); + List defaultKeys =3D Lists.newArrayList(ui.getModel().getDef= aultKeys()); + for (String key : defaultKeys) { + rows.add(new EnvironmentRowModel(key)); + } + =20 + AbstractTuttiTableModel tableModel =3D getTable= Model(); + tableModel.setRows(rows); + =20 + JComboBox keyCombo =3D ui.getNewRowKey(); + DefaultComboBoxModel keyComboModel =3D (DefaultComboBoxModel)keyComb= o.getModel(); + for (String key : ui.getModel().getKeys()) { + if (!defaultKeys.contains(key)) { + keyComboModel.addElement(key); + } + } + } + =20 +} Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/o= peration/fishing/EnvironmentTabUIModel.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/oper= ation/fishing/EnvironmentTabUIModel.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/oper= ation/fishing/EnvironmentTabUIModel.java 2012-12-18 13:07:34 UTC (rev 87) @@ -0,0 +1,59 @@ +package fr.ifremer.tutti.ui.swing.content.operation.fishing; + +import fr.ifremer.tutti.persistence.entities.data.FishingOperation; +import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIModel; +import org.nuiton.util.beans.Binder; +import org.nuiton.util.beans.BinderModelBuilder; + +import static org.nuiton.i18n.I18n._; + +/** + * + * @author kmorin + */ +public class EnvironmentTabUIModel extends AbstractTuttiTableUIModel { + =20 + protected FishingOperation fishingOperation; + =20 + public static final String KEY_BEAUFORT_SCALE =3D "beaufortScale"; + public static final String KEY_WIND_DIRECTION =3D "windDirection"; + public static final String KEY_SEA_STATE =3D "seaState"; + =20 + protected static final Binder f= romBeanBinder =3D BinderModelBuilder.newEmptyBuilder(FishingOperation.class, = EnvironmentTabUIModel.class) + .toBinder(); + + protected static final Binder t= oBeanBinder =3D BinderModelBuilder.newEmptyBuilder(EnvironmentTabUIModel.clas= s, FishingOperation.class) + .toBinder(); + + public EnvironmentTabUIModel() { + super(FishingOperation.class, fromBeanBinder, toBeanBinder); + } + =20 + public FishingOperation getFishingOperation() { + return fishingOperation; + } + + public void setFishingOperation(FishingOperation fishingOperation) { + this.fishingOperation =3D fishingOperation; + } + =20 + public String[] getKeys() { + return new String[] { + _("tutti.table.fishing.environment.keys." + KEY_BEAUFORT_SCALE), + _("tutti.table.fishing.environment.keys." + KEY_WIND_DIRECTION), + _("tutti.table.fishing.environment.keys." + KEY_SEA_STATE), + _("tutti.table.fishing.environment.keys." + "key3"), + _("tutti.table.fishing.environment.keys." + "key4"), + _("tutti.table.fishing.environment.keys." + "key5") + }; + } + =20 + public String[] getDefaultKeys() { + return new String[] { + _("tutti.table.fishing.environment.keys." + KEY_BEAUFORT_SCALE), + _("tutti.table.fishing.environment.keys." + KEY_WIND_DIRECTION), + _("tutti.table.fishing.environment.keys." + KEY_SEA_STATE) + }; + } + =20 +} Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/o= peration/fishing/EnvironmentTableModel.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/oper= ation/fishing/EnvironmentTableModel.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/oper= ation/fishing/EnvironmentTableModel.java 2012-12-18 13:07:34 UTC (rev 87) @@ -0,0 +1,38 @@ +package fr.ifremer.tutti.ui.swing.content.operation.fishing; + +import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableModel; +import fr.ifremer.tutti.ui.swing.util.table.ColumnIdentifier; +import javax.swing.table.TableColumnModel; + +import static org.nuiton.i18n.I18n.n_; + +/** + * + * @author kmorin + * since 0.3 + */ +public class EnvironmentTableModel extends AbstractTuttiTableModel { + + public static final ColumnIdentifier KEY =3D Column= Identifier.newId( + EnvironmentRowModel.PROPERTY_KEY, + n_("tutti.table.fishing.environment.header.key"), + n_("tutti.table.fishing.environment.header.key")); + =20 + public static final ColumnIdentifier VALUE =3D Colu= mnIdentifier.newId( + EnvironmentRowModel.PROPERTY_VALUE, + n_("tutti.table.fishing.environment.header.value"), + n_("tutti.table.fishing.environment.header.value")); + =20 + public EnvironmentTableModel(TableColumnModel columnModel) { + super(columnModel); + + setNoneEditableCols(KEY); + } + =20 + @Override + protected EnvironmentRowModel createNewRow() { + EnvironmentRowModel result =3D new EnvironmentRowModel(); + return result; + } + =20 +} Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/conten= t/operation/species/FrequencyCellComponent.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/oper= ation/species/FrequencyCellComponent.java 2012-12-18 10:50:00 UTC (rev 86) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/oper= ation/species/FrequencyCellComponent.java 2012-12-18 13:07:34 UTC (rev 87) @@ -158,6 +158,7 @@ =20 // reselect this cell AbstractSelectTableAction.doSelectCell(table, r, c); + table.requestFocus(); } =20 @Override Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/e= ditor/AttachmentCellComponent.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/editor/= AttachmentCellComponent.java 2012-12-18 10:50:00 UTC (rev 86) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/editor/= AttachmentCellComponent.java 2012-12-18 13:07:34 UTC (rev 87) @@ -193,6 +193,7 @@ =20 // reselect this cell AbstractSelectTableAction.doSelectCell(table, r, c); + table.requestFocus(); } =20 @Override Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/e= ditor/AttachmentEditorUI.jaxx =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/editor/= AttachmentEditorUI.jaxx 2012-12-18 10:50:00 UTC (rev 86) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/editor/= AttachmentEditorUI.jaxx 2012-12-18 13:07:34 UTC (rev 87) @@ -26,6 +26,7 @@ fr.ifremer.tutti.ui.swing.AbstractTuttiBeanUIModel fr.ifremer.tutti.persistence.entities.data.Attachment + jaxx.runtime.swing.editor.FileEditor =20 @@ -40,8 +41,6 @@ =20 =20 - - @@ -52,8 +51,7 @@ - +