This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository tutti. See http://git.codelutin.com/tutti.git commit 9a93ee20a06ae570cea3cf8e43637b06968e000e Author: Tony CHEMIT <chemit@codelutin.com> Date: Thu Jan 14 22:57:42 2016 +0100 Début de l'éditeur des relations RTP, mais tout ne fonctionne pas encore.. (See #6115) --- .../protocol/EditProtocolSpeciesRowModel.java | 74 ++++++++++- .../protocol/EditProtocolSpeciesTableModel.java | 5 + .../ui/swing/content/protocol/EditProtocolUI.jaxx | 3 + .../content/protocol/EditProtocolUIHandler.java | 11 ++ .../ui/swing/content/protocol/rtp/RtpButton.java | 74 +++++++++++ .../swing/content/protocol/rtp/RtpCellEditor.java | 101 ++++++++++++++ .../content/protocol/rtp/RtpCellRenderer.java | 91 +++++++++++++ .../ui/swing/content/protocol/rtp/RtpEditorUI.css | 111 ++++++++++++++++ .../ui/swing/content/protocol/rtp/RtpEditorUI.jaxx | 148 +++++++++++++++++++++ .../content/protocol/rtp/RtpEditorUIHandler.java | 85 ++++++++++++ .../content/protocol/rtp/RtpEditorUIModel.java | 126 ++++++++++++++++++ .../protocol/rtp/actions/CancelRtpAction.java | 23 ++++ .../protocol/rtp/actions/SaveRtpAction.java | 36 +++++ .../resources/i18n/tutti-ui-swing_en_GB.properties | 41 ++++++ .../resources/i18n/tutti-ui-swing_fr_FR.properties | 28 ++++ 15 files changed, 955 insertions(+), 2 deletions(-) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesRowModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesRowModel.java index 3585692..505d2a3 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesRowModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesRowModel.java @@ -22,6 +22,7 @@ package fr.ifremer.tutti.ui.swing.content.protocol; * #L% */ +import fr.ifremer.tutti.persistence.entities.protocol.Rtp; import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol; import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocols; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; @@ -53,6 +54,8 @@ public class EditProtocolSpeciesRowModel extends AbstractTuttiBeanUIModel<Specie public static final String PROPERTY_CALCIFY_SAMPLE_ENABLED = "calcifySampleEnabled"; + public static final String PROPERTY_USE_RTP = "useRtp"; + protected Species species; protected String speciesSurveyCode; @@ -67,13 +70,19 @@ public class EditProtocolSpeciesRowModel extends AbstractTuttiBeanUIModel<Specie protected List<Integer> mandatorySampleCategoryId; + protected Rtp rtpMale; + + protected Rtp rtpFemale; + + protected Rtp rtpUndefined; + protected static final Binder<SpeciesProtocol, EditProtocolSpeciesRowModel> fromBeanBinder = BinderFactory.newBinder(SpeciesProtocol.class, - EditProtocolSpeciesRowModel.class); + EditProtocolSpeciesRowModel.class); protected static final Binder<EditProtocolSpeciesRowModel, SpeciesProtocol> toBeanBinder = BinderFactory.newBinder(EditProtocolSpeciesRowModel.class, - SpeciesProtocol.class); + SpeciesProtocol.class); public EditProtocolSpeciesRowModel() { super(fromBeanBinder, toBeanBinder); @@ -248,4 +257,65 @@ public class EditProtocolSpeciesRowModel extends AbstractTuttiBeanUIModel<Specie this.mandatorySampleCategoryId = mandatorySampleCategoryId; firePropertyChange(PROPERTY_MANDATORY_SAMPLE_CATEGORY_ID, null, mandatorySampleCategoryId); } + + public boolean isUseRtp() { + return withRtpFemale() && withRtpMale() && withRtpUndefined(); + } + + public void setUseRtp(boolean useRtp) { +// Object oldValue = isUseRtp(); +// this.useRtp = useRtp; + // Normalement pas utilisé + firePropertyChange(PROPERTY_USE_RTP, null, useRtp); + } + + @Override + public Rtp getRtpMale() { + return rtpMale; + } + + @Override + public void setRtpMale(Rtp rtpMale) { + Object oldValue = getRtpMale(); + this.rtpMale = rtpMale; + firePropertyChange(PROPERTY_RTP_MALE, oldValue, rtpMale); + } + + @Override + public Rtp getRtpFemale() { + return rtpFemale; + } + + @Override + public void setRtpFemale(Rtp rtpFemale) { + Object oldValue = getRtpFemale(); + this.rtpFemale = rtpFemale; + firePropertyChange(PROPERTY_RTP_FEMALE, oldValue, rtpFemale); + } + + @Override + public Rtp getRtpUndefined() { + return rtpUndefined; + } + + public void setRtpUndefined(Rtp rtpUndefined) { + Object oldValue = getRtpUndefined(); + this.rtpUndefined = rtpUndefined; + firePropertyChange(PROPERTY_RTP_UNDEFINED, oldValue, rtpUndefined); + } + + @Override + public boolean withRtpMale() { + return rtpMale != null; + } + + @Override + public boolean withRtpFemale() { + return rtpFemale != null; + } + + @Override + public boolean withRtpUndefined() { + return rtpUndefined != null; + } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesTableModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesTableModel.java index 56020d9..e1aae83 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesTableModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesTableModel.java @@ -69,6 +69,11 @@ public class EditProtocolSpeciesTableModel extends AbstractApplicationTableModel n("tutti.editProtocol.table.header.calcifySample"), n("tutti.editProtocol.table.header.calcifySample.tip")); + public static final ColumnIdentifier<EditProtocolSpeciesRowModel> USE_RTP = ColumnIdentifier.newId( + EditProtocolSpeciesRowModel.PROPERTY_USE_RTP, + n("tutti.editProtocol.table.header.useRtp"), + n("tutti.editProtocol.table.header.useRtp.tip")); + protected final SampleCategoryModel sampleCategoryModel; private static final long serialVersionUID = 1L; diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.jaxx b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.jaxx index eaf6be8..5dd2e0d 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.jaxx +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.jaxx @@ -27,6 +27,7 @@ fr.ifremer.tutti.persistence.entities.referential.Species fr.ifremer.tutti.ui.swing.TuttiHelpBroker + fr.ifremer.tutti.ui.swing.content.protocol.rtp.RtpEditorUI fr.ifremer.tutti.ui.swing.util.TuttiUI fr.ifremer.tutti.ui.swing.util.TuttiUIUtil @@ -57,6 +58,8 @@ <TuttiHelpBroker id='broker' constructorParams='"tutti.editProtocol.help"'/> + <RtpEditorUI id='rtpEditorUI' constructorParams='this'/> + <BeanValidator id='validator' bean='model' uiClass='jaxx.runtime.validator.swing.ui.ImageValidationUI'> <field name='name' component='nameField'/> diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java index 0292e00..4b21d16 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java @@ -49,6 +49,8 @@ import fr.ifremer.tutti.ui.swing.content.home.actions.CloneProtocolAction; import fr.ifremer.tutti.ui.swing.content.home.actions.EditProtocolAction; import fr.ifremer.tutti.ui.swing.content.home.actions.ImportProtocolAction; import fr.ifremer.tutti.ui.swing.content.operation.catches.SpeciesAbleBatchRowHelper; +import fr.ifremer.tutti.ui.swing.content.protocol.rtp.RtpCellEditor; +import fr.ifremer.tutti.ui.swing.content.protocol.rtp.RtpCellRenderer; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; import jaxx.runtime.SwingUtil; import jaxx.runtime.swing.editor.bean.BeanDoubleList; @@ -383,6 +385,10 @@ public class EditProtocolUIHandler extends AbstractTuttiUIHandler<EditProtocolUI } addBooleanColumnToModel(columnModel, EditProtocolSpeciesTableModel.CALCIFY_SAMPLE_ENABLED, table); + addColumnToModel(columnModel, + RtpCellEditor.newEditor(ui), + new RtpCellRenderer(), + EditProtocolSpeciesTableModel.USE_RTP); initTable(table, columnModel, @@ -444,6 +450,11 @@ public class EditProtocolUIHandler extends AbstractTuttiUIHandler<EditProtocolUI addBooleanColumnToModel(columnModel, EditProtocolSpeciesTableModel.CALCIFY_SAMPLE_ENABLED, table); + addColumnToModel(columnModel, + RtpCellEditor.newEditor(ui), + new RtpCellRenderer(), + EditProtocolSpeciesTableModel.USE_RTP); + initTable(table, columnModel, speciesColumn, diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/rtp/RtpButton.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/rtp/RtpButton.java new file mode 100644 index 0000000..6a016dc --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/rtp/RtpButton.java @@ -0,0 +1,74 @@ +package fr.ifremer.tutti.ui.swing.content.protocol.rtp; + +import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolSpeciesRowModel; +import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUI; +import jaxx.runtime.SwingUtil; + +import javax.swing.JToggleButton; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 14/01/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class RtpButton extends JToggleButton { + + private static final long serialVersionUID = 1L; + + protected final RtpEditorUI popup; + + public RtpButton(final EditProtocolUI ui) { + + setIcon(SwingUtil.createActionIcon("edit-attachment")); + setText(t("tutti.editRtp.button")); + setToolTipText(t("tutti.editRtp.button.tip")); + + popup = ui.getRtpEditorUI(); + + popup.addWindowListener(new WindowAdapter() { + + @Override + public void windowOpened(WindowEvent e) { + setSelected(true); + } + + @Override + public void windowClosing(WindowEvent e) { + setSelected(false); + } + + @Override + public void windowClosed(WindowEvent e) { + + setSelected(false); + } + }); + + addChangeListener(new ChangeListener() { + @Override + public void stateChanged(ChangeEvent e) { + if (isSelected()) { + if (!popup.isVisible()) { + SwingUtil.center(ui, popup); + popup.openEditor(); + } + } +// else { +// popup.closeEditor(); +// } + } + }); + + } + + public void init(EditProtocolSpeciesRowModel model) { + popup.setBean(model); + } + +} \ No newline at end of file diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/rtp/RtpCellEditor.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/rtp/RtpCellEditor.java new file mode 100644 index 0000000..0044160 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/rtp/RtpCellEditor.java @@ -0,0 +1,101 @@ +package fr.ifremer.tutti.ui.swing.content.protocol.rtp; + +import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolSpeciesRowModel; +import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolSpeciesTableModel; +import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUI; + +import javax.swing.AbstractCellEditor; +import javax.swing.JTable; +import javax.swing.border.LineBorder; +import javax.swing.event.CellEditorListener; +import javax.swing.event.ChangeEvent; +import javax.swing.table.TableCellEditor; +import java.awt.Color; +import java.awt.Component; +import java.util.EventObject; + +/** + * Created on 14/01/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class RtpCellEditor extends AbstractCellEditor implements TableCellEditor { + + private static final long serialVersionUID = 1L; + + public static TableCellEditor newEditor(EditProtocolUI ui) { + return new RtpCellEditor(ui); + } + + protected JTable table; + + protected EditProtocolSpeciesTableModel tableModel; + + protected Integer rowIndex; + + protected Integer columnIndex; + + protected final RtpButton editorButton; + + public RtpCellEditor(EditProtocolUI context) { + + this.editorButton = new RtpButton(context); + this.editorButton.setBorder(new LineBorder(Color.BLACK)); + addCellEditorListener(new CellEditorListener() { + @Override + public void editingStopped(ChangeEvent e) { + editorButton.setSelected(false); + } + + @Override + public void editingCanceled(ChangeEvent e) { + editorButton.setSelected(false); + } + }); + } + + @Override + public Component getTableCellEditorComponent(JTable table, + Object value, + boolean isSelected, + int row, + int column) { + this.table = table; + this.tableModel = (EditProtocolSpeciesTableModel) table.getModel(); + + rowIndex = row; + columnIndex = column; + + EditProtocolSpeciesRowModel model = tableModel.getEntry(row); + + editorButton.init(model); + + return editorButton; + } + + @Override + public boolean shouldSelectCell(EventObject anEvent) { + return false; + } + + @Override + public Object getCellEditorValue() { + + return true; + } + +// @Override +// public boolean stopCellEditing() { +// boolean b = super.stopCellEditing(); +// if (b) { +// editorButton.setBean(null); +// } +// return b; +// } +// +// @Override +// public void cancelCellEditing() { +// editorButton.setBean(null); +// super.cancelCellEditing(); +// } +} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/rtp/RtpCellRenderer.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/rtp/RtpCellRenderer.java new file mode 100644 index 0000000..a924aef --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/rtp/RtpCellRenderer.java @@ -0,0 +1,91 @@ +package fr.ifremer.tutti.ui.swing.content.protocol.rtp; + +import jaxx.runtime.SwingUtil; + +import javax.swing.JComponent; +import javax.swing.JTable; +import javax.swing.UIManager; +import javax.swing.table.DefaultTableCellRenderer; +import java.awt.Color; +import java.awt.Font; + +import static org.nuiton.i18n.I18n.n; +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 14/01/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class RtpCellRenderer extends DefaultTableCellRenderer { + + public static final String TEXT_PATTERN = "<html><body>%s</body></html>"; + + private static final long serialVersionUID = 1L; + + private final String withoutRtp; + + private final String withRtp; + + private Font defaulfFont; + + private Font selectedFont; + + public RtpCellRenderer() { + setHorizontalAlignment(CENTER); + setIcon(SwingUtil.createActionIcon("edit-attachment")); + this.withoutRtp = n("tutti.editRtp.withoutRtp.tip"); + this.withRtp = n("tutti.editRtp.withRtp.tip"); + } + + @Override + protected void setValue(Object value) { + // do nothing + } + + @Override + public JComponent getTableCellRendererComponent(JTable table, + Object value, + boolean isSelected, + boolean hasFocus, + int row, + int column) { + + if (defaulfFont == null) { + defaulfFont = UIManager.getFont("Table.font"); + selectedFont = defaulfFont.deriveFont(Font.BOLD); + } + + boolean useRtp = (boolean) value; + + String toolTipTextValue; + String textValue; + if (!useRtp) { + + // use HTML to show the tooltip in italic + toolTipTextValue = "<i>" + t(withoutRtp) + "</i>"; + textValue = t(withoutRtp); + + + } else { + toolTipTextValue = t(withRtp); + textValue = t(withRtp); + + } + boolean editable = table.isCellEditable(row, column); + toolTipTextValue = String.format(TEXT_PATTERN, toolTipTextValue); + setEnabled(editable); + setText(textValue); + setToolTipText(toolTipTextValue); + setBackground(null); + setForeground(Color.BLACK); + + if (isSelected) { + setFont(selectedFont); + } else { + setFont(defaulfFont); + } + + return this; + } +} \ No newline at end of file diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/rtp/RtpEditorUI.css b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/rtp/RtpEditorUI.css new file mode 100644 index 0000000..f266278 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/rtp/RtpEditorUI.css @@ -0,0 +1,111 @@ + +NumberEditor { + autoPopup: {handler.getConfig().isAutoPopupNumberEditor()}; + showPopupButton: {handler.getConfig().isShowNumberEditorButton()}; + bean: {model}; + showReset: true; + numberType: {Float.class}; + _selectOnFocus: {true}; +} + +#rtpEditorDialog { + undecorated: true; + alwaysOnTop: true; +} + +#rtpMaleALabel { + text: "tutti.editRtp.field.rtpMaleA"; + toolTipText: "tutti.editRtp.field.rtpMaleA.tip"; + labelFor: {rtpMaleAField}; + _help: {"tutti.editRtp.field.rtpMaleA.help"}; +} + +#rtpMaleAField { + property:{RtpEditorUIModel.PROPERTY_RTP_MALE_A}; + numberValue: {model.getRtpMale().getA()};; + _help: {"tutti.editRtp.field.rtpMaleA.help"}; +} + +#rtpMaleBLabel { + text: "tutti.editRtp.field.rtpMaleB"; + toolTipText: "tutti.editRtp.field.rtpMaleB.tip"; + labelFor: {rtpMaleBField}; + _help: {"tutti.editRtp.field.rtpMaleB.help"}; +} + +#rtpMaleBField { + property:{RtpEditorUIModel.PROPERTY_RTP_MALE_B}; + numberValue: {model.getRtpMale().getB()};; + _help: {"tutti.editRtp.field.rtpMaleB.help"}; +} + +#rtpFemaleALabel { + text: "tutti.editRtp.field.rtpFemaleA"; + toolTipText: "tutti.editRtp.field.rtpFemaleA.tip"; + labelFor: {rtpFemaleAField}; + _help: {"tutti.editRtp.field.rtpFemaleA.help"}; +} + +#rtpFemaleAField { + property:{RtpEditorUIModel.PROPERTY_RTP_FEMALE_A}; + numberValue: {model.getRtpFemale().getA()};; + _help: {"tutti.editRtp.field.rtpFemaleA.help"}; +} + +#rtpFemaleBLabel { + text: "tutti.editRtp.field.rtpFemaleB"; + toolTipText: "tutti.editRtp.field.rtpFemaleB.tip"; + labelFor: {rtpFemaleBField}; + _help: {"tutti.editRtp.field.rtpFemaleB.help"}; +} + +#rtpFemaleBField { + property:{RtpEditorUIModel.PROPERTY_RTP_FEMALE_B}; + numberValue: {model.getRtpFemale().getB()};; + _help: {"tutti.editRtp.field.rtpFemaleB.help"}; +} + +#rtpUndefinedALabel { + text: "tutti.editRtp.field.rtpUndefinedA"; + toolTipText: "tutti.editRtp.field.rtpUndefinedA.tip"; + labelFor: {rtpUndefinedAField}; + _help: {"tutti.editRtp.field.rtpUndefinedA.help"}; +} + +#rtpUndefinedAField { + property:{RtpEditorUIModel.PROPERTY_RTP_UNDEFINED_A}; + numberValue: {model.getRtpUndefined().getA()};; + _help: {"tutti.editRtp.field.rtpUndefinedA.help"}; +} + +#rtpUndefinedBLabel { + text: "tutti.editRtp.field.rtpUndefinedB"; + toolTipText: "tutti.editRtp.field.rtpUndefinedB.tip"; + labelFor: {rtpUndefinedBField}; + _help: {"tutti.editRtp.field.rtpUndefinedB.help"}; +} + +#rtpUndefinedBField { + property:{RtpEditorUIModel.PROPERTY_RTP_UNDEFINED_B}; + numberValue: {model.getRtpUndefined().getB()};; + _help: {"tutti.editRtp.field.rtpUndefinedB.help"}; +} + +#saveButton { + actionIcon: save; + text: "tutti.editRtp.action.save"; + toolTipText: "tutti.editRtp.action.save.tip"; + i18nMnemonic: "tutti.editRtp.action.save.mnemonic"; + enabled: {model.isModify() && model.isValid()}; + _simpleAction: {fr.ifremer.tutti.ui.swing.content.protocol.rtp.actions.SaveRtpAction.class}; + _help: {"tutti.editRtp.action.save.help"}; +} + +#cancelButton { + actionIcon: cancel; + text: "tutti.editRtp.action.cancel"; + toolTipText: "tutti.editRtp.action.cancel.tip"; + i18nMnemonic: "tutti.editRtp.action.cancel.mnemonic"; + _simpleAction: {fr.ifremer.tutti.ui.swing.content.protocol.rtp.actions.CancelRtpAction.class}; + _help: {"tutti.editRtp.action.cancel.help"}; +} \ No newline at end of file diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/rtp/RtpEditorUI.jaxx b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/rtp/RtpEditorUI.jaxx new file mode 100644 index 0000000..9324c25 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/rtp/RtpEditorUI.jaxx @@ -0,0 +1,148 @@ +<!-- + #%L + Tutti :: UI + %% + Copyright (C) 2012 - 2014 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% + --> +<JDialog id='rtpEditorDialog' layout='{new BorderLayout()}' modal="true" + implements='fr.ifremer.tutti.ui.swing.util.TuttiUI<RtpEditorUIModel, RtpEditorUIHandler>'> + + <import> + + fr.ifremer.tutti.ui.swing.TuttiHelpBroker + fr.ifremer.tutti.ui.swing.TuttiUIContext + fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolSpeciesRowModel + fr.ifremer.tutti.ui.swing.util.TuttiUI + fr.ifremer.tutti.ui.swing.util.TuttiUIUtil + + org.jdesktop.swingx.JXTitledPanel + org.nuiton.jaxx.widgets.number.NumberEditor + + javax.swing.JComponent + </import> + + <script><![CDATA[ + +public RtpEditorUI(TuttiUI<?,?> parentUI) { + super(parentUI.getHandler().getContext().getMainUI()); + TuttiUIUtil.setParentUI(this, parentUI); +} + +public void setBean(EditProtocolSpeciesRowModel bean) { handler.setBean(bean); } + +public void openEditor() { handler.openEditor(); } + +public void closeEditor() { handler.closeEditor(); } + + ]]></script> + + <RtpEditorUIModel id="model" initializer='getContextValue(RtpEditorUIModel.class)'/> + + <TuttiHelpBroker id='broker' constructorParams='"tutti.editRtp.help"'/> + + <BeanValidator id='validator' bean='model' uiClass='jaxx.runtime.validator.swing.ui.ImageValidationUI'> + <field name='rtpMaleA' component='rtpMaleAField'/> + <field name='rtpMaleB' component='rtpMaleBField'/> + <field name='rtpFemaleA' component='rtpFemaleAField'/> + <field name='rtpFemaleB' component='rtpFemaleBField'/> + <field name='rtpUndefinedA' component='rtpUndefinedAField'/> + <field name='rtpUndefinedB' component='rtpUndefinedBField'/> + </BeanValidator> + + <JXTitledPanel id="bodyPanel" constraints='BorderLayout.NORTH'> + <JPanel layout="{new GridLayout(3, 1)}"> + <JPanel id="malePanel" layout="{new GridLayout(1, 2)}" border='{new TitledBorder(t("tutti.editRtp.malePanel"))}'> + <Table id='maleAPanel' fill='both'> + <row> + <cell> + <JLabel id='rtpMaleALabel'/> + </cell> + <cell weightx='1'> + <NumberEditor id='rtpMaleAField'/> + </cell> + </row> + </Table> + <Table id='maleBPanel' fill='both'> + <row> + <cell> + <JLabel id='rtpMaleBLabel'/> + </cell> + <cell weightx='1'> + <NumberEditor id='rtpMaleBField'/> + </cell> + </row> + </Table> + </JPanel> + + <JPanel id="femalePanel" layout="{new GridLayout(1, 2)}" + border='{new TitledBorder(t("tutti.editRtp.femalePanel"))}'> + <Table id='femaleAPanel' fill='both'> + <row> + <cell> + <JLabel id='rtpFemaleALabel'/> + </cell> + <cell weightx='1'> + <NumberEditor id='rtpFemaleAField'/> + </cell> + </row> + </Table> + <Table id='femaleBPanel' fill='both'> + <row> + <cell> + <JLabel id='rtpFemaleBLabel'/> + </cell> + <cell weightx='1'> + <NumberEditor id='rtpFemaleBField'/> + </cell> + </row> + </Table> + </JPanel> + + <JPanel id="undefinedPanel" layout="{new GridLayout(1, 2)}" + border='{new TitledBorder(t("tutti.editRtp.undefinedPanel"))}'> + <Table id='undefinedAPanel' fill='both'> + <row> + <cell> + <JLabel id='rtpUndefinedALabel'/> + </cell> + <cell weightx='1'> + <NumberEditor id='rtpUndefinedAField'/> + </cell> + </row> + </Table> + <Table id='undefinedBPanel' fill='both'> + <row> + <cell> + <JLabel id='rtpUndefinedBLabel'/> + </cell> + <cell weightx='1'> + <NumberEditor id='rtpUndefinedBField'/> + </cell> + </row> + </Table> + </JPanel> + </JPanel> + + </JXTitledPanel> + + <JPanel id="actions" constraints='BorderLayout.SOUTH' layout="{new GridLayout(1, 2)}"> + <JButton id='cancelButton'/> + <JButton id='saveButton'/> + </JPanel> + +</JDialog> diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/rtp/RtpEditorUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/rtp/RtpEditorUIHandler.java new file mode 100644 index 0000000..ebd800e --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/rtp/RtpEditorUIHandler.java @@ -0,0 +1,85 @@ +package fr.ifremer.tutti.ui.swing.content.protocol.rtp; + +import fr.ifremer.tutti.persistence.entities.referential.Species; +import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolSpeciesRowModel; +import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; +import jaxx.runtime.validator.swing.SwingValidator; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import javax.swing.JComponent; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 14/01/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class RtpEditorUIHandler extends AbstractTuttiUIHandler<RtpEditorUIModel, RtpEditorUI> { + + /** Logger. */ + private static final Log log = LogFactory.getLog(RtpEditorUIHandler.class); + + @Override + public void beforeInit(RtpEditorUI ui) { + super.beforeInit(ui); + + RtpEditorUIModel model = new RtpEditorUIModel(); + + listModelIsModify(model); + + this.ui.setContextValue(model); + + } + + @Override + public void afterInit(RtpEditorUI ui) { + + super.initUI(ui); + + ui.pack(); + ui.setResizable(true); + + } + + @Override + protected JComponent getComponentToFocus() { + return getUI().getRtpMaleAField(); + } + + @Override + public void onCloseUI() { + ui.dispose(); + } + + @Override + public SwingValidator<RtpEditorUIModel> getValidator() { + return ui.getValidator(); + } + + public void setBean(EditProtocolSpeciesRowModel rowModel) { + + Species species = rowModel.getSpecies(); + + String decorate = decorate(species); + + if (log.isInfoEnabled()) { + log.info("Edit RTP for species: " + decorate); + } + + ui.getBodyPanel().setTitle(t("tutti.rtpEdit.title", decorate)); + + getModel().setRowModel(rowModel); + + } + + public void openEditor() { + ui.setVisible(true); + } + + public void closeEditor() { + ui.dispose(); + } + +} \ No newline at end of file diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/rtp/RtpEditorUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/rtp/RtpEditorUIModel.java new file mode 100644 index 0000000..25a95b9 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/rtp/RtpEditorUIModel.java @@ -0,0 +1,126 @@ +package fr.ifremer.tutti.ui.swing.content.protocol.rtp; + +import fr.ifremer.tutti.persistence.entities.protocol.Rtp; +import fr.ifremer.tutti.persistence.entities.protocol.RtpBean; +import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolSpeciesRowModel; +import fr.ifremer.tutti.ui.swing.util.AbstractTuttiBeanUIModel; + +/** + * Created on 14/01/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class RtpEditorUIModel extends AbstractTuttiBeanUIModel<EditProtocolSpeciesRowModel, RtpEditorUIModel> { + + public static final String PROPERTY_RTP_MALE_A = "rtpMaleA"; + public static final String PROPERTY_RTP_MALE_B = "rtpMaleB"; + public static final String PROPERTY_RTP_FEMALE_A = "rtpFemaleA"; + public static final String PROPERTY_RTP_FEMALE_B = "rtpFemaleB"; + public static final String PROPERTY_RTP_UNDEFINED_A = "rtpUndefinedA"; + public static final String PROPERTY_RTP_UNDEFINED_B = "rtpUndefinedB"; + + protected final Rtp rtpMale = new RtpBean(); + + protected final Rtp rtpFemale = new RtpBean(); + + protected final Rtp rtpUndefined = new RtpBean(); + + protected EditProtocolSpeciesRowModel rowModel; + + public RtpEditorUIModel() { + super(null, null); + } + + @Override + protected EditProtocolSpeciesRowModel newEntity() { + return null; + } + + public Rtp getRtpMale() { + return rtpMale; + } + + public Rtp getRtpUndefined() { + return rtpUndefined; + } + + public Rtp getRtpFemale() { + return rtpFemale; + } + + public Float getRtpMaleA() { + return rtpMale.getA(); + } + + public void setRtpMaleA(Float a) { + rtpMale.setA(a); + firePropertyChanged(PROPERTY_RTP_MALE_A, null, a); + } + + public Float getRtpMaleB() { + return rtpMale.getB(); + } + + public void setRtpMaleB(Float b) { + rtpMale.setB(b); + firePropertyChanged(PROPERTY_RTP_MALE_B, null, b); + } + + public Float getRtpFemaleA() { + return rtpFemale.getA(); + } + + public void setRtpFemaleA(Float a) { + rtpFemale.setA(a); + firePropertyChanged(PROPERTY_RTP_FEMALE_A, null, a); + } + + public Float getRtpFemaleB() { + return rtpFemale.getB(); + } + + public void setRtpFemaleB(Float b) { + rtpFemale.setB(b); + firePropertyChanged(PROPERTY_RTP_FEMALE_B, null, b); + } + + public Float getRtpUndefinedA() { + return rtpUndefined.getA(); + } + + public void setRtpUndefinedA(Float a) { + rtpUndefined.setA(a); + firePropertyChanged(PROPERTY_RTP_UNDEFINED_A, null, a); + } + + public Float getRtpUndefinedB() { + return rtpUndefined.getB(); + } + + public void setRtpUndefinedB(Float b) { + rtpUndefined.setB(b); + firePropertyChanged(PROPERTY_RTP_UNDEFINED_B, null, b); + } + + public void setRowModel(EditProtocolSpeciesRowModel rowModel) { + + this.rowModel = rowModel; + + Rtp rtpMale = rowModel.getRtpMale(); + setRtpMaleA(rtpMale == null ? null : rtpMale.getA()); + setRtpMaleB(rtpMale == null ? null : rtpMale.getB()); + + Rtp rtpFemale = rowModel.getRtpFemale(); + setRtpFemaleA(rtpFemale == null ? null : rtpFemale.getA()); + setRtpFemaleB(rtpFemale == null ? null : rtpFemale.getB()); + + Rtp rtpUndefined = rowModel.getRtpUndefined(); + setRtpUndefinedA(rtpUndefined == null ? null : rtpUndefined.getA()); + setRtpUndefinedB(rtpUndefined == null ? null : rtpUndefined.getB()); + + } + + public EditProtocolSpeciesRowModel getRowModel() { + return rowModel; + } +} \ No newline at end of file diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/rtp/actions/CancelRtpAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/rtp/actions/CancelRtpAction.java new file mode 100644 index 0000000..ef4b50c --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/rtp/actions/CancelRtpAction.java @@ -0,0 +1,23 @@ +package fr.ifremer.tutti.ui.swing.content.protocol.rtp.actions; + +import fr.ifremer.tutti.ui.swing.content.protocol.rtp.RtpEditorUI; +import fr.ifremer.tutti.ui.swing.util.actions.SimpleActionSupport; + +/** + * Created on 14/01/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class CancelRtpAction extends SimpleActionSupport<RtpEditorUI> { + + private static final long serialVersionUID = 1L; + + public CancelRtpAction(RtpEditorUI ui) { + super(ui); + } + + @Override + protected void onActionPerformed(RtpEditorUI ui) { + ui.dispose(); + } +} \ No newline at end of file diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/rtp/actions/SaveRtpAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/rtp/actions/SaveRtpAction.java new file mode 100644 index 0000000..a2082b4 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/rtp/actions/SaveRtpAction.java @@ -0,0 +1,36 @@ +package fr.ifremer.tutti.ui.swing.content.protocol.rtp.actions; + +import fr.ifremer.tutti.persistence.entities.protocol.Rtps; +import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolSpeciesRowModel; +import fr.ifremer.tutti.ui.swing.content.protocol.rtp.RtpEditorUI; +import fr.ifremer.tutti.ui.swing.content.protocol.rtp.RtpEditorUIModel; +import fr.ifremer.tutti.ui.swing.util.actions.SimpleActionSupport; + +/** + * Created on 14/01/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class SaveRtpAction extends SimpleActionSupport<RtpEditorUI> { + + private static final long serialVersionUID = 1L; + + public SaveRtpAction(RtpEditorUI ui) { + super(ui); + } + + @Override + protected void onActionPerformed(RtpEditorUI ui) { + + RtpEditorUIModel model = ui.getModel(); + + EditProtocolSpeciesRowModel rowModel = model.getRowModel(); + + rowModel.setRtpMale(Rtps.newRtp(model.getRtpMale())); + rowModel.setRtpFemale(Rtps.newRtp(model.getRtpFemale())); + rowModel.setRtpUndefined(Rtps.newRtp(model.getRtpUndefined())); + + ui.dispose(); + + } +} \ No newline at end of file diff --git a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties index a4669b9..4daea25 100644 --- a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties +++ b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties @@ -1,6 +1,9 @@ application.action.create.error= application.error.ui.business.warning= jaxx.application.action.create.error= +rtpEditor.femalePanel= +rtpEditor.malePanel= +rtpEditor.undefinedPanel= swing.error.cannot.open.file= tutti.about.bottomText= tutti.about.message= @@ -1095,10 +1098,20 @@ tutti.editProtocol.table.header.operationFields.field= tutti.editProtocol.table.header.operationFields.field.tip= tutti.editProtocol.table.header.operationFields.importFileColumn= tutti.editProtocol.table.header.operationFields.importFileColumn.tip= +tutti.editProtocol.table.header.rtpFemaleA= +tutti.editProtocol.table.header.rtpFemaleA.tip= +tutti.editProtocol.table.header.rtpFemaleB= +tutti.editProtocol.table.header.rtpFemaleB.tip= +tutti.editProtocol.table.header.rtpMaleA= +tutti.editProtocol.table.header.rtpMaleA.tip= +tutti.editProtocol.table.header.rtpMaleB= +tutti.editProtocol.table.header.rtpMaleB.tip= tutti.editProtocol.table.header.speciesReferenceTaxonId= tutti.editProtocol.table.header.speciesReferenceTaxonId.tip= tutti.editProtocol.table.header.speciesSurveyCode= tutti.editProtocol.table.header.speciesSurveyCode.tip= +tutti.editProtocol.table.header.useRtp= +tutti.editProtocol.table.header.useRtp.tip= tutti.editProtocol.table.header.weight= tutti.editProtocol.table.header.weight.tip= tutti.editProtocol.title.choose.benthosExportFile= @@ -1112,6 +1125,33 @@ tutti.editProtocol.title.edit.protocol= tutti.editProtocol.warn.clean= tutti.editProtocol.warn.clone= tutti.editProtocol.warn.import= +tutti.editRtp.action.cancel= +tutti.editRtp.action.cancel.mnemonic= +tutti.editRtp.action.cancel.tip= +tutti.editRtp.action.save= +tutti.editRtp.action.save.mnemonic= +tutti.editRtp.action.save.tip= +tutti.editRtp.action.tip= +tutti.editRtp.button= +tutti.editRtp.button.tip= +tutti.editRtp.femalePanel= +tutti.editRtp.field.rtpFemaleA= +tutti.editRtp.field.rtpFemaleA.tip= +tutti.editRtp.field.rtpFemaleB= +tutti.editRtp.field.rtpFemaleB.tip= +tutti.editRtp.field.rtpMaleA= +tutti.editRtp.field.rtpMaleA.tip= +tutti.editRtp.field.rtpMaleB= +tutti.editRtp.field.rtpMaleB.tip= +tutti.editRtp.field.rtpUndefinedA= +tutti.editRtp.field.rtpUndefinedA.tip= +tutti.editRtp.field.rtpUndefinedB= +tutti.editRtp.field.rtpUndefinedB.tip= +tutti.editRtp.malePanel= +tutti.editRtp.simpleText= +tutti.editRtp.undefinedPanel= +tutti.editRtp.withRtp.tip= +tutti.editRtp.withoutRtp.tip= tutti.editSampleCategoryModel.action.close= tutti.editSampleCategoryModel.action.close.mnemonic= tutti.editSampleCategoryModel.action.close.tip= @@ -2026,6 +2066,7 @@ tutti.report.title= tutti.report.title.choose.saveReportFile= tutti.resetCruise.action.cruiseReloaded= tutti.resetProgram.action.programReloaded= +tutti.rtpEdit.title= tutti.selectBenthos.title= tutti.selectCruise.action.chooseCruiseExportFile= tutti.selectCruise.action.chooseProgramExportFile= diff --git a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties index 61efbe2..f3acfb3 100644 --- a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties +++ b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties @@ -1058,6 +1058,8 @@ tutti.editProtocol.table.header.speciesReferenceTaxonId=Espèce tutti.editProtocol.table.header.speciesReferenceTaxonId.tip=Code Rubin – Nom scientifique tutti.editProtocol.table.header.speciesSurveyCode=Code campagne tutti.editProtocol.table.header.speciesSurveyCode.tip=Code campagne (non synchronisable dans Harmonie) +tutti.editProtocol.table.header.useRtp=RTP +tutti.editProtocol.table.header.useRtp.tip=Relation taille-poids tutti.editProtocol.table.header.weight=Pesée tutti.editProtocol.table.header.weight.tip=L'espèce doit elle être pesée ? tutti.editProtocol.title.choose.benthosExportFile=Exporter les benthos @@ -1071,6 +1073,31 @@ tutti.editProtocol.title.edit.protocol=Éditer un protocole de saisie existant tutti.editProtocol.warn.clean=Des catégories non reconnues ont été supprimées du protocole, ces modifications ne seront sauvegardées que lorsque vous cliquerez sur le bouton "Enregistrer". tutti.editProtocol.warn.clone=Le protocole que vous venez de cloner ne sera sauvegardé que lorsque vous cliquerez sur le bouton "Enregistrer". tutti.editProtocol.warn.import=Le protocole que vous venez d'importer ne sera sauvegardé que lorsque vous cliquerez sur le bouton "Enregistrer". +tutti.editRtp.action.cancel=Annuler +tutti.editRtp.action.cancel.mnemonic=A +tutti.editRtp.action.cancel.tip=Annuler l'édition des RTP +tutti.editRtp.action.save=Enregistrer +tutti.editRtp.action.save.mnemonic=E +tutti.editRtp.action.save.tip=Enregister les RTP +tutti.editRtp.button=RTP +tutti.editRtp.button.tip=Éditer les RTP de l'espèce +tutti.editRtp.femalePanel=Femelle +tutti.editRtp.field.rtpFemaleA=A +tutti.editRtp.field.rtpFemaleA.tip=Paramètre A +tutti.editRtp.field.rtpFemaleB=B +tutti.editRtp.field.rtpFemaleB.tip=Paramètre B +tutti.editRtp.field.rtpMaleA=A +tutti.editRtp.field.rtpMaleA.tip=Paramètre A +tutti.editRtp.field.rtpMaleB=B +tutti.editRtp.field.rtpMaleB.tip=Paramètre B +tutti.editRtp.field.rtpUndefinedA=A +tutti.editRtp.field.rtpUndefinedA.tip=Paramètre A +tutti.editRtp.field.rtpUndefinedB=B +tutti.editRtp.field.rtpUndefinedB.tip=Paramètre B +tutti.editRtp.malePanel=Male +tutti.editRtp.undefinedPanel=Sexe inconnu +tutti.editRtp.withRtp.tip=RTP renseignés +tutti.editRtp.withoutRtp.tip=RTP non renseignés tutti.editSampleCategoryModel.action.close=Fermer tutti.editSampleCategoryModel.action.close.mnemonic=F tutti.editSampleCategoryModel.action.close.tip=Fermer l'édition des catégories @@ -1892,6 +1919,7 @@ tutti.report.title=Rapports tutti.report.title.choose.saveReportFile=Enregistrer le rapport généré tutti.resetCruise.action.cruiseReloaded=<html><body>La campagne <strong>%s</strong> est rechargée</body></html>. tutti.resetProgram.action.programReloaded=<html><body>Le programme <strong>%s</strong> est rechargé</body></html>. +tutti.rtpEdit.title=Édition des relations taille-poids de l'espèce %s tutti.selectBenthos.title=Choisissez une espèce du benthos tutti.selectCruise.action.chooseCruiseExportFile=Exporter tutti.selectCruise.action.chooseProgramExportFile=Exporter -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.