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 538d59602518500e7b2f525d4ebba1ee7e92e821 Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Mar 31 19:48:49 2015 +0200 les interface graphiques sont ok pour l'import - export avec la sélection des données --- .../filtered-resources/tutti-help-fr.properties | 14 +- .../genericformat/GenericFormatExportUI.css | 21 +-- .../genericformat/GenericFormatExportUI.jaxx | 33 ++-- .../GenericFormatExportUIHandler.java | 32 +++- .../genericformat/GenericFormatExportUIModel.java | 15 +- .../genericformat/GenericFormatImportUI.css | 102 ++++++++++++ .../genericformat/GenericFormatImportUI.jaxx | 43 ++++- .../GenericFormatImportUIHandler.java | 69 +++++++- .../genericformat/GenericFormatImportUIModel.java | 158 ++++++++++++++++++- ...ataAction.java => ExportFoldAllDataAction.java} | 9 +- .../actions/ExportSelectAllDataAction.java | 29 ++++ ...aAction.java => ExportUnfoldAllDataAction.java} | 11 +- .../actions/ExportUnselectAllDataAction.java | 29 ++++ ...ataAction.java => ImportFoldAllDataAction.java} | 17 +- .../actions/ImportSelectAllDataAction.java | 29 ++++ ...aAction.java => ImportUnfoldAllDataAction.java} | 19 ++- .../actions/ImportUnselectAllDataAction.java | 29 ++++ .../genericformat/actions/SelectAllDataAction.java | 35 ----- .../actions/UnselectAllDataAction.java | 35 ----- .../genericformat/tree/CruiseSelectTreeNode.java | 14 +- .../tree/DataSelectTreeCellEditor.java | 65 -------- .../genericformat/tree/DataSelectTreeModel.java | 175 +++++++++++++++++++++ .../tree/DataSelectTreeNodeSupport.java | 3 + ....java => ExportDataSelectTreeCellRenderer.java} | 4 +- ....java => ImportDataSelectTreeCellRenderer.java} | 98 ++++++++---- .../resources/i18n/tutti-ui-swing_en_GB.properties | 23 +++ .../resources/i18n/tutti-ui-swing_fr_FR.properties | 24 ++- 27 files changed, 889 insertions(+), 246 deletions(-) diff --git a/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties b/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties index 0a7e502..e1be6c2 100644 --- a/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties +++ b/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties @@ -1,5 +1,5 @@ #Generated by org.nuiton.jaxx.plugin.GenerateHelpIdsMojo -#Sun Mar 29 16:12:43 CEST 2015 +#Tue Mar 31 13:19:15 CEST 2015 tutti.config.help=config.html tutti.createAccidentalBatch.action.cancel.help=editFishingOperation.html\#captureCapturesAccidentellesActions tutti.createAccidentalBatch.action.saveAndClose.help=editFishingOperation.html\#captureCapturesAccidentellesActions @@ -325,19 +325,31 @@ tutti.genericFormatExport.field.exportMarineLitter.help= tutti.genericFormatExport.field.exportSpecies.help= tutti.genericFormatExport.field.program.help= tutti.genericFormatImport.action.closeGenericFormatImport.help=genericFormat.html\#generic_format_import_actions +tutti.genericFormatImport.action.foldAll.help= tutti.genericFormatImport.action.generateReport.help=genericFormat.html\#generic_format_import_actions tutti.genericFormatImport.action.import.help=genericFormat.html\#generic_format_import_actions tutti.genericFormatImport.action.openImportReport.help=genericFormat.html\#generic_format_import_actions tutti.genericFormatImport.action.openValidateReport.help=genericFormat.html\#generic_format_import_actions tutti.genericFormatImport.action.saveImportReport.help=genericFormat.html\#generic_format_import_actions tutti.genericFormatImport.action.saveValidateReport.help=genericFormat.html\#generic_format_import_actions +tutti.genericFormatImport.action.selectAll.help= tutti.genericFormatImport.action.showReport.help=genericFormat.html\#generic_format_import_actions +tutti.genericFormatImport.action.unfoldAll.help= +tutti.genericFormatImport.action.unselectAll.help= tutti.genericFormatImport.action.validate.help=genericFormat.html\#generic_format_import_actions tutti.genericFormatImport.field.checkWeights.help=genericFormat.html\#generic_format_import_fields tutti.genericFormatImport.field.cleanWeights.help=genericFormat.html\#generic_format_import_fields +tutti.genericFormatImport.field.importAccidentalCatch.help= +tutti.genericFormatImport.field.importAttachments.help= +tutti.genericFormatImport.field.importBenthos.help= +tutti.genericFormatImport.field.importIndividualObservation.help= +tutti.genericFormatImport.field.importMarineLitter.help= tutti.genericFormatImport.field.importResult.help=genericFormat.html\#generic_format_import_fields +tutti.genericFormatImport.field.importSpecies.help= tutti.genericFormatImport.field.overrideData.help=genericFormat.html\#generic_format_import_fields tutti.genericFormatImport.field.program.help=genericFormat.html\#generic_format_import_fields +tutti.genericFormatImport.field.updateCruises.help= +tutti.genericFormatImport.field.updateOperations.help= tutti.genericFormatImport.field.validateResult.help=genericFormat.html\#generic_format_import_fields tutti.genericFormatImport.field.validationResult.help=genericFormat.html\#generic_format_import_fields tutti.genericFormatImport.help=genericFormat.html\#generic_format_import diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatExportUI.css b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatExportUI.css index ea92a8e..b1bf5d0 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatExportUI.css +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatExportUI.css @@ -47,13 +47,12 @@ JToolBar { } #dataSelectionTree { - model: {new DefaultTreeModel(null)}; + model: {treeModel}; rootVisible: false; scrollsOnExpand: true; - editable: true; - toggleClickCount: 1; - cellEditor: {new DataSelectTreeCellEditor(dataSelectionTree)}; - cellRenderer: {new DataSelectTreeCellRenderer()}; + editable: false; + toggleClickCount: 2; + cellRenderer: {new ExportDataSelectTreeCellRenderer()}; } #programLabel { @@ -133,37 +132,33 @@ JToolBar { #selectAllButton { actionIcon: select; - /*text: "tutti.genericFormatExport.action.selectAll";*/ toolTipText: "tutti.genericFormatExport.action.selectAll.tip"; enabled: {model.getProgram() != null}; - _simpleAction: {fr.ifremer.tutti.ui.swing.content.genericformat.actions.SelectAllDataAction.class}; + _simpleAction: {fr.ifremer.tutti.ui.swing.content.genericformat.actions.ExportSelectAllDataAction.class}; _help: {"tutti.genericFormatExport.action.selectAll.help"}; } #unselectAllButton { actionIcon: unselect; - /*text: "tutti.genericFormatExport.action.unselectAll";*/ toolTipText: "tutti.genericFormatExport.action.unselectAll.tip"; enabled: {model.getProgram() != null}; - _simpleAction: {fr.ifremer.tutti.ui.swing.content.genericformat.actions.UnselectAllDataAction.class}; + _simpleAction: {fr.ifremer.tutti.ui.swing.content.genericformat.actions.ExportUnselectAllDataAction.class}; _help: {"tutti.genericFormatExport.action.unselectAll.help"}; } #foldAllButton { actionIcon: collapse; - /*text: "tutti.genericFormatExport.action.foldAll";*/ toolTipText: "tutti.genericFormatExport.action.foldAll.tip"; enabled: {model.getProgram() != null}; - _simpleAction: {fr.ifremer.tutti.ui.swing.content.genericformat.actions.FoldAllDataAction.class}; + _simpleAction: {fr.ifremer.tutti.ui.swing.content.genericformat.actions.ExportFoldAllDataAction.class}; _help: {"tutti.genericFormatExport.action.foldAll.help"}; } #unfoldAllButton { actionIcon: expand; - /*text: "tutti.genericFormatExport.action.unfoldAll";*/ toolTipText: "tutti.genericFormatExport.action.unfoldAll.tip"; enabled: {model.getProgram() != null}; - _simpleAction: {fr.ifremer.tutti.ui.swing.content.genericformat.actions.UnfoldAllDataAction.class}; + _simpleAction: {fr.ifremer.tutti.ui.swing.content.genericformat.actions.ExportUnfoldAllDataAction.class}; _help: {"tutti.genericFormatExport.action.unfoldAll.help"}; } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatExportUI.jaxx b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatExportUI.jaxx index ab64dbe..30702f5 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatExportUI.jaxx +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatExportUI.jaxx @@ -29,8 +29,8 @@ fr.ifremer.tutti.ui.swing.util.TuttiUI fr.ifremer.tutti.ui.swing.util.TuttiUIUtil - fr.ifremer.tutti.ui.swing.content.genericformat.tree.DataSelectTreeCellEditor - fr.ifremer.tutti.ui.swing.content.genericformat.tree.DataSelectTreeCellRenderer + fr.ifremer.tutti.ui.swing.content.genericformat.tree.DataSelectTreeModel + fr.ifremer.tutti.ui.swing.content.genericformat.tree.ExportDataSelectTreeCellRenderer jaxx.runtime.swing.editor.bean.BeanFilterableComboBox @@ -49,6 +49,8 @@ <GenericFormatExportUIModel id='model' initializer='getContextValue(GenericFormatExportUIModel.class)'/> + <DataSelectTreeModel id='treeModel'/> + <TuttiHelpBroker id='broker' constructorParams='"tutti.genericFormatimport.help"'/> <BeanValidator id='validator' bean='model' context='edit' uiClass='jaxx.runtime.validator.swing.ui.ImageValidationUI'> @@ -84,6 +86,14 @@ <JCheckBox id='exportIndividualObservationCheckBox' onItemStateChanged='handler.setBoolean(event, "exportIndividualObservation")'/> </JPanel> </JPanel> + + <JToolBar id='dataSelectionTreeHeader' constraints='BorderLayout.SOUTH'> + <JButton id='unfoldAllButton'/> + <JButton id='foldAllButton'/> + <JButton id='selectAllButton'/> + <JButton id='unselectAllButton'/> + </JToolBar> + </JPanel> </cell> </row> @@ -99,23 +109,4 @@ </Table> - <JToolBar id='dataSelectionTreeHeader'> - <JButton id='unfoldAllButton'/> - <JButton id='foldAllButton'/> - <JButton id='selectAllButton'/> - <JButton id='unselectAllButton'/> - </JToolBar> - - <!--Table fill='both' constraints='BorderLayout.SOUTH'> - - <row> - <cell fill='both' weightx="1"> - <JPanel layout='{new GridLayout(1, 0)}'> - <JButton id='closeButton'/> - <JButton id='exportButton'/> - </JPanel> - </cell> - </row> - </Table--> - </JPanel> diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatExportUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatExportUIHandler.java index fd14a96..8177f83 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatExportUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatExportUIHandler.java @@ -4,6 +4,7 @@ import com.google.common.collect.Lists; import com.google.common.collect.Sets; import fr.ifremer.tutti.persistence.entities.data.Program; import fr.ifremer.tutti.persistence.model.ProgramDataModel; +import fr.ifremer.tutti.ui.swing.content.genericformat.tree.DataSelectTreeModel; import fr.ifremer.tutti.ui.swing.content.genericformat.tree.ProgramSelectTreeNode; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; import jaxx.runtime.validator.swing.SwingValidator; @@ -14,6 +15,8 @@ import org.nuiton.jaxx.application.swing.util.CloseableUI; import javax.swing.JComponent; import javax.swing.JTree; import javax.swing.ToolTipManager; +import javax.swing.event.TreeModelEvent; +import javax.swing.event.TreeModelListener; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreeSelectionModel; import java.beans.PropertyChangeEvent; @@ -44,7 +47,8 @@ public class GenericFormatExportUIHandler extends AbstractTuttiUIHandler<Generic model.addPropertyChangeListener(new PropertyChangeListener() { - final Set<String> propertyNamesToCanExport = Sets.newHashSet(GenericFormatExportUIModel.PROPERTY_PROGRAM); + final Set<String> propertyNamesToCanExport = Sets.newHashSet(GenericFormatExportUIModel.PROPERTY_PROGRAM, + GenericFormatExportUIModel.PROPERTY_DATA_SELECTED); @Override public void propertyChange(PropertyChangeEvent evt) { @@ -87,8 +91,32 @@ public class GenericFormatExportUIHandler extends AbstractTuttiUIHandler<Generic JTree tree = ui.getDataSelectionTree(); tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION); - ToolTipManager.sharedInstance().registerComponent(tree); + DataSelectTreeModel.installDataSelectionHandler(tree); + + DataSelectTreeModel treeModel = ui.getTreeModel(); + treeModel.addTreeModelListener(new TreeModelListener() { + @Override + public void treeNodesChanged(TreeModelEvent e) { + + DataSelectTreeModel source = (DataSelectTreeModel) e.getSource(); + boolean dataSelected = source.isDataSelected(); + getModel().setDataSelected(dataSelected); + + } + + @Override + public void treeNodesInserted(TreeModelEvent e) { + } + + @Override + public void treeNodesRemoved(TreeModelEvent e) { + } + + @Override + public void treeStructureChanged(TreeModelEvent e) { + } + }); if (getDataContext().isProgramFilled()) { diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatExportUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatExportUIModel.java index 69ddefc..4a9f230 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatExportUIModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatExportUIModel.java @@ -30,6 +30,8 @@ public class GenericFormatExportUIModel extends AbstractSerializableBean { public static final String PROPERTY_EXPORT_INDIVIDUAL_OBSERVATION = "exportIndividualObservation"; + public static final String PROPERTY_DATA_SELECTED= "dataSelected"; + public static final String PROPERTY_CAN_EXPORT = "canExport"; private Program program; @@ -48,6 +50,8 @@ public class GenericFormatExportUIModel extends AbstractSerializableBean { private boolean canExport; + private boolean dataSelected; + private ProgramSelectTreeNode rootNode; public GenericFormatExportConfiguration toExportConfiguration() { @@ -141,9 +145,18 @@ public class GenericFormatExportUIModel extends AbstractSerializableBean { firePropertyChange(PROPERTY_CAN_EXPORT, null, canExport); } + public boolean isDataSelected() { + return dataSelected; + } + + public void setDataSelected(boolean dataSelected) { + this.dataSelected = dataSelected; + firePropertyChange(PROPERTY_DATA_SELECTED, null, dataSelected); + } + public boolean computeIsCanExport() { //TODO select data - return getProgram() != null; + return getProgram() != null && isDataSelected(); } public void setRootNode(ProgramSelectTreeNode rootNode) { diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatImportUI.css b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatImportUI.css index 9fa315f..042e2a4 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatImportUI.css +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatImportUI.css @@ -75,6 +75,24 @@ JTextField { selectedFile: {model.getImportFile()}; } +#importOptions { + border: {BorderFactory.createTitledBorder(t("tutti.genericFormatImport.importOptions.legend"))}; +} + +#dataSelectionPane { + border: {BorderFactory.createTitledBorder(t("tutti.genericFormatImport.selectData.legend"))}; + columnHeaderView: {dataSelectionTreeHeader}; +} + +#dataSelectionTree { + model: {treeModel}; + rootVisible: false; + scrollsOnExpand: true; + editable: false; + toggleClickCount: 2; + cellRenderer: {new ImportDataSelectTreeCellRenderer()}; +} + #overrideDataCheckBox { text: "tutti.genericFormatImport.field.overrideData"; selected: {model.isOverrideData()}; @@ -120,6 +138,62 @@ JTextField { visible: {model.isValidateDone() && model.isValidateValid()}; } +#updateCruisesCheckBox { + text: "tutti.genericFormatImport.field.updateCruises"; + selected: {model.isUpdateCruises()}; + toolTipText: "tutti.genericFormatImport.field.updateCruises.tip"; + _help: {"tutti.genericFormatImport.field.updateCruises.help"}; +} + +#updateOperationsCheckBox { + text: "tutti.genericFormatImport.field.updateOperations"; + selected: {model.isUpdateOperations()}; + toolTipText: "tutti.genericFormatImport.field.updateOperations.tip"; + _help: {"tutti.genericFormatImport.field.updateOperations.help"}; +} + +#importSpeciesCheckBox { + text: "tutti.genericFormatImport.field.importSpecies"; + selected: {model.isImportSpecies()}; + toolTipText: "tutti.genericFormatImport.field.importSpecies.tip"; + _help: {"tutti.genericFormatImport.field.importSpecies.help"}; +} + +#importBenthosCheckBox { + text: "tutti.genericFormatImport.field.importBenthos"; + selected: {model.isImportBenthos()}; + toolTipText: "tutti.genericFormatImport.field.importBenthos.tip"; + _help: {"tutti.genericFormatImport.field.importBenthos.help"}; +} + +#importMarineLitterCheckBox { + text: "tutti.genericFormatImport.field.importMarineLitter"; + selected: {model.isImportMarineLitter()}; + toolTipText: "tutti.genericFormatImport.field.importMarineLitter.tip"; + _help: {"tutti.genericFormatImport.field.importMarineLitter.help"}; +} + +#importAccidentalCatchCheckBox { + text: "tutti.genericFormatImport.field.importAccidentalCatch"; + selected: {model.isImportAccidentalCatch()}; + toolTipText: "tutti.genericFormatImport.field.importAccidentalCatch.tip"; + _help: {"tutti.genericFormatImport.field.importAccidentalCatch.help"}; +} + +#importIndividualObservationCheckBox { + text: "tutti.genericFormatImport.field.importIndividualObservation"; + selected: {model.isImportIndividualObservation()}; + toolTipText: "tutti.genericFormatImport.field.importIndividualObservation.tip"; + _help: {"tutti.genericFormatImport.field.importIndividualObservation.help"}; +} + +#importAttachmentsCheckBox { + text: "tutti.genericFormatImport.field.importAttachments"; + selected: {model.isImportAttachments()}; + toolTipText: "tutti.genericFormatImport.field.importAttachments.tip"; + _help: {"tutti.genericFormatImport.field.importAttachments.help"}; +} + #cleanWeightsCheckBox { text: "tutti.genericFormatImport.field.cleanWeights"; selected: {model.isCleanWeights()}; @@ -175,3 +249,31 @@ JTextField { _applicationAction: {fr.ifremer.tutti.ui.swing.content.actions.OpenHomeScreenAction.class}; _help: {"tutti.genericFormatImport.action.closeGenericFormatImport.help"}; } + +#selectAllButton { + actionIcon: select; + toolTipText: "tutti.genericFormatImport.action.selectAll.tip"; + _simpleAction: {fr.ifremer.tutti.ui.swing.content.genericformat.actions.ImportSelectAllDataAction.class}; + _help: {"tutti.genericFormatImport.action.selectAll.help"}; +} + +#unselectAllButton { + actionIcon: unselect; + toolTipText: "tutti.genericFormatImport.action.unselectAll.tip"; + _simpleAction: {fr.ifremer.tutti.ui.swing.content.genericformat.actions.ImportUnselectAllDataAction.class}; + _help: {"tutti.genericFormatImport.action.unselectAll.help"}; +} + +#foldAllButton { + actionIcon: collapse; + toolTipText: "tutti.genericFormatImport.action.foldAll.tip"; + _simpleAction: {fr.ifremer.tutti.ui.swing.content.genericformat.actions.ImportFoldAllDataAction.class}; + _help: {"tutti.genericFormatImport.action.foldAll.help"}; +} + +#unfoldAllButton { + actionIcon: expand; + toolTipText: "tutti.genericFormatImport.action.unfoldAll.tip"; + _simpleAction: {fr.ifremer.tutti.ui.swing.content.genericformat.actions.ImportUnfoldAllDataAction.class}; + _help: {"tutti.genericFormatImport.action.unfoldAll.help"}; +} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatImportUI.jaxx b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatImportUI.jaxx index dcd6800..b51877e 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatImportUI.jaxx +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatImportUI.jaxx @@ -26,12 +26,17 @@ fr.ifremer.tutti.persistence.entities.data.Program fr.ifremer.tutti.ui.swing.TuttiHelpBroker + + fr.ifremer.tutti.ui.swing.content.genericformat.tree.DataSelectTreeModel + fr.ifremer.tutti.ui.swing.content.genericformat.tree.ImportDataSelectTreeCellRenderer + fr.ifremer.tutti.ui.swing.util.TuttiUI fr.ifremer.tutti.ui.swing.util.TuttiUIUtil jaxx.runtime.swing.editor.bean.BeanFilterableComboBox jaxx.runtime.swing.editor.FileEditor + javax.swing.tree.DefaultTreeModel static org.nuiton.i18n.I18n.t static jaxx.runtime.SwingUtil.getStringValue </import> @@ -45,6 +50,8 @@ <GenericFormatImportUIModel id='model' initializer='getContextValue(GenericFormatImportUIModel.class)'/> + <DataSelectTreeModel id='treeModel'/> + <TuttiHelpBroker id='broker' constructorParams='"tutti.genericFormatimport.help"'/> <BeanValidator id='validator' bean='model' context='edit' uiClass='jaxx.runtime.validator.swing.ui.ImageValidationUI'> @@ -109,12 +116,38 @@ <Table id='importPanel' fill='both' constraints='BorderLayout.CENTER'> - <!-- Import options --> <row fill='both'> - <cell fill='both' weightx='1'> - <JPanel layout='{new GridLayout(0, 1)}'> - <JCheckBox id='cleanWeightsCheckBox' onItemStateChanged='handler.setBoolean(event, "cleanWeights")'/> - <JCheckBox id='checkWeightsCheckBox' onItemStateChanged='handler.setBoolean(event, "checkWeights")'/> + <cell fill='both' weightx='1' weighty='1'> + <JPanel id='importConfiguration' layout='{new BorderLayout()}'> + + <!-- Data selection --> + <JScrollPane id='dataSelectionPane' constraints='BorderLayout.CENTER'> + <JTree id='dataSelectionTree'/> + </JScrollPane> + + <!-- Import options --> + <JPanel id='importOptions' layout='{new BorderLayout()}' constraints='BorderLayout.EAST'> + <JPanel layout='{new GridLayout(0, 1)}' constraints='BorderLayout.NORTH'> + <JCheckBox id='updateCruisesCheckBox' onItemStateChanged='handler.setBoolean(event, "updateCruises")'/> + <JCheckBox id='updateOperationsCheckBox' onItemStateChanged='handler.setBoolean(event, "updateOperations")'/> + <JCheckBox id='importSpeciesCheckBox' onItemStateChanged='handler.setBoolean(event, "importSpecies")'/> + <JCheckBox id='importBenthosCheckBox' onItemStateChanged='handler.setBoolean(event, "importBenthos")'/> + <JCheckBox id='importMarineLitterCheckBox' onItemStateChanged='handler.setBoolean(event, "importMarineLitter")'/> + <JCheckBox id='importAccidentalCatchCheckBox' onItemStateChanged='handler.setBoolean(event, "importAccidentalCatch")'/> + <JCheckBox id='importIndividualObservationCheckBox' onItemStateChanged='handler.setBoolean(event, "importIndividualObservation")'/> + <JCheckBox id='importAttachmentsCheckBox' onItemStateChanged='handler.setBoolean(event, "importAttachments")'/> + <JCheckBox id='cleanWeightsCheckBox' onItemStateChanged='handler.setBoolean(event, "cleanWeights")'/> + <JCheckBox id='checkWeightsCheckBox' onItemStateChanged='handler.setBoolean(event, "checkWeights")'/> + </JPanel> + </JPanel> + + <JToolBar id='dataSelectionTreeHeader' constraints='BorderLayout.SOUTH'> + <JButton id='unfoldAllButton'/> + <JButton id='foldAllButton'/> + <JButton id='selectAllButton'/> + <JButton id='unselectAllButton'/> + </JToolBar> + </JPanel> </cell> </row> diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatImportUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatImportUIHandler.java index aeece59..e82937b 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatImportUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatImportUIHandler.java @@ -27,6 +27,10 @@ package fr.ifremer.tutti.ui.swing.content.genericformat; import com.google.common.collect.Lists; import com.google.common.collect.Sets; import fr.ifremer.tutti.persistence.entities.data.Program; +import fr.ifremer.tutti.persistence.model.ProgramDataModel; +import fr.ifremer.tutti.service.genericformat.GenericFormatValidateFileResult; +import fr.ifremer.tutti.ui.swing.content.genericformat.tree.DataSelectTreeModel; +import fr.ifremer.tutti.ui.swing.content.genericformat.tree.ProgramSelectTreeNode; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; import jaxx.runtime.validator.swing.SwingValidator; import org.apache.commons.logging.Log; @@ -34,6 +38,12 @@ import org.apache.commons.logging.LogFactory; import org.nuiton.jaxx.application.swing.util.CloseableUI; import javax.swing.JComponent; +import javax.swing.JTree; +import javax.swing.ToolTipManager; +import javax.swing.event.TreeModelEvent; +import javax.swing.event.TreeModelListener; +import javax.swing.tree.DefaultTreeModel; +import javax.swing.tree.TreeSelectionModel; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.Set; @@ -77,7 +87,10 @@ public class GenericFormatImportUIHandler extends AbstractTuttiUIHandler<Generic final Set<String> propertyNamesToCanValidate = Sets.newHashSet(GenericFormatImportUIModel.PROPERTY_IMPORT_FILE, GenericFormatImportUIModel.PROPERTY_PROGRAM, GenericFormatImportUIModel.PROPERTY_OVERRIDE_DATA); - final Set<String> propertyNamesToCanImport = Sets.newHashSet(GenericFormatImportUIModel.PROPERTY_VALIDATE_DONE, GenericFormatImportUIModel.PROPERTY_PROGRAM, GenericFormatImportUIModel.PROPERTY_VALIDATE_RESULT); + final Set<String> propertyNamesToCanImport = Sets.newHashSet(GenericFormatImportUIModel.PROPERTY_VALIDATE_DONE, + GenericFormatImportUIModel.PROPERTY_PROGRAM, + GenericFormatImportUIModel.PROPERTY_VALIDATE_RESULT, + GenericFormatImportUIModel.PROPERTY_DATA_SELECTED); @Override public void propertyChange(PropertyChangeEvent evt) { @@ -116,6 +129,11 @@ public class GenericFormatImportUIHandler extends AbstractTuttiUIHandler<Generic } } + if (GenericFormatImportUIModel.PROPERTY_VALIDATE_RESULT.equals(propertyName)) { + + onValidateResultChanged((GenericFormatValidateFileResult) evt.getNewValue()); + + } } }); @@ -126,6 +144,35 @@ public class GenericFormatImportUIHandler extends AbstractTuttiUIHandler<Generic initUI(ui); + JTree tree = ui.getDataSelectionTree(); + tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION); + ToolTipManager.sharedInstance().registerComponent(tree); + DataSelectTreeModel.installDataSelectionHandler(tree); + + DataSelectTreeModel treeModel = ui.getTreeModel(); + treeModel.addTreeModelListener(new TreeModelListener() { + @Override + public void treeNodesChanged(TreeModelEvent e) { + + DataSelectTreeModel source = (DataSelectTreeModel) e.getSource(); + boolean dataSelected = source.isDataSelected(); + getModel().setDataSelected(dataSelected); + + } + + @Override + public void treeNodesInserted(TreeModelEvent e) { + } + + @Override + public void treeNodesRemoved(TreeModelEvent e) { + } + + @Override + public void treeStructureChanged(TreeModelEvent e) { + } + }); + GenericFormatImportUIModel model = getModel(); initBeanFilterableComboBox(ui.getProgramComboBox(), Lists.newArrayList(getPersistenceService().getAllProgram()), @@ -160,4 +207,24 @@ public class GenericFormatImportUIHandler extends AbstractTuttiUIHandler<Generic return ui.getValidator(); } + private void onValidateResultChanged(GenericFormatValidateFileResult validateFileResult) { + + ProgramSelectTreeNode root; + if (validateFileResult == null) { + + root = null; + + } else { + + ProgramDataModel dataModel = validateFileResult.getDataModel(); + root = new ProgramSelectTreeNode(dataModel); + + } + + DefaultTreeModel treeModel = (DefaultTreeModel) ui.getDataSelectionTree().getModel(); + treeModel.setRoot(root); + getModel().setRootNode(root); + + } + } \ No newline at end of file diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatImportUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatImportUIModel.java index 5cc9f2b..c73158c 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatImportUIModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatImportUIModel.java @@ -25,12 +25,16 @@ package fr.ifremer.tutti.ui.swing.content.genericformat; */ import fr.ifremer.tutti.persistence.entities.data.Program; +import fr.ifremer.tutti.persistence.model.CruiseDataModel; +import fr.ifremer.tutti.persistence.model.ProgramDataModel; import fr.ifremer.tutti.service.genericformat.GenericFormatImportConfiguration; import fr.ifremer.tutti.service.genericformat.GenericFormatImportResult; import fr.ifremer.tutti.service.genericformat.GenericFormatValidateFileResult; +import fr.ifremer.tutti.ui.swing.content.genericformat.tree.ProgramSelectTreeNode; import org.jdesktop.beans.AbstractSerializableBean; import java.io.File; +import java.util.Collections; /** * Created on 2/24/15. @@ -46,14 +50,28 @@ public class GenericFormatImportUIModel extends AbstractSerializableBean { public static final String PROPERTY_IMPORT_FILE = "importFile"; - public static final String PROPERTY_BACKUP_FILE = "backupFile"; - public static final String PROPERTY_CLEAN_WEIGHTS = "cleanWeights"; public static final String PROPERTY_CHECK_WEIGHTS = "checkWeights"; public static final String PROPERTY_OVERRIDE_DATA = "overrideData"; + public static final String PROPERTY_IMPORT_ATTACHMENTS = "importAttachments"; + + public static final String PROPERTY_IMPORT_SPECIES = "importSpecies"; + + public static final String PROPERTY_IMPORT_BENTHOS = "importBenthos"; + + public static final String PROPERTY_IMPORT_MARINE_LITTER = "importMarineLitter"; + + public static final String PROPERTY_IMPORT_ACCIDENTAL_CATCH = "importAccidentalCatch"; + + public static final String PROPERTY_IMPORT_INDIVIDUAL_OBSERVATION = "importIndividualObservation"; + + public static final String PROPERTY_UPDATE_CRUISES = "updateCruises"; + + public static final String PROPERTY_UPDATE_OPERATIONS= "updateOperations"; + public static final String PROPERTY_CAN_VALIDATE = "canValidate"; public static final String PROPERTY_VALIDATE_RESULT = "validateResult"; @@ -70,10 +88,28 @@ public class GenericFormatImportUIModel extends AbstractSerializableBean { public static final String PROPERTY_IMPORT_VALID = "importValid"; + public static final String PROPERTY_DATA_SELECTED= "dataSelected"; + private Program program; private File importFile; + private boolean updateCruises = true; + + private boolean updateOperations = true; + + private boolean importSpecies = true; + + private boolean importBenthos = true; + + private boolean importMarineLitter = true; + + private boolean importAccidentalCatch = true; + + private boolean importIndividualObservation = true; + + private boolean importAttachments = true; + private boolean cleanWeights; private boolean checkWeights; @@ -92,16 +128,31 @@ public class GenericFormatImportUIModel extends AbstractSerializableBean { private GenericFormatImportResult importResult; + private ProgramSelectTreeNode rootNode; + + private boolean dataSelected; + public GenericFormatImportConfiguration toValidateImportFileConfiguration() { GenericFormatImportConfiguration configuration = new GenericFormatImportConfiguration(); + ProgramDataModel selectedDataModel = new ProgramDataModel(program, Collections.<CruiseDataModel>emptySet()); + configuration.setDataToExport(selectedDataModel); + + configuration.setOverrideData(overrideData); + + configuration.setImportSpecies(importSpecies); + configuration.setImportBenthos(importBenthos); + configuration.setImportMarineLitter(importMarineLitter); + configuration.setImportAccidentalCatch(importAccidentalCatch); + configuration.setImportIndividualObservation(importIndividualObservation); + configuration.setImportAttachments(importAttachments); + configuration.setCleanWeights(cleanWeights); configuration.setCheckWeights(checkWeights); - configuration.setOverrideData(overrideData); + configuration.setImportFile(importFile); configuration.setReportFile(validateReportFile); - configuration.setProgramId(program.getId()); return configuration; @@ -111,12 +162,21 @@ public class GenericFormatImportUIModel extends AbstractSerializableBean { GenericFormatImportConfiguration configuration = new GenericFormatImportConfiguration(); + ProgramDataModel selectedDataModel = rootNode.getSelectedDataModel(); + configuration.setDataToExport(selectedDataModel); + + configuration.setImportSpecies(importSpecies); + configuration.setImportBenthos(importBenthos); + configuration.setImportMarineLitter(importMarineLitter); + configuration.setImportAccidentalCatch(importAccidentalCatch); + configuration.setImportIndividualObservation(importIndividualObservation); + configuration.setImportAttachments(importAttachments); + configuration.setCleanWeights(cleanWeights); configuration.setCheckWeights(checkWeights); configuration.setOverrideData(overrideData); configuration.setImportFile(importFile); configuration.setReportFile(importReportFile); - configuration.setProgramId(program.getId()); return configuration; @@ -170,6 +230,78 @@ public class GenericFormatImportUIModel extends AbstractSerializableBean { firePropertyChange(PROPERTY_OVERRIDE_DATA, null, overrideData); } + public boolean isUpdateCruises() { + return updateCruises; + } + + public void setUpdateCruises(boolean updateCruises) { + this.updateCruises = updateCruises; + firePropertyChange(PROPERTY_UPDATE_CRUISES, null, updateCruises); + } + + public boolean isUpdateOperations() { + return updateOperations; + } + + public void setUpdateOperations(boolean updateOperations) { + this.updateOperations = updateOperations; + firePropertyChange(PROPERTY_UPDATE_OPERATIONS, null, updateOperations); + } + + public boolean isImportSpecies() { + return importSpecies; + } + + public void setImportSpecies(boolean importSpecies) { + this.importSpecies = importSpecies; + firePropertyChange(PROPERTY_IMPORT_SPECIES, null, importSpecies); + } + + public boolean isImportBenthos() { + return importBenthos; + } + + public void setImportBenthos(boolean importBenthos) { + this.importBenthos = importBenthos; + firePropertyChange(PROPERTY_IMPORT_BENTHOS, null, importBenthos); + } + + public boolean isImportMarineLitter() { + return importMarineLitter; + } + + public void setImportMarineLitter(boolean importMarineLitter) { + this.importMarineLitter = importMarineLitter; + firePropertyChange(PROPERTY_IMPORT_MARINE_LITTER, null, importMarineLitter); + } + + public boolean isImportAccidentalCatch() { + return importAccidentalCatch; + } + + public void setImportAccidentalCatch(boolean importAccidentalCatch) { + this.importAccidentalCatch = importAccidentalCatch; + firePropertyChange(PROPERTY_IMPORT_ACCIDENTAL_CATCH, null, importAccidentalCatch); + } + + public boolean isImportIndividualObservation() { + return importIndividualObservation; + } + + public void setImportIndividualObservation(boolean importIndividualObservation) { + this.importIndividualObservation = importIndividualObservation; + firePropertyChange(PROPERTY_IMPORT_INDIVIDUAL_OBSERVATION, null, importIndividualObservation); + } + + public boolean isImportAttachments() { + return importAttachments; + } + + public void setImportAttachments(boolean importAttachments) { + this.importAttachments = importAttachments; + firePropertyChange(PROPERTY_IMPORT_ATTACHMENTS, null, importAttachments); + } + public File getValidateReportFile() { return validateReportFile; } @@ -234,21 +366,33 @@ public class GenericFormatImportUIModel extends AbstractSerializableBean { firePropertyChange(PROPERTY_IMPORT_VALID, null, isImportValid()); } + public boolean isDataSelected() { + return dataSelected; + } + + public void setDataSelected(boolean dataSelected) { + this.dataSelected = dataSelected; + firePropertyChange(PROPERTY_DATA_SELECTED, null, dataSelected); + } + public boolean isImportDone() { return importResult != null; } + public boolean isImportValid() { return importResult != null && importResult.isValid(); } - public boolean computeIsCanValidate() { return program != null && importFile != null && importFile.exists(); } public boolean computeIsCanImport() { - return isValidateDone() && isValidateValid(); + return isValidateDone() && isValidateValid() && isDataSelected(); } + public void setRootNode(ProgramSelectTreeNode rootNode) { + this.rootNode = rootNode; + } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/FoldAllDataAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/ExportFoldAllDataAction.java similarity index 74% copy from tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/FoldAllDataAction.java copy to tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/ExportFoldAllDataAction.java index cdca10c..ef8c30c 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/FoldAllDataAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/ExportFoldAllDataAction.java @@ -2,6 +2,7 @@ package fr.ifremer.tutti.ui.swing.content.genericformat.actions; import fr.ifremer.tutti.ui.swing.content.genericformat.GenericFormatExportUI; import fr.ifremer.tutti.ui.swing.content.genericformat.tree.CruiseSelectTreeNode; +import fr.ifremer.tutti.ui.swing.content.genericformat.tree.DataSelectTreeModel; import fr.ifremer.tutti.ui.swing.content.genericformat.tree.ProgramSelectTreeNode; import fr.ifremer.tutti.ui.swing.util.actions.SimpleActionSupport; @@ -14,22 +15,24 @@ import javax.swing.tree.TreePath; * @author Tony Chemit - chemit@codelutin.com * @since 3.14.3 */ -public class FoldAllDataAction extends SimpleActionSupport<GenericFormatExportUI> { +public class ExportFoldAllDataAction extends SimpleActionSupport<GenericFormatExportUI> { private static final long serialVersionUID = 1L; - public FoldAllDataAction(GenericFormatExportUI ui) { + public ExportFoldAllDataAction(GenericFormatExportUI ui) { super(ui); } @Override protected void onActionPerformed(GenericFormatExportUI ui) { + DataSelectTreeModel model = ui.getTreeModel(); + ProgramSelectTreeNode root = model.getRoot(); + JTree tree = ui.getDataSelectionTree(); tree.getSelectionModel().clearSelection(); - ProgramSelectTreeNode root = ui.getModel().getRootNode(); TreePath rootPath = new TreePath(root); for (CruiseSelectTreeNode node : root) { diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/ExportSelectAllDataAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/ExportSelectAllDataAction.java new file mode 100644 index 0000000..4857768 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/ExportSelectAllDataAction.java @@ -0,0 +1,29 @@ +package fr.ifremer.tutti.ui.swing.content.genericformat.actions; + +import fr.ifremer.tutti.ui.swing.content.genericformat.GenericFormatExportUI; +import fr.ifremer.tutti.ui.swing.content.genericformat.tree.DataSelectTreeModel; +import fr.ifremer.tutti.ui.swing.util.actions.SimpleActionSupport; + +/** + * Created on 3/29/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14.3 + */ +public class ExportSelectAllDataAction extends SimpleActionSupport<GenericFormatExportUI> { + + private static final long serialVersionUID = 1L; + + public ExportSelectAllDataAction(GenericFormatExportUI ui) { + super(ui); + } + + @Override + protected void onActionPerformed(GenericFormatExportUI ui) { + + DataSelectTreeModel model = ui.getTreeModel(); + model.selectAll(); + + } + +} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/UnfoldAllDataAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/ExportUnfoldAllDataAction.java similarity index 69% copy from tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/UnfoldAllDataAction.java copy to tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/ExportUnfoldAllDataAction.java index b837dc4..91e3704 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/UnfoldAllDataAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/ExportUnfoldAllDataAction.java @@ -2,6 +2,7 @@ package fr.ifremer.tutti.ui.swing.content.genericformat.actions; import fr.ifremer.tutti.ui.swing.content.genericformat.GenericFormatExportUI; import fr.ifremer.tutti.ui.swing.content.genericformat.tree.CruiseSelectTreeNode; +import fr.ifremer.tutti.ui.swing.content.genericformat.tree.DataSelectTreeModel; import fr.ifremer.tutti.ui.swing.content.genericformat.tree.ProgramSelectTreeNode; import fr.ifremer.tutti.ui.swing.util.actions.SimpleActionSupport; @@ -14,20 +15,24 @@ import javax.swing.tree.TreePath; * @author Tony Chemit - chemit@codelutin.com * @since 3.14.3 */ -public class UnfoldAllDataAction extends SimpleActionSupport<GenericFormatExportUI> { +public class ExportUnfoldAllDataAction extends SimpleActionSupport<GenericFormatExportUI> { private static final long serialVersionUID = 1L; - public UnfoldAllDataAction(GenericFormatExportUI ui) { + public ExportUnfoldAllDataAction(GenericFormatExportUI ui) { super(ui); } @Override protected void onActionPerformed(GenericFormatExportUI ui) { + DataSelectTreeModel model = ui.getTreeModel(); + ProgramSelectTreeNode root = model.getRoot(); + JTree tree = ui.getDataSelectionTree(); - ProgramSelectTreeNode root = ui.getModel().getRootNode(); + tree.getSelectionModel().clearSelection(); + TreePath rootPath = new TreePath(root); for (CruiseSelectTreeNode node : root) { diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/ExportUnselectAllDataAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/ExportUnselectAllDataAction.java new file mode 100644 index 0000000..61f28f7 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/ExportUnselectAllDataAction.java @@ -0,0 +1,29 @@ +package fr.ifremer.tutti.ui.swing.content.genericformat.actions; + +import fr.ifremer.tutti.ui.swing.content.genericformat.GenericFormatExportUI; +import fr.ifremer.tutti.ui.swing.content.genericformat.tree.DataSelectTreeModel; +import fr.ifremer.tutti.ui.swing.util.actions.SimpleActionSupport; + +/** + * Created on 3/29/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14.3 + */ +public class ExportUnselectAllDataAction extends SimpleActionSupport<GenericFormatExportUI> { + + private static final long serialVersionUID = 1L; + + public ExportUnselectAllDataAction(GenericFormatExportUI ui) { + super(ui); + } + + @Override + protected void onActionPerformed(GenericFormatExportUI ui) { + + DataSelectTreeModel model = ui.getTreeModel(); + model.unselectAll(); + + } + +} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/FoldAllDataAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/ImportFoldAllDataAction.java similarity index 66% rename from tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/FoldAllDataAction.java rename to tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/ImportFoldAllDataAction.java index cdca10c..0a8c524 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/FoldAllDataAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/ImportFoldAllDataAction.java @@ -1,7 +1,8 @@ package fr.ifremer.tutti.ui.swing.content.genericformat.actions; -import fr.ifremer.tutti.ui.swing.content.genericformat.GenericFormatExportUI; +import fr.ifremer.tutti.ui.swing.content.genericformat.GenericFormatImportUI; import fr.ifremer.tutti.ui.swing.content.genericformat.tree.CruiseSelectTreeNode; +import fr.ifremer.tutti.ui.swing.content.genericformat.tree.DataSelectTreeModel; import fr.ifremer.tutti.ui.swing.content.genericformat.tree.ProgramSelectTreeNode; import fr.ifremer.tutti.ui.swing.util.actions.SimpleActionSupport; @@ -9,27 +10,29 @@ import javax.swing.JTree; import javax.swing.tree.TreePath; /** - * Created on 3/29/15. + * Created on 3/31/15. * * @author Tony Chemit - chemit@codelutin.com * @since 3.14.3 */ -public class FoldAllDataAction extends SimpleActionSupport<GenericFormatExportUI> { +public class ImportFoldAllDataAction extends SimpleActionSupport<GenericFormatImportUI> { private static final long serialVersionUID = 1L; - public FoldAllDataAction(GenericFormatExportUI ui) { + public ImportFoldAllDataAction(GenericFormatImportUI ui) { super(ui); } @Override - protected void onActionPerformed(GenericFormatExportUI ui) { + protected void onActionPerformed(GenericFormatImportUI ui) { + + DataSelectTreeModel model = ui.getTreeModel(); + ProgramSelectTreeNode root = model.getRoot(); JTree tree = ui.getDataSelectionTree(); tree.getSelectionModel().clearSelection(); - ProgramSelectTreeNode root = ui.getModel().getRootNode(); TreePath rootPath = new TreePath(root); for (CruiseSelectTreeNode node : root) { @@ -38,4 +41,4 @@ public class FoldAllDataAction extends SimpleActionSupport<GenericFormatExportUI } -} +} \ No newline at end of file diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/ImportSelectAllDataAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/ImportSelectAllDataAction.java new file mode 100644 index 0000000..0e72e6e --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/ImportSelectAllDataAction.java @@ -0,0 +1,29 @@ +package fr.ifremer.tutti.ui.swing.content.genericformat.actions; + +import fr.ifremer.tutti.ui.swing.content.genericformat.GenericFormatImportUI; +import fr.ifremer.tutti.ui.swing.content.genericformat.tree.DataSelectTreeModel; +import fr.ifremer.tutti.ui.swing.util.actions.SimpleActionSupport; + +/** + * Created on 3/31/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14.3 + */ +public class ImportSelectAllDataAction extends SimpleActionSupport<GenericFormatImportUI> { + + private static final long serialVersionUID = 1L; + + public ImportSelectAllDataAction(GenericFormatImportUI ui) { + super(ui); + } + + @Override + protected void onActionPerformed(GenericFormatImportUI ui) { + + DataSelectTreeModel model = ui.getTreeModel(); + model.selectAll(); + + } + +} \ No newline at end of file diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/UnfoldAllDataAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/ImportUnfoldAllDataAction.java similarity index 62% rename from tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/UnfoldAllDataAction.java rename to tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/ImportUnfoldAllDataAction.java index b837dc4..644f120 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/UnfoldAllDataAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/ImportUnfoldAllDataAction.java @@ -1,7 +1,8 @@ package fr.ifremer.tutti.ui.swing.content.genericformat.actions; -import fr.ifremer.tutti.ui.swing.content.genericformat.GenericFormatExportUI; +import fr.ifremer.tutti.ui.swing.content.genericformat.GenericFormatImportUI; import fr.ifremer.tutti.ui.swing.content.genericformat.tree.CruiseSelectTreeNode; +import fr.ifremer.tutti.ui.swing.content.genericformat.tree.DataSelectTreeModel; import fr.ifremer.tutti.ui.swing.content.genericformat.tree.ProgramSelectTreeNode; import fr.ifremer.tutti.ui.swing.util.actions.SimpleActionSupport; @@ -9,25 +10,29 @@ import javax.swing.JTree; import javax.swing.tree.TreePath; /** - * Created on 3/29/15. + * Created on 3/31/15. * * @author Tony Chemit - chemit@codelutin.com * @since 3.14.3 */ -public class UnfoldAllDataAction extends SimpleActionSupport<GenericFormatExportUI> { +public class ImportUnfoldAllDataAction extends SimpleActionSupport<GenericFormatImportUI> { private static final long serialVersionUID = 1L; - public UnfoldAllDataAction(GenericFormatExportUI ui) { + public ImportUnfoldAllDataAction(GenericFormatImportUI ui) { super(ui); } @Override - protected void onActionPerformed(GenericFormatExportUI ui) { + protected void onActionPerformed(GenericFormatImportUI ui) { + + DataSelectTreeModel model = ui.getTreeModel(); + ProgramSelectTreeNode root = model.getRoot(); JTree tree = ui.getDataSelectionTree(); - ProgramSelectTreeNode root = ui.getModel().getRootNode(); + tree.getSelectionModel().clearSelection(); + TreePath rootPath = new TreePath(root); for (CruiseSelectTreeNode node : root) { @@ -36,4 +41,4 @@ public class UnfoldAllDataAction extends SimpleActionSupport<GenericFormatExport } -} +} \ No newline at end of file diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/ImportUnselectAllDataAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/ImportUnselectAllDataAction.java new file mode 100644 index 0000000..8cb9f47 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/ImportUnselectAllDataAction.java @@ -0,0 +1,29 @@ +package fr.ifremer.tutti.ui.swing.content.genericformat.actions; + +import fr.ifremer.tutti.ui.swing.content.genericformat.GenericFormatImportUI; +import fr.ifremer.tutti.ui.swing.content.genericformat.tree.DataSelectTreeModel; +import fr.ifremer.tutti.ui.swing.util.actions.SimpleActionSupport; + +/** + * Created on 3/31/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14.3 + */ +public class ImportUnselectAllDataAction extends SimpleActionSupport<GenericFormatImportUI> { + + private static final long serialVersionUID = 1L; + + public ImportUnselectAllDataAction(GenericFormatImportUI ui) { + super(ui); + } + + @Override + protected void onActionPerformed(GenericFormatImportUI ui) { + + DataSelectTreeModel model = ui.getTreeModel(); + model.unselectAll(); + + } + +} \ No newline at end of file diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/SelectAllDataAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/SelectAllDataAction.java deleted file mode 100644 index 9e1d393..0000000 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/SelectAllDataAction.java +++ /dev/null @@ -1,35 +0,0 @@ -package fr.ifremer.tutti.ui.swing.content.genericformat.actions; - -import fr.ifremer.tutti.ui.swing.content.genericformat.GenericFormatExportUI; -import fr.ifremer.tutti.ui.swing.content.genericformat.tree.CruiseSelectTreeNode; -import fr.ifremer.tutti.ui.swing.content.genericformat.tree.ProgramSelectTreeNode; -import fr.ifremer.tutti.ui.swing.util.actions.SimpleActionSupport; - -/** - * Created on 3/29/15. - * - * @author Tony Chemit - chemit@codelutin.com - * @since 3.14.3 - */ -public class SelectAllDataAction extends SimpleActionSupport<GenericFormatExportUI> { - - private static final long serialVersionUID = 1L; - - public SelectAllDataAction(GenericFormatExportUI ui) { - super(ui); - } - - @Override - protected void onActionPerformed(GenericFormatExportUI ui) { - - ProgramSelectTreeNode root = ui.getModel().getRootNode(); - - for (CruiseSelectTreeNode node : root) { - node.setSelected(true); - } - - ui.getDataSelectionTree().repaint(); - - } - -} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/UnselectAllDataAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/UnselectAllDataAction.java deleted file mode 100644 index e2589e0..0000000 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/UnselectAllDataAction.java +++ /dev/null @@ -1,35 +0,0 @@ -package fr.ifremer.tutti.ui.swing.content.genericformat.actions; - -import fr.ifremer.tutti.ui.swing.content.genericformat.GenericFormatExportUI; -import fr.ifremer.tutti.ui.swing.content.genericformat.tree.CruiseSelectTreeNode; -import fr.ifremer.tutti.ui.swing.content.genericformat.tree.ProgramSelectTreeNode; -import fr.ifremer.tutti.ui.swing.util.actions.SimpleActionSupport; - -/** - * Created on 3/29/15. - * - * @author Tony Chemit - chemit@codelutin.com - * @since 3.14.3 - */ -public class UnselectAllDataAction extends SimpleActionSupport<GenericFormatExportUI> { - - private static final long serialVersionUID = 1L; - - public UnselectAllDataAction(GenericFormatExportUI ui) { - super(ui); - } - - @Override - protected void onActionPerformed(GenericFormatExportUI ui) { - - ProgramSelectTreeNode root = ui.getModel().getRootNode(); - - for (CruiseSelectTreeNode node : root) { - node.setSelected(false); - } - - ui.getDataSelectionTree().repaint(); - - } - -} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/tree/CruiseSelectTreeNode.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/tree/CruiseSelectTreeNode.java index 23e6d85..39798c7 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/tree/CruiseSelectTreeNode.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/tree/CruiseSelectTreeNode.java @@ -18,6 +18,8 @@ public class CruiseSelectTreeNode extends DataSelectTreeNodeSupport<CruiseDataMo private static final long serialVersionUID = 1L; + private boolean selected; + private final int nbChilds; private int nbChildSelected; @@ -39,7 +41,7 @@ public class CruiseSelectTreeNode extends DataSelectTreeNodeSupport<CruiseDataMo } public boolean isPartialSelected() { - return nbChildSelected > 0 && nbChildSelected < nbChilds; + return !selected && nbChildSelected > 0; } public int getNbChilds() { @@ -52,13 +54,14 @@ public class CruiseSelectTreeNode extends DataSelectTreeNodeSupport<CruiseDataMo @Override public boolean isSelected() { - return nbChilds > 0 && nbChilds == nbChildSelected; + return selected; } @Override public void setSelected(boolean selected) { objectValueIsAdjusting = true; + this.selected = selected; try { for (OperationSelectTreeNode o : this) { @@ -113,6 +116,13 @@ public class CruiseSelectTreeNode extends DataSelectTreeNodeSupport<CruiseDataMo nbChildSelected++; } } + if (!selected && nbChildSelected > 0 && nbChildSelected == nbChilds) { + selected = true; + } + + if (selected && nbChildSelected < nbChilds) { + selected = false; + } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/tree/DataSelectTreeCellEditor.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/tree/DataSelectTreeCellEditor.java deleted file mode 100644 index 8662ac6..0000000 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/tree/DataSelectTreeCellEditor.java +++ /dev/null @@ -1,65 +0,0 @@ -package fr.ifremer.tutti.ui.swing.content.genericformat.tree; - -import javax.swing.DefaultCellEditor; -import javax.swing.JCheckBox; -import javax.swing.JTree; -import javax.swing.SwingUtilities; -import javax.swing.tree.DefaultTreeCellEditor; -import java.awt.Component; -import java.awt.Rectangle; -import java.awt.event.MouseEvent; -import java.util.EventObject; - -/** - * Created on 3/30/15. - * - * @author Tony Chemit - chemit@codelutin.com - * @since 3.14.3 - */ -public class DataSelectTreeCellEditor extends DefaultTreeCellEditor { - - private final JCheckBox editor; - - public DataSelectTreeCellEditor(JTree tree) { - super(tree, null); - this.editor = new JCheckBox(); - this.realEditor = new DefaultCellEditor(editor); - } - - @Override - public Component getTreeCellEditorComponent(JTree tree, Object value, - boolean isSelected, boolean expanded, boolean leaf, int row) { - String text = null; - if (value instanceof DataSelectTreeNodeSupport) { - text = ((DataSelectTreeNodeSupport) value).getLabel(); - value = ((DataSelectTreeNodeSupport) value).isSelected(); - } - editor.setText(text); - - Component treeCellEditorComponent = super.getTreeCellEditorComponent(tree, value, isSelected, expanded, leaf, row); - return treeCellEditorComponent; - } - - @Override - protected boolean canEditImmediately(EventObject event) { - if ((event instanceof MouseEvent) && - SwingUtilities.isLeftMouseButton((MouseEvent) event)) { - MouseEvent me = (MouseEvent) event; - return inHitRegion(me.getX(), me.getY()); - } - return (event == null); - } - - @Override - protected boolean inHitRegion(int x, int y) { - if (lastRow != -1 && tree != null) { - Rectangle bounds = tree.getRowBounds(lastRow); - - if (bounds != null && x >= (bounds.x + offset) && (x - 12) <= (bounds.x + offset)) { - return true; - } - - } - return false; - } -} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/tree/DataSelectTreeModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/tree/DataSelectTreeModel.java new file mode 100644 index 0000000..10e0808 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/tree/DataSelectTreeModel.java @@ -0,0 +1,175 @@ +package fr.ifremer.tutti.ui.swing.content.genericformat.tree; + +import javax.swing.JTree; +import javax.swing.tree.DefaultTreeModel; +import javax.swing.tree.TreePath; +import java.awt.Rectangle; +import java.awt.event.KeyEvent; +import java.awt.event.KeyListener; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; + +/** + * Created on 3/31/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14.3 + */ +public class DataSelectTreeModel extends DefaultTreeModel { + + private static final long serialVersionUID = 1L; + + public static void installDataSelectionHandler(JTree tree) { + DataSelectTreeNodeListener handler = new DataSelectTreeNodeListener(); + tree.addKeyListener(handler); + tree.addMouseListener(handler); + } + + public DataSelectTreeModel() { + super(null); + } + + @Override + public ProgramSelectTreeNode getRoot() { + return (ProgramSelectTreeNode) super.getRoot(); + } + + public boolean isDataSelected() { + + boolean dataSelected = false; + + for (CruiseSelectTreeNode cruiseNode : getRoot()) { + if (cruiseNode.isSelected() || cruiseNode.isPartialSelected()) { + dataSelected = true; + break; + } + } + return dataSelected; + + } + + public void setSelected(DataSelectTreeNodeSupport node, boolean selected) { + + node.setSelected(selected); + + nodeChanged(node); + + if (node instanceof CruiseSelectTreeNode) { + CruiseSelectTreeNode cruiseNode = (CruiseSelectTreeNode) node; + + + nodeChanged(cruiseNode); + + for (OperationSelectTreeNode operationNode : cruiseNode) { + nodeChanged(operationNode); + } + + } else if (node instanceof OperationSelectTreeNode) { + nodeChanged(node.getParent()); + } + + } + + public void select(DataSelectTreeNodeSupport node) { + + boolean selected = !node.isSelected(); + setSelected(node, selected); + + } + + public void selectAll() { + for (CruiseSelectTreeNode cruiseNode : getRoot()) { + setSelected(cruiseNode, true); + } + } + public void unselectAll() { + for (CruiseSelectTreeNode cruiseNode : getRoot()) { + setSelected(cruiseNode, false); + } + } + + /** + * Created on 3/31/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14.3 + */ + static class DataSelectTreeNodeListener implements KeyListener, MouseListener { + + @Override + public void keyReleased(KeyEvent e) { + + JTree tree = (JTree) e.getSource(); + if (!tree.isSelectionEmpty()) { + + boolean doEdit = e.getModifiers() == 0 + && (e.getKeyCode() == KeyEvent.VK_ENTER || + e.getKeyCode() == KeyEvent.VK_SPACE); + + if (doEdit) { + + TreePath selectionPath = tree.getSelectionPath(); + doSelectNode(tree, selectionPath); + + } + + } + } + + @Override + public void mouseReleased(MouseEvent e) { + + JTree tree = (JTree) e.getSource(); + if (!tree.isSelectionEmpty()) { + + TreePath selectionPath = tree.getSelectionPath(); + Rectangle bounds = tree.getPathBounds(selectionPath); + + int x = e.getX(); + boolean doEdit = (bounds != null && x >= (bounds.x) && (x - 12) <= (bounds.x)); + + if (doEdit) { + + doSelectNode(tree, selectionPath); + + } + + } + } + + protected void doSelectNode(JTree tree, TreePath selectionPath) { + DataSelectTreeNodeSupport lastPathComponent = (DataSelectTreeNodeSupport) selectionPath.getLastPathComponent(); + ((DataSelectTreeModel) tree.getModel()).select(lastPathComponent); + } + + @Override + public void keyTyped(KeyEvent e) { + + } + + @Override + public void keyPressed(KeyEvent e) { + + } + + @Override + public void mouseClicked(MouseEvent e) { + + } + + @Override + public void mousePressed(MouseEvent e) { + + } + + @Override + public void mouseEntered(MouseEvent e) { + + } + + @Override + public void mouseExited(MouseEvent e) { + + } + } +} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/tree/DataSelectTreeNodeSupport.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/tree/DataSelectTreeNodeSupport.java index 4b905d7..8f02ce8 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/tree/DataSelectTreeNodeSupport.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/tree/DataSelectTreeNodeSupport.java @@ -46,4 +46,7 @@ public abstract class DataSelectTreeNodeSupport<O extends DataModelSupport> exte } } + public boolean isExist() { + return getUserObject().getOptionalId()!=null; + } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/tree/DataSelectTreeCellRenderer.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/tree/ExportDataSelectTreeCellRenderer.java similarity index 96% copy from tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/tree/DataSelectTreeCellRenderer.java copy to tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/tree/ExportDataSelectTreeCellRenderer.java index ae08858..51738c0 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/tree/DataSelectTreeCellRenderer.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/tree/ExportDataSelectTreeCellRenderer.java @@ -17,7 +17,7 @@ import static org.nuiton.i18n.I18n.t; * @author Tony Chemit - chemit@codelutin.com * @since 3.14.3 */ -public class DataSelectTreeCellRenderer extends DefaultTreeCellRenderer { +public class ExportDataSelectTreeCellRenderer extends DefaultTreeCellRenderer { private static final long serialVersionUID = 1L; @@ -29,7 +29,7 @@ public class DataSelectTreeCellRenderer extends DefaultTreeCellRenderer { private Font boldFont; - public DataSelectTreeCellRenderer() { + public ExportDataSelectTreeCellRenderer() { normalCheckBox = new JCheckBox(); partialCheckBox = new JCheckBox(); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/tree/DataSelectTreeCellRenderer.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/tree/ImportDataSelectTreeCellRenderer.java similarity index 52% rename from tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/tree/DataSelectTreeCellRenderer.java rename to tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/tree/ImportDataSelectTreeCellRenderer.java index ae08858..35dfd95 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/tree/DataSelectTreeCellRenderer.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/tree/ImportDataSelectTreeCellRenderer.java @@ -12,12 +12,12 @@ import java.awt.Font; import static org.nuiton.i18n.I18n.t; /** - * Created on 3/29/15. + * Created on 3/31/15. * * @author Tony Chemit - chemit@codelutin.com * @since 3.14.3 */ -public class DataSelectTreeCellRenderer extends DefaultTreeCellRenderer { +public class ImportDataSelectTreeCellRenderer extends DefaultTreeCellRenderer { private static final long serialVersionUID = 1L; @@ -29,7 +29,7 @@ public class DataSelectTreeCellRenderer extends DefaultTreeCellRenderer { private Font boldFont; - public DataSelectTreeCellRenderer() { + public ImportDataSelectTreeCellRenderer() { normalCheckBox = new JCheckBox(); partialCheckBox = new JCheckBox(); @@ -50,58 +50,88 @@ public class DataSelectTreeCellRenderer extends DefaultTreeCellRenderer { JLabel label = (JLabel) super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus); - String text = null; - String tip = null; - boolean filled = false; - JCheckBox checkBox = normalCheckBox; if (value != null && value instanceof DataSelectTreeNodeSupport) { DataSelectTreeNodeSupport node = (DataSelectTreeNodeSupport) value; - text = node.getLabel(); - filled = node.isSelected(); - if (node instanceof CruiseSelectTreeNode) { - CruiseSelectTreeNode cruiseSelectTreeNode = (CruiseSelectTreeNode) node; + checkBox = getCruiseComponent((CruiseSelectTreeNode) node); - if (filled) { + } else if (node instanceof OperationSelectTreeNode) { - tip = t("tutti.selectNode.cruiseSelected", cruiseSelectTreeNode.getNbChildSelected()); + checkBox = getOperationComponent((OperationSelectTreeNode) node); - } else if (cruiseSelectTreeNode.isPartialSelected()) { + } - checkBox = partialCheckBox; + boolean filled = node.isSelected(); - text += String.format(" ( %d / %d )", cruiseSelectTreeNode.getNbChildSelected(), cruiseSelectTreeNode.getNbChilds()); + checkBox.setBackground(label.getBackground()); + checkBox.setForeground(label.getForeground()); - tip = t("tutti.selectNode.cruisePartialSelected", cruiseSelectTreeNode.getNbChildSelected(), cruiseSelectTreeNode.getNbChilds()); - } + Font font; + if (filled) { + font = this.boldFont; + } else { + font = normalFont; + } - } else if (node instanceof OperationSelectTreeNode) { + if (node.isExist()) { + checkBox.setText(checkBox.getText() + " (*)"); + } - text = t("tutti.selectNode.operation", text); + checkBox.setFont(font); + checkBox.setSelected(filled); - if (filled) { + } - tip = t("tutti.selectNode.operationSelected", text); - } - } + return checkBox; + + } + + protected JCheckBox getCruiseComponent(CruiseSelectTreeNode node) { + + JCheckBox checkBox = normalCheckBox; + + String text = node.getLabel(); + String tip = null; + + if (node.isSelected()) { + + tip = t("tutti.selectNode.cruiseSelected", node.getNbChildSelected()); + + } else if (node.isPartialSelected()) { + + checkBox = partialCheckBox; + + text += String.format(" ( %d / %d )", node.getNbChildSelected(), node.getNbChilds()); + + tip = t("tutti.selectNode.cruisePartialSelected", node.getNbChildSelected(), node.getNbChilds()); } - Font font; - if (filled) { - font = this.boldFont; - } else { - font = normalFont; + checkBox.setText(text); + checkBox.setToolTipText(tip); + + return checkBox; + + } + + protected JCheckBox getOperationComponent(OperationSelectTreeNode node) { + + JCheckBox checkBox = normalCheckBox; + + String tip = null; + + String text = t("tutti.selectNode.operation", node.getLabel()); + + if (node.isSelected()) { + + tip = t("tutti.selectNode.operationSelected", text); + } - checkBox.setFont(font); - checkBox.setSelected(filled); - checkBox.setBackground(label.getBackground()); - checkBox.setForeground(label.getForeground()); checkBox.setText(text); checkBox.setToolTipText(tip); @@ -109,4 +139,4 @@ public class DataSelectTreeCellRenderer extends DefaultTreeCellRenderer { } -} +} \ 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 6fb61d3..bab5777 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 @@ -1476,6 +1476,7 @@ tutti.genericFormatExport.field.exportSpecies= tutti.genericFormatExport.field.exportSpecies.tip= tutti.genericFormatExport.field.program= tutti.genericFormatExport.field.program.tip= +tutti.genericFormatExport.importOptions.legend= tutti.genericFormatExport.selectData.legend= tutti.genericFormatExport.title= tutti.genericFormatExport.validateExport.legend= @@ -1483,6 +1484,7 @@ tutti.genericFormatImport.action.closeGenericFormatImport= tutti.genericFormatImport.action.closeGenericFormatImport.mnemonic= tutti.genericFormatImport.action.closeGenericFormatImport.tip= tutti.genericFormatImport.action.error= +tutti.genericFormatImport.action.foldAll.tip= tutti.genericFormatImport.action.generateReport= tutti.genericFormatImport.action.generateReport.mnemonic= tutti.genericFormatImport.action.generateReport.tip= @@ -1498,10 +1500,13 @@ tutti.genericFormatImport.action.openValidateReport.mnemonic= tutti.genericFormatImport.action.openValidateReport.tip= tutti.genericFormatImport.action.saveImportReport.tip= tutti.genericFormatImport.action.saveValidateReport.tip= +tutti.genericFormatImport.action.selectAll.tip= tutti.genericFormatImport.action.showReport= tutti.genericFormatImport.action.showReport.mnemonic= tutti.genericFormatImport.action.showReport.tip= tutti.genericFormatImport.action.success= +tutti.genericFormatImport.action.unfoldAll.tip= +tutti.genericFormatImport.action.unselectAll.tip= tutti.genericFormatImport.action.validate= tutti.genericFormatImport.action.validate.mnemonic= tutti.genericFormatImport.action.validate.tip= @@ -1516,24 +1521,42 @@ tutti.genericFormatImport.field.checkWeights= tutti.genericFormatImport.field.checkWeights.tip= tutti.genericFormatImport.field.cleanWeights= tutti.genericFormatImport.field.cleanWeights.tip= +tutti.genericFormatImport.field.importAccidentalCatch= +tutti.genericFormatImport.field.importAccidentalCatch.tip= +tutti.genericFormatImport.field.importAttachments= +tutti.genericFormatImport.field.importAttachments.tip= +tutti.genericFormatImport.field.importBenthos= +tutti.genericFormatImport.field.importBenthos.tip= tutti.genericFormatImport.field.importFile= tutti.genericFormatImport.field.importFile.tip= +tutti.genericFormatImport.field.importIndividualObservation= +tutti.genericFormatImport.field.importIndividualObservation.tip= +tutti.genericFormatImport.field.importMarineLitter= +tutti.genericFormatImport.field.importMarineLitter.tip= +tutti.genericFormatImport.field.importSpecies= +tutti.genericFormatImport.field.importSpecies.tip= tutti.genericFormatImport.field.overrideData= tutti.genericFormatImport.field.overrideData.tip= tutti.genericFormatImport.field.program= tutti.genericFormatImport.field.program.tip= tutti.genericFormatImport.field.reportFile= tutti.genericFormatImport.field.reportFile.tip= +tutti.genericFormatImport.field.updateCruises= +tutti.genericFormatImport.field.updateCruises.tip= +tutti.genericFormatImport.field.updateOperations= +tutti.genericFormatImport.field.updateOperations.tip= tutti.genericFormatImport.import.legend= tutti.genericFormatImport.importConfiguration.legend= tutti.genericFormatImport.importFile.extension= tutti.genericFormatImport.importFile.extension.description= +tutti.genericFormatImport.importOptions.legend= tutti.genericFormatImport.importResult.description= tutti.genericFormatImport.importResult.description.tip= tutti.genericFormatImport.importResult.legend= tutti.genericFormatImport.reportConfiguration.legend= tutti.genericFormatImport.reportFile.extension= tutti.genericFormatImport.reportFile.extension.description= +tutti.genericFormatImport.selectData.legend= tutti.genericFormatImport.step.backupDb= tutti.genericFormatImport.step.closeDb= tutti.genericFormatImport.step.reopenDb= 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 bde985d..7d9e1ee 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 @@ -1419,12 +1419,11 @@ tutti.genericFormatExport.field.program=Série de campagne tutti.genericFormatExport.field.program.tip=Série de campagne tutti.genericFormatExport.selectData.legend=Sélection des données à exporter tutti.genericFormatExport.title=Export générique -tutti.genericFormatImport..extension=zip -tutti.genericFormatImport..extension.description=Archive d'import générique (.zip) tutti.genericFormatImport.action.closeGenericFormatImport=Quitter tutti.genericFormatImport.action.closeGenericFormatImport.mnemonic=Q tutti.genericFormatImport.action.closeGenericFormatImport.tip=Quitter tutti.genericFormatImport.action.error=L'import depuis le fichier <strong>%s</strong> a échoué. +tutti.genericFormatImport.action.foldAll.tip=Tout replier tutti.genericFormatImport.action.generateReport=Générer le rapport tutti.genericFormatImport.action.generateReport.mnemonic=G tutti.genericFormatImport.action.generateReport.tip=Générer le rapport de l'import @@ -1436,10 +1435,13 @@ tutti.genericFormatImport.action.openImportReport.tip=Ouvrir le rapport d'import tutti.genericFormatImport.action.openValidateReport.tip=Ouvrir le rapport de validation tutti.genericFormatImport.action.saveImportReport.tip=Enregistrer le rapport d'import tutti.genericFormatImport.action.saveValidateReport.tip=Enregistrer le rapport de validation +tutti.genericFormatImport.action.selectAll.tip=Tout sélectionner tutti.genericFormatImport.action.showReport=Visualiser tutti.genericFormatImport.action.showReport.mnemonic=V tutti.genericFormatImport.action.showReport.tip=Visualiser le rapport tutti.genericFormatImport.action.success=L'import depuis le fichier <strong>%s</strong> s'est bien déroulé. +tutti.genericFormatImport.action.unfoldAll.tip=Tout déplier +tutti.genericFormatImport.action.unselectAll.tip=Tout déselectionner tutti.genericFormatImport.action.validate=Valider l'import tutti.genericFormatImport.action.validate.mnemonic=V tutti.genericFormatImport.action.validate.tip=Valider l'archive d'import @@ -1451,22 +1453,40 @@ tutti.genericFormatImport.field.checkWeights=Vérifier les poids (élévation) tutti.genericFormatImport.field.checkWeights.tip=Vérifier les poids via l'élévation des poids tutti.genericFormatImport.field.cleanWeights=Supprimer les poids en double tutti.genericFormatImport.field.cleanWeights.tip=Supprimer les poids en double +tutti.genericFormatImport.field.importAccidentalCatch=Importer les captures accidentelles +tutti.genericFormatImport.field.importAccidentalCatch.tip=Importer les captures accidentelles +tutti.genericFormatImport.field.importAttachments=Importer les pièces-jointes +tutti.genericFormatImport.field.importAttachments.tip=Importer les pièces-jointes +tutti.genericFormatImport.field.importBenthos=Importer les lots Benthos +tutti.genericFormatImport.field.importBenthos.tip=Importer les lots Benthos tutti.genericFormatImport.field.importFile=Fichier d'import tutti.genericFormatImport.field.importFile.tip=Fichier d'import au format générique +tutti.genericFormatImport.field.importIndividualObservation=Importer les observations individuelles +tutti.genericFormatImport.field.importIndividualObservation.tip=Importer les observations individuelles +tutti.genericFormatImport.field.importMarineLitter=Importer les macro-déchets +tutti.genericFormatImport.field.importMarineLitter.tip=Importer les macro-déchets +tutti.genericFormatImport.field.importSpecies=Importer les lots Espèces +tutti.genericFormatImport.field.importSpecies.tip=Importer les lots Espèces tutti.genericFormatImport.field.overrideData=Autoriser l'écrasement des données tutti.genericFormatImport.field.overrideData.tip=Autorise l'écrasement des données existantes tutti.genericFormatImport.field.program=Série de campagne tutti.genericFormatImport.field.program.tip=Série de campagne où importer les campagne tutti.genericFormatImport.field.reportFile=Rapport tutti.genericFormatImport.field.reportFile.tip=Chemin du fichier de rapport +tutti.genericFormatImport.field.updateCruises=Mettre à jour les campagnes +tutti.genericFormatImport.field.updateCruises.tip=Mettre à jour les caractéristiques des campagnes exitantes +tutti.genericFormatImport.field.updateOperations=Mettre à jour les traits +tutti.genericFormatImport.field.updateOperations.tip=Mettre à jour les traits existants tutti.genericFormatImport.import.legend=Import tutti.genericFormatImport.importFile.extension=zip tutti.genericFormatImport.importFile.extension.description=Import générique (.zip) +tutti.genericFormatImport.importOptions.legend=Options d'import tutti.genericFormatImport.importReportFile.extension=pdf tutti.genericFormatImport.importReportFile.extension.description=Rapport d'import (.pdf) tutti.genericFormatImport.importResult.description=Résultats tutti.genericFormatImport.importResult.description.tip=Résultat de l'import tutti.genericFormatImport.importResult.legend=Résultats de l'import +tutti.genericFormatImport.selectData.legend=Sélection des données à importer tutti.genericFormatImport.step.backupDb=Sauvegarde de la base de données (<strong>%s</strong>) tutti.genericFormatImport.step.closeDb=Fermeture de la base de données avant la sauvegarde tutti.genericFormatImport.step.reopenDb=Réouverture de la base de données -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.