This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository observe. See http://git.codelutin.com/observe.git commit 5a47fbef066236c21a69cd83414d1ad779c6bde9 Author: Tony CHEMIT <chemit@codelutin.com> Date: Thu Apr 23 09:44:03 2015 +0200 ajout de l'écran d'édition des équipements du modèle LL (refs #7013) --- .../ird/observe/ui/content/ContentUIManager.java | 2 + .../GearUseFeaturesLonglineTableModel.java | 150 ++++++ .../impl/longline/GearUseFeaturesLonglineUI.css | 97 ++++ .../impl/longline/GearUseFeaturesLonglineUI.jaxx | 154 ++++++ .../longline/GearUseFeaturesLonglineUIHandler.java | 587 +++++++++++++++++++++ .../longline/GearUseFeaturesLonglineUIModel.java | 125 +++++ ...rUseFeaturesMeasurementLonglinesTableModel.java | 124 +++++ .../loadors/ProgramLonglineNodeChildLoador.java | 24 +- .../resources/i18n/observe-swing_en_GB.properties | 52 +- .../resources/i18n/observe-swing_es_ES.properties | 24 + .../resources/i18n/observe-swing_fr_FR.properties | 24 + 11 files changed, 1341 insertions(+), 22 deletions(-) diff --git a/observe-swing/src/main/java/fr/ird/observe/ui/content/ContentUIManager.java b/observe-swing/src/main/java/fr/ird/observe/ui/content/ContentUIManager.java index ce3da0d..74fa1a3 100644 --- a/observe-swing/src/main/java/fr/ird/observe/ui/content/ContentUIManager.java +++ b/observe-swing/src/main/java/fr/ird/observe/ui/content/ContentUIManager.java @@ -55,6 +55,7 @@ import fr.ird.observe.ui.content.ref.ContentReferenceUI; import fr.ird.observe.ui.content.ref.ReferenceHomeUI; import fr.ird.observe.ui.content.table.impl.longline.CatchLonglineUI; import fr.ird.observe.ui.content.table.impl.longline.EncounterUI; +import fr.ird.observe.ui.content.table.impl.longline.GearUseFeaturesLonglineUI; import fr.ird.observe.ui.content.table.impl.longline.SensorUsedUI; import fr.ird.observe.ui.content.table.impl.longline.TdrUI; import fr.ird.observe.ui.content.table.impl.seine.GearUseFeaturesSeineUI; @@ -148,6 +149,7 @@ public class ContentUIManager { addMapping(DATA, TripLongline.class, TripLonglineUI.class); addMapping(DATA, TripLongline.class, n("observe.tree.tripLongline.unsaved"), TripLonglineUI.class); + addMapping(DATA, TripLongline.class, TripLongline.PROPERTY_GEAR_USE_FEATURES_LONGLINE, GearUseFeaturesLonglineUI.class); addMapping(DATA, TripLongline.class, TripLongline.PROPERTY_ACTIVITY_LONGLINE, ActivityLonglinesUI.class); addMapping(DATA, ActivityLongline.class, ActivityLonglineUI.class); diff --git a/observe-swing/src/main/java/fr/ird/observe/ui/content/table/impl/longline/GearUseFeaturesLonglineTableModel.java b/observe-swing/src/main/java/fr/ird/observe/ui/content/table/impl/longline/GearUseFeaturesLonglineTableModel.java new file mode 100644 index 0000000..6cb4dba --- /dev/null +++ b/observe-swing/src/main/java/fr/ird/observe/ui/content/table/impl/longline/GearUseFeaturesLonglineTableModel.java @@ -0,0 +1,150 @@ +package fr.ird.observe.ui.content.table.impl.longline; + +/* + * #%L + * ObServe :: Swing + * %% + * Copyright (C) 2008 - 2015 IRD, Codelutin, Tony Chemit + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import fr.ird.observe.entities.referentiel.Gear; +import fr.ird.observe.entities.longline.GearUseFeaturesMeasurementLongline; +import fr.ird.observe.entities.longline.GearUseFeaturesLongline; +import fr.ird.observe.entities.longline.TripLongline; +import fr.ird.observe.ui.content.table.ContentTableMeta; +import fr.ird.observe.ui.content.table.ContentTableModel; +import fr.ird.observe.ui.content.table.ObserveContentTableUI; +import fr.ird.observe.ui.content.table.impl.longline.GearUseFeaturesMeasurementLonglinesTableModel; +import fr.ird.observe.ui.content.table.impl.longline.GearUseFeaturesLonglineUIHandler; +import fr.ird.observe.ui.content.table.impl.longline.GearUseFeaturesLonglineUIModel; +import org.apache.commons.collections4.CollectionUtils; + +import java.util.List; + +/** + * Created on 4/7/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.16 + */ +public class GearUseFeaturesLonglineTableModel extends ContentTableModel<TripLongline, GearUseFeaturesLongline> { + + private static final long serialVersionUID = 1L; + + private GearUseFeaturesLonglineUIHandler gearUseFeaturesLonglineUIHandler; + + public GearUseFeaturesLonglineTableModel(ObserveContentTableUI<TripLongline, GearUseFeaturesLongline> context, + List<ContentTableMeta<GearUseFeaturesLongline>> contentTableMetas) { + super(context, contentTableMetas); + } + + public void setGearUseFeaturesLonglineUIHandler(GearUseFeaturesLonglineUIHandler gearUseFeaturesLonglineUIHandler) { + this.gearUseFeaturesLonglineUIHandler = gearUseFeaturesLonglineUIHandler; + } + + @Override + public void addNewEntry() { + + int editingRow = getSelectedRow(); + + if (editingRow > -1) { + + // store sizes and weights for the selected row + // before creating a new one ? + GearUseFeaturesLonglineUIModel model = getModel(); + model.getMeasurementsTableModel().storeInCacheForRow(editingRow); + + } + + super.addNewEntry(); + } + + @Override + public void updateRowFromEditBean() { + + super.updateRowFromEditBean(); + + GearUseFeaturesLonglineUIModel model = getModel(); + + int editingRow = getSelectedRow(); + GearUseFeaturesLongline rowBean = getRowBean(); + GearUseFeaturesMeasurementLonglinesTableModel measurementsTableModel = model.getMeasurementsTableModel(); + + if (rowBean.getTopiaId() == null && CollectionUtils.isEmpty(measurementsTableModel.getCacheForRow(editingRow))) { + + // new gear usage, add default measurements + + Gear gear = rowBean.getGear(); + List<GearUseFeaturesMeasurementLongline> measurements = + gearUseFeaturesLonglineUIHandler.getDefaultGearUseFeaturesMeasurementLongline(gear.getTopiaId()); + if (log.isInfoEnabled()) { + log.info("Create mode, use default measurements: " + measurements.size()); + } + measurementsTableModel.removeCacheForRow(editingRow); + measurementsTableModel.initCacheForRow(editingRow, measurements); + + measurementsTableModel.setData(measurements); + measurementsTableModel.setModified(false); + + } else { + + // store current measurements for the selected row + measurementsTableModel.storeInCacheForRow(editingRow); + + } + + } + + @Override + protected void removeRow(int row) { + super.removeRow(row); + + // remove sizes and weights for the deleted row + // also update rows to row - 1 (when after the deleted row) + GearUseFeaturesLonglineUIModel model = getModel(); + model.getMeasurementsTableModel().removeCacheForRow(row); + + } + + @Override + public void resetEditBean() { + + int row = getSelectedRow(); + if (log.isInfoEnabled()) { + log.info("Reset edit bean at row: " + row); + } + GearUseFeaturesLonglineUIModel model = getModel(); + model.getMeasurementsTableModel().resetCacheForRow(row); + + super.resetEditBean(); + + } + + @Override + protected void resetRow(int row) { + super.resetRow(row); + + GearUseFeaturesLonglineUIModel model = getModel(); + model.getMeasurementsTableModel().resetCacheForRow(row); + } + + @Override + protected GearUseFeaturesLonglineUIModel getModel() { + return (GearUseFeaturesLonglineUIModel) super.getModel(); + } +} diff --git a/observe-swing/src/main/java/fr/ird/observe/ui/content/table/impl/longline/GearUseFeaturesLonglineUI.css b/observe-swing/src/main/java/fr/ird/observe/ui/content/table/impl/longline/GearUseFeaturesLonglineUI.css new file mode 100644 index 0000000..6b55ed7 --- /dev/null +++ b/observe-swing/src/main/java/fr/ird/observe/ui/content/table/impl/longline/GearUseFeaturesLonglineUI.css @@ -0,0 +1,97 @@ +/* + * #%L + * ObServe :: Swing + * %% + * Copyright (C) 2008 - 2010 IRD, Codelutin, Tony Chemit + * %% + * 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% + */ + +#model { + valid:{validator.isValid() && validatorTable.isValid() && getMeasurementsTableModel().isValid()}; + canSaveRow:{validatorTable.isChanged() && validatorTable.isValid() && getMeasurementsTableModel().isValid()}; + canResetRow:{validatorTable.isChanged()}; +} + +/* ***************************************************************************** */ +/* GENERAL TAB **************************************************************** */ +/* ***************************************************************************** */ + +#generalTab { + title:{t("observe.gearUseFeaturesLongline.tab.general")}; + icon:{handler.getErrorIconIfFalse(model.isGeneralTabValid())}; +} + +#gearLabel { + text:"observe.gearUseFeaturesLongline.gear"; + labelFor:{gear}; +} + +#gear { + property:{GearUseFeaturesLongline.PROPERTY_GEAR}; + selectedItem:{tableEditBean.getGear()}; +} + +#numberLabel { + text:"observe.gearUseFeaturesLongline.number"; + labelFor:{number}; +} + +#number { + property:{GearUseFeaturesLongline.PROPERTY_NUMBER}; + model:{tableEditBean.getNumber()}; + numberPattern:{fr.ird.observe.ui.UIHelper.INT_6_DIGITS_PATTERN}; +} + +#usedInTripLabel { + text:"observe.gearUseFeaturesLongline.usedInTrip"; + labelFor:{usedInTrip}; +} + +#usedInTrip { + booleanValue:{tableEditBean.getUsedInTrip()}; + _tablePropertyName:{GearUseFeaturesLongline.PROPERTY_USED_IN_TRIP}; +} + +/* ***************************************************************************** */ +/* MEASUREMENTS TAB *********************************************************** */ +/* ***************************************************************************** */ + +#measurementsFormTab { + title:{t("observe.gearUseFeaturesLongline.tab.measurements")}; + icon:{handler.getErrorIconIfFalse(measurementsTableModel.isValid())}; + enabled:{!tableModel.isCreate()}; +} + +#measurementsTable { + model: {measurementsTableModel}; +} + +#comment { + columnHeaderView:{new JLabel(t("observe.gearUseFeaturesLongline.comment"))}; + minimumSize:{new Dimension(10,80)}; +} + +#comment2 { + _tablePropertyName: {GearUseFeaturesLongline.PROPERTY_COMMENT}; + text:{getStringValue(tableEditBean.getComment())}; +} + +#deleteSelectedMeasurement { + text: "observe.gearUseFeaturesLongline.action.deleteSelectedMeasurement"; + toolTipText: "observe.gearUseFeaturesLongline.action.deleteSelectedMeasurement.tip"; + actionIcon: delete; +} diff --git a/observe-swing/src/main/java/fr/ird/observe/ui/content/table/impl/longline/GearUseFeaturesLonglineUI.jaxx b/observe-swing/src/main/java/fr/ird/observe/ui/content/table/impl/longline/GearUseFeaturesLonglineUI.jaxx new file mode 100644 index 0000000..bcd4a6d --- /dev/null +++ b/observe-swing/src/main/java/fr/ird/observe/ui/content/table/impl/longline/GearUseFeaturesLonglineUI.jaxx @@ -0,0 +1,154 @@ +<!-- + #%L + ObServe :: Swing + %% + Copyright (C) 2008 - 2010 IRD, Codelutin, Tony Chemit + %% + 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% + --> + +<fr.ird.observe.ui.content.table.ContentTableUI + superGenericType='TripLongline, GearUseFeaturesLongline' + contentTitle='{n("observe.gearUseFeaturesLongline.title")}' + saveNewEntryText='{n("observe.action.create.gearUseFeaturesLongline")}' + saveNewEntryTip='{n("observe.action.create.gearUseFeaturesLongline.tip")}'> + + <style source="../../CommonTable.css"/> + + <import> + fr.ird.observe.entities.CommentableEntity + fr.ird.observe.entities.longline.TripLongline + fr.ird.observe.entities.longline.GearUseFeaturesLongline + fr.ird.observe.entities.longline.GearUseFeaturesMeasurementLongline + fr.ird.observe.entities.longline.GearUseFeaturesMeasurementLonglineImpl + fr.ird.observe.entities.referentiel.Gear + fr.ird.observe.ui.content.table.* + fr.ird.observe.ui.util.BooleanEditor + + jaxx.runtime.swing.editor.NumberEditor + jaxx.runtime.swing.editor.bean.BeanComboBox + + java.awt.Dimension + + static fr.ird.observe.ui.UIHelper.getStringValue + static org.nuiton.i18n.I18n.n + </import> + + <!-- handler --> + <GearUseFeaturesLonglineUIHandler id='handler' constructorParams='this'/> + + <!-- model --> + <GearUseFeaturesLonglineUIModel id='model' constructorParams='this'/> + + <GearUseFeaturesMeasurementLonglinesTableModel id='measurementsTableModel' + initializer="getModel().getMeasurementsTableModel()"/> + + <!-- edit bean --> + <TripLongline id='bean'/> + + <!-- table edit bean --> + <GearUseFeaturesLongline id='tableEditBean'/> + + <!-- table model --> + <ContentTableModel id='tableModel'/> + + <!-- le validateur de l'écran --> + <BeanValidator id='validator' + beanClass='fr.ird.observe.entities.longline.TripLongline' + errorTableModel='{getErrorTableModel()}' + context='n1-update-gearUseFeatures'/> + + <!-- le validateur d'une entrée de tableau --> + <BeanValidator id='validatorTable' + autoField='true' + beanClass='fr.ird.observe.entities.longline.GearUseFeaturesLongline' + errorTableModel='{getErrorTableModel()}' + context='n1-update'/> + + <JPopupMenu id='measurementsTablePopup'> + <JMenuItem id='deleteSelectedMeasurement' onActionPerformed='getHandler().deleteSelectedMeasurement()'/> + </JPopupMenu> + + <Table id='editorPanel' fill='both' insets='0' weighty="1"> + <row> + <cell weightx="1" weighty="0.9"> + + <JTabbedPane id='gearUseFeaturesTabPane'> + + <tab id='generalTab'> + + <JPanel layout='{new BorderLayout()}'> + + <Table id='editForm' fill='both' insets='1' constraints="BorderLayout.NORTH"> + + <!-- gear --> + <row> + <cell> + <JLabel id='gearLabel'/> + </cell> + <cell weightx='1' anchor='east'> + <BeanComboBox id='gear' constructorParams='this' genericType='Gear'/> + </cell> + </row> + + <!-- number --> + <row> + <cell> + <JLabel id='numberLabel'/> + </cell> + <cell weightx='1' anchor='east'> + <NumberEditor id='number' constructorParams='this'/> + </cell> + </row> + + <!-- usedInTrip --> + <row> + <cell> + <JLabel id='usedInTripLabel'/> + </cell> + <cell weightx='1' anchor='east'> + <BooleanEditor id='usedInTrip'/> + </cell> + </row> + + </Table> + + </JPanel> + + + </tab> + + <tab id='measurementsFormTab'> + + <JScrollPane id='measurementsScrollPane'> + <JTable id='measurementsTable'/> + </JScrollPane> + + </tab> + </JTabbedPane> + + </cell> + </row> + <row> + <cell weighty='0.1'> + <JScrollPane id='comment' onFocusGained='comment2.requestFocus()'> + <JTextArea id='comment2'/> + </JScrollPane> + </cell> + </row> + </Table> + +</fr.ird.observe.ui.content.table.ContentTableUI> diff --git a/observe-swing/src/main/java/fr/ird/observe/ui/content/table/impl/longline/GearUseFeaturesLonglineUIHandler.java b/observe-swing/src/main/java/fr/ird/observe/ui/content/table/impl/longline/GearUseFeaturesLonglineUIHandler.java new file mode 100644 index 0000000..5380406 --- /dev/null +++ b/observe-swing/src/main/java/fr/ird/observe/ui/content/table/impl/longline/GearUseFeaturesLonglineUIHandler.java @@ -0,0 +1,587 @@ +package fr.ird.observe.ui.content.table.impl.longline; + +/* + * #%L + * ObServe :: Swing + * %% + * Copyright (C) 2008 - 2015 IRD, Codelutin, Tony Chemit + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import fr.ird.observe.DataService; +import fr.ird.observe.ObserveContext; +import fr.ird.observe.ObserveDAOHelper; +import fr.ird.observe.ObserveTechnicalException; +import fr.ird.observe.db.DataContext; +import fr.ird.observe.db.DataSource; +import fr.ird.observe.db.DataSourceException; +import fr.ird.observe.db.constants.DataContextType; +import fr.ird.observe.entities.referentiel.Gear; +import fr.ird.observe.entities.referentiel.GearCaracteristic; +import fr.ird.observe.entities.longline.GearUseFeaturesMeasurementLongline; +import fr.ird.observe.entities.longline.GearUseFeaturesMeasurementLonglineDAO; +import fr.ird.observe.entities.longline.GearUseFeaturesLongline; +import fr.ird.observe.entities.longline.TripLongline; +import fr.ird.observe.ui.ObserveMainUI; +import fr.ird.observe.ui.UIHelper; +import fr.ird.observe.ui.content.ContentMode; +import fr.ird.observe.ui.content.ContentUIInitializer; +import fr.ird.observe.ui.content.table.ContentTableUIHandler; +import fr.ird.observe.ui.content.table.impl.seine.GearUseFeatureMeasurementCellEditor; +import fr.ird.observe.ui.content.table.impl.seine.GearUseFeatureMeasurementCellRenderer; +import fr.ird.observe.ui.util.table.AutotSelectRowAndShowPopupActionSupport; +import fr.ird.observe.ui.util.table.EditableTableModelSupport; +import jaxx.runtime.SwingUtil; +import jaxx.runtime.validator.swing.SwingValidatorMessage; +import jaxx.runtime.validator.swing.SwingValidatorMessageTableModel; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.decorator.Decorator; +import org.nuiton.topia.TopiaContext; +import org.nuiton.topia.TopiaException; +import org.nuiton.topia.persistence.util.TopiaEntityBinder; +import org.nuiton.validator.NuitonValidatorScope; + +import javax.swing.JComponent; +import javax.swing.JOptionPane; +import javax.swing.JPopupMenu; +import javax.swing.JScrollPane; +import javax.swing.JTable; +import javax.swing.ListSelectionModel; +import javax.swing.event.TableModelEvent; +import javax.swing.event.TableModelListener; +import javax.swing.table.DefaultTableCellRenderer; +import java.awt.GridBagConstraints; +import java.awt.Insets; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import static org.nuiton.i18n.I18n.n; +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 3/24/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.16 + */ +public class GearUseFeaturesLonglineUIHandler extends ContentTableUIHandler<TripLongline, GearUseFeaturesLongline> { + + /** Logger */ + static private Log log = LogFactory.getLog(GearUseFeaturesLonglineUIHandler.class); + + // Compute valid state of tab from the error table + protected final TableModelListener computeTabValidStateListener = new TableModelListener() { + @Override + public void tableChanged(TableModelEvent e) { + + SwingValidatorMessageTableModel source = (SwingValidatorMessageTableModel) e.getSource(); + computeTabValidState(source); + + } + }; + + private final PropertyChangeListener measurementsTableModelModified = new PropertyChangeListener() { + + @Override + public void propertyChange(PropertyChangeEvent evt) { + onMeasurementsTableModelModified((Boolean) evt.getNewValue()); + } + }; + + public GearUseFeaturesLonglineUIHandler(GearUseFeaturesLonglineUI ui) { + super(ui, DataContextType.TripLongline); + } + + @Override + public GearUseFeaturesLonglineUI getUi() { + return (GearUseFeaturesLonglineUI) super.getUi(); + } + + @Override + public GearUseFeaturesLonglineUIModel getModel() { + return (GearUseFeaturesLonglineUIModel) super.getModel(); + } + + @Override + protected void onSelectedRowChanged(int editingRow, GearUseFeaturesLongline bean, boolean create) { + + if (log.isInfoEnabled()) { + log.info("Selected row changed: " + editingRow + ", create? " + create); + } + + GearUseFeaturesLonglineUI ui = getUi(); + + UIHelper.stopEditing(ui.getMeasurementsTable()); + + GearUseFeaturesLonglineTableModel tableModel = getTableModel(); + GearUseFeaturesLonglineUIModel model = getModel(); + + boolean emptySelection = editingRow == -1; + + // load size measures + + GearUseFeaturesMeasurementLonglinesTableModel measurementsTableModel = model.getMeasurementsTableModel(); + List<GearUseFeaturesMeasurementLongline> measurements = emptySelection ? Collections.<GearUseFeaturesMeasurementLongline>emptyList() : measurementsTableModel.getCacheForRow(editingRow); + if (measurements == null) { + + if (log.isInfoEnabled()) { + log.info("init measurements for row " + editingRow); + } + + // first time coming on this row + + if (tableModel.isCreate()) { + + // create mode: just init with empty list + measurements = Collections.emptyList(); + + if (log.isInfoEnabled()) { + log.info("create mode, use an empty list"); + } + + } else { + + // updating mode: loading from db + try { + + measurements = getDataService().getGearUseFeaturesMeasurementLongline(getDataSource(), bean, measurementsTableModel.getLoader()); + if (log.isInfoEnabled()) { + log.info("Loaded measurements (" + bean.getTopiaId() + "): " + measurements.size()); + } + + } catch (DataSourceException e) { + throw new ObserveTechnicalException("Could not load measurements", e); + } + } + + // init measurements + measurementsTableModel.initCacheForRow(editingRow, measurements); + + } else { + + if (log.isInfoEnabled()) { + log.info("Using existing measurements for row " + editingRow + " : " + measurements.size()); + } + } + + measurementsTableModel.setData(measurements); + + measurementsTableModel.setModified(false); + measurementsTableModel.setEditable(tableModel.isEditable()); + + if (!tableModel.isEditable()) { + return; + } + + JComponent requestFocus; + + if (tableModel.isCreate()) { + + // go back to first pane + ui.getGearUseFeaturesTabPane().setSelectedIndex(0); + + requestFocus = ui.getGear(); + + } else { + + requestFocus = ui.getGear(); + + } + + requestFocus.requestFocus(); + + } + + @Override + protected void initTableUI(DefaultTableCellRenderer renderer) { + + { + JTable table = getUi().getTable(); + + UIHelper.setI18nTableHeaderRenderer(table, + n("observe.gearUseFeaturesLongline.table.gear"), + n("observe.gearUseFeaturesLongline.table.gear.tip"), + n("observe.gearUseFeaturesLongline.table.number"), + n("observe.gearUseFeaturesLongline.table.number.tip"), + n("observe.gearUseFeaturesLongline.table.usedInTrip"), + n("observe.gearUseFeaturesLongline.table.usedInTrip.tip"), + n("observe.gearUseFeaturesLongline.table.comment"), + n("observe.gearUseFeaturesLongline.table.comment.tip")); + + UIHelper.setTableColumnRenderer(table, 0, UIHelper.newDecorateTableCellRenderer(renderer, Gear.class)); + UIHelper.setTableColumnRenderer(table, 1, UIHelper.newEmptyNumberTableCellRenderer(renderer)); + UIHelper.setTableColumnRenderer(table, 2, UIHelper.newBooleanTableCellRenderer(renderer)); + UIHelper.setTableColumnRenderer(table, 3, UIHelper.newStringTableCellRenderer(renderer, 10, true)); + } + + { + // init measurements table + JTable table = getUi().getMeasurementsTable(); + + UIHelper.setI18nTableHeaderRenderer(table, + n("observe.gearUseFeaturesLongline.table.gearCaracteristic"), + n("observe.gearUseFeaturesLongline.table.gearCaracteristic.tip"), + n("observe.gearUseFeaturesLongline.table.value"), + n("observe.gearUseFeaturesLongline.table.value.tip")); + + UIHelper.setTableColumnRenderer(table, 0, UIHelper.newDecorateTableCellRenderer(renderer, GearCaracteristic.class)); + UIHelper.setTableColumnRenderer(table, 1, new GearUseFeatureMeasurementCellRenderer(0, renderer)); + + table.getTableHeader().setReorderingAllowed(false); + + Decorator<GearCaracteristic> decorator = ObserveContext.get().getDecorator(GearCaracteristic.class); + + List<GearCaracteristic> list; + try { + list = getDataService().getList(getDataSource(), GearCaracteristic.class); + } catch (DataSourceException e) { + throw new ObserveTechnicalException("Could not get gear caracteristics", e); + } + UIHelper.setTableColumnEditor(table, 0, ContentUIInitializer.newDataColumnEditor(list, decorator)); + UIHelper.setTableColumnEditor(table, 1, new GearUseFeatureMeasurementCellEditor(0)); + + GearUseFeaturesMeasurementLonglinesTableModel tableModel = getModel().getMeasurementsTableModel(); + tableModel.installTableKeyListener(getUi().getMeasurementsTable()); + tableModel.addPropertyChangeListener(GearUseFeaturesMeasurementLonglinesTableModel.MODIFIED_PROPERTY, measurementsTableModelModified); + + ListSelectionModel selectionModel = table.getSelectionModel(); + selectionModel.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + tableModel.installSelectionListener(table); + + new SectionTemplatesAutotSelectRowAndShowPopupAction(getUi(), getUi().getMeasurementsScrollPane(), table, getUi().getMeasurementsTablePopup()); + + } + + // Adapt layout to let more place for the editor + + getUi().getShowForm().remove(1); + getUi().getShowForm().add(SwingUtil.boxComponentWithJxLayer(getUi().getEditor()), new GridBagConstraints(0, 1, 1, 1, 1.0, 0.3, 10, 1, new Insets(0, 0, 0, 0), 0, 0), 1); + getUi().getEditor().remove(0); + getUi().getEditor().add(SwingUtil.boxComponentWithJxLayer(getUi().getEditorPanel()), new GridBagConstraints(0, 0, 1, 1, 1.0, 1.0, 10, 1, new Insets(0, 0, 0, 0), 0, 0), 0); + + + } + + @Override + protected String getEditBeanIdToLoad(DataContext dataContext, DataService dataService, DataSource dataSource) { + return dataContext.getSelectedTripLonglineId(); + } + + @Override + public void initUI() throws Exception { + + super.initUI(); + + getModel().addPropertyChangeListener(GearUseFeaturesLonglineUIModel.PROPERTY_EDITABLE, new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + Boolean newValue = (Boolean) evt.getNewValue(); + setTableModelEditable(newValue); + } + }); + + setTableModelEditable(getModel().isEditable()); + + getTableModel().setGearUseFeaturesLonglineUIHandler(this); + + } + + @Override + protected TripLongline loadEditBean(ContentMode mode, DataContext dataContext, DataService dataService, DataSource dataSource) throws DataSourceException { + + TripLongline tripLongline = super.loadEditBean(mode, dataContext, dataService, dataSource); + + // reset measurements + getModel().getMeasurementsTableModel().clear(); + + return tripLongline; + + } + + @Override + public void openUI() throws Exception { + + if (log.isInfoEnabled()) { + log.info("OpenUI: " + getModel()); + } + + super.openUI(); + + // To be sure always remove listener (could prevent some leaks) + getUi().getErrorTableModel().removeTableModelListener(computeTabValidStateListener); + // listen messages to see if required to add + getUi().getErrorTableModel().addTableModelListener(computeTabValidStateListener); + + SwingValidatorMessageTableModel errorTableModel = getUi().getErrorTableModel(); + computeTabValidState(errorTableModel); + + } + + @Override + protected void closeSafeUI() { + + if (log.isInfoEnabled()) { + log.info("CloseUI: " + getModel()); + } + super.closeSafeUI(); + + // remove listener + getUi().getErrorTableModel().removeTableModelListener(computeTabValidStateListener); + + } + + @Override + public void startEditUI(String... binding) { + + getModel().getMeasurementsTableModel().setEditable(true); + + super.startEditUI(binding); + + } + + public void deleteSelectedMeasurement() { + + GearUseFeaturesMeasurementLonglinesTableModel tableModel = getUi().getMeasurementsTableModel(); + + boolean selectionEmpty = tableModel.isSelectionEmpty(); + + if (!selectionEmpty) { + + GearUseFeaturesMeasurementLongline data = tableModel.getSelectedRow(); + + if (log.isInfoEnabled()) { + log.info("Delete: " + data); + } + + ObserveMainUI mainUI = ObserveContext.get().getObserveMainUI(); + int response = UIHelper.askUser(mainUI, + t("observe.title.delete"), + t("observe.measurement.delete.message"), + JOptionPane.WARNING_MESSAGE, + new Object[]{t("observe.choice.confirm.delete"), + t("observe.choice.cancel")}, + 1); + + if (response != 0) { + + // user cancel + return; + } + + tableModel.removeSelectedRow(); + + } + + } + + @Override + protected TripLongline onCreate(TopiaContext tx, Object parentBean, TripLongline editBean) throws TopiaException { + return super.onCreate(tx, parentBean, editBean); + } + + @Override + protected void onUpdateFinalize(TopiaContext tx, TripLongline bean, Collection<GearUseFeaturesLongline> oldChilds) throws TopiaException { + + List<GearUseFeaturesLongline> gearUseFeatures = bean.getGearUseFeaturesLongline(); + + GearUseFeaturesLonglineUIModel model = getModel(); + { + + // save measurments + + GearUseFeaturesMeasurementLonglineDAO measureDao = ObserveDAOHelper.getGearUseFeaturesMeasurementLonglineDAO(tx); + + GearUseFeaturesMeasurementLonglinesTableModel measurementsTableModel = model.getMeasurementsTableModel(); + Set<Integer> rowsChanged = measurementsTableModel.getCacheRowsChanged(); + + TopiaEntityBinder<GearUseFeaturesMeasurementLongline> loader = measurementsTableModel.getLoader(); + for (Integer row : rowsChanged) { + + GearUseFeaturesLongline gearUseFeaturesLongline = gearUseFeatures.get(row); + + List<GearUseFeaturesMeasurementLongline> measurements = measurementsTableModel.getCacheForRow(row); + List<GearUseFeaturesMeasurementLongline> measurementsToSave = new ArrayList<GearUseFeaturesMeasurementLongline>(measurements.size()); + + for (GearUseFeaturesMeasurementLongline measure : measurements) { + + if (measurementsTableModel.isRowNotEmpty(measure)) { + + GearUseFeaturesMeasurementLongline measureToSave; + + if (measure.getTopiaId() == null) { + measureToSave = measureDao.create(measure); + loader.load(measureToSave, measure, true); + } else { + measureToSave = gearUseFeaturesLongline.getGearUseFeaturesMeasurementByTopiaId(measure.getTopiaId()); + loader.load(measure, measureToSave, true); + } + + measurementsToSave.add(measureToSave); + + } + + } + + gearUseFeaturesLongline.clearGearUseFeaturesMeasurement(); + gearUseFeaturesLongline.addAllGearUseFeaturesMeasurement(measurementsToSave); + + } + + } + + } + + @Override + protected void resetEditBean() { + + UIHelper.stopEditing(getUi().getMeasurementsTable()); + + super.resetEditBean(); + + } + + @Override + protected ContentMode getContentMode(DataContext dataContext) { + + // par defaut, on suppose qu'on peut afficher les données + getModel().setShowData(true); + + String selectedTripId = dataContext.getSelectedTripId(); + + if (selectedTripId.equals(dataContext.getOpenTripId())) { + + // mode mise a jour + return ContentMode.UPDATE; + } + + // mode lecture + + if (dataContext.isSelectedTripLongline()) { + + addInfoMessage(t("observe.tripLongline.message.not.open")); + + } else { + + addInfoMessage(t("observe.tripLongline.message.not.open")); + + } + + return ContentMode.READ; + } + + @Override + protected GearUseFeaturesLonglineTableModel getTableModel() { + return (GearUseFeaturesLonglineTableModel) super.getTableModel(); + } + + protected void setTableModelEditable(Boolean newValue) { + + getModel().getMeasurementsTableModel().setEditable(newValue); + + } + + protected void onMeasurementsTableModelModified(Boolean newValue) { + + if (newValue) { + + // modify the validator, since this is the best way to prevent table edit form actions + // that something was modified on the form + getUi().getValidatorTable().setChanged(true); + + } + + // recompute table model valid state + getModel().getMeasurementsTableModel().validate(); + + } + + + protected void computeTabValidState(SwingValidatorMessageTableModel errorTableModel) { + + Set<String> errorProperties = new HashSet<String>(); + int rowCount = errorTableModel.getRowCount(); + for (int i = 0; i < rowCount; i++) { + + SwingValidatorMessage row = errorTableModel.getRow(i); + if (NuitonValidatorScope.ERROR.equals(row.getScope())) { + errorProperties.add(row.getField()); + } + } + + boolean generalTabValid = !errorProperties.removeAll(GearUseFeaturesLonglineUIModel.GENERAL_TAB_PROPERTIES); + + GearUseFeaturesLonglineUIModel model = getModel(); + + model.setGeneralTabValid(generalTabValid); + + } + + public List<GearUseFeaturesMeasurementLongline> getDefaultGearUseFeaturesMeasurementLongline(String gearId) { + + try { + List<GearUseFeaturesMeasurementLongline> measurements = getDataService().getDefaultGearUseFeaturesMeasurementLongline(getDataSource(), gearId); + if (log.isInfoEnabled()) { + log.info("Create mode, use default measurements: " + measurements.size()); + } + return measurements; + } catch (DataSourceException e) { + throw new ObserveTechnicalException("Could not create default measurements", e); + } + + } + + static class SectionTemplatesAutotSelectRowAndShowPopupAction extends AutotSelectRowAndShowPopupActionSupport { + + private final GearUseFeaturesLonglineUI ui; + + public SectionTemplatesAutotSelectRowAndShowPopupAction(GearUseFeaturesLonglineUI ui, + JScrollPane pane, + JTable table, + JPopupMenu popup) { + super(pane, table, popup); + this.ui = ui; + } + + @Override + protected void beforeOpenPopup(int modelRowIndex, int modelColumnIndex) { + + EditableTableModelSupport model = (EditableTableModelSupport) getTable().getModel(); + + boolean canDelete = !model.isSelectionEmpty(); + + if (canDelete) { + + // check also that the row is not empty + Serializable selectedData = model.getSelectedRow(); + canDelete = model.isRowNotEmpty(selectedData); + + } + + ui.getDeleteSelectedMeasurement().setEnabled(canDelete); + + } + + } +} \ No newline at end of file diff --git a/observe-swing/src/main/java/fr/ird/observe/ui/content/table/impl/longline/GearUseFeaturesLonglineUIModel.java b/observe-swing/src/main/java/fr/ird/observe/ui/content/table/impl/longline/GearUseFeaturesLonglineUIModel.java new file mode 100644 index 0000000..44f98ab --- /dev/null +++ b/observe-swing/src/main/java/fr/ird/observe/ui/content/table/impl/longline/GearUseFeaturesLonglineUIModel.java @@ -0,0 +1,125 @@ +package fr.ird.observe.ui.content.table.impl.longline; + +/* + * #%L + * ObServe :: Swing + * %% + * Copyright (C) 2008 - 2015 IRD, Codelutin, Tony Chemit + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Lists; +import fr.ird.observe.BinderService; +import fr.ird.observe.ObserveServiceHelper; +import fr.ird.observe.entities.longline.GearUseFeaturesMeasurementLongline; +import fr.ird.observe.entities.longline.GearUseFeaturesLongline; +import fr.ird.observe.entities.longline.TripLongline; +import fr.ird.observe.ui.content.table.ContentTableMeta; +import fr.ird.observe.ui.content.table.ContentTableModel; +import fr.ird.observe.ui.content.table.ContentTableUIModel; +import fr.ird.observe.ui.content.table.ObserveContentTableUI; +import fr.ird.observe.ui.content.table.impl.longline.GearUseFeaturesMeasurementLonglinesTableModel; +import fr.ird.observe.ui.content.table.impl.longline.GearUseFeaturesLonglineTableModel; +import fr.ird.observe.ui.content.table.impl.longline.GearUseFeaturesLonglineUI; +import org.nuiton.topia.persistence.util.TopiaEntityBinder; +import org.nuiton.util.beans.BinderModelBuilder; + +import java.util.List; +import java.util.Set; + +/** + * Created on 3/24/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.16 + */ +public class GearUseFeaturesLonglineUIModel extends ContentTableUIModel<TripLongline, GearUseFeaturesLongline> { + + private static final long serialVersionUID = 1L; + + public static final String PROPERTY_GENERAL_TAB_VALID = "generalTabValid"; + + public static final Set<String> GENERAL_TAB_PROPERTIES = + ImmutableSet.<String>builder().add(GearUseFeaturesLongline.PROPERTY_GEAR, + GearUseFeaturesLongline.PROPERTY_NUMBER, + GearUseFeaturesLongline.PROPERTY_USED_IN_TRIP, + GearUseFeaturesLongline.PROPERTY_COMMENT).build(); + + protected boolean generalTabValid; + + private final GearUseFeaturesMeasurementLonglinesTableModel measurementsTableModel; + + public GearUseFeaturesLonglineUIModel(GearUseFeaturesLonglineUI ui) { + + super(TripLongline.class, + GearUseFeaturesLongline.class, + new String[]{TripLongline.PROPERTY_GEAR_USE_FEATURES_LONGLINE}, + new String[]{ + GearUseFeaturesLongline.PROPERTY_COMMENT, + GearUseFeaturesLongline.PROPERTY_GEAR, + GearUseFeaturesLongline.PROPERTY_NUMBER, + GearUseFeaturesLongline.PROPERTY_USED_IN_TRIP}); + + BinderService binderService = ObserveServiceHelper.get().getBinderService(); + + String binderName = getClass().getName() + "-open"; + + TopiaEntityBinder<GearUseFeaturesMeasurementLongline> binder = binderService.getTopiaBinder(GearUseFeaturesMeasurementLongline.class, binderName); + + if (binder == null) { + + BinderModelBuilder<GearUseFeaturesMeasurementLongline, GearUseFeaturesMeasurementLongline> builder = + binderService.newBinderBuilder(GearUseFeaturesMeasurementLongline.class, + GearUseFeaturesMeasurementLongline.PROPERTY_GEAR_CARACTERISTIC, + GearUseFeaturesMeasurementLongline.PROPERTY_MEASUREMENT_VALUE); + + binder = binderService.registerTopiaBinder(GearUseFeaturesMeasurementLongline.class, builder, binderName); + + } + + this.measurementsTableModel = new GearUseFeaturesMeasurementLonglinesTableModel(binder); + + List<ContentTableMeta<GearUseFeaturesLongline>> metas = Lists.newArrayList( + ContentTableModel.newTableMeta(GearUseFeaturesLongline.class, GearUseFeaturesLongline.PROPERTY_GEAR, false), + ContentTableModel.newTableMeta(GearUseFeaturesLongline.class, GearUseFeaturesLongline.PROPERTY_NUMBER, false), + ContentTableModel.newTableMeta(GearUseFeaturesLongline.class, GearUseFeaturesLongline.PROPERTY_USED_IN_TRIP, false), + ContentTableModel.newTableMeta(GearUseFeaturesLongline.class, GearUseFeaturesLongline.PROPERTY_COMMENT, false)); + + initModel(ui, metas); + + } + + @Override + protected GearUseFeaturesLonglineTableModel createTableModel(ObserveContentTableUI<TripLongline, GearUseFeaturesLongline> ui, List<ContentTableMeta<GearUseFeaturesLongline>> contentTableMetas) { + return new GearUseFeaturesLonglineTableModel(ui, contentTableMetas); + } + + public GearUseFeaturesMeasurementLonglinesTableModel getMeasurementsTableModel() { + return measurementsTableModel; + } + + public boolean isGeneralTabValid() { + return generalTabValid; + } + + public void setGeneralTabValid(boolean generalTabValid) { + this.generalTabValid = generalTabValid; + firePropertyChange(PROPERTY_GENERAL_TAB_VALID, null, isGeneralTabValid()); + } + +} \ No newline at end of file diff --git a/observe-swing/src/main/java/fr/ird/observe/ui/content/table/impl/longline/GearUseFeaturesMeasurementLonglinesTableModel.java b/observe-swing/src/main/java/fr/ird/observe/ui/content/table/impl/longline/GearUseFeaturesMeasurementLonglinesTableModel.java new file mode 100644 index 0000000..6525057 --- /dev/null +++ b/observe-swing/src/main/java/fr/ird/observe/ui/content/table/impl/longline/GearUseFeaturesMeasurementLonglinesTableModel.java @@ -0,0 +1,124 @@ +package fr.ird.observe.ui.content.table.impl.longline; + +/* + * #%L + * ObServe :: Swing + * %% + * Copyright (C) 2008 - 2015 IRD, Codelutin, Tony Chemit + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import fr.ird.observe.entities.referentiel.GearCaracteristic; +import fr.ird.observe.entities.longline.GearUseFeaturesMeasurementLongline; +import fr.ird.observe.entities.longline.GearUseFeaturesMeasurementLonglineImpl; +import fr.ird.observe.ui.util.table.EditableTableWithCacheTableModelSupport; +import org.nuiton.topia.persistence.util.TopiaEntityBinder; + +/** + * Created on 4/7/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.16 + */ +public class GearUseFeaturesMeasurementLonglinesTableModel extends EditableTableWithCacheTableModelSupport<GearUseFeaturesMeasurementLongline> { + + private static final long serialVersionUID = 1L; + + public GearUseFeaturesMeasurementLonglinesTableModel(TopiaEntityBinder<GearUseFeaturesMeasurementLongline> topiaBinder) { + super(topiaBinder); + } + + @Override + public boolean isRowNotEmpty(GearUseFeaturesMeasurementLongline valid) { + return !(valid.getGearCaracteristic() == null && valid.getMeasurementValue() == null); + } + + @Override + protected boolean isRowValid(GearUseFeaturesMeasurementLongline valid) { + String size = valid.getMeasurementValue(); + return !(valid.getGearCaracteristic() == null || size == null) && !size.isEmpty(); + } + + @Override + public int getColumnCount() { + return 2; + } + + @Override + public Object getValueAt(int rowIndex, int columnIndex) { + + GearUseFeaturesMeasurementLongline measure = data.get(rowIndex); + Object result; + switch (columnIndex) { + case 0: + result = measure.getGearCaracteristic(); + break; + case 1: + result = measure.getMeasurementValue(); + break; + default: + throw new IllegalStateException("Can't come here"); + } + return result; + } + + @Override + public boolean isCellEditable(int rowIndex, int columnIndex) { + + boolean result; + switch (columnIndex) { + case 0: + result = true; + break; + case 1: + GearUseFeaturesMeasurementLongline measure = data.get(rowIndex); + result = measure != null && measure.getGearCaracteristic() != null; + break; + default: + throw new IllegalStateException("Can't come here"); + } + return result; + + } + + @Override + public void setValueAt(Object aValue, int rowIndex, int columnIndex) { + + GearUseFeaturesMeasurementLongline measure = data.get(rowIndex); + switch (columnIndex) { + case 0: + + measure.setGearCaracteristic((GearCaracteristic) aValue); + break; + case 1: + + measure.setMeasurementValue(aValue == null ? null : String.valueOf(aValue)); + break; + + default: + throw new IllegalStateException("Can't come here"); + } + + setModified(true); + + } + + @Override + protected GearUseFeaturesMeasurementLongline createNewRow() { + return new GearUseFeaturesMeasurementLonglineImpl(); + } +} \ No newline at end of file diff --git a/observe-swing/src/main/java/fr/ird/observe/ui/tree/loadors/ProgramLonglineNodeChildLoador.java b/observe-swing/src/main/java/fr/ird/observe/ui/tree/loadors/ProgramLonglineNodeChildLoador.java index a887b05..5c30a30 100644 --- a/observe-swing/src/main/java/fr/ird/observe/ui/tree/loadors/ProgramLonglineNodeChildLoador.java +++ b/observe-swing/src/main/java/fr/ird/observe/ui/tree/loadors/ProgramLonglineNodeChildLoador.java @@ -49,6 +49,7 @@ public class ProgramLonglineNodeChildLoador extends AbstractNodeChildLoador<Trip private static final long serialVersionUID = 1L; static { + n("observe.tree.gearUseFeaturesLongline"); n("observe.tree.activityLongline"); } @@ -56,7 +57,7 @@ public class ProgramLonglineNodeChildLoador extends AbstractNodeChildLoador<Trip super(TripLongline.class); } - protected boolean addActivities; + protected boolean addChilds; @Override public void loadChilds(NavTreeBridge<ObserveNode> model, @@ -64,12 +65,12 @@ public class ProgramLonglineNodeChildLoador extends AbstractNodeChildLoador<Trip NavDataProvider dataProvider) throws Exception { DataSelectionModel selectionModel = getSelectionModel(dataProvider); - addActivities = selectionModel == null; + addChilds = selectionModel == null; try { super.loadChilds(model, parentNode, dataProvider); } finally { - addActivities = true; + addChilds = true; } } @@ -114,11 +115,20 @@ public class ProgramLonglineNodeChildLoador extends AbstractNodeChildLoador<Trip ObserveNode result = new TripLonglineNode(data); - if (addActivities) { + if (addChilds) { - ObserveNode child = ObserveTreeHelper.createStringNode( - TripLongline.PROPERTY_ACTIVITY_LONGLINE, ActivityLonglinesNodeChildLoador.class); - result.add(child); + { + // Add gears + ObserveNode child = ObserveTreeHelper.createStringNode(TripLongline.PROPERTY_GEAR_USE_FEATURES_LONGLINE); + result.add(child); + } + + { + // Add activities + ObserveNode child = ObserveTreeHelper.createStringNode( + TripLongline.PROPERTY_ACTIVITY_LONGLINE, ActivityLonglinesNodeChildLoador.class); + result.add(child); + } } diff --git a/observe-swing/src/main/resources/i18n/observe-swing_en_GB.properties b/observe-swing/src/main/resources/i18n/observe-swing_en_GB.properties index 8f762c2..f82a763 100644 --- a/observe-swing/src/main/resources/i18n/observe-swing_en_GB.properties +++ b/observe-swing/src/main/resources/i18n/observe-swing_en_GB.properties @@ -94,12 +94,14 @@ observe.action.country.modify.tip= observe.action.country.save.tip= observe.action.create=Create observe.action.create.activity=Create a new activity -observe.action.create.activity.tip= +observe.action.create.activity.tip=Create a new activity observe.action.create.entry.tip= -observe.action.create.gearUseFeaturesSeine= -observe.action.create.gearUseFeaturesSeine.tip= +observe.action.create.gearUseFeaturesLongline=Create a new gear use feature +observe.action.create.gearUseFeaturesLongline.tip=Create a new gear use feature +observe.action.create.gearUseFeaturesSeine=Create a new gear use feature +observe.action.create.gearUseFeaturesSeine.tip=Create a new gear use feature observe.action.create.maree=Create a new maree -observe.action.create.maree.tip= +observe.action.create.maree.tip=Create a new maree observe.action.create.nonTargetCatch= observe.action.create.nonTargetCatch.tip= observe.action.create.nonTargetSample= @@ -1042,28 +1044,47 @@ observe.gear.selectedGearCaracteristic=Selected caracteristics observe.gear.tab.gearCaracteristic=Caracteristics of the gear observe.gear.tab.general=General caracteristics observe.gear.unit=Unit -observe.gearUseFeaturesSeine.action.deleteSelectedMeasurement= -observe.gearUseFeaturesSeine.action.deleteSelectedMeasurement.tip= +observe.gearUseFeaturesLongline.action.deleteSelectedMeasurement=Delete selected measurement +observe.gearUseFeaturesLongline.action.deleteSelectedMeasurement.tip=Delete selected measurement +observe.gearUseFeaturesLongline.comment=Comment +observe.gearUseFeaturesLongline.gear=Gear +observe.gearUseFeaturesLongline.number=Number +observe.gearUseFeaturesLongline.tab.general=General +observe.gearUseFeaturesLongline.tab.measurements=Measurements +observe.gearUseFeaturesLongline.table.comment=Comment +observe.gearUseFeaturesLongline.table.comment.tip=Comment +observe.gearUseFeaturesLongline.table.gear=Gear +observe.gearUseFeaturesLongline.table.gear.tip=Gear +observe.gearUseFeaturesLongline.table.gearCaracteristic=Caracteristic +observe.gearUseFeaturesLongline.table.gearCaracteristic.tip=Gear caracteristic +observe.gearUseFeaturesLongline.table.number=Number +observe.gearUseFeaturesLongline.table.number.tip=Number +observe.gearUseFeaturesLongline.table.usedInTrip=Used +observe.gearUseFeaturesLongline.table.usedInTrip.tip=Used in trip +observe.gearUseFeaturesLongline.table.value=Value +observe.gearUseFeaturesLongline.table.value.tip=Caracteristic value +observe.gearUseFeaturesLongline.title=Gears +observe.gearUseFeaturesLongline.usedInTrip=Used in trip +observe.gearUseFeaturesSeine.action.deleteSelectedMeasurement=Delete selected measurement +observe.gearUseFeaturesSeine.action.deleteSelectedMeasurement.tip=Delete selected measurement observe.gearUseFeaturesSeine.comment=Comment observe.gearUseFeaturesSeine.gear=Gear observe.gearUseFeaturesSeine.number=Number -observe.gearUseFeaturesSeine.tab.general= -observe.gearUseFeaturesSeine.tab.measurements= +observe.gearUseFeaturesSeine.tab.general=General +observe.gearUseFeaturesSeine.tab.measurements=Measurements observe.gearUseFeaturesSeine.table.comment=Comment observe.gearUseFeaturesSeine.table.comment.tip=Comment observe.gearUseFeaturesSeine.table.gear=Gear observe.gearUseFeaturesSeine.table.gear.tip=Gear -observe.gearUseFeaturesSeine.table.gearCaracteristic= -observe.gearUseFeaturesSeine.table.gearCaracteristic.tip= +observe.gearUseFeaturesSeine.table.gearCaracteristic=Caracteristic +observe.gearUseFeaturesSeine.table.gearCaracteristic.tip=Gear caracteristic observe.gearUseFeaturesSeine.table.number=Number observe.gearUseFeaturesSeine.table.number.tip=Number -observe.gearUseFeaturesSeine.table.size= -observe.gearUseFeaturesSeine.table.size.tip= observe.gearUseFeaturesSeine.table.usedInTrip=Used observe.gearUseFeaturesSeine.table.usedInTrip.tip=Used in trip -observe.gearUseFeaturesSeine.table.value= -observe.gearUseFeaturesSeine.table.value.tip= -observe.gearUseFeaturesSeine.title= +observe.gearUseFeaturesSeine.table.value=Value +observe.gearUseFeaturesSeine.table.value.tip=Caracteristic value +observe.gearUseFeaturesSeine.title=Gears observe.gearUseFeaturesSeine.usedInTrip=Used in trip observe.harbour.coordinates= observe.harbour.locode= @@ -1981,6 +2002,7 @@ observe.tree.fpaZone=Fpa zone observe.tree.gear=Gear observe.tree.gearCaracteristic=Gear caracteristic observe.tree.gearCaracteristicType=Gear caracteristic type +observe.tree.gearUseFeaturesLongline= observe.tree.gearUseFeaturesSeine=GearUseFeaturesSeine observe.tree.harbour=Harbour observe.tree.healthness=Healthness diff --git a/observe-swing/src/main/resources/i18n/observe-swing_es_ES.properties b/observe-swing/src/main/resources/i18n/observe-swing_es_ES.properties index 8d47d26..815c31a 100644 --- a/observe-swing/src/main/resources/i18n/observe-swing_es_ES.properties +++ b/observe-swing/src/main/resources/i18n/observe-swing_es_ES.properties @@ -96,6 +96,8 @@ observe.action.create=Crear observe.action.create.activity=Crear una nueva actividad observe.action.create.activity.tip=Crear una nueva actividad para la ruta actual observe.action.create.entry.tip=Crear una nueva entrada +observe.action.create.gearUseFeaturesLongline= +observe.action.create.gearUseFeaturesLongline.tip= observe.action.create.gearUseFeaturesSeine= observe.action.create.gearUseFeaturesSeine.tip= observe.action.create.maree=Crear nueva marea @@ -1042,6 +1044,27 @@ observe.gear.selectedGearCaracteristic= observe.gear.tab.gearCaracteristic= observe.gear.tab.general= observe.gear.unit= +observe.gearUseFeaturesLongline.action.deleteSelectedMeasurement= +observe.gearUseFeaturesLongline.action.deleteSelectedMeasurement.tip= +observe.gearUseFeaturesLongline.comment= +observe.gearUseFeaturesLongline.gear= +observe.gearUseFeaturesLongline.number= +observe.gearUseFeaturesLongline.tab.general= +observe.gearUseFeaturesLongline.tab.measurements= +observe.gearUseFeaturesLongline.table.comment= +observe.gearUseFeaturesLongline.table.comment.tip= +observe.gearUseFeaturesLongline.table.gear= +observe.gearUseFeaturesLongline.table.gear.tip= +observe.gearUseFeaturesLongline.table.gearCaracteristic= +observe.gearUseFeaturesLongline.table.gearCaracteristic.tip= +observe.gearUseFeaturesLongline.table.number= +observe.gearUseFeaturesLongline.table.number.tip= +observe.gearUseFeaturesLongline.table.usedInTrip= +observe.gearUseFeaturesLongline.table.usedInTrip.tip= +observe.gearUseFeaturesLongline.table.value= +observe.gearUseFeaturesLongline.table.value.tip= +observe.gearUseFeaturesLongline.title= +observe.gearUseFeaturesLongline.usedInTrip= observe.gearUseFeaturesSeine.action.deleteSelectedMeasurement= observe.gearUseFeaturesSeine.action.deleteSelectedMeasurement.tip= observe.gearUseFeaturesSeine.comment= @@ -1981,6 +2004,7 @@ observe.tree.fpaZone= observe.tree.gear= observe.tree.gearCaracteristic= observe.tree.gearCaracteristicType= +observe.tree.gearUseFeaturesLongline= observe.tree.gearUseFeaturesSeine= observe.tree.harbour=Puerto observe.tree.healthness= diff --git a/observe-swing/src/main/resources/i18n/observe-swing_fr_FR.properties b/observe-swing/src/main/resources/i18n/observe-swing_fr_FR.properties index 80a126d..bcbde51 100644 --- a/observe-swing/src/main/resources/i18n/observe-swing_fr_FR.properties +++ b/observe-swing/src/main/resources/i18n/observe-swing_fr_FR.properties @@ -96,6 +96,8 @@ observe.action.create=Créer observe.action.create.activity=Créer une nouvelle activité observe.action.create.activity.tip=Créer une nouvelle activité pour la route courante observe.action.create.entry.tip=Créer une nouvelle entrée +observe.action.create.gearUseFeaturesLongline=Créer un équipement +observe.action.create.gearUseFeaturesLongline.tip=Créer un nouvel équipement observe.action.create.gearUseFeaturesSeine=Créer un équipement observe.action.create.gearUseFeaturesSeine.tip=Créer un nouvel équipement observe.action.create.maree=Créer une nouvelle marée @@ -1042,6 +1044,27 @@ observe.gear.selectedGearCaracteristic=Caractéristiques utilisées observe.gear.tab.gearCaracteristic=Caractéristiques de l'équipement observe.gear.tab.general=Caractéristiques générales observe.gear.unit=Unité +observe.gearUseFeaturesLongline.action.deleteSelectedMeasurement=Supprimer +observe.gearUseFeaturesLongline.action.deleteSelectedMeasurement.tip=Supprimer la caractéristique +observe.gearUseFeaturesLongline.comment=Commentaire +observe.gearUseFeaturesLongline.gear=Équipement +observe.gearUseFeaturesLongline.number=Nombre +observe.gearUseFeaturesLongline.tab.general=Définition +observe.gearUseFeaturesLongline.tab.measurements=Caractéristiques +observe.gearUseFeaturesLongline.table.comment=Commentaire +observe.gearUseFeaturesLongline.table.comment.tip=Commentaire +observe.gearUseFeaturesLongline.table.gear=Équipement +observe.gearUseFeaturesLongline.table.gear.tip=Équipement +observe.gearUseFeaturesLongline.table.gearCaracteristic=Caractéristique +observe.gearUseFeaturesLongline.table.gearCaracteristic.tip=Caractéristique +observe.gearUseFeaturesLongline.table.number=Nombre +observe.gearUseFeaturesLongline.table.number.tip=Nombre +observe.gearUseFeaturesLongline.table.usedInTrip=Utilisé +observe.gearUseFeaturesLongline.table.usedInTrip.tip=Utilisé dans la marée +observe.gearUseFeaturesLongline.table.value=Valeur +observe.gearUseFeaturesLongline.table.value.tip=Valeur +observe.gearUseFeaturesLongline.title=Équipements +observe.gearUseFeaturesLongline.usedInTrip=Utilisé dans la marée observe.gearUseFeaturesSeine.action.deleteSelectedMeasurement=Supprimer observe.gearUseFeaturesSeine.action.deleteSelectedMeasurement.tip=Supprimer la caractéristique observe.gearUseFeaturesSeine.comment=Commentaire @@ -1979,6 +2002,7 @@ observe.tree.fpaZone=Zone FPA observe.tree.gear=Équipement observe.tree.gearCaracteristic=Caractéristique d'un équipement observe.tree.gearCaracteristicType=Type de caractéristique d'équipement +observe.tree.gearUseFeaturesLongline=Équipements observe.tree.gearUseFeaturesSeine=Équipements observe.tree.harbour=Port observe.tree.healthness=Status de la capture -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.