branch develop updated (2feb60c -> c2d4a8a)
This is an automated email from the git hooks/post-receive script. New change to branch develop in repository tutti. See http://git.codelutin.com/tutti.git from 2feb60c fixes #6883: [ERGO] Masquer par défaut la jauge mémoire new 9cfdbf5 add optionalId in DataModel API + nice method to get child new 538d596 les interface graphiques sont ok pour l'import - export avec la sélection des données new a07f55f debut de mise en place de l'import avec selection des données new ad0adf1 ajout dans le tip des noeuds les identifiants + ajout dans la configuration d'import de propriétés manquantes new a8cfff8 mise en place de l'import avec selection des données + meilleur design des actions (persistenceHelper ne contient plus de logique) new 12408e1 fix count lines of import files new c2d4a8a fixes #6822: [IMPORT GENERIQUE] Définir les différentes statégies d'import possible Merge branch 'feature/6822' into develop The 7 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: commit c2d4a8af53efb4e093be6b7729d6af7d9a9d06e4 Merge: 2feb60c 12408e1 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Apr 1 14:42:14 2015 +0200 fixes #6822: [IMPORT GENERIQUE] Définir les différentes statégies d'import possible Merge branch 'feature/6822' into develop commit 12408e1d65846a1ad084a6e12b54bb9450bb1f0b Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Apr 1 14:42:02 2015 +0200 fix count lines of import files commit a8cfff8c3bb261dab943d61ce50834c46c421c66 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Apr 1 12:03:17 2015 +0200 mise en place de l'import avec selection des données + meilleur design des actions (persistenceHelper ne contient plus de logique) commit ad0adf1d5fd9085c4484b868d4e5599bf43a8aa4 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Apr 1 12:01:57 2015 +0200 ajout dans le tip des noeuds les identifiants + ajout dans la configuration d'import de propriétés manquantes commit a07f55f3c5132c0dcb0f799b5b6714679ff4ce72 Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Mar 31 19:49:40 2015 +0200 debut de mise en place de l'import avec selection des données 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 commit 9cfdbf543a8a41d2641d9f17fe6c36844e98c90f Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Mar 31 14:55:31 2015 +0200 add optionalId in DataModel API + nice method to get child Summary of changes: .../tutti/persistence/entities/data/Cruises.java | 31 ++ .../entities/data/FishingOperations.java | 19 + .../tutti/persistence/model/CruiseDataModel.java | 14 + .../tutti/persistence/model/DataModelSupport.java | 19 + .../tutti/persistence/model/ProgramDataModel.java | 14 + .../genericformat/GenericFormatArchive.java | 40 +- .../genericformat/GenericFormatContextSupport.java | 108 ++-- .../GenericFormatImportConfiguration.java | 139 +++++- .../GenericFormatImportCruiseContext.java | 101 +++- .../GenericFormatImportCruiseResult.java | 2 +- .../GenericFormatImportOperationContext.java | 13 + .../GenericFormatImportOperationResult.java | 9 +- .../genericformat/GenericFormatImportRequest.java | 93 +++- .../genericformat/GenericFormatImportService.java | 69 +-- .../GenericFormatImportValidationHelper.java | 74 ++- .../genericformat/GenericFormatResultSupport.java | 11 + .../GenericFormatValidateFileContext.java | 64 ++- .../GenericFormatValidateFileResult.java | 1 + .../GenericformatImportPersistenceHelper.java | 277 +++++++++++ .../GenericformatImportPersitenceHelper.java | 550 --------------------- .../consumer/CsvConsumerForAccidentalCatch.java | 44 +- .../consumer/CsvConsumerForCatch.java | 26 +- .../consumer/CsvConsumerForGearCaracteristic.java | 55 +-- .../CsvConsumerForIndividualObservation.java | 44 +- .../consumer/CsvConsumerForMarineLitter.java | 14 +- .../consumer/CsvConsumerForOperation.java | 81 +-- .../consumer/CsvConsumerForParameter.java | 57 +-- .../consumer/CsvConsumerForSurvey.java | 12 +- .../service/genericformat/csv/OperationModel.java | 18 +- .../importactions/DoCheckWeightAction.java | 2 +- .../importactions/DoCleanWeightAction.java | 1 + .../importactions/ImportAccidentalCatchAction.java | 95 +++- .../importactions/ImportCatchAction.java | 223 ++++++++- .../ImportGearCaracteristicAction.java | 57 ++- .../ImportIndividualObservationAction.java | 95 +++- .../importactions/ImportMarineLitterAction.java | 95 +++- .../importactions/ImportOperationAction.java | 171 ++++++- .../importactions/ImportParameterAction.java | 87 +++- .../importactions/ImportProtocolAction.java | 46 +- .../importactions/ImportReferentialGearAction.java | 32 +- .../ImportReferentialPersonAction.java | 32 +- .../ImportReferentialSpeciesAction.java | 32 +- .../ImportReferentialVesselAction.java | 31 +- .../importactions/ImportSurveyAction.java | 167 ++++++- .../importactions/ImpotSampleCategoryAction.java | 10 +- .../importactions/LoadAttachmentsAction.java | 9 +- .../ValidateAccidentalCatchAction.java | 2 +- .../importactions/ValidateCatchAction.java | 2 +- .../ValidateGearCaracteristicAction.java | 6 +- .../ValidateIndividualObservationAction.java | 2 +- .../importactions/ValidateMarineLitterAction.java | 2 +- .../importactions/ValidateOperationAction.java | 11 +- .../importactions/ValidateParameterAction.java | 2 +- .../importactions/ValidateSurveyAction.java | 35 +- .../resources/i18n/tutti-service_en_GB.properties | 17 + .../resources/i18n/tutti-service_fr_FR.properties | 33 +- .../genericformat/GenericFormatArchiveTest.java | 38 ++ .../GenericFormatImportServiceTest.java | 12 +- .../GenericFormatImportServiceValidTest.java | 13 +- .../genericFormat/test_countLines/oneEmptyLine.txt | 0 .../genericFormat/test_countLines/oneLine.txt | 1 + .../genericFormat/test_countLines/twoLines.txt | 2 + .../test_countLines/twoLines_secondEmpty.txt | 1 + .../genericFormat/test_countLines/zeroLines.txt | 0 .../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 | 161 +++++- ...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 | 22 +- .../tree/DataSelectTreeCellEditor.java | 65 --- .../genericformat/tree/DataSelectTreeModel.java | 175 +++++++ .../tree/DataSelectTreeNodeSupport.java | 9 + ....java => ExportDataSelectTreeCellRenderer.java} | 6 +- ....java => ImportDataSelectTreeCellRenderer.java} | 99 ++-- .../resources/i18n/tutti-ui-swing_en_GB.properties | 23 + .../resources/i18n/tutti-ui-swing_fr_FR.properties | 24 +- 91 files changed, 3137 insertions(+), 1381 deletions(-) create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericformatImportPersistenceHelper.java delete mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericformatImportPersitenceHelper.java create mode 100644 tutti-service/src/test/java/fr/ifremer/tutti/service/genericformat/GenericFormatArchiveTest.java copy tutti-ichtyometer/README.txt => tutti-service/src/test/resources/genericFormat/test_countLines/oneEmptyLine.txt (100%) create mode 100644 tutti-service/src/test/resources/genericFormat/test_countLines/oneLine.txt create mode 100644 tutti-service/src/test/resources/genericFormat/test_countLines/twoLines.txt create mode 100644 tutti-service/src/test/resources/genericFormat/test_countLines/twoLines_secondEmpty.txt copy tutti-ichtyometer/README.txt => tutti-service/src/test/resources/genericFormat/test_countLines/zeroLines.txt (100%) copy tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/{FoldAllDataAction.java => ExportFoldAllDataAction.java} (74%) create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/ExportSelectAllDataAction.java copy tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/{UnfoldAllDataAction.java => ExportUnfoldAllDataAction.java} (69%) create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/ExportUnselectAllDataAction.java rename tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/{FoldAllDataAction.java => ImportFoldAllDataAction.java} (66%) create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/ImportSelectAllDataAction.java rename tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/{UnfoldAllDataAction.java => ImportUnfoldAllDataAction.java} (62%) create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/ImportUnselectAllDataAction.java delete mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/SelectAllDataAction.java delete mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/UnselectAllDataAction.java delete mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/tree/DataSelectTreeCellEditor.java create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/tree/DataSelectTreeModel.java copy tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/tree/{DataSelectTreeCellRenderer.java => ExportDataSelectTreeCellRenderer.java} (94%) rename tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/tree/{DataSelectTreeCellRenderer.java => ImportDataSelectTreeCellRenderer.java} (50%) -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
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 9cfdbf543a8a41d2641d9f17fe6c36844e98c90f Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Mar 31 14:55:31 2015 +0200 add optionalId in DataModel API + nice method to get child --- .../tutti/persistence/model/CruiseDataModel.java | 14 ++++++++++++++ .../tutti/persistence/model/DataModelSupport.java | 19 +++++++++++++++++++ .../tutti/persistence/model/ProgramDataModel.java | 14 ++++++++++++++ 3 files changed, 47 insertions(+) diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/model/CruiseDataModel.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/model/CruiseDataModel.java index 2414aa6..ba44aa6 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/model/CruiseDataModel.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/model/CruiseDataModel.java @@ -36,4 +36,18 @@ public class CruiseDataModel extends DataModelSupport implements Iterable<Operat return operations.size(); } + public OperationDataModel getOperation(String id) { + + OperationDataModel result = null; + for (OperationDataModel operation : this) { + + if (id.equals(operation.getId())) { + result = operation; + break; + } + } + return result; + + } + } diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/model/DataModelSupport.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/model/DataModelSupport.java index d596bf5..2fee663 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/model/DataModelSupport.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/model/DataModelSupport.java @@ -12,10 +12,21 @@ public abstract class DataModelSupport implements Serializable { private static final long serialVersionUID = 1L; + /** + * Id representing the data. + */ private final String id; + /** + * Label of the data. + */ private final String label; + /** + * Optional id (used for example to link an id in a db to the same data in another db. + */ + private String optionalId; + public DataModelSupport(String id, String label) { this.id = id; this.label = label; @@ -29,6 +40,14 @@ public abstract class DataModelSupport implements Serializable { return label; } + public String getOptionalId() { + return optionalId; + } + + public void setOptionalId(String optionalId) { + this.optionalId = optionalId; + } + @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/model/ProgramDataModel.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/model/ProgramDataModel.java index 1743002..5616868 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/model/ProgramDataModel.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/model/ProgramDataModel.java @@ -36,4 +36,18 @@ public class ProgramDataModel extends DataModelSupport implements Iterable<Cruis return cruises.iterator(); } + public CruiseDataModel getCruise(String id) { + + CruiseDataModel result = null; + for (CruiseDataModel cruise : this) { + + if (id.equals(cruise.getId())) { + result = cruise; + break; + } + } + return result; + + } + } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
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>.
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 a07f55f3c5132c0dcb0f799b5b6714679ff4ce72 Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Mar 31 19:49:40 2015 +0200 debut de mise en place de l'import avec selection des données --- .../tutti/persistence/entities/data/Cruises.java | 22 ++++ .../entities/data/FishingOperations.java | 9 ++ .../genericformat/GenericFormatContextSupport.java | 74 ++--------- .../GenericFormatImportConfiguration.java | 139 ++++++++++++++++++++- .../GenericFormatImportCruiseContext.java | 59 +++++++-- .../GenericFormatImportCruiseResult.java | 2 +- .../GenericFormatImportOperationContext.java | 10 ++ .../GenericFormatImportOperationResult.java | 7 ++ .../genericformat/GenericFormatImportRequest.java | 76 +++++++++-- .../genericformat/GenericFormatImportService.java | 10 +- .../genericformat/GenericFormatResultSupport.java | 11 ++ .../GenericFormatValidateFileContext.java | 64 +++++++++- .../GenericFormatValidateFileResult.java | 1 + .../GenericformatImportPersitenceHelper.java | 68 ++++++---- .../consumer/CsvConsumerForOperation.java | 32 +++-- .../consumer/CsvConsumerForSurvey.java | 12 +- .../service/genericformat/csv/OperationModel.java | 18 +-- .../importactions/DoCheckWeightAction.java | 2 +- .../importactions/DoCleanWeightAction.java | 1 + .../importactions/ImportAccidentalCatchAction.java | 10 +- .../importactions/ImportCatchAction.java | 11 +- .../ImportGearCaracteristicAction.java | 14 ++- .../ImportIndividualObservationAction.java | 10 +- .../importactions/ImportMarineLitterAction.java | 10 +- .../importactions/ImportOperationAction.java | 12 +- .../importactions/ImportParameterAction.java | 9 +- .../importactions/ImportProtocolAction.java | 25 ++-- .../importactions/ImportReferentialGearAction.java | 20 +-- .../ImportReferentialPersonAction.java | 21 ++-- .../ImportReferentialSpeciesAction.java | 20 +-- .../ImportReferentialVesselAction.java | 20 +-- .../importactions/ImportSurveyAction.java | 35 +++--- .../importactions/LoadAttachmentsAction.java | 9 +- .../ValidateGearCaracteristicAction.java | 10 +- .../importactions/ValidateOperationAction.java | 11 +- .../importactions/ValidateSurveyAction.java | 28 ++++- .../resources/i18n/tutti-service_en_GB.properties | 9 ++ .../resources/i18n/tutti-service_fr_FR.properties | 24 +++- 38 files changed, 680 insertions(+), 245 deletions(-) diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/Cruises.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/Cruises.java index 5c3a5d5..091766e 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/Cruises.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/Cruises.java @@ -81,4 +81,26 @@ public class Cruises extends AbstractCruises { return equals; } + + public static String getNaturalId(Cruise cruise) { + + Calendar instance = Calendar.getInstance(); + int year1; + + if (cruise.getBeginDate() == null) { + year1 = -1; + } else { + instance.setTime(cruise.getBeginDate()); + year1 = instance.get(Calendar.YEAR); + } + String surveyPart1 = cruise.getSurveyPart(); + if (surveyPart1 == null) { + surveyPart1 = ""; + } + String programId = cruise.getProgram().getId(); + + String naturalId = year1 + "--" + surveyPart1 + "--" + programId; + return naturalId; + + } } diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/FishingOperations.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/FishingOperations.java index d63ebf0..6332400 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/FishingOperations.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/FishingOperations.java @@ -52,4 +52,13 @@ public class FishingOperations extends AbstractFishingOperations { return equals; } + + public static String getNaturalId(FishingOperation fishingOperation) { + + String cruiseId = Cruises.getNaturalId(fishingOperation.getCruise()); + String naturalId = cruiseId + fishingOperation.getStationNumber() + "--" + fishingOperation.getFishingOperationNumber() + "--" + fishingOperation.getMultirigAggregation(); + return naturalId; + + } + } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatContextSupport.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatContextSupport.java index 761e4c3..0a77e48 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatContextSupport.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatContextSupport.java @@ -42,6 +42,7 @@ import fr.ifremer.tutti.persistence.entities.referential.Person; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.persistence.entities.referential.TuttiReferentialEntity; import fr.ifremer.tutti.persistence.entities.referential.Vessel; +import fr.ifremer.tutti.persistence.model.CruiseDataModel; import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.service.ValidationService; import fr.ifremer.tutti.service.csv.CaracteristicValueParseException; @@ -294,10 +295,6 @@ public abstract class GenericFormatContextSupport implements Closeable { this.importedSampleCategoryModel = importedSampleCategoryModel; } - public Cruise getExistingCruise(Cruise cruise) { - return importRequest.getExistingCruise(cruise); - } - public boolean isCruiseAlreadyImported(Cruise cruise) { GenericFormatImportCruiseContext cruiseContext = getCruiseContext(cruise); @@ -305,10 +302,11 @@ public abstract class GenericFormatContextSupport implements Closeable { } - public void addImportedCruise(Cruise cruise, boolean override) { + public void addImportedCruise(Cruise cruise, CruiseDataModel existingCruiseData, Set<FishingOperation> existingFishingOperations) { String cruiseId = cruise.getId(); - GenericFormatImportCruiseContext cruiseContext = new GenericFormatImportCruiseContext(cruise, override, cruiseDecorator.toString(cruise)); + + GenericFormatImportCruiseContext cruiseContext = new GenericFormatImportCruiseContext(cruise, existingCruiseData, existingFishingOperations, cruiseDecorator.toString(cruise)); cruiseContexts.put(cruiseId, cruiseContext); } @@ -346,14 +344,6 @@ public abstract class GenericFormatContextSupport implements Closeable { } - public GenericFormatImportOperationContext getFishingOperationContext(FishingOperation fishingOperation) { - - GenericFormatImportCruiseContext cruiseContext = getCruiseContext(fishingOperation.getCruise()); - GenericFormatImportOperationContext result = cruiseContext.getFishingOperationContext(fishingOperation); - return result; - - } - public CsvConsumerForSampleCategory loadSampleCategories(boolean failFast) { sampleCategoryFileResult.setImported(true); surveyFileResult.setLinesCount(importRequest.getArchive().getSampleCategoryLineCount()); @@ -497,58 +487,6 @@ public abstract class GenericFormatContextSupport implements Closeable { && protocolFileResult.isValid(); } - public boolean isCanImportReferentialGear() { - return isArchiveLayoutValid() && referentialTemporaryGearFileResult.isFound(); - } - - public boolean isCanImportReferentialPerson() { - return isArchiveLayoutValid() && referentialTemporaryPersonFileResult.isFound(); - } - - public boolean isCanImportReferentialSpecies() { - return isArchiveLayoutValid() && referentialTemporarySpeciesFileResult.isFound(); - } - - public boolean isCanImportReferentialVessel() { - return isArchiveLayoutValid() && referentialTemporaryVesselFileResult.isFound(); - } - - public boolean isCanImportProtocol() { - return isArchiveLayoutValid() && referentialTemporarySpeciesFileResult.isValid() && protocolFileResult.isFound(); - } - - public boolean isCanImportSurvey() { - return isTechnicalFilesValid(); - } - - public boolean isCanImportGearCaracteristic() { - return isTechnicalFilesValid() && getSurveyFileResult().isValid(); - } - - public boolean isCanImportOperation() { - return isTechnicalFilesValid() && getSurveyFileResult().isValid(); - } - - public boolean isCanImportParameter() { - return isTechnicalFilesValid() && getOperationFileResult().isValid(); - } - - public boolean isCanImportCatch() { - return isTechnicalFilesValid() && getOperationFileResult().isValid(); - } - - public boolean isCanImportMarineLitter() { - return isTechnicalFilesValid() && getOperationFileResult().isValid(); - } - - public boolean isCanImportAccidentalCatch() { - return isTechnicalFilesValid() && getOperationFileResult().isValid(); - } - - public boolean isCanImportIndividualObservation() { - return isTechnicalFilesValid() && getOperationFileResult().isValid(); - } - public String getProtocolOriginalName() { return protocolOriginalName; } @@ -566,6 +504,10 @@ public abstract class GenericFormatContextSupport implements Closeable { return result; } + public boolean canNotOverrideData() { + return !importRequest.isOverrideData(); + } + public interface CruiseContextAction { void onCruise(GenericFormatImportCruiseContext cruiseContext, ProgressionModel progressionModel); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportConfiguration.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportConfiguration.java index ccb03cb..1c89e4c 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportConfiguration.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportConfiguration.java @@ -24,6 +24,8 @@ package fr.ifremer.tutti.service.genericformat; * #L% */ +import fr.ifremer.tutti.persistence.model.ProgramDataModel; + import java.io.File; import java.io.Serializable; @@ -37,26 +39,87 @@ public class GenericFormatImportConfiguration implements Serializable { private static final long serialVersionUID = 1L; - private String programId; - + /** + * File to import. + */ private File importFile; + /** + * Path to report to generation. + */ private File reportFile; + /** + * Should perform clean weights after import ? + */ private boolean cleanWeights; + /** + * Should perform check weights after import ? + */ private boolean checkWeights; + /** + * Override any existing data ? (TODO Should be more specific eras cruise ? fishing operations ?...) + */ private boolean overrideData; + /** + * Override protocol if same name ? + */ private boolean overrideProtocol; - public String getProgramId() { - return programId; + /** + * Data to export. + */ + private ProgramDataModel dataToExport; + + /** + * Should we import species batches ? + */ + private boolean importSpecies; + + /** + * Should we import benthos batches ? + */ + private boolean importBenthos; + + /** + * Should we import marine litter batches ? + */ + private boolean importMarineLitter; + + /** + * Should we import accidental catches ? + */ + private boolean importAccidentalCatch; + + /** + * Should we import individual observations ? + */ + private boolean importIndividualObservation; + + /** + * Should we import attachments ? + */ + private boolean importAttachments; + + /** + * Should we update existing cruises ? + */ + private boolean updateCruises; + + /** + * Should we update existing operations ? + */ + private boolean updateOperations; + + public ProgramDataModel getDataToExport() { + return dataToExport; } - public void setProgramId(String programId) { - this.programId = programId; + public void setDataToExport(ProgramDataModel dataToExport) { + this.dataToExport = dataToExport; } public File getImportFile() { @@ -106,4 +169,68 @@ public class GenericFormatImportConfiguration implements Serializable { public boolean isOverrideProtocol() { return overrideProtocol; } + + public boolean isUpdateCruises() { + return updateCruises; + } + + public void setUpdateCruises(boolean updateCruises) { + this.updateCruises = updateCruises; + } + + public boolean isUpdateOperations() { + return updateOperations; + } + + public void setUpdateOperations(boolean updateOperations) { + this.updateOperations = updateOperations; + } + + public boolean isImportSpecies() { + return importSpecies; + } + + public void setImportSpecies(boolean importSpecies) { + this.importSpecies = importSpecies; + } + + public boolean isImportBenthos() { + return importBenthos; + } + + public void setImportBenthos(boolean importBenthos) { + this.importBenthos = importBenthos; + } + + public boolean isImportMarineLitter() { + return importMarineLitter; + } + + public void setImportMarineLitter(boolean importMarineLitter) { + this.importMarineLitter = importMarineLitter; + } + + public boolean isImportAccidentalCatch() { + return importAccidentalCatch; + } + + public void setImportAccidentalCatch(boolean importAccidentalCatch) { + this.importAccidentalCatch = importAccidentalCatch; + } + + public boolean isImportIndividualObservation() { + return importIndividualObservation; + } + + public void setImportIndividualObservation(boolean importIndividualObservation) { + this.importIndividualObservation = importIndividualObservation; + } + + public boolean isImportAttachments() { + return importAttachments; + } + + public void setImportAttachments(boolean importAttachments) { + this.importAttachments = importAttachments; + } } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportCruiseContext.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportCruiseContext.java index a2721a7..07fafab 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportCruiseContext.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportCruiseContext.java @@ -33,6 +33,8 @@ import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.persistence.entities.data.FishingOperations; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.Gear; +import fr.ifremer.tutti.persistence.model.CruiseDataModel; +import fr.ifremer.tutti.persistence.model.OperationDataModel; import fr.ifremer.tutti.service.genericformat.csv.RowWithOperationContextSupport; import java.io.Closeable; @@ -53,7 +55,7 @@ public class GenericFormatImportCruiseContext implements Closeable { private final Cruise cruise; - private final boolean override; + private final CruiseDataModel existingCruiseData; private final String cruiseLabel; @@ -61,9 +63,12 @@ public class GenericFormatImportCruiseContext implements Closeable { private final Set<Gear> gearsWithcaracteristics; - public GenericFormatImportCruiseContext(Cruise cruise, boolean override, String cruiseLabel) { + private final Set<FishingOperation> existingOperations; + + public GenericFormatImportCruiseContext(Cruise cruise, CruiseDataModel existingCruiseData, Set<FishingOperation> existingOperations, String cruiseLabel) { this.cruise = cruise; - this.override=override; + this.existingCruiseData = existingCruiseData; + this.existingOperations = existingOperations; this.cruiseLabel = cruiseLabel; this.fishingOperationContexts = new TreeMap<>(); this.gearsWithcaracteristics = new HashSet<>(); @@ -83,10 +88,29 @@ public class GenericFormatImportCruiseContext implements Closeable { return cruise; } - public boolean isOverride() { - return override; + public CruiseDataModel getExistingCruiseData() { + return existingCruiseData; } + public OperationDataModel getExistingFishingOperationData(FishingOperation importRowCruise) { + + String cruiseId = getExistingFishingOperationId(importRowCruise); + OperationDataModel result = null; + + if (cruiseId != null) { + + for (OperationDataModel cruiseDataModel : existingCruiseData) { + if (cruiseId.equals(cruiseDataModel.getId())) { + result = cruiseDataModel; + break; + } + } + } + return result; + + } + + public String getCruiseLabel() { return cruiseLabel; } @@ -109,14 +133,9 @@ public class GenericFormatImportCruiseContext implements Closeable { } public void addFishingOperation(FishingOperation fishingOperation, CatchBatch catchBatch, String fishingOperationLabel) { - fishingOperationContexts.put(fishingOperation.getId(), new GenericFormatImportOperationContext(fishingOperation, catchBatch, fishingOperationLabel)); - } - - public GenericFormatImportOperationContext getFishingOperationContext(FishingOperation fishingOperation) { - - GenericFormatImportOperationContext result = fishingOperationContexts.get(fishingOperation.getId()); - return result; + OperationDataModel existingFishingOperationData = getExistingFishingOperationData(fishingOperation); + fishingOperationContexts.put(fishingOperation.getId(), new GenericFormatImportOperationContext(fishingOperation, catchBatch, existingFishingOperationData, fishingOperationLabel)); } public boolean isFishingOperationAlreadyImported(RowWithOperationContextSupport row) { @@ -174,4 +193,20 @@ public class GenericFormatImportCruiseContext implements Closeable { public Set<Gear> getGearsWithcaracteristics() { return gearsWithcaracteristics; } + + protected String getExistingFishingOperationId(FishingOperation importRowCruise) { + + String result = null; + for (FishingOperation fishingOperation : existingOperations) { + + boolean equals = FishingOperations.equals(importRowCruise, fishingOperation); + if (equals) { + result = fishingOperation.getId(); + break; + } + + } + return result; + + } } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportCruiseResult.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportCruiseResult.java index 6f9441b..76d66b2 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportCruiseResult.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportCruiseResult.java @@ -62,7 +62,7 @@ public class GenericFormatImportCruiseResult implements Serializable { public GenericFormatImportCruiseResult(GenericFormatImportCruiseContext cruiseContext) { this.cruise = cruiseContext.getCruise(); - this.override = cruiseContext.isOverride(); + this.override = cruiseContext.getExistingCruiseData()!=null; this.fishingOperationResults = new HashMap<>(); for (GenericFormatImportOperationContext operationContext : cruiseContext.getFishingOperationContexts()) { diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportOperationContext.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportOperationContext.java index fad1a64..e234dda 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportOperationContext.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportOperationContext.java @@ -38,6 +38,7 @@ import fr.ifremer.tutti.persistence.entities.data.MarineLitterBatch; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatchFrequency; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; +import fr.ifremer.tutti.persistence.model.OperationDataModel; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.MapUtils; @@ -70,6 +71,8 @@ public class GenericFormatImportOperationContext implements Closeable { private final CatchBatch catchBatch; + private final OperationDataModel existingFishingOperationData; + private final String fishingOperationLabel; private final Collection<MarineLitterBatch> marineLitterBatches; @@ -100,10 +103,12 @@ public class GenericFormatImportOperationContext implements Closeable { public GenericFormatImportOperationContext(FishingOperation fishingOperation, CatchBatch catchBatch, + OperationDataModel existingFishingOperationData, String fishingOperationLabel) { this.fishingOperation = fishingOperation; this.catchBatch = catchBatch; + this.existingFishingOperationData = existingFishingOperationData; this.fishingOperationLabel = fishingOperationLabel; this.marineLitterBatches = new ArrayList<>(); this.accidentalBatchesById = new TreeMap<>(); @@ -118,6 +123,11 @@ public class GenericFormatImportOperationContext implements Closeable { this.vesselUseFeatures = new CaracteristicMap(); this.checkErrors = new LinkedHashSet<>(); this.batchesObjectIds = new TreeMap<>(); + + } + + public OperationDataModel getExistingFishingOperationData() { + return existingFishingOperationData; } public FishingOperation getFishingOperation() { diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportOperationResult.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportOperationResult.java index fb25d07..1bcec3d 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportOperationResult.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportOperationResult.java @@ -73,13 +73,20 @@ public class GenericFormatImportOperationResult implements Serializable { private int nbBenthosBatchesHorsVrac; + private final boolean override; + public GenericFormatImportOperationResult(GenericFormatImportOperationContext operationContext) { this.fishingOperation = operationContext.getFishingOperation(); + this.override = operationContext.getExistingFishingOperationData() != null; catchBatch = operationContext.getCatchBatch(); this.checkErrors = new LinkedHashSet<>(); flushContext(operationContext); } + public boolean isOverride() { + return override; + } + public void addCheckError(String error) { checkErrors.add(error); } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportRequest.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportRequest.java index 6fc9d1d..5e061db 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportRequest.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportRequest.java @@ -29,6 +29,8 @@ import fr.ifremer.tutti.persistence.entities.data.Cruises; import fr.ifremer.tutti.persistence.entities.data.Program; import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; +import fr.ifremer.tutti.persistence.model.CruiseDataModel; +import fr.ifremer.tutti.persistence.model.ProgramDataModel; import java.io.File; import java.io.Serializable; @@ -61,12 +63,15 @@ public class GenericFormatImportRequest implements Serializable { private final Date startingDate; + private final ProgramDataModel existingData; + public GenericFormatImportRequest(GenericFormatImportConfiguration importConfiguration, GenericFormatArchive archive, char csvSeparator, Program program, SampleCategoryModel sampleCategoryModel, Set<Cruise> cruises, + ProgramDataModel existingData, TuttiProtocol protocol) { this.importConfiguration = importConfiguration; this.archive = archive; @@ -74,6 +79,7 @@ public class GenericFormatImportRequest implements Serializable { this.sampleCategoryModel = sampleCategoryModel; this.program = program; this.existingCruises = cruises; + this.existingData = existingData; this.protocol = protocol; this.startingDate = new Date(); @@ -91,10 +97,6 @@ public class GenericFormatImportRequest implements Serializable { return sampleCategoryModel; } - public Set<Cruise> getExistingCruises() { - return existingCruises; - } - public TuttiProtocol getProtocol() { return protocol; } @@ -111,17 +113,19 @@ public class GenericFormatImportRequest implements Serializable { return importConfiguration; } - public Cruise getExistingCruise(Cruise importRowCruise) { + public CruiseDataModel getExistingCruiseData(Cruise importRowCruise) { - Cruise result = null; - for (Cruise cruise : existingCruises) { + String cruiseId = getExistingCruiseId(importRowCruise); + CruiseDataModel result = null; - boolean equals = Cruises.equals(importRowCruise, cruise); - if (equals) { - result = cruise; - break; - } + if (cruiseId != null) { + for (CruiseDataModel cruiseDataModel : existingData) { + if (cruiseId.equals(cruiseDataModel.getId())) { + result = cruiseDataModel; + break; + } + } } return result; @@ -143,8 +147,56 @@ public class GenericFormatImportRequest implements Serializable { return importConfiguration.isOverrideProtocol(); } + public boolean isUpdateCruises() { + return importConfiguration.isUpdateCruises(); + } + + public boolean isUpdateOperations() { + return importConfiguration.isUpdateOperations(); + } + + public boolean isImportSpecies() { + return importConfiguration.isImportSpecies(); + } + + public boolean isImportBenthos() { + return importConfiguration.isImportBenthos(); + } + + public boolean isImportMarineLitter() { + return importConfiguration.isImportMarineLitter(); + } + + public boolean isImportAccidentalCatch() { + return importConfiguration.isImportAccidentalCatch(); + } + + public boolean isImportIndividualObservation() { + return importConfiguration.isImportIndividualObservation(); + } + + public boolean isImportAttachments() { + return importConfiguration.isImportAttachments(); + } + public File getReportFile() { return importConfiguration.getReportFile(); } + protected String getExistingCruiseId(Cruise importRowCruise) { + + String result = null; + for (Cruise cruise : existingCruises) { + + boolean equals = Cruises.equals(importRowCruise, cruise); + if (equals) { + result = cruise.getId(); + break; + } + + } + return result; + + } + } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportService.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportService.java index cf2d065..ce1617d 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportService.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportService.java @@ -31,6 +31,7 @@ import fr.ifremer.tutti.persistence.entities.data.Cruise; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.persistence.entities.data.Program; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; +import fr.ifremer.tutti.persistence.model.ProgramDataModel; import fr.ifremer.tutti.persistence.service.util.SynchronizationStatusHelper; import fr.ifremer.tutti.service.AbstractTuttiService; import fr.ifremer.tutti.service.DecoratorService; @@ -347,7 +348,10 @@ public class GenericFormatImportService extends AbstractTuttiService { protected GenericFormatImportRequest createImportRequest(GenericFormatImportConfiguration importConfiguration, GenericFormatArchive archive) { - String programId = importConfiguration.getProgramId(); + ProgramDataModel dataToExport = importConfiguration.getDataToExport(); + Preconditions.checkNotNull(dataToExport); + + String programId = dataToExport.getId(); Preconditions.checkNotNull(programId); Program program = persistenceService.getProgram(programId); @@ -365,12 +369,14 @@ public class GenericFormatImportService extends AbstractTuttiService { TuttiProtocol protocol = persistenceService.getProtocol(); + ProgramDataModel dataModel = persistenceService.loadProgram(programId, true); GenericFormatImportRequest request = new GenericFormatImportRequest(importConfiguration, archive, ';', program, context.getSampleCategoryModel(), ImmutableSet.copyOf(cruises), + dataModel, protocol); return request; @@ -393,7 +399,7 @@ public class GenericFormatImportService extends AbstractTuttiService { Set<ImportActionSupport> actions = new LinkedHashSet<>(); addTechnicalActions(importContext, actions); actions.add(new LoadAttachmentsAction(importContext)); - actions.add(new ValidateSurveyAction(importContext)); + actions.add(new ValidateSurveyAction(importContext, persistenceService)); actions.add(new ValidateGearCaracteristicAction(importContext)); actions.add(new ValidateOperationAction(importContext)); actions.add(new ValidateParameterAction(importContext)); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatResultSupport.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatResultSupport.java index 7a8ff84..6640891 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatResultSupport.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatResultSupport.java @@ -31,6 +31,7 @@ import fr.ifremer.tutti.persistence.entities.referential.Gear; import fr.ifremer.tutti.persistence.entities.referential.Person; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.persistence.entities.referential.Vessel; +import fr.ifremer.tutti.persistence.model.ProgramDataModel; import java.io.File; import java.io.Serializable; @@ -86,6 +87,8 @@ public abstract class GenericFormatResultSupport implements Serializable { private String protocolOriginalName; + private ProgramDataModel dataModel; + protected GenericFormatResultSupport(GenericFormatContextSupport importContext) { this.importRequest = importContext.getImportRequest(); @@ -248,4 +251,12 @@ public abstract class GenericFormatResultSupport implements Serializable { this.protocolOriginalName = protocolOriginalName; } + public ProgramDataModel getDataModel() { + return dataModel; + } + + public void setDataModel(ProgramDataModel dataModel) { + this.dataModel = dataModel; + } + } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatValidateFileContext.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatValidateFileContext.java index 0b11594..2f123e4 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatValidateFileContext.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatValidateFileContext.java @@ -27,11 +27,19 @@ package fr.ifremer.tutti.service.genericformat; import fr.ifremer.tutti.persistence.ProgressionModel; import fr.ifremer.tutti.persistence.entities.data.CatchBatch; import fr.ifremer.tutti.persistence.entities.data.Cruise; +import fr.ifremer.tutti.persistence.entities.data.Cruises; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; +import fr.ifremer.tutti.persistence.entities.data.FishingOperations; +import fr.ifremer.tutti.persistence.model.CruiseDataModel; +import fr.ifremer.tutti.persistence.model.OperationDataModel; +import fr.ifremer.tutti.persistence.model.ProgramDataModel; import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.service.genericformat.importactions.RestoreAfterValidateAction; import org.nuiton.decorator.Decorator; +import java.util.LinkedHashSet; +import java.util.Set; + /** * Created on 2/24/15. * @@ -60,17 +68,67 @@ public class GenericFormatValidateFileContext extends GenericFormatContextSuppor } + public ProgramDataModel toDataModel() { + + final Set<CruiseDataModel> importedCruises = new LinkedHashSet<>(); + + doActionOnCruiseContexts(new CruiseContextAction() { + @Override + public void onCruise(GenericFormatImportCruiseContext cruiseContext, ProgressionModel progressionModel) { + + Cruise cruise = cruiseContext.getCruise(); + + CruiseDataModel existingCruiseData = cruiseContext.getExistingCruiseData(); + + Set<OperationDataModel> operations = new LinkedHashSet<>(); + + for (GenericFormatImportOperationContext fishingOperationContext : cruiseContext.getFishingOperationContexts()) { + FishingOperation fishingOperation = fishingOperationContext.getFishingOperation(); + + // Add a natural Id as id (used in import to find which cruise to import) + String naturalId = FishingOperations.getNaturalId(fishingOperation); + fishingOperation.setId(naturalId); + OperationDataModel operation = new OperationDataModel(fishingOperation); + fishingOperation.setId((String) null); + + OperationDataModel existingFishingOperationData = fishingOperationContext.getExistingFishingOperationData(); + if (existingFishingOperationData != null) { + operation.setOptionalId(existingFishingOperationData.getId()); + } + + operations.add(operation); + } + + // Add a natural Id as id (used in import to find which cruise to import) + String naturalId = Cruises.getNaturalId(cruise); + cruise.setId(naturalId); + CruiseDataModel cruiseModel = new CruiseDataModel(cruise, operations); + cruise.setId((String) null); + + if (existingCruiseData != null) { + cruiseModel.setOptionalId(existingCruiseData.getId()); + } + + importedCruises.add(cruiseModel); + + } + }); + ProgramDataModel result = new ProgramDataModel(getImportRequest().getProgram(), importedCruises); + return result; + + } + @Override - public void addImportedCruise(Cruise cruise, boolean override) { + public void addImportedCruise(Cruise cruise, CruiseDataModel existingCruiseData, Set<FishingOperation> existingFishingOperations) { - if (!override) { + if (existingCruiseData == null) { // add a temporary id to simulate persist behaviour cruise.setId(getNextCruiseId()); } - super.addImportedCruise(cruise, override); + super.addImportedCruise(cruise, existingCruiseData, existingFishingOperations); } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatValidateFileResult.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatValidateFileResult.java index c784eed..b8ae551 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatValidateFileResult.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatValidateFileResult.java @@ -36,6 +36,7 @@ public class GenericFormatValidateFileResult extends GenericFormatResultSupport public GenericFormatValidateFileResult(GenericFormatValidateFileContext validateFileContext) { super(validateFileContext); + setDataModel(validateFileContext.toDataModel()); } } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericformatImportPersitenceHelper.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericformatImportPersitenceHelper.java index f33606a..05ca563 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericformatImportPersitenceHelper.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericformatImportPersitenceHelper.java @@ -24,6 +24,7 @@ package fr.ifremer.tutti.service.genericformat; * #L% */ +import com.google.common.collect.Sets; import fr.ifremer.adagio.core.dao.referential.ObjectTypeCode; import fr.ifremer.tutti.persistence.ProgressionModel; import fr.ifremer.tutti.persistence.entities.CaracteristicMap; @@ -40,6 +41,7 @@ import fr.ifremer.tutti.persistence.entities.data.MarineLitterBatch; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatchFrequency; import fr.ifremer.tutti.persistence.entities.referential.Gear; +import fr.ifremer.tutti.persistence.model.CruiseDataModel; import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.service.genericformat.csv.AttachmentRow; import org.apache.commons.collections4.CollectionUtils; @@ -88,6 +90,10 @@ public class GenericformatImportPersitenceHelper { Cruise savedCruise; + CruiseDataModel existingCruiseData; + + Set<FishingOperation> existingFishingOperations; + if (createCruise) { if (log.isInfoEnabled()) { @@ -97,6 +103,10 @@ public class GenericformatImportPersitenceHelper { savedCruise = persistenceService.createCruise(cruise); + existingCruiseData = null; + + existingFishingOperations = null; + } else { if (log.isInfoEnabled()) { @@ -105,42 +115,32 @@ public class GenericformatImportPersitenceHelper { importContext.increments(t("tutti.service.genericFormat.persist.cruise", cruiseStr)); - // delete previous attachments - persistenceService.deleteAllAttachment(ObjectTypeCode.SCIENTIFIC_CRUISE, cruise.getIdAsInt()); + savedCruise = cruise; - savedCruise = persistenceService.saveCruise(cruise, false, false); + existingFishingOperations = Sets.newLinkedHashSet(persistenceService.getAllFishingOperation(cruise.getId())); - List<String> fishingOperationIds = persistenceService.getAllFishingOperationIds(savedCruise.getId()); - importContext.addStepsInProgressionModel(fishingOperationIds.size()); + existingCruiseData = importContext.getImportRequest().getExistingCruiseData(cruise); - for (String fishingOperationId : fishingOperationIds) { + if (importContext.getImportRequest().isUpdateCruises()) { - FishingOperation fishingOperation = persistenceService.getFishingOperation(fishingOperationId); - importContext.increments(t("tutti.service.genericFormat.remove.existingCruise.fishingOperation", cruiseStr, fishingOperationDecorator.toString(fishingOperation))); + savedCruise = persistenceService.saveCruise(cruise, false, false); - persistenceService.deleteFishingOperation(fishingOperationId); + if (importContext.getImportRequest().isImportAttachments()) { - } - - } + // delete previous attachments + persistenceService.deleteAllAttachment(ObjectTypeCode.SCIENTIFIC_CRUISE, cruise.getIdAsInt()); - if (CollectionUtils.isNotEmpty(attachmentRows)) { - persistAttachments(savedCruise.getIdAsInt(), attachmentRows); - } - importContext.addImportedCruise(savedCruise, !createCruise); - - } - - protected void persistAttachments(Integer objectId, Collection<AttachmentRow> attachmentRows) { - - for (AttachmentRow attachmentRow : attachmentRows) { + if (CollectionUtils.isNotEmpty(attachmentRows)) { + persistAttachments(savedCruise.getIdAsInt(), attachmentRows); + } - Attachment attachment = attachmentRow.toAttachment(objectId); - File attachmentFile = importContext.getImportRequest().getArchive().extractAttachment(attachment.getPath()); - persistenceService.createAttachment(attachment, attachmentFile); + } + } } + importContext.addImportedCruise(savedCruise, existingCruiseData, existingFishingOperations); + } public void persistGearCaracteristics() { @@ -174,6 +174,22 @@ public class GenericformatImportPersitenceHelper { } + protected void persistAttachments(Integer objectId, Collection<AttachmentRow> attachmentRows) { + + if (importContext.getImportRequest().isImportAttachments()) { + + for (AttachmentRow attachmentRow : attachmentRows) { + + Attachment attachment = attachmentRow.toAttachment(objectId); + File attachmentFile = importContext.getImportRequest().getArchive().extractAttachment(attachment.getPath()); + persistenceService.createAttachment(attachment, attachmentFile); + + } + + } + + } + public void persistFishingOperation(GenericFormatImportCruiseContext cruiseContext, FishingOperation fishingOperation, CatchBatch catchBatch, Collection<AttachmentRow> operationAttachmentRows, Collection<AttachmentRow> catchAttachmentRows) { String operationStr = fishingOperationDecorator.toString(fishingOperation); @@ -483,7 +499,7 @@ public class GenericformatImportPersitenceHelper { for (IndividualObservationBatch individualObservationBatch : individualObservationBatches) { Integer objectId = individualObservationBatch.getIdAsInt(); - Collection<AttachmentRow> attachmentRows = importContext.popAttachmentRows(ObjectTypeCode.SAMPLE,objectId); + Collection<AttachmentRow> attachmentRows = importContext.popAttachmentRows(ObjectTypeCode.SAMPLE, objectId); // Id was only here to get attachments individualObservationBatch.setId((String) null); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForOperation.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForOperation.java index 87fe198..c79602e 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForOperation.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForOperation.java @@ -108,7 +108,7 @@ public class CsvConsumerForOperation extends CsvComsumer<OperationRow, Operation } - public void prepareRowForPersist(GenericFormatImportCruiseContext cruiseContext, ImportRow<OperationRow> row) { + public void prepareRowForPersist(ImportRow<OperationRow> row, boolean importSpecies, boolean importBenthos, boolean importMarineLitter) { OperationRow bean = row.getBean(); @@ -121,30 +121,44 @@ public class CsvConsumerForOperation extends CsvComsumer<OperationRow, Operation catchBatch.setCatchTotalRejectedWeight(null); } - if (BooleanUtils.toBooleanDefaultIfNull(bean.getSpeciesTotalSortedWeightComputed(), false)) { + prepareSpecies(importSpecies, bean, catchBatch); + + prepareBenthos(importBenthos, bean, catchBatch); + + prepareMarineLitter(importMarineLitter, bean, catchBatch); + + } + + protected void prepareSpecies(boolean importSpecies, OperationRow bean, CatchBatch catchBatch) { + + if (!importSpecies || BooleanUtils.toBooleanDefaultIfNull(bean.getSpeciesTotalSortedWeightComputed(), false)) { catchBatch.setSpeciesTotalSortedWeight(null); } - if (BooleanUtils.toBooleanDefaultIfNull(bean.getSpeciesTotalInertWeightComputed(), false)) { + if (!importSpecies || BooleanUtils.toBooleanDefaultIfNull(bean.getSpeciesTotalInertWeightComputed(), false)) { catchBatch.setSpeciesTotalInertWeight(null); } - if (BooleanUtils.toBooleanDefaultIfNull(bean.getSpeciesTotalLivingNotItemizedWeightComputed(), false)) { + if (!importSpecies || BooleanUtils.toBooleanDefaultIfNull(bean.getSpeciesTotalLivingNotItemizedWeightComputed(), false)) { catchBatch.setSpeciesTotalLivingNotItemizedWeight(null); } - if (BooleanUtils.toBooleanDefaultIfNull(bean.getBenthosTotalSortedWeightComputed(), false)) { + } + + protected void prepareBenthos(boolean importBenthos , OperationRow bean, CatchBatch catchBatch) { + if (!importBenthos ||BooleanUtils.toBooleanDefaultIfNull(bean.getBenthosTotalSortedWeightComputed(), false)) { catchBatch.setBenthosTotalSortedWeight(null); } - if (BooleanUtils.toBooleanDefaultIfNull(bean.getBenthosTotalInertWeightComputed(), false)) { + if (!importBenthos ||BooleanUtils.toBooleanDefaultIfNull(bean.getBenthosTotalInertWeightComputed(), false)) { catchBatch.setBenthosTotalInertWeight(null); } - if (BooleanUtils.toBooleanDefaultIfNull(bean.getBenthosTotalLivingNotItemizedWeightComputed(), false)) { + if (!importBenthos ||BooleanUtils.toBooleanDefaultIfNull(bean.getBenthosTotalLivingNotItemizedWeightComputed(), false)) { catchBatch.setBenthosTotalLivingNotItemizedWeight(null); } + } - if (BooleanUtils.toBooleanDefaultIfNull(bean.getMarineLitterTotalWeightComputed(), false)) { + protected void prepareMarineLitter(boolean importMarineLitter, OperationRow bean, CatchBatch catchBatch) { + if (!importMarineLitter || BooleanUtils.toBooleanDefaultIfNull(bean.getMarineLitterTotalWeightComputed(), false)) { catchBatch.setMarineLitterTotalWeight(null); } - } } \ No newline at end of file diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForSurvey.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForSurvey.java index 31b5e5f..0477e5e 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForSurvey.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForSurvey.java @@ -28,6 +28,7 @@ import fr.ifremer.tutti.persistence.entities.data.Cruise; import fr.ifremer.tutti.persistence.entities.data.Program; import fr.ifremer.tutti.persistence.entities.referential.GearWithOriginalRankOrder; import fr.ifremer.tutti.persistence.entities.referential.GearWithOriginalRankOrders; +import fr.ifremer.tutti.persistence.model.CruiseDataModel; import fr.ifremer.tutti.service.csv.CsvComsumer; import fr.ifremer.tutti.service.genericformat.GenericFormatContextSupport; import fr.ifremer.tutti.service.genericformat.GenericFormatImportEntityParserFactory; @@ -62,8 +63,11 @@ public class CsvConsumerForSurvey extends CsvComsumer<SurveyRow, SurveyModel> { Cruise cruise = bean.getCruise(); - Cruise existingCruise = importContext.getExistingCruise(cruise); - if (!(existingCruise == null || importContext.getImportRequest().isOverrideData())) { + CruiseDataModel existingCruiseData = importContext.getImportRequest().getExistingCruiseData(cruise); + + boolean cruiseExist = existingCruiseData != null; + + if (cruiseExist && importContext.canNotOverrideData()) { addCheckError(row, new CruiseAlreadyExistException(cruise)); @@ -73,9 +77,9 @@ public class CsvConsumerForSurvey extends CsvComsumer<SurveyRow, SurveyModel> { } else { - if (existingCruise != null) { + if (cruiseExist) { - cruise.setId(existingCruise.getId()); + cruise.setId(existingCruiseData.getId()); } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/csv/OperationModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/csv/OperationModel.java index 375ad81..7990ec8 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/csv/OperationModel.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/csv/OperationModel.java @@ -195,7 +195,7 @@ public class OperationModel extends AbstractTuttiImportExportModel<OperationRow> newMandatoryColumn("Commentaire", FishingOperation.PROPERTY_COMMENT, TuttiCsvUtil.COMMENT_PARSER_FORMATTER); newMandatoryColumn("Poids_Total", OperationRow.PROPERTY_CATCH_TOTAL_WEIGHT, TuttiCsvUtil.WEIGHT_NULL_TO_9); - newMandatoryColumn("Poids_Total_Calcule", OperationRow.PROPERTY_CATCH_TOTAL_WEIGHT_COMPUTED, TuttiCsvUtil.PRIMITIVE_BOOLEAN); + newMandatoryColumn("Poids_Total_Calcule", OperationRow.PROPERTY_CATCH_TOTAL_WEIGHT_COMPUTED, TuttiCsvUtil.BOOLEAN); newIgnoredColumn("Poids_Total_Vrac"); newIgnoredColumn("Poids_Total_Vrac_Calcule"); @@ -204,7 +204,7 @@ public class OperationModel extends AbstractTuttiImportExportModel<OperationRow> newIgnoredColumn("Poids_Total_HorsVrac_Calcule"); newMandatoryColumn("Poids_Total_Non_Trie", OperationRow.PROPERTY_CATCH_TOTAL_REJECTED_WEIGHT, TuttiCsvUtil.WEIGHT_NULL_TO_9); - newMandatoryColumn("Poids_Total_Non_Trie_Calcule", OperationRow.PROPERTY_CATCH_TOTAL_REJECTED_WEIGHT_COMPUTED, TuttiCsvUtil.PRIMITIVE_BOOLEAN); + newMandatoryColumn("Poids_Total_Non_Trie_Calcule", OperationRow.PROPERTY_CATCH_TOTAL_REJECTED_WEIGHT_COMPUTED, TuttiCsvUtil.BOOLEAN); newMandatoryColumn("Poids_Total_Tremis", OperationRow.PROPERTY_CATCH_TOTAL_SORTED_TREMIS_WEIGHT, TuttiCsvUtil.WEIGHT_NULL_TO_9); newIgnoredColumn("Poids_Total_Tremis_Calcule"); @@ -216,7 +216,7 @@ public class OperationModel extends AbstractTuttiImportExportModel<OperationRow> newIgnoredColumn("Poids_Total_Espece_Calcule"); newMandatoryColumn("Poids_Total_Espece_Vrac", OperationRow.PROPERTY_SPECIES_TOTAL_SORTED_WEIGHT, TuttiCsvUtil.WEIGHT_NULL_TO_9); - newMandatoryColumn("Poids_Total_Espece_Vrac_Calcule", OperationRow.PROPERTY_SPECIES_TOTAL_SORTED_WEIGHT_COMPUTED, TuttiCsvUtil.PRIMITIVE_BOOLEAN); + newMandatoryColumn("Poids_Total_Espece_Vrac_Calcule", OperationRow.PROPERTY_SPECIES_TOTAL_SORTED_WEIGHT_COMPUTED, TuttiCsvUtil.BOOLEAN); newIgnoredColumn("Poids_Total_Espece_Vrac_Trie"); newIgnoredColumn("Poids_Total_Espece_Vrac_Trie_Calcule"); @@ -225,16 +225,16 @@ public class OperationModel extends AbstractTuttiImportExportModel<OperationRow> newIgnoredColumn("Poids_Total_Espece_HorsVrac_Calcule"); newMandatoryColumn("Poids_Total_Espece_Inerte_Trie", OperationRow.PROPERTY_SPECIES_TOTAL_INERT_WEIGHT, TuttiCsvUtil.WEIGHT_NULL_TO_9); - newMandatoryColumn("Poids_Total_Espece_Inerte_Trie_Calcule", OperationRow.PROPERTY_SPECIES_TOTAL_INERT_WEIGHT_COMPUTED, TuttiCsvUtil.PRIMITIVE_BOOLEAN); + newMandatoryColumn("Poids_Total_Espece_Inerte_Trie_Calcule", OperationRow.PROPERTY_SPECIES_TOTAL_INERT_WEIGHT_COMPUTED, TuttiCsvUtil.BOOLEAN); newMandatoryColumn("Poids_Total_Espece_Vivant_non_detaille_trie", OperationRow.PROPERTY_SPECIES_TOTAL_LIVING_NOT_ITEMIZED_WEIGHT, TuttiCsvUtil.WEIGHT_NULL_TO_9); - newMandatoryColumn("Poids_Total_Espece_Vivant_non_detaille_trie_Calcule", OperationRow.PROPERTY_SPECIES_TOTAL_LIVING_NOT_ITEMIZED_WEIGHT_COMPUTED, TuttiCsvUtil.PRIMITIVE_BOOLEAN); + newMandatoryColumn("Poids_Total_Espece_Vivant_non_detaille_trie_Calcule", OperationRow.PROPERTY_SPECIES_TOTAL_LIVING_NOT_ITEMIZED_WEIGHT_COMPUTED, TuttiCsvUtil.BOOLEAN); newIgnoredColumn("Poids_Total_Benthos"); newIgnoredColumn("Poids_Total_Benthos_Calcule"); newMandatoryColumn("Poids_Total_Benthos_Vrac", OperationRow.PROPERTY_BENTHOS_TOTAL_SORTED_WEIGHT, TuttiCsvUtil.WEIGHT_NULL_TO_9); - newMandatoryColumn("Poids_Total_Benthos_Vrac_Calcule", OperationRow.PROPERTY_BENTHOS_TOTAL_SORTED_WEIGHT_COMPUTED, TuttiCsvUtil.PRIMITIVE_BOOLEAN); + newMandatoryColumn("Poids_Total_Benthos_Vrac_Calcule", OperationRow.PROPERTY_BENTHOS_TOTAL_SORTED_WEIGHT_COMPUTED, TuttiCsvUtil.BOOLEAN); newIgnoredColumn("Poids_Total_Benthos_Vrac_Trie"); newIgnoredColumn("Poids_Total_Benthos_Vrac_Trie_Calcule"); @@ -243,13 +243,13 @@ public class OperationModel extends AbstractTuttiImportExportModel<OperationRow> newIgnoredColumn("Poids_Total_Benthos_HorsVrac_Calcule"); newMandatoryColumn("Poids_Total_Benthos_Inerte_Trie", OperationRow.PROPERTY_BENTHOS_TOTAL_INERT_WEIGHT, TuttiCsvUtil.WEIGHT_NULL_TO_9); - newMandatoryColumn("Poids_Total_Benthos_Inerte_Trie_Calcule", OperationRow.PROPERTY_BENTHOS_TOTAL_INERT_WEIGHT_COMPUTED, TuttiCsvUtil.PRIMITIVE_BOOLEAN); + newMandatoryColumn("Poids_Total_Benthos_Inerte_Trie_Calcule", OperationRow.PROPERTY_BENTHOS_TOTAL_INERT_WEIGHT_COMPUTED, TuttiCsvUtil.BOOLEAN); newMandatoryColumn("Poids_Total_Benthos_Vivant_non_detaille_trie", OperationRow.PROPERTY_BENTHOS_TOTAL_LIVING_NOT_ITEMIZED_WEIGHT, TuttiCsvUtil.WEIGHT_NULL_TO_9); - newMandatoryColumn("Poids_Total_Benthos_Vivant_non_detaille_trie_Calcule", OperationRow.PROPERTY_BENTHOS_TOTAL_LIVING_NOT_ITEMIZED_WEIGHT_COMPUTED, TuttiCsvUtil.PRIMITIVE_BOOLEAN); + newMandatoryColumn("Poids_Total_Benthos_Vivant_non_detaille_trie_Calcule", OperationRow.PROPERTY_BENTHOS_TOTAL_LIVING_NOT_ITEMIZED_WEIGHT_COMPUTED, TuttiCsvUtil.BOOLEAN); newMandatoryColumn("Poids_Total_Macro_Dechet", OperationRow.PROPERTY_MARINE_LITTER_TOTAL_WEIGHT, TuttiCsvUtil.WEIGHT_NULL_TO_9); - newMandatoryColumn("Poids_Total_Macro_Dechet_Calcule", OperationRow.PROPERTY_MARINE_LITTER_TOTAL_WEIGHT_COMPUTED, TuttiCsvUtil.PRIMITIVE_BOOLEAN); + newMandatoryColumn("Poids_Total_Macro_Dechet_Calcule", OperationRow.PROPERTY_MARINE_LITTER_TOTAL_WEIGHT_COMPUTED, TuttiCsvUtil.BOOLEAN); newMandatoryColumn("Serie_Id", Cruise.PROPERTY_PROGRAM, parserFactory.getProgramParser()); newMandatoryColumn("Engin_Id", FishingOperation.PROPERTY_GEAR, parserFactory.getGearParser()); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/DoCheckWeightAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/DoCheckWeightAction.java index 95170cf..b6b365f 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/DoCheckWeightAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/DoCheckWeightAction.java @@ -58,7 +58,7 @@ public class DoCheckWeightAction extends ImportActionSupport { protected boolean canExecute() { return importContext.getImportRequest().isCheckWeights() && importContext.isTechnicalFilesValid() - && importContext.getCatchFileResult().isValid() + && importContext.getOperationFileResult().isValid() && importContext.getMarineLitterFileResult().isValid(); } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/DoCleanWeightAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/DoCleanWeightAction.java index d1ae23c..899b21e 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/DoCleanWeightAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/DoCleanWeightAction.java @@ -56,6 +56,7 @@ public class DoCleanWeightAction extends ImportActionSupport { protected boolean canExecute() { return importContext.getImportRequest().isCleanWeights() && importContext.isTechnicalFilesValid() + && importContext.getOperationFileResult().isValid() && importContext.getCatchFileResult().isValid() && importContext.getMarineLitterFileResult().isValid(); } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportAccidentalCatchAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportAccidentalCatchAction.java index 83bf3c4..f1905b4 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportAccidentalCatchAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportAccidentalCatchAction.java @@ -60,7 +60,15 @@ public class ImportAccidentalCatchAction extends ImportActionSupport { @Override protected boolean canExecute() { - return importContext.isTechnicalFilesValid() && importContext.getSurveyFileResult().isValid() && importContext.getOperationFileResult().isValid(); + return importContext.isTechnicalFilesValid() + && importContext.getSurveyFileResult().isValid() + && importContext.getOperationFileResult().isValid() + && importContext.getImportRequest().isImportAccidentalCatch(); + } + + @Override + protected void skipExecute() { + importContext.increments(t("tutti.service.genericFormat.skip.import.accidentalCatches")); } @Override diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportCatchAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportCatchAction.java index 059ba16..a43995a 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportCatchAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportCatchAction.java @@ -60,7 +60,16 @@ public class ImportCatchAction extends ImportActionSupport { @Override protected boolean canExecute() { - return importContext.isTechnicalFilesValid() && importContext.getSurveyFileResult().isValid() && importContext.getOperationFileResult().isValid(); + return importContext.isTechnicalFilesValid() + && importContext.getSurveyFileResult().isValid() + && importContext.getOperationFileResult().isValid() + && (importContext.getImportRequest().isImportSpecies() || + importContext.getImportRequest().isImportBenthos()); + } + + @Override + protected void skipExecute() { + importContext.increments(t("tutti.service.genericFormat.skip.import.catches")); } @Override diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportGearCaracteristicAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportGearCaracteristicAction.java index 4714c14..effad1b 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportGearCaracteristicAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportGearCaracteristicAction.java @@ -64,6 +64,11 @@ public class ImportGearCaracteristicAction extends ImportActionSupport { } @Override + protected void skipExecute() { + importContext.increments(t("tutti.service.genericFormat.skip.import.gearCaracteristics")); + } + + @Override protected void doExecute() { if (log.isInfoEnabled()) { @@ -75,7 +80,14 @@ public class ImportGearCaracteristicAction extends ImportActionSupport { for (ImportRow<GearCaracteristicRow> row : consumer) { GenericFormatImportCruiseContext cruiseContext = consumer.validateRow(row, importContext); - consumer.prepareRowForPersist(cruiseContext, row); + + if (cruiseContext != null) { + + if (row.isValid()) { + consumer.prepareRowForPersist(cruiseContext, row); + } + + } } } catch (IOException e) { diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportIndividualObservationAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportIndividualObservationAction.java index d8d270a..d2bb9b6 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportIndividualObservationAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportIndividualObservationAction.java @@ -60,7 +60,15 @@ public class ImportIndividualObservationAction extends ImportActionSupport { @Override protected boolean canExecute() { - return importContext.isTechnicalFilesValid() && importContext.getSurveyFileResult().isValid() && importContext.getOperationFileResult().isValid(); + return importContext.isTechnicalFilesValid() + && importContext.getSurveyFileResult().isValid() + && importContext.getOperationFileResult().isValid() + && importContext.getImportRequest().isImportIndividualObservation(); + } + + @Override + protected void skipExecute() { + importContext.increments(t("tutti.service.genericFormat.skip.import.individualObservations")); } @Override diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportMarineLitterAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportMarineLitterAction.java index a5c3973..0f4e94f 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportMarineLitterAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportMarineLitterAction.java @@ -60,7 +60,15 @@ public class ImportMarineLitterAction extends ImportActionSupport { @Override protected boolean canExecute() { - return importContext.isTechnicalFilesValid() && importContext.getSurveyFileResult().isValid() && importContext.getOperationFileResult().isValid(); + return importContext.isTechnicalFilesValid() + && importContext.getSurveyFileResult().isValid() + && importContext.getOperationFileResult().isValid() + && importContext.getImportRequest().isImportMarineLitter(); + } + + @Override + protected void skipExecute() { + importContext.increments(t("tutti.service.genericFormat.skip.import.marineLitters")); } @Override diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportOperationAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportOperationAction.java index d36008a..dde6d82 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportOperationAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportOperationAction.java @@ -69,18 +69,28 @@ public class ImportOperationAction extends ImportActionSupport { } @Override + protected void skipExecute() { + importContext.increments(t("tutti.service.genericFormat.skip.import.operations")); + } + + @Override protected void doExecute() { if (log.isInfoEnabled()) { log.info("Import operation.csv file."); } importContext.increments(t("tutti.service.genericFormat.import.operations")); + + boolean importSpecies = importContext.getImportRequest().isImportSpecies(); + boolean importBenthos = importContext.getImportRequest().isImportBenthos(); + boolean importMarineLitter= importContext.getImportRequest().isImportMarineLitter(); + GenericFormatCsvFileResult importFileResult = importContext.getOperationFileResult(); try (CsvConsumerForOperation consumer = importContext.loadOperations(true)) { for (ImportRow<OperationRow> row : consumer) { GenericFormatImportCruiseContext cruiseContext = consumer.validateRow(row, importContext); - consumer.prepareRowForPersist(cruiseContext, row); + consumer.prepareRowForPersist(row, importSpecies, importBenthos, importMarineLitter); OperationRow bean = row.getBean(); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportParameterAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportParameterAction.java index 5369ccd..ed1d397 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportParameterAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportParameterAction.java @@ -60,7 +60,14 @@ public class ImportParameterAction extends ImportActionSupport { @Override protected boolean canExecute() { - return importContext.isTechnicalFilesValid() && importContext.getSurveyFileResult().isValid() && importContext.getOperationFileResult().isValid(); + return importContext.isTechnicalFilesValid() + && importContext.getSurveyFileResult().isValid() + && importContext.getOperationFileResult().isValid(); + } + + @Override + protected void skipExecute() { + importContext.increments(t("tutti.service.genericFormat.skip.import.parameters")); } @Override diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportProtocolAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportProtocolAction.java index b3795f0..f1801bc 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportProtocolAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportProtocolAction.java @@ -64,7 +64,19 @@ public class ImportProtocolAction extends ImportActionSupport { @Override protected boolean canExecute() { - return importContext.getReferentialTemporarySpeciesFileResult().isValid() && importContext.getProtocolFileResult().isFound(); + return importContext.getReferentialTemporarySpeciesFileResult().isValid() + && importContext.getProtocolFileResult().isFound(); + } + + @Override + protected void skipExecute() { + + if (log.isInfoEnabled()) { + log.info("Skip import protocol (no file found or archive is not valid)."); + } + + importContext.increments(t("tutti.service.genericFormat.skip.import.protocol")); + } @Override @@ -134,15 +146,4 @@ public class ImportProtocolAction extends ImportActionSupport { } } - - @Override - protected void skipExecute() { - - if (log.isInfoEnabled()) { - log.info("Skip import protocol (no file found or archive is not valid)."); - } - - importContext.increments(t("tutti.service.genericFormat.skip.import.protocol")); - - } } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialGearAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialGearAction.java index 2e94785..468bb9b 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialGearAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialGearAction.java @@ -66,6 +66,16 @@ public class ImportReferentialGearAction extends ImportActionSupport { } @Override + protected void skipExecute() { + + if (log.isInfoEnabled()) { + log.info("Skip import temporary gears (no file found)."); + } + importContext.increments(t("tutti.service.genericFormat.skip.import.temporaryGears")); + + } + + @Override protected void doExecute() { if (log.isInfoEnabled()) { @@ -109,14 +119,4 @@ public class ImportReferentialGearAction extends ImportActionSupport { } } - - @Override - protected void skipExecute() { - - if (log.isInfoEnabled()) { - log.info("Skip import temporary gears (no file found)."); - } - importContext.increments(t("tutti.service.genericFormat.skip.import.temporaryGears")); - - } } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialPersonAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialPersonAction.java index 3ad5c2c..7b84048 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialPersonAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialPersonAction.java @@ -66,6 +66,16 @@ public class ImportReferentialPersonAction extends ImportActionSupport { } @Override + protected void skipExecute() { + + if (log.isInfoEnabled()) { + log.info("Skip import temporary persons (no file found)."); + } + importContext.increments(t("tutti.service.genericFormat.skip.import.temporaryPersons")); + + } + + @Override protected void doExecute() { importContext.increments(t("tutti.service.genericFormat.import.temporaryPersons")); @@ -109,15 +119,4 @@ public class ImportReferentialPersonAction extends ImportActionSupport { } } - - @Override - protected void skipExecute() { - - - if (log.isInfoEnabled()) { - log.info("Skip import temporary persons (no file found)."); - } - importContext.increments(t("tutti.service.genericFormat.skip.import.temporaryPersons")); - - } } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialSpeciesAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialSpeciesAction.java index dcf2203..742ce33 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialSpeciesAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialSpeciesAction.java @@ -66,6 +66,16 @@ public class ImportReferentialSpeciesAction extends ImportActionSupport { } @Override + protected void skipExecute() { + + if (log.isInfoEnabled()) { + log.info("Skip import temporary species (no file found)."); + } + importContext.increments(t("tutti.service.genericFormat.skip.import.temporarySpecies")); + + } + + @Override protected void doExecute() { importContext.increments(t("tutti.service.genericFormat.import.temporarySpecies")); @@ -111,14 +121,4 @@ public class ImportReferentialSpeciesAction extends ImportActionSupport { } - - @Override - protected void skipExecute() { - - if (log.isInfoEnabled()) { - log.info("Skip import temporary species (no file found)."); - } - importContext.increments(t("tutti.service.genericFormat.skip.import.temporarySpecies")); - - } } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialVesselAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialVesselAction.java index 78d46c3..e6a1615 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialVesselAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialVesselAction.java @@ -66,6 +66,16 @@ public class ImportReferentialVesselAction extends ImportActionSupport { } @Override + protected void skipExecute() { + + if (log.isInfoEnabled()) { + log.info("Skip import temporary vessels (no file found)."); + } + importContext.increments(t("tutti.service.genericFormat.skip.import.temporaryVessels")); + + } + + @Override protected void doExecute() { importContext.increments(t("tutti.service.genericFormat.import.temporaryVessels")); @@ -106,14 +116,4 @@ public class ImportReferentialVesselAction extends ImportActionSupport { } } - - @Override - protected void skipExecute() { - - if (log.isInfoEnabled()) { - log.info("Skip import temporary vessels (no file found)."); - } - importContext.increments(t("tutti.service.genericFormat.skip.import.temporaryVessels")); - - } } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportSurveyAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportSurveyAction.java index 8739887..1abd298 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportSurveyAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportSurveyAction.java @@ -66,6 +66,11 @@ public class ImportSurveyAction extends ImportActionSupport { } @Override + protected void skipExecute() { + importContext.increments(t("tutti.service.genericFormat.skip.import.cruises")); + } + + @Override protected void doExecute() { if (log.isInfoEnabled()) { @@ -73,27 +78,23 @@ public class ImportSurveyAction extends ImportActionSupport { } importContext.increments(t("tutti.service.genericFormat.import.cruises")); - if (importContext.isCanImportSurvey()) { - - GenericFormatCsvFileResult importFileResult = importContext.getSurveyFileResult(); - try (CsvConsumerForSurvey consumer = importContext.loadSurveys(true)) { - for (ImportRow<SurveyRow> row : consumer) { + GenericFormatCsvFileResult importFileResult = importContext.getSurveyFileResult(); + try (CsvConsumerForSurvey consumer = importContext.loadSurveys(true)) { + for (ImportRow<SurveyRow> row : consumer) { - consumer.validateRow(row, importContext); - consumer.prepareRowForPersist(row); + consumer.validateRow(row, importContext); + consumer.prepareRowForPersist(row); - SurveyRow bean = row.getBean(); - Collection<AttachmentRow> attachmentRows = importContext.popAttachmentRows(ObjectTypeCode.SCIENTIFIC_CRUISE, bean.getObjectId()); - persitenceHelper.persistCruise(bean.getCruise(), attachmentRows); - - } - } catch (IOException e) { - throw new ApplicationTechnicalException("Could not close survey.csv file", e); - } catch (ImportRuntimeException e) { - - importFileResult.addGlobalError(e.getMessage()); + SurveyRow bean = row.getBean(); + Collection<AttachmentRow> attachmentRows = importContext.popAttachmentRows(ObjectTypeCode.SCIENTIFIC_CRUISE, bean.getObjectId()); + persitenceHelper.persistCruise(bean.getCruise(), attachmentRows); } + } catch (IOException e) { + throw new ApplicationTechnicalException("Could not close survey.csv file", e); + } catch (ImportRuntimeException e) { + + importFileResult.addGlobalError(e.getMessage()); } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/LoadAttachmentsAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/LoadAttachmentsAction.java index 3640688..48b444c 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/LoadAttachmentsAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/LoadAttachmentsAction.java @@ -33,7 +33,12 @@ public class LoadAttachmentsAction extends ImportActionSupport { @Override protected boolean canExecute() { - return true; + return importContext.getImportRequest().isImportAttachments(); + } + + @Override + protected void skipExecute() { + importContext.increments(t("tutti.service.genericFormat.skip.load.attachments")); } @Override @@ -68,7 +73,7 @@ public class LoadAttachmentsAction extends ImportActionSupport { importContext.setAttachmentRows(attachmentRowsByObjectId); } catch (IOException e) { - throw new ApplicationTechnicalException("Could not close sampleCategory.csv file", e); + throw new ApplicationTechnicalException("Could not close attachments.csv file", e); } catch (ImportRuntimeException e) { importFileResult.addGlobalError(e.getMessage()); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateGearCaracteristicAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateGearCaracteristicAction.java index 486e1c7..0b60aad 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateGearCaracteristicAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateGearCaracteristicAction.java @@ -56,7 +56,7 @@ public class ValidateGearCaracteristicAction extends ImportActionSupport { @Override protected boolean canExecute() { - return importContext.isTechnicalFilesValid()&& importContext.getSurveyFileResult().isValid(); + return importContext.isTechnicalFilesValid() && importContext.getSurveyFileResult().isValid(); } @Override @@ -74,8 +74,12 @@ public class ValidateGearCaracteristicAction extends ImportActionSupport { GenericFormatImportCruiseContext cruiseContext = consumer.validateRow(row, importContext); - if (row.isValid()) { - consumer.prepareRowForPersist(cruiseContext, row); + if (cruiseContext != null) { + + if (row.isValid()) { + consumer.prepareRowForPersist(cruiseContext, row); + } + } } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateOperationAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateOperationAction.java index 3238e0c..1962899 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateOperationAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateOperationAction.java @@ -58,7 +58,7 @@ public class ValidateOperationAction extends ImportActionSupport { @Override protected boolean canExecute() { - return importContext.isTechnicalFilesValid()&& importContext.getSurveyFileResult().isValid(); + return importContext.isTechnicalFilesValid() && importContext.getSurveyFileResult().isValid(); } @Override @@ -68,6 +68,10 @@ public class ValidateOperationAction extends ImportActionSupport { log.info("Validate operation.csv file."); } + boolean importSpecies = importContext.getImportRequest().isImportSpecies(); + boolean importBenthos = importContext.getImportRequest().isImportBenthos(); + boolean importMarineLitter = importContext.getImportRequest().isImportMarineLitter(); + GenericFormatCsvFileResult importFileResult = importContext.getOperationFileResult(); try (CsvConsumerForOperation consumer = importContext.loadOperations(false)) { for (ImportRow<OperationRow> row : consumer) { @@ -76,12 +80,13 @@ public class ValidateOperationAction extends ImportActionSupport { GenericFormatImportCruiseContext cruiseContext = consumer.validateRow(row, importContext); - if (row.isValid()) { + if (cruiseContext != null && row.isValid()) { - consumer.prepareRowForPersist(cruiseContext, row); + consumer.prepareRowForPersist(row, importSpecies, importBenthos, importMarineLitter); OperationRow bean = row.getBean(); FishingOperation fishingOperation = bean.getFishingOperation(); + CatchBatch catchBatch = bean.getCatchBatch(); importContext.addImportedFishingOperation(fishingOperation, catchBatch); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateSurveyAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateSurveyAction.java index 436a807..a0355c7 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateSurveyAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateSurveyAction.java @@ -24,8 +24,11 @@ package fr.ifremer.tutti.service.genericformat.importactions; * #L% */ -import fr.ifremer.tutti.persistence.entities.TuttiEntities; +import com.google.common.collect.Sets; import fr.ifremer.tutti.persistence.entities.data.Cruise; +import fr.ifremer.tutti.persistence.entities.data.FishingOperation; +import fr.ifremer.tutti.persistence.model.CruiseDataModel; +import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.service.genericformat.GenericFormatContextSupport; import fr.ifremer.tutti.service.genericformat.GenericFormatCsvFileResult; import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForSurvey; @@ -37,6 +40,7 @@ import org.nuiton.csv.ImportRuntimeException; import org.nuiton.jaxx.application.ApplicationTechnicalException; import java.io.IOException; +import java.util.Set; import static org.nuiton.i18n.I18n.t; @@ -51,8 +55,11 @@ public class ValidateSurveyAction extends ImportActionSupport { /** Logger. */ private static final Log log = LogFactory.getLog(ValidateSurveyAction.class); - public ValidateSurveyAction(GenericFormatContextSupport importContext) { + private final PersistenceService persistenceService; + + public ValidateSurveyAction(GenericFormatContextSupport importContext, PersistenceService persistenceService) { super(importContext); + this.persistenceService = persistenceService; } @Override @@ -78,8 +85,21 @@ public class ValidateSurveyAction extends ImportActionSupport { Cruise cruise = row.getBean().getCruise(); - boolean createCruise = TuttiEntities.isNew(cruise); - importContext.addImportedCruise(cruise, !createCruise); + CruiseDataModel existingCruiseData = importContext.getImportRequest().getExistingCruiseData(cruise); + + Set<FishingOperation> existingFishingOperations; + + if (existingCruiseData == null) { + + existingFishingOperations = null; + + } else { + + existingFishingOperations = Sets.newHashSet(persistenceService.getAllFishingOperation(existingCruiseData.getId())); + + } + + importContext.addImportedCruise(cruise, existingCruiseData, existingFishingOperations); } diff --git a/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties b/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties index 5fb02a1..9689ff3 100644 --- a/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties +++ b/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties @@ -224,11 +224,20 @@ tutti.service.genericFormat.persist.operation.parameters= tutti.service.genericFormat.persist.operation.speciesBatches= tutti.service.genericFormat.remove.existingCruise.fishingOperation= tutti.service.genericFormat.reuse.protocol= +tutti.service.genericFormat.skip.import.accidentalCatches= +tutti.service.genericFormat.skip.import.catches= +tutti.service.genericFormat.skip.import.cruises= +tutti.service.genericFormat.skip.import.gearCaracteristics= +tutti.service.genericFormat.skip.import.individualObservations= +tutti.service.genericFormat.skip.import.marineLitters= +tutti.service.genericFormat.skip.import.operations= +tutti.service.genericFormat.skip.import.parameters= tutti.service.genericFormat.skip.import.protocol= tutti.service.genericFormat.skip.import.temporaryGears= tutti.service.genericFormat.skip.import.temporaryPersons= tutti.service.genericFormat.skip.import.temporarySpecies= tutti.service.genericFormat.skip.import.temporaryVessels= +tutti.service.genericFormat.skip.load.attachments= tutti.service.genericFormat.validate.accidentalCatches= tutti.service.genericFormat.validate.catches= tutti.service.genericFormat.validate.computeReport= diff --git a/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties b/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties index 4bf7a12..1dcd543 100644 --- a/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties +++ b/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties @@ -162,6 +162,11 @@ tutti.service.genericFormat.import.sampleCategoryModel.error.alreadyUsedCaracter tutti.service.genericFormat.import.sampleCategoryModel.error.alreadyUsedCode=Le code %s est déja utilisé tutti.service.genericFormat.import.sampleCategoryModel.error.noCaracteristic=La catactéristique est obligatoire tutti.service.genericFormat.import.sampleCategoryModel.error.noCode=Le code est obligatoire +tutti.service.genericFormat.import.skip.gearCaracteristics=Ne pas importer les caractéristiques des engins +tutti.service.genericFormat.import.skip.individualObservations=Ne pas importer les observation individuelles +tutti.service.genericFormat.import.skip.marineLitters=Ne pas importer les macro déchets +tutti.service.genericFormat.import.skip.operations=Ne pas importer les traits +tutti.service.genericFormat.import.skip.parameters=Ne pas importer les caractéristiques des traits tutti.service.genericFormat.import.temporaryGears=Import des références temporaires d'engins tutti.service.genericFormat.import.temporaryPersons=Import des références temporaires de personnes tutti.service.genericFormat.import.temporarySpecies=Import des références temporaires de Taxons @@ -170,7 +175,7 @@ tutti.service.genericFormat.importError.archiveNotSane=L'archive ne respecte pas tutti.service.genericFormat.importError.missArchiveFile=Il manque le fichier %s dans l'archive tutti.service.genericFormat.invalid.cruise=Erreur d'élévation de poids sur les traits de la campagne %s \:<ul>%s</ul> tutti.service.genericFormat.invalid.fishingOperation=L'élévation des poids ne peut pas être réalisée sur le trait %s, pour la raison suivante \:<ul>%s</ul> -tutti.service.genericFormat.load.attachments= +tutti.service.genericFormat.load.attachments=Chargement des pièces jointes tutti.service.genericFormat.load.protocol=Import du protocol tutti.service.genericFormat.persist.cruise=Sauvegarde de la campagne <strong>%s</strong> tutti.service.genericFormat.persist.gearCaracteristics=Sauvegarde des caractéristiques des engins de la campagne <strong>%s</strong> @@ -183,11 +188,20 @@ tutti.service.genericFormat.persist.operation.parameters=Sauvegarde des caracté tutti.service.genericFormat.persist.operation.speciesBatches=Sauvegarde des lots espèces du trait <strong>%s</strong> - <strong>%s</strong> tutti.service.genericFormat.remove.existingCruise.fishingOperation=Suppression du trait <strong>%s</strong> - <strong>%s</strong> tutti.service.genericFormat.reuse.protocol=Réutilisation du protocol existant %s +tutti.service.genericFormat.skip.import.accidentalCatches= +tutti.service.genericFormat.skip.import.catches=Ne pas importer les captures +tutti.service.genericFormat.skip.import.cruises=Ne pas importer les caractéristiques de campagne +tutti.service.genericFormat.skip.import.gearCaracteristics= +tutti.service.genericFormat.skip.import.individualObservations= +tutti.service.genericFormat.skip.import.marineLitters= +tutti.service.genericFormat.skip.import.operations= +tutti.service.genericFormat.skip.import.parameters= tutti.service.genericFormat.skip.import.protocol=Pas de protocole à importer -tutti.service.genericFormat.skip.import.temporaryGears= -tutti.service.genericFormat.skip.import.temporaryPersons= -tutti.service.genericFormat.skip.import.temporarySpecies= -tutti.service.genericFormat.skip.import.temporaryVessels= +tutti.service.genericFormat.skip.import.temporaryGears=Pas d'engin temporaire à importer +tutti.service.genericFormat.skip.import.temporaryPersons=Pas de personne temporaire à importer +tutti.service.genericFormat.skip.import.temporarySpecies=Pas de taxon temporaire à importer +tutti.service.genericFormat.skip.import.temporaryVessels=Pas de navire temporaire à importer +tutti.service.genericFormat.skip.load.attachments=Ne pas charger les pièces-jointes tutti.service.genericFormat.validate.accidentalCatches=Validation du fichier <strong>accidentalCatch.csv</strong> - ligne %s tutti.service.genericFormat.validate.catches=Validation du fichier <strong>catch.csv</strong> - ligne %s tutti.service.genericFormat.validate.computeReport=Générigation du rapport de validation -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
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 ad0adf1d5fd9085c4484b868d4e5599bf43a8aa4 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Apr 1 12:01:57 2015 +0200 ajout dans le tip des noeuds les identifiants + ajout dans la configuration d'import de propriétés manquantes --- .../swing/content/genericformat/GenericFormatImportUIModel.java | 7 +++++-- .../ui/swing/content/genericformat/tree/CruiseSelectTreeNode.java | 8 +------- .../content/genericformat/tree/DataSelectTreeNodeSupport.java | 8 +++++++- .../genericformat/tree/ExportDataSelectTreeCellRenderer.java | 2 +- .../genericformat/tree/ImportDataSelectTreeCellRenderer.java | 1 + 5 files changed, 15 insertions(+), 11 deletions(-) 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 c73158c..747591e 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 @@ -70,7 +70,7 @@ public class GenericFormatImportUIModel extends AbstractSerializableBean { public static final String PROPERTY_UPDATE_CRUISES = "updateCruises"; - public static final String PROPERTY_UPDATE_OPERATIONS= "updateOperations"; + public static final String PROPERTY_UPDATE_OPERATIONS = "updateOperations"; public static final String PROPERTY_CAN_VALIDATE = "canValidate"; @@ -88,7 +88,7 @@ public class GenericFormatImportUIModel extends AbstractSerializableBean { public static final String PROPERTY_IMPORT_VALID = "importValid"; - public static final String PROPERTY_DATA_SELECTED= "dataSelected"; + public static final String PROPERTY_DATA_SELECTED = "dataSelected"; private Program program; @@ -165,6 +165,9 @@ public class GenericFormatImportUIModel extends AbstractSerializableBean { ProgramDataModel selectedDataModel = rootNode.getSelectedDataModel(); configuration.setDataToExport(selectedDataModel); + configuration.setUpdateCruises(updateCruises); + configuration.setUpdateOperations(updateOperations); + configuration.setImportSpecies(importSpecies); configuration.setImportBenthos(importBenthos); configuration.setImportMarineLitter(importMarineLitter); 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 39798c7..61f4a6e 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 @@ -90,13 +90,7 @@ public class CruiseSelectTreeNode extends DataSelectTreeNodeSupport<CruiseDataMo } } - CruiseDataModel result; - if (operations.isEmpty()) { - result = null; - } else { - result = new CruiseDataModel(getId(), getLabel(), operations); - } - + CruiseDataModel result = new CruiseDataModel(getId(), getLabel(), operations); return result; } 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 8f02ce8..557f93a 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 @@ -47,6 +47,12 @@ public abstract class DataSelectTreeNodeSupport<O extends DataModelSupport> exte } public boolean isExist() { - return getUserObject().getOptionalId()!=null; + return getOptionalId() != null; } + + public String getOptionalId() { + return getUserObject().getOptionalId(); + } + + } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/tree/ExportDataSelectTreeCellRenderer.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/tree/ExportDataSelectTreeCellRenderer.java index 51738c0..7ff8d7a 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/tree/ExportDataSelectTreeCellRenderer.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/tree/ExportDataSelectTreeCellRenderer.java @@ -60,7 +60,7 @@ public class ExportDataSelectTreeCellRenderer extends DefaultTreeCellRenderer { DataSelectTreeNodeSupport node = (DataSelectTreeNodeSupport) value; - text = node.getLabel(); + text = node.getLabel() + " (identifiant : " + node.getId() + ") "; filled = node.isSelected(); if (node instanceof CruiseSelectTreeNode) { diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/tree/ImportDataSelectTreeCellRenderer.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/tree/ImportDataSelectTreeCellRenderer.java index 35dfd95..2530a0f 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/tree/ImportDataSelectTreeCellRenderer.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/tree/ImportDataSelectTreeCellRenderer.java @@ -80,6 +80,7 @@ public class ImportDataSelectTreeCellRenderer extends DefaultTreeCellRenderer { if (node.isExist()) { checkBox.setText(checkBox.getText() + " (*)"); + checkBox.setToolTipText(checkBox.getToolTipText() + " (donnée existante - identifiant : " + node.getOptionalId() + ")"); } checkBox.setFont(font); -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
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 a8cfff8c3bb261dab943d61ce50834c46c421c66 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Apr 1 12:03:17 2015 +0200 mise en place de l'import avec selection des données + meilleur design des actions (persistenceHelper ne contient plus de logique) --- .../tutti/persistence/entities/data/Cruises.java | 9 + .../entities/data/FishingOperations.java | 10 + .../genericformat/GenericFormatContextSupport.java | 38 +- .../GenericFormatImportCruiseContext.java | 60 ++- .../GenericFormatImportOperationContext.java | 3 + .../GenericFormatImportOperationResult.java | 4 +- .../genericformat/GenericFormatImportRequest.java | 17 + .../genericformat/GenericFormatImportService.java | 61 +-- .../GenericFormatImportValidationHelper.java | 74 ++- .../GenericFormatValidateFileContext.java | 20 - .../GenericformatImportPersistenceHelper.java | 277 ++++++++++ .../GenericformatImportPersitenceHelper.java | 566 --------------------- .../consumer/CsvConsumerForAccidentalCatch.java | 44 +- .../consumer/CsvConsumerForCatch.java | 26 +- .../consumer/CsvConsumerForGearCaracteristic.java | 55 +- .../CsvConsumerForIndividualObservation.java | 44 +- .../consumer/CsvConsumerForMarineLitter.java | 14 +- .../consumer/CsvConsumerForOperation.java | 57 +-- .../consumer/CsvConsumerForParameter.java | 57 +-- .../importactions/ImportAccidentalCatchAction.java | 85 +++- .../importactions/ImportCatchAction.java | 212 +++++++- .../ImportGearCaracteristicAction.java | 49 +- .../ImportIndividualObservationAction.java | 85 +++- .../importactions/ImportMarineLitterAction.java | 85 +++- .../importactions/ImportOperationAction.java | 163 +++++- .../importactions/ImportParameterAction.java | 78 ++- .../importactions/ImportProtocolAction.java | 21 +- .../importactions/ImportReferentialGearAction.java | 12 +- .../ImportReferentialPersonAction.java | 11 +- .../ImportReferentialSpeciesAction.java | 12 +- .../ImportReferentialVesselAction.java | 11 +- .../importactions/ImportSurveyAction.java | 142 +++++- .../importactions/ImpotSampleCategoryAction.java | 10 +- .../ValidateAccidentalCatchAction.java | 2 +- .../importactions/ValidateCatchAction.java | 2 +- .../ValidateGearCaracteristicAction.java | 4 +- .../ValidateIndividualObservationAction.java | 2 +- .../importactions/ValidateMarineLitterAction.java | 2 +- .../importactions/ValidateOperationAction.java | 2 +- .../importactions/ValidateParameterAction.java | 2 +- .../importactions/ValidateSurveyAction.java | 21 +- .../resources/i18n/tutti-service_en_GB.properties | 8 + .../resources/i18n/tutti-service_fr_FR.properties | 9 +- 43 files changed, 1512 insertions(+), 954 deletions(-) diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/Cruises.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/Cruises.java index 091766e..e2febdc 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/Cruises.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/Cruises.java @@ -26,6 +26,7 @@ import fr.ifremer.adagio.core.dao.technical.synchronization.SynchronizationStatu import org.apache.commons.lang3.builder.EqualsBuilder; import java.util.Calendar; +import java.util.Objects; public class Cruises extends AbstractCruises { @@ -44,6 +45,14 @@ public class Cruises extends AbstractCruises { return SynchronizationStatus.SYNCHRONIZED.getValue().equals(synchronizationStatus); } + public static boolean equalsNaturalId(Cruise cruise1, String naturalId2) { + + String naturalId1 = getNaturalId(cruise1); + boolean equals = Objects.equals(naturalId1, naturalId2); + return equals; + + } + public static boolean equals(Cruise cruise1, Cruise cruise2) { EqualsBuilder equalsBuilder = new EqualsBuilder(); diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/FishingOperations.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/FishingOperations.java index 6332400..4f51874 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/FishingOperations.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/FishingOperations.java @@ -26,6 +26,8 @@ package fr.ifremer.tutti.persistence.entities.data; import org.apache.commons.lang3.builder.EqualsBuilder; +import java.util.Objects; + public class FishingOperations extends AbstractFishingOperations { public static final String PROPERTY_GEAR_SHOOTING_START_DAY = "gearShootingStartDay"; @@ -53,6 +55,14 @@ public class FishingOperations extends AbstractFishingOperations { } + public static boolean equalsNaturalId(FishingOperation fishingOperation1, String naturalId2) { + + String naturalId1 = getNaturalId(fishingOperation1); + boolean equals = Objects.equals(naturalId1, naturalId2); + return equals; + + } + public static String getNaturalId(FishingOperation fishingOperation) { String cruiseId = Cruises.getNaturalId(fishingOperation.getCruise()); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatContextSupport.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatContextSupport.java index 0a77e48..12248f6 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatContextSupport.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatContextSupport.java @@ -73,6 +73,7 @@ import java.nio.file.Path; import java.text.ParseException; import java.util.Collection; import java.util.LinkedHashMap; +import java.util.LinkedHashSet; import java.util.Map; import java.util.Set; @@ -134,6 +135,8 @@ public abstract class GenericFormatContextSupport implements Closeable { private final Map<String, GenericFormatImportCruiseContext> cruiseContexts; + private final Set<String> skippedCruisesNaturalId; + private String protocolOriginalName; private final Multimap<String, AttachmentRow> attachmentRows; @@ -159,6 +162,7 @@ public abstract class GenericFormatContextSupport implements Closeable { this.importEntityParserFactory = new GenericFormatImportEntityParserFactory(persistenceService, this); this.validationHelper = new GenericFormatImportValidationHelper(this, new ValidationService()); this.cruiseContexts = new LinkedHashMap<>(); + this.skippedCruisesNaturalId = new LinkedHashSet<>(); GenericFormatArchive archive = importRequest.getArchive(); @@ -302,23 +306,39 @@ public abstract class GenericFormatContextSupport implements Closeable { } - public void addImportedCruise(Cruise cruise, CruiseDataModel existingCruiseData, Set<FishingOperation> existingFishingOperations) { + public void addImportedCruise(Cruise cruise, CruiseDataModel selectedCruise, CruiseDataModel existingCruiseData, Set<FishingOperation> existingFishingOperations) { String cruiseId = cruise.getId(); - GenericFormatImportCruiseContext cruiseContext = new GenericFormatImportCruiseContext(cruise, existingCruiseData, existingFishingOperations, cruiseDecorator.toString(cruise)); + GenericFormatImportCruiseContext cruiseContext = new GenericFormatImportCruiseContext(cruise, selectedCruise, existingCruiseData, existingFishingOperations, cruiseDecorator.toString(cruise)); cruiseContexts.put(cruiseId, cruiseContext); } + public void addSkippedCruise(Cruise cruise) { + + String naturalId = Cruises.getNaturalId(cruise); + skippedCruisesNaturalId.add(naturalId); + + } + public void addImportedFishingOperation(FishingOperation fishingOperation, CatchBatch catchBatch) { GenericFormatImportCruiseContext cruiseContext = getCruiseContext(fishingOperation.getCruise()); - String fishingOperationLabel = fishingOperationDecorator.toString(fishingOperation); + String fishingOperationLabel = decorate(fishingOperation); cruiseContext.addFishingOperation(fishingOperation, catchBatch, fishingOperationLabel); } + public boolean isCruiseSkipped(RowWithCruiseContextSupport row) { + + Cruise cruise = row.getCruise(); + String naturalId = Cruises.getNaturalId(cruise); + boolean skipped = skippedCruisesNaturalId.contains(naturalId); + return skipped; + + } + public GenericFormatImportCruiseContext getCruiseContext(RowWithCruiseContextSupport row) { Cruise cruise = row.getCruise(); @@ -460,10 +480,6 @@ public abstract class GenericFormatContextSupport implements Closeable { progressionModel.increments(message); } - public void addStepsInProgressionModel(int size) { - progressionModel.adaptTotal(progressionModel.getTotal() + size); - } - public GenericFormatImportValidationHelper getValidationHelper() { return validationHelper; } @@ -528,4 +544,12 @@ public abstract class GenericFormatContextSupport implements Closeable { } + public String decorate(Cruise cruise) { + return cruiseDecorator.toString(cruise); + } + + public String decorate(FishingOperation fishingOperation) { + return fishingOperationDecorator.toString(fishingOperation); + } + } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportCruiseContext.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportCruiseContext.java index 07fafab..4a98128 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportCruiseContext.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportCruiseContext.java @@ -41,6 +41,7 @@ import java.io.Closeable; import java.io.Serializable; import java.util.Collection; import java.util.HashSet; +import java.util.LinkedHashSet; import java.util.Map; import java.util.Set; import java.util.TreeMap; @@ -53,8 +54,19 @@ import java.util.TreeMap; */ public class GenericFormatImportCruiseContext implements Closeable { + /** + * The imported cruise. + */ private final Cruise cruise; + /** + * The optional selection data. + */ + private final CruiseDataModel selectiontCruiseData; + + /** + * The optional existing cruise. + */ private final CruiseDataModel existingCruiseData; private final String cruiseLabel; @@ -65,13 +77,17 @@ public class GenericFormatImportCruiseContext implements Closeable { private final Set<FishingOperation> existingOperations; - public GenericFormatImportCruiseContext(Cruise cruise, CruiseDataModel existingCruiseData, Set<FishingOperation> existingOperations, String cruiseLabel) { + private final Set<String> skippedFishingOperationsNaturalId; + + public GenericFormatImportCruiseContext(Cruise cruise, CruiseDataModel selectiontCruiseData, CruiseDataModel existingCruiseData, Set<FishingOperation> existingOperations, String cruiseLabel) { this.cruise = cruise; + this.selectiontCruiseData = selectiontCruiseData; this.existingCruiseData = existingCruiseData; this.existingOperations = existingOperations; this.cruiseLabel = cruiseLabel; this.fishingOperationContexts = new TreeMap<>(); this.gearsWithcaracteristics = new HashSet<>(); + this.skippedFishingOperationsNaturalId = new LinkedHashSet<>(); } @Override @@ -94,14 +110,14 @@ public class GenericFormatImportCruiseContext implements Closeable { public OperationDataModel getExistingFishingOperationData(FishingOperation importRowCruise) { - String cruiseId = getExistingFishingOperationId(importRowCruise); OperationDataModel result = null; - if (cruiseId != null) { + String fishingOperationId = getExistingFishingOperationId(importRowCruise); + if (fishingOperationId != null) { - for (OperationDataModel cruiseDataModel : existingCruiseData) { - if (cruiseId.equals(cruiseDataModel.getId())) { - result = cruiseDataModel; + for (OperationDataModel operationDataModel : existingCruiseData) { + if (fishingOperationId.equals(operationDataModel.getId())) { + result = operationDataModel; break; } } @@ -138,6 +154,22 @@ public class GenericFormatImportCruiseContext implements Closeable { fishingOperationContexts.put(fishingOperation.getId(), new GenericFormatImportOperationContext(fishingOperation, catchBatch, existingFishingOperationData, fishingOperationLabel)); } + public void addSkippedFishingOperation(FishingOperation fishingOperation) { + + String naturalId = FishingOperations.getNaturalId(fishingOperation); + skippedFishingOperationsNaturalId.add(naturalId); + + } + + public boolean isFishingOperationSkipped(RowWithOperationContextSupport row) { + + FishingOperation fishingOperation = row.getFishingOperation(); + String naturalId = FishingOperations.getNaturalId(fishingOperation); + boolean skipped = skippedFishingOperationsNaturalId.contains(naturalId); + return skipped; + + } + public boolean isFishingOperationAlreadyImported(RowWithOperationContextSupport row) { GenericFormatImportOperationContext fishingOperationContext = getFishingOperationContext(row); @@ -146,6 +178,22 @@ public class GenericFormatImportCruiseContext implements Closeable { } + public OperationDataModel getSelectedFishingOperation(FishingOperation row) { + + OperationDataModel result = null; + + for (OperationDataModel selectedFishingOperation : selectiontCruiseData) { + boolean equals = FishingOperations.equalsNaturalId(row, selectedFishingOperation.getId()); + if (equals) { + result = selectedFishingOperation; + break; + } + } + + return result; + + } + public GenericFormatImportOperationContext getFishingOperationContext(RowWithOperationContextSupport row) { FishingOperation fishingOperation = row.getFishingOperation(); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportOperationContext.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportOperationContext.java index e234dda..413fcd3 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportOperationContext.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportOperationContext.java @@ -126,6 +126,9 @@ public class GenericFormatImportOperationContext implements Closeable { } + public boolean isOverride() { + return existingFishingOperationData!=null; + } public OperationDataModel getExistingFishingOperationData() { return existingFishingOperationData; } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportOperationResult.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportOperationResult.java index 1bcec3d..85c9f02 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportOperationResult.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportOperationResult.java @@ -77,8 +77,8 @@ public class GenericFormatImportOperationResult implements Serializable { public GenericFormatImportOperationResult(GenericFormatImportOperationContext operationContext) { this.fishingOperation = operationContext.getFishingOperation(); - this.override = operationContext.getExistingFishingOperationData() != null; - catchBatch = operationContext.getCatchBatch(); + this.override = operationContext.isOverride(); + this.catchBatch = operationContext.getCatchBatch(); this.checkErrors = new LinkedHashSet<>(); flushContext(operationContext); } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportRequest.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportRequest.java index 5e061db..a2c072f 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportRequest.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportRequest.java @@ -199,4 +199,21 @@ public class GenericFormatImportRequest implements Serializable { } + public CruiseDataModel getSelectedCruise(Cruise importRowCruise) { + + CruiseDataModel result = null; + + ProgramDataModel dataToExport = importConfiguration.getDataToExport(); + for (CruiseDataModel selectedCruise : dataToExport) { + boolean equals = Cruises.equalsNaturalId(importRowCruise, selectedCruise.getId()); + if (equals) { + result = selectedCruise; + break; + } + } + + return result; + + } + } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportService.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportService.java index ce1617d..5cafde1 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportService.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportService.java @@ -65,11 +65,6 @@ import fr.ifremer.tutti.service.genericformat.importactions.ValidateMarineLitter import fr.ifremer.tutti.service.genericformat.importactions.ValidateOperationAction; import fr.ifremer.tutti.service.genericformat.importactions.ValidateParameterAction; import fr.ifremer.tutti.service.genericformat.importactions.ValidateSurveyAction; -import fr.ifremer.tutti.service.protocol.ProtocolImportExportService; -import fr.ifremer.tutti.service.referential.ReferentialTemporaryGearService; -import fr.ifremer.tutti.service.referential.ReferentialTemporaryPersonService; -import fr.ifremer.tutti.service.referential.ReferentialTemporarySpeciesService; -import fr.ifremer.tutti.service.referential.ReferentialTemporaryVesselService; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.decorator.Decorator; @@ -92,22 +87,8 @@ public class GenericFormatImportService extends AbstractTuttiService { private PersistenceService persistenceService; - private ReferentialTemporaryGearService referentialTemporaryGearService; - - private ReferentialTemporaryPersonService referentialTemporaryPersonService; - - private ReferentialTemporarySpeciesService referentialTemporarySpeciesService; - - private ReferentialTemporaryVesselService referentialTemporaryVesselService; - - private ProtocolImportExportService protocolImportExportService; - - private WeightCleaningService weightCleaningService; - private PdfGeneratorService pdfGeneratorService; - private GenericFormatCheckDataService checkDataService; - private Decorator<FishingOperation> fishingOperationDecorator; private Decorator<Cruise> cruiseDecorator; @@ -117,15 +98,8 @@ public class GenericFormatImportService extends AbstractTuttiService { super.setServiceContext(context); - weightCleaningService = getService(WeightCleaningService.class); pdfGeneratorService = getService(PdfGeneratorService.class); - checkDataService = getService(GenericFormatCheckDataService.class); persistenceService = getService(PersistenceService.class); - referentialTemporaryGearService = getService(ReferentialTemporaryGearService.class); - referentialTemporaryPersonService = getService(ReferentialTemporaryPersonService.class); - referentialTemporarySpeciesService = getService(ReferentialTemporarySpeciesService.class); - referentialTemporaryVesselService = getService(ReferentialTemporaryVesselService.class); - protocolImportExportService = getService(ProtocolImportExportService.class); DecoratorService decoratorService = getService(DecoratorService.class); cruiseDecorator = decoratorService.getDecoratorByType(Cruise.class); @@ -199,6 +173,7 @@ public class GenericFormatImportService extends AbstractTuttiService { public int getImportProgramNbSteps(GenericFormatImportConfiguration importConfiguration) { + //TODO Recompute exact nb steps used... Preconditions.checkNotNull(importConfiguration); GenericFormatArchive archive = createArchive(importConfiguration); @@ -302,7 +277,9 @@ public class GenericFormatImportService extends AbstractTuttiService { if (importContext.isArchiveLayoutValid()) { - Set<ImportActionSupport> actions = createValidateActions(importContext); + GenericformatImportPersistenceHelper persitenceHelper = new GenericformatImportPersistenceHelper(context, importContext); + + Set<ImportActionSupport> actions = createValidateActions(importContext, persitenceHelper); for (ImportActionSupport action : actions) { @@ -327,7 +304,7 @@ public class GenericFormatImportService extends AbstractTuttiService { if (importContext.isArchiveLayoutValid()) { - GenericformatImportPersitenceHelper persitenceHelper = new GenericformatImportPersitenceHelper(importContext, persistenceService, cruiseDecorator, fishingOperationDecorator); + GenericformatImportPersistenceHelper persitenceHelper = new GenericformatImportPersistenceHelper(context, importContext); Set<ImportActionSupport> actions = createImportActions(importContext, persitenceHelper); @@ -394,12 +371,12 @@ public class GenericFormatImportService extends AbstractTuttiService { } - protected Set<ImportActionSupport> createValidateActions(GenericFormatValidateFileContext importContext) { + protected Set<ImportActionSupport> createValidateActions(GenericFormatValidateFileContext importContext, GenericformatImportPersistenceHelper persitenceHelper) { Set<ImportActionSupport> actions = new LinkedHashSet<>(); - addTechnicalActions(importContext, actions); + addTechnicalActions(importContext, actions, persitenceHelper); actions.add(new LoadAttachmentsAction(importContext)); - actions.add(new ValidateSurveyAction(importContext, persistenceService)); + actions.add(new ValidateSurveyAction(importContext, persitenceHelper)); actions.add(new ValidateGearCaracteristicAction(importContext)); actions.add(new ValidateOperationAction(importContext)); actions.add(new ValidateParameterAction(importContext)); @@ -411,10 +388,10 @@ public class GenericFormatImportService extends AbstractTuttiService { } - protected Set<ImportActionSupport> createImportActions(GenericFormatImportContext importContext, GenericformatImportPersitenceHelper persitenceHelper) { + protected Set<ImportActionSupport> createImportActions(GenericFormatImportContext importContext, GenericformatImportPersistenceHelper persitenceHelper) { Set<ImportActionSupport> actions = new LinkedHashSet<>(); - addTechnicalActions(importContext, actions); + addTechnicalActions(importContext, actions, persitenceHelper); actions.add(new LoadAttachmentsAction(importContext)); actions.add(new ImportSurveyAction(importContext, persitenceHelper)); actions.add(new ImportGearCaracteristicAction(importContext, persitenceHelper)); @@ -424,20 +401,20 @@ public class GenericFormatImportService extends AbstractTuttiService { actions.add(new ImportMarineLitterAction(importContext, persitenceHelper)); actions.add(new ImportAccidentalCatchAction(importContext, persitenceHelper)); actions.add(new ImportIndividualObservationAction(importContext, persitenceHelper)); - actions.add(new DoCleanWeightAction(importContext, weightCleaningService)); - actions.add(new DoCheckWeightAction(importContext, checkDataService)); + actions.add(new DoCleanWeightAction(importContext, context.getService(WeightCleaningService.class))); + actions.add(new DoCheckWeightAction(importContext, context.getService(GenericFormatCheckDataService.class))); return actions; } - protected void addTechnicalActions(GenericFormatContextSupport importContext, Set<ImportActionSupport> actions) { + protected void addTechnicalActions(GenericFormatContextSupport importContext, Set<ImportActionSupport> actions, GenericformatImportPersistenceHelper persitenceHelper) { - actions.add(new ImpotSampleCategoryAction(importContext, persistenceService)); - actions.add(new ImportReferentialGearAction(importContext, referentialTemporaryGearService)); - actions.add(new ImportReferentialPersonAction(importContext, referentialTemporaryPersonService)); - actions.add(new ImportReferentialSpeciesAction(importContext, referentialTemporarySpeciesService)); - actions.add(new ImportReferentialVesselAction(importContext, referentialTemporaryVesselService)); - actions.add(new ImportProtocolAction(importContext, persistenceService, protocolImportExportService)); + actions.add(new ImpotSampleCategoryAction(importContext, persitenceHelper)); + actions.add(new ImportReferentialGearAction(importContext, persitenceHelper)); + actions.add(new ImportReferentialPersonAction(importContext, persitenceHelper)); + actions.add(new ImportReferentialSpeciesAction(importContext, persitenceHelper)); + actions.add(new ImportReferentialVesselAction(importContext, persitenceHelper)); + actions.add(new ImportProtocolAction(importContext, persitenceHelper)); } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportValidationHelper.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportValidationHelper.java index 31b9d94..8edbff0 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportValidationHelper.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportValidationHelper.java @@ -150,40 +150,39 @@ public class GenericFormatImportValidationHelper implements Closeable { public <R extends RowWithCruiseContextSupport> GenericFormatImportCruiseContext getCruise(CsvComsumer<R, ?> consumer, ImportRow<R> row, GenericFormatContextSupport importContext) { - R bean = row.getBean(); + GenericFormatImportCruiseContext cruiseContext = null; - GenericFormatImportCruiseContext cruiseContext = importContext.getCruiseContext(bean); + if (row.isValid()) { - if (cruiseContext == null) { + R bean = row.getBean(); - consumer.addCheckError(row, new CruiseNotFoundException(bean.getCruise())); + boolean cruiseSkipped = importContext instanceof GenericFormatImportContext + && importContext.isCruiseSkipped(bean); - } else { + if (!cruiseSkipped) { - Cruise cruise = cruiseContext.getCruise(); - bean.setCruise(cruise); - if (bean instanceof RowWithOperationContextSupport) { - ((RowWithOperationContextSupport) bean).getFishingOperation().setCruise(cruise); + cruiseContext = importContext.getCruiseContext(bean); - } + if (cruiseContext == null) { - } + consumer.addCheckError(row, new CruiseNotFoundException(bean.getCruise())); - return cruiseContext; + } else { - } + Cruise cruise = cruiseContext.getCruise(); + bean.setCruise(cruise); + if (bean instanceof RowWithOperationContextSupport) { + ((RowWithOperationContextSupport) bean).getFishingOperation().setCruise(cruise); - public <R extends RowWithCruiseContextSupport> Gear getGear(CsvComsumer<R, ?> consumer, GenericFormatContextSupport importContext, ImportRow<R> row, Gear gear, short rankOrder) { + } - Cruise cruise = row.getBean().getCruise(); - GenericFormatImportCruiseContext cruiseContext = importContext.getCruiseContext(cruise); + } + + } - Gear cruiseGear = cruiseContext.getGear(gear, rankOrder); - if (cruiseGear == null) { - consumer.addCheckError(row, new GearNotFoundInCruiseException(cruise, gear, rankOrder)); } - return cruiseGear; + return cruiseContext; } @@ -197,21 +196,46 @@ public class GenericFormatImportValidationHelper implements Closeable { R bean = row.getBean(); - fishingOperationContext = cruiseContext.getFishingOperationContext(bean); + boolean fishingOperationSkipped = importContext instanceof GenericFormatImportContext + && cruiseContext.isFishingOperationSkipped(bean); + + if (!fishingOperationSkipped) { + + fishingOperationContext = cruiseContext.getFishingOperationContext(bean); - if (fishingOperationContext == null) { + if (fishingOperationContext == null) { - consumer.addCheckError(row, new FishingOperationNotFoundInCruiseException(bean.getFishingOperation())); + consumer.addCheckError(row, new FishingOperationNotFoundInCruiseException(bean.getFishingOperation())); - } else { + } else { - bean.setFishingOperation(fishingOperationContext.getFishingOperation()); + bean.setFishingOperation(fishingOperationContext.getFishingOperation()); + + } } + } return fishingOperationContext; } + public <R extends RowWithCruiseContextSupport> Gear getGear(CsvComsumer<R, ?> consumer, GenericFormatContextSupport importContext, ImportRow<R> row, Gear gear, short rankOrder) { + + Gear cruiseGear = null; + + Cruise cruise = row.getBean().getCruise(); + GenericFormatImportCruiseContext cruiseContext = importContext.getCruiseContext(cruise); + if (cruiseContext != null) { + cruiseGear = cruiseContext.getGear(gear, rankOrder); + if (cruiseGear == null) { + consumer.addCheckError(row, new GearNotFoundInCruiseException(cruise, gear, rankOrder)); + } + } + + return cruiseGear; + + } + } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatValidateFileContext.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatValidateFileContext.java index 2f123e4..ce8dd46 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatValidateFileContext.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatValidateFileContext.java @@ -118,20 +118,6 @@ public class GenericFormatValidateFileContext extends GenericFormatContextSuppor } - @Override - public void addImportedCruise(Cruise cruise, CruiseDataModel existingCruiseData, Set<FishingOperation> existingFishingOperations) { - - if (existingCruiseData == null) { - - // add a temporary id to simulate persist behaviour - cruise.setId(getNextCruiseId()); - - } - - super.addImportedCruise(cruise, existingCruiseData, existingFishingOperations); - - } - public void addImportedFishingOperation(FishingOperation fishingOperation, CatchBatch catchBatch) { // add a temporary id to simulate persist behaviour @@ -144,16 +130,10 @@ public class GenericFormatValidateFileContext extends GenericFormatContextSuppor } - private int cruiseId = -1; - private int fishinOperationId = -1; private int catchBatchId = -1; - private int getNextCruiseId() { - return cruiseId--; - } - private int getNextFishingOperationId() { return fishinOperationId--; } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericformatImportPersistenceHelper.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericformatImportPersistenceHelper.java new file mode 100644 index 0000000..3b1aac4 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericformatImportPersistenceHelper.java @@ -0,0 +1,277 @@ +package fr.ifremer.tutti.service.genericformat; + +/* + * #%L + * Tutti :: Service + * $Id:$ + * $HeadURL:$ + * %% + * Copyright (C) 2012 - 2015 Ifremer + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import com.google.common.collect.Sets; +import fr.ifremer.adagio.core.dao.referential.ObjectTypeCode; +import fr.ifremer.tutti.persistence.entities.data.AccidentalBatch; +import fr.ifremer.tutti.persistence.entities.data.Attachment; +import fr.ifremer.tutti.persistence.entities.data.BatchContainer; +import fr.ifremer.tutti.persistence.entities.data.BenthosBatch; +import fr.ifremer.tutti.persistence.entities.data.BenthosBatchFrequency; +import fr.ifremer.tutti.persistence.entities.data.CatchBatch; +import fr.ifremer.tutti.persistence.entities.data.Cruise; +import fr.ifremer.tutti.persistence.entities.data.FishingOperation; +import fr.ifremer.tutti.persistence.entities.data.IndividualObservationBatch; +import fr.ifremer.tutti.persistence.entities.data.MarineLitterBatch; +import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; +import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; +import fr.ifremer.tutti.persistence.entities.data.SpeciesBatchFrequency; +import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; +import fr.ifremer.tutti.persistence.entities.referential.Gear; +import fr.ifremer.tutti.persistence.entities.referential.Person; +import fr.ifremer.tutti.persistence.entities.referential.Species; +import fr.ifremer.tutti.persistence.entities.referential.Vessel; +import fr.ifremer.tutti.service.PersistenceService; +import fr.ifremer.tutti.service.TuttiServiceContext; +import fr.ifremer.tutti.service.genericformat.csv.AttachmentRow; +import fr.ifremer.tutti.service.protocol.ProtocolImportExportService; +import fr.ifremer.tutti.service.referential.ReferentialImportRequest; +import fr.ifremer.tutti.service.referential.ReferentialImportResult; +import fr.ifremer.tutti.service.referential.ReferentialTemporaryGearService; +import fr.ifremer.tutti.service.referential.ReferentialTemporaryPersonService; +import fr.ifremer.tutti.service.referential.ReferentialTemporarySpeciesService; +import fr.ifremer.tutti.service.referential.ReferentialTemporaryVesselService; +import org.apache.commons.collections4.CollectionUtils; + +import java.io.File; +import java.util.Collection; +import java.util.List; +import java.util.Set; + +/** + * Created on 2/19/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class GenericformatImportPersistenceHelper { + + private final GenericFormatContextSupport importContext; + + private final PersistenceService persistenceService; + + private final ReferentialTemporaryGearService referentialTemporaryGearService; + + private final ReferentialTemporaryPersonService referentialTemporaryPersonService; + + private final ReferentialTemporarySpeciesService referentialTemporarySpeciesService; + + private final ReferentialTemporaryVesselService referentialTemporaryVesselService; + + private final ProtocolImportExportService protocolImportExportService; + + public GenericformatImportPersistenceHelper(TuttiServiceContext context, GenericFormatContextSupport importContext) { + this.importContext = importContext; + this.persistenceService = context.getService(PersistenceService.class); + this.referentialTemporaryGearService = context.getService(ReferentialTemporaryGearService.class); + this.referentialTemporaryPersonService = context.getService(ReferentialTemporaryPersonService.class); + this.referentialTemporarySpeciesService = context.getService(ReferentialTemporarySpeciesService.class); + this.referentialTemporaryVesselService = context.getService(ReferentialTemporaryVesselService.class); + this.protocolImportExportService = context.getService(ProtocolImportExportService.class); + } + + public Set<FishingOperation> getFishingOperations(String cruiseId) { + + List<FishingOperation> allFishingOperation = persistenceService.getAllFishingOperation(cruiseId); + Set<FishingOperation> existingFishingOperations = Sets.newLinkedHashSet(allFishingOperation); + return existingFishingOperations; + + } + + public void deleteAllAttachments(ObjectTypeCode objectTypeCode, Integer objectId) { + + persistenceService.deleteAllAttachment(objectTypeCode, objectId); + + } + + public void persistAttachments(Integer objectId, Collection<AttachmentRow> attachmentRows) { + + if (importContext.getImportRequest().isImportAttachments() && CollectionUtils.isNotEmpty(attachmentRows)) { + + for (AttachmentRow attachmentRow : attachmentRows) { + + Attachment attachment = attachmentRow.toAttachment(objectId); + File attachmentFile = importContext.getImportRequest().getArchive().extractAttachment(attachment.getPath()); + persistenceService.createAttachment(attachment, attachmentFile); + + } + + } + + } + + public Cruise createCruise(Cruise cruise) { + return persistenceService.createCruise(cruise); + } + + public Cruise saveCruise(Cruise cruise) { + return persistenceService.saveCruise(cruise, false, false); + } + + public void saveGearCaracteristics(Gear gear, Cruise cruise) { + persistenceService.saveGearCaracteristics(gear, cruise); + } + + public FishingOperation createFishingOperation(FishingOperation fishingOperation) { + FishingOperation saveFishingOperation = persistenceService.createFishingOperation(fishingOperation); + return saveFishingOperation; + } + + + public FishingOperation saveFishingOperation(FishingOperation fishingOperation) { + FishingOperation saveFishingOperation = persistenceService.saveFishingOperation(fishingOperation); + return saveFishingOperation; + } + + public String getCatchBatchId(String operationId) { + CatchBatch catchBatch = persistenceService.getCatchBatchFromFishingOperation(operationId); + return catchBatch.getId(); + } + + public CatchBatch createCatchBatch(CatchBatch catchBatch) { + return persistenceService.createCatchBatch(catchBatch); + } + + public CatchBatch saveCatchBatch(CatchBatch catchBatch) { + return persistenceService.saveCatchBatch(catchBatch); + } + + public SpeciesBatch createSpeciesBatch(SpeciesBatch batch, String parentId) { + return persistenceService.createSpeciesBatch(batch, parentId); + } + + public void saveSpeciesBatchFrequency(String batchId, List<SpeciesBatchFrequency> frequencies) { + persistenceService.saveSpeciesBatchFrequency(batchId, frequencies); + } + + public void deleteSpeciesBatchForFishingOperation(String fishingOperationId) { + + BatchContainer<SpeciesBatch> rootSpeciesBatch = persistenceService.getRootSpeciesBatch(fishingOperationId, false); + for (SpeciesBatch batch : rootSpeciesBatch.getChildren()) { + persistenceService.deleteSpeciesBatch(batch.getId()); + } + + } + + public BenthosBatch createBenthosBatch(BenthosBatch batch, String parentId) { + return persistenceService.createBenthosBatch(batch, parentId); + } + + public void saveBenthosBatchFrequency(String batchId, List<BenthosBatchFrequency> frequencies) { + persistenceService.saveBenthosBatchFrequency(batchId, frequencies); + } + + public void deleteBenthosBatchForFishingOperation(String fishingOperationId) { + + BatchContainer<BenthosBatch> rootBenthosBatch = persistenceService.getRootBenthosBatch(fishingOperationId, false); + for (BenthosBatch batch : rootBenthosBatch.getChildren()) { + persistenceService.deleteBenthosBatch(batch.getId()); + } + + } + + public MarineLitterBatch createMarineLitterBatch(MarineLitterBatch marineLitterBatch) { + return persistenceService.createMarineLitterBatch(marineLitterBatch); + } + + public void deleteMarineLitterForFishingOperation(String fishingOperationId) { + + BatchContainer<MarineLitterBatch> rootMarineLitters = persistenceService.getRootMarineLitterBatch(fishingOperationId); + for (MarineLitterBatch batch : rootMarineLitters.getChildren()) { + persistenceService.deleteMarineLitterBatch(batch.getId()); + } + } + + public AccidentalBatch createAccidentalBatch(AccidentalBatch accidentalBatch) { + return persistenceService.createAccidentalBatch(accidentalBatch); + } + + public void deleteAccidentalBatchForFishingOperation(String fishingOperationId) { + persistenceService.deleteAccidentalBatchForFishingOperation(fishingOperationId); + } + + public IndividualObservationBatch createIndividualObservationBatch(IndividualObservationBatch individualObservationBatch) { + return persistenceService.createIndividualObservationBatch(individualObservationBatch); + } + + public void deleteIndividualObservationBatchForFishingOperation(String fishingOperationId) { + persistenceService.deleteIndividualObservationBatchForFishingOperation(fishingOperationId); + } + + public void setSampleCategoryModel(SampleCategoryModel sampleCategoryModel) { + persistenceService.setSampleCategoryModel(sampleCategoryModel); + } + + public ReferentialImportRequest<Gear, Integer> createGearImportRequest() { + return referentialTemporaryGearService.createReferentialImportRequest(); + } + + public ReferentialImportResult<Gear> importGears(ReferentialImportRequest<Gear, Integer> referentialImportRequest) { + return referentialTemporaryGearService.executeImportRequest(referentialImportRequest); + } + + public ReferentialImportRequest<Person, Integer> createPersonImportRequest() { + return referentialTemporaryPersonService.createReferentialImportRequest(); + } + + public ReferentialImportResult<Person> importPersons(ReferentialImportRequest<Person, Integer> referentialImportRequest) { + return referentialTemporaryPersonService.executeImportRequest(referentialImportRequest); + } + + public ReferentialImportRequest<Vessel, String> createVesselsImportRequest() { + return referentialTemporaryVesselService.createReferentialImportRequest(); + } + + public ReferentialImportResult<Vessel> importVessels(ReferentialImportRequest<Vessel, String> referentialImportRequest) { + return referentialTemporaryVesselService.executeImportRequest(referentialImportRequest); + } + + public ReferentialImportRequest<Species, Integer> createSpeciesImportRequest() { + return referentialTemporarySpeciesService.createReferentialImportRequest(); + } + + public ReferentialImportResult<Species> importSpecies(ReferentialImportRequest<Species, Integer> referentialImportRequest) { + return referentialTemporarySpeciesService.executeImportRequest(referentialImportRequest); + } + + public TuttiProtocol importProtocol(File file) { + return protocolImportExportService.importProtocol(file); + } + + public List<Species> getAllReferentSpecies() { + return persistenceService.getAllReferentSpecies(); + } + + public TuttiProtocol createProtocol(TuttiProtocol tuttiProtocol) { + TuttiProtocol createdProtocol = persistenceService.createProtocol(tuttiProtocol); + persistenceService.setProtocol(createdProtocol); + return createdProtocol; + } + + public String getProtocolFirstAvailableName(String protocolOriginalName) { + return persistenceService.getFirstAvailableName(protocolOriginalName); + } +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericformatImportPersitenceHelper.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericformatImportPersitenceHelper.java deleted file mode 100644 index 05ca563..0000000 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericformatImportPersitenceHelper.java +++ /dev/null @@ -1,566 +0,0 @@ -package fr.ifremer.tutti.service.genericformat; - -/* - * #%L - * Tutti :: Service - * $Id:$ - * $HeadURL:$ - * %% - * Copyright (C) 2012 - 2015 Ifremer - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import com.google.common.collect.Sets; -import fr.ifremer.adagio.core.dao.referential.ObjectTypeCode; -import fr.ifremer.tutti.persistence.ProgressionModel; -import fr.ifremer.tutti.persistence.entities.CaracteristicMap; -import fr.ifremer.tutti.persistence.entities.TuttiEntities; -import fr.ifremer.tutti.persistence.entities.data.AccidentalBatch; -import fr.ifremer.tutti.persistence.entities.data.Attachment; -import fr.ifremer.tutti.persistence.entities.data.BenthosBatch; -import fr.ifremer.tutti.persistence.entities.data.BenthosBatchFrequency; -import fr.ifremer.tutti.persistence.entities.data.CatchBatch; -import fr.ifremer.tutti.persistence.entities.data.Cruise; -import fr.ifremer.tutti.persistence.entities.data.FishingOperation; -import fr.ifremer.tutti.persistence.entities.data.IndividualObservationBatch; -import fr.ifremer.tutti.persistence.entities.data.MarineLitterBatch; -import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; -import fr.ifremer.tutti.persistence.entities.data.SpeciesBatchFrequency; -import fr.ifremer.tutti.persistence.entities.referential.Gear; -import fr.ifremer.tutti.persistence.model.CruiseDataModel; -import fr.ifremer.tutti.service.PersistenceService; -import fr.ifremer.tutti.service.genericformat.csv.AttachmentRow; -import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.nuiton.decorator.Decorator; - -import java.io.File; -import java.util.Collection; -import java.util.List; -import java.util.Set; - -import static org.nuiton.i18n.I18n.t; - -/** - * Created on 2/19/15. - * - * @author Tony Chemit - chemit@codelutin.com - * @since 3.14 - */ -public class GenericformatImportPersitenceHelper { - - /** Logger. */ - private static final Log log = LogFactory.getLog(GenericformatImportPersitenceHelper.class); - - private final GenericFormatImportContext importContext; - - private final PersistenceService persistenceService; - - private final Decorator<Cruise> cruiseDecorator; - - private final Decorator<FishingOperation> fishingOperationDecorator; - - public GenericformatImportPersitenceHelper(GenericFormatImportContext importContext, PersistenceService persistenceService, Decorator<Cruise> cruiseDecorator, Decorator<FishingOperation> fishingOperationDecorator) { - this.importContext = importContext; - this.persistenceService = persistenceService; - this.cruiseDecorator = cruiseDecorator; - this.fishingOperationDecorator = fishingOperationDecorator; - } - - public void persistCruise(Cruise cruise, Collection<AttachmentRow> attachmentRows) { - - String cruiseStr = cruiseDecorator.toString(cruise); - - boolean createCruise = TuttiEntities.isNew(cruise); - - Cruise savedCruise; - - CruiseDataModel existingCruiseData; - - Set<FishingOperation> existingFishingOperations; - - if (createCruise) { - - if (log.isInfoEnabled()) { - log.info("Create cruise: " + cruiseStr); - } - importContext.increments(t("tutti.service.genericFormat.persist.cruise", cruiseStr)); - - savedCruise = persistenceService.createCruise(cruise); - - existingCruiseData = null; - - existingFishingOperations = null; - - } else { - - if (log.isInfoEnabled()) { - log.info("Save existing cruise: " + cruiseStr); - } - - importContext.increments(t("tutti.service.genericFormat.persist.cruise", cruiseStr)); - - savedCruise = cruise; - - existingFishingOperations = Sets.newLinkedHashSet(persistenceService.getAllFishingOperation(cruise.getId())); - - existingCruiseData = importContext.getImportRequest().getExistingCruiseData(cruise); - - if (importContext.getImportRequest().isUpdateCruises()) { - - savedCruise = persistenceService.saveCruise(cruise, false, false); - - if (importContext.getImportRequest().isImportAttachments()) { - - // delete previous attachments - persistenceService.deleteAllAttachment(ObjectTypeCode.SCIENTIFIC_CRUISE, cruise.getIdAsInt()); - - if (CollectionUtils.isNotEmpty(attachmentRows)) { - persistAttachments(savedCruise.getIdAsInt(), attachmentRows); - } - - } - } - - } - - importContext.addImportedCruise(savedCruise, existingCruiseData, existingFishingOperations); - - } - - public void persistGearCaracteristics() { - - importContext.doActionOnCruiseContexts(new GenericFormatImportContext.CruiseContextAction() { - - @Override - public void onCruise(GenericFormatImportCruiseContext cruiseContext, ProgressionModel progressionModel) { - - importContext.increments(t("tutti.service.genericFormat.persist.gearCaracteristics", cruiseContext.getCruiseLabel())); - - if (cruiseContext.withGearCaracteristics()) { - - Set<Gear> gears = cruiseContext.getGearsWithcaracteristics(); - - Cruise cruise = cruiseContext.getCruise(); - - for (Gear gear : gears) { - - if (log.isInfoEnabled()) { - log.info("Persist " + gear.getCaracteristics().size() + " gear caracteristics for gear: " + gear.getName() + " for cruise: " + cruiseContext.getCruiseLabel()); - } - persistenceService.saveGearCaracteristics(gear, cruise); - - } - - } - - } - }); - - } - - protected void persistAttachments(Integer objectId, Collection<AttachmentRow> attachmentRows) { - - if (importContext.getImportRequest().isImportAttachments()) { - - for (AttachmentRow attachmentRow : attachmentRows) { - - Attachment attachment = attachmentRow.toAttachment(objectId); - File attachmentFile = importContext.getImportRequest().getArchive().extractAttachment(attachment.getPath()); - persistenceService.createAttachment(attachment, attachmentFile); - - } - - } - - } - - public void persistFishingOperation(GenericFormatImportCruiseContext cruiseContext, FishingOperation fishingOperation, CatchBatch catchBatch, Collection<AttachmentRow> operationAttachmentRows, Collection<AttachmentRow> catchAttachmentRows) { - - String operationStr = fishingOperationDecorator.toString(fishingOperation); - String cruiseStr = cruiseContext.getCruiseLabel(); - if (log.isInfoEnabled()) { - log.info("Persist fishing Operation: " + operationStr + " for cruise: " + cruiseStr); - } - importContext.increments(t("tutti.service.genericFormat.persist.operation", cruiseStr, operationStr)); - FishingOperation createdFishingOperation = persistenceService.createFishingOperation(fishingOperation); - catchBatch.setFishingOperation(createdFishingOperation); - - CatchBatch createdCatchBatch = persistenceService.createCatchBatch(catchBatch); - - persistAttachments(createdFishingOperation.getIdAsInt(), operationAttachmentRows); - persistAttachments(createdCatchBatch.getIdAsInt(), catchAttachmentRows); - - importContext.addImportedFishingOperation(createdFishingOperation, createdCatchBatch); - - } - - public void persistFishingOperationParameters() { - - importContext.doActionOnCruiseContexts(new GenericFormatImportContext.CruiseContextAction() { - - @Override - public void onCruise(GenericFormatImportCruiseContext cruiseContext, ProgressionModel progressionModel) { - - for (GenericFormatImportOperationContext fishingOperationContext : cruiseContext.getFishingOperationContexts()) { - - String cruiseStr = cruiseContext.getCruiseLabel(); - String operationStr = fishingOperationContext.getFishingOperationLabel(); - - importContext.increments(t("tutti.service.genericFormat.persist.operation.parameters", cruiseStr, operationStr)); - - boolean persist = false; - - FishingOperation fishingOperation = fishingOperationContext.getFishingOperation(); - - if (fishingOperationContext.withGearFeatures()) { - - CaracteristicMap gearUseFeatures = fishingOperationContext.getGearUseFeatures(); - fishingOperation.setGearUseFeatures(gearUseFeatures); - if (log.isInfoEnabled()) { - log.info("Persist " + gearUseFeatures.size() + " gear use features of " + operationStr + " for cruise: " + cruiseStr); - } - - persist = true; - - } - - if (fishingOperationContext.withVesselFeatures()) { - - CaracteristicMap vesselUseFeatures = fishingOperationContext.getVesselUseFeatures(); - fishingOperation.setVesselUseFeatures(vesselUseFeatures); - if (log.isInfoEnabled()) { - log.info("Persist " + vesselUseFeatures.size() + " vessel use features of " + operationStr + " for cruise: " + cruiseStr); - } - - persist = true; - - } - - if (persist) { - - persistenceService.saveFishingOperation(fishingOperation); - - } - - } - } - }); - - } - - public void persistSpeciesBatches() { - - importContext.doActionOnCruiseContexts(new GenericFormatImportContext.CruiseContextAction() { - - @Override - public void onCruise(GenericFormatImportCruiseContext cruiseContext, ProgressionModel progressionModel) { - - for (GenericFormatImportOperationContext fishingOperationContext : cruiseContext.getFishingOperationContexts()) { - - String cruiseStr = cruiseContext.getCruiseLabel(); - String operationStr = fishingOperationContext.getFishingOperationLabel(); - - importContext.increments(t("tutti.service.genericFormat.persist.operation.speciesBatches", cruiseStr, operationStr)); - - if (fishingOperationContext.withSpeciesBatches(true)) { - - Collection<SpeciesBatch> batches = fishingOperationContext.getSpeciesBatches(true); - if (log.isInfoEnabled()) { - log.info("Persist " + batches.size() + " VRAC root species batch(es) of " + operationStr + " for cruise: " + cruiseStr); - } - persistSpeciesBatches(fishingOperationContext, batches, null); - - } - - if (fishingOperationContext.withSpeciesBatches(false)) { - - Collection<SpeciesBatch> batches = fishingOperationContext.getSpeciesBatches(false); - if (log.isInfoEnabled()) { - log.info("Persist " + batches.size() + " HORS VRAC root species batch(es) of " + operationStr + " for cruise: " + cruiseStr); - } - persistSpeciesBatches(fishingOperationContext, batches, null); - - } - - } - - } - - protected void persistSpeciesBatches(GenericFormatImportOperationContext fishingOperationContext, Collection<SpeciesBatch> batches, String parentId) { - - for (SpeciesBatch batch : batches) { - - Integer batchObjectId = fishingOperationContext.getBatchObjectId(batch.getIdAsInt()); - - List<SpeciesBatchFrequency> frequencies = fishingOperationContext.getSpeciesFrequencies(batch); - - // reset temporary id to persist batch - batch.setId((Integer) null); - SpeciesBatch createdBatch = persistenceService.createSpeciesBatch(batch, parentId); - - if (batchObjectId != null) { - Collection<AttachmentRow> attachmentRows = importContext.popAttachmentRows(ObjectTypeCode.BATCH, batchObjectId); - if (CollectionUtils.isNotEmpty(attachmentRows)) { - persistAttachments(createdBatch.getIdAsInt(), attachmentRows); - } - } - - if (CollectionUtils.isNotEmpty(frequencies)) { - - String batchId = batch.getId(); - if (log.isInfoEnabled()) { - log.info("Persist " + frequencies.size() + " frequency(ies) (species batch: " + batchId + ") of " + fishingOperationContext.getFishingOperationLabel() + " for cruise: " + cruiseDecorator.toString(fishingOperationContext.getFishingOperation().getCruise())); - } - persistenceService.saveSpeciesBatchFrequency(batchId, frequencies); - - } - - if (!batch.isChildBatchsEmpty()) { - - persistSpeciesBatches(fishingOperationContext, batch.getChildBatchs(), createdBatch.getId()); - - } - - } - - } - - }); - - - } - - public void persistBenthosBatches() { - - importContext.doActionOnCruiseContexts(new GenericFormatImportContext.CruiseContextAction() { - - @Override - public void onCruise(GenericFormatImportCruiseContext cruiseContext, ProgressionModel progressionModel) { - - for (GenericFormatImportOperationContext fishingOperationContext : cruiseContext.getFishingOperationContexts()) { - - String cruiseStr = cruiseContext.getCruiseLabel(); - String operationStr = fishingOperationContext.getFishingOperationLabel(); - - importContext.increments(t("tutti.service.genericFormat.persist.operation.benthosBatches", cruiseStr, operationStr)); - - if (fishingOperationContext.withBenthosBatches(true)) { - - Collection<BenthosBatch> batches = fishingOperationContext.getBenthosBatches(true); - if (log.isInfoEnabled()) { - log.info("Persist " + batches.size() + " VRAC benthos batch(es) of " + operationStr + " for cruise: " + cruiseStr); - } - persistBenthosBatches(fishingOperationContext, batches, null); - - } - - if (fishingOperationContext.withBenthosBatches(false)) { - - Collection<BenthosBatch> batches = fishingOperationContext.getBenthosBatches(false); - if (log.isInfoEnabled()) { - log.info("Persist " + batches.size() + " HORS VRAC benthos batch(es) of " + operationStr + " for cruise: " + cruiseContext.getCruiseLabel()); - } - persistBenthosBatches(fishingOperationContext, batches, null); - - } - - } - } - - protected void persistBenthosBatches(GenericFormatImportOperationContext fishingOperationContext, Collection<BenthosBatch> batches, String parentId) { - - for (BenthosBatch batch : batches) { - - Integer batchObjectId = fishingOperationContext.getBatchObjectId(batch.getIdAsInt()); - - List<BenthosBatchFrequency> frequencies = fishingOperationContext.getBenthosFrequencies(batch); - - // reset temporary id to persist batch - batch.setId((Integer) null); - - BenthosBatch createdBatch = persistenceService.createBenthosBatch(batch, parentId); - - if (batchObjectId != null) { - Collection<AttachmentRow> attachmentRows = importContext.popAttachmentRows(ObjectTypeCode.BATCH, batchObjectId); - if (CollectionUtils.isNotEmpty(attachmentRows)) { - persistAttachments(createdBatch.getIdAsInt(), attachmentRows); - } - } - - if (CollectionUtils.isNotEmpty(frequencies)) { - - String batchId = batch.getId(); - if (log.isInfoEnabled()) { - log.info("Persist " + frequencies.size() + " frequency(ies) (benthos batch: " + batchId + ") of " + fishingOperationContext.getFishingOperationLabel() + " for cruise: " + cruiseDecorator.toString(fishingOperationContext.getFishingOperation().getCruise())); - } - persistenceService.saveBenthosBatchFrequency(batchId, frequencies); - - } - - if (!batch.isChildBatchsEmpty()) { - - persistBenthosBatches(fishingOperationContext, batch.getChildBatchs(), createdBatch.getId()); - - } - } - - } - - }); - - } - - public void persistMarineLitterBatches() { - - importContext.doActionOnCruiseContexts(new GenericFormatImportContext.CruiseContextAction() { - - @Override - public void onCruise(GenericFormatImportCruiseContext cruiseContext, ProgressionModel progressionModel) { - - for (GenericFormatImportOperationContext fishingOperationContext : cruiseContext.getFishingOperationContexts()) { - - String cruiseStr = cruiseContext.getCruiseLabel(); - String operationStr = fishingOperationContext.getFishingOperationLabel(); - - importContext.increments(t("tutti.service.genericFormat.persist.operation.marineLitters", cruiseStr, operationStr)); - - if (fishingOperationContext.withMarineLitterBatches()) { - -// FishingOperation fishingOperation = fishingOperationContext.getFishingOperation(); -// String fishingOperationId = fishingOperation.getId(); - Collection<MarineLitterBatch> marineLitterBatches = fishingOperationContext.getMarineLitterBatches(); - if (log.isInfoEnabled()) { - log.info("Persist " + marineLitterBatches.size() + " marine litter(s) of " + operationStr + " for cruise: " + cruiseStr); - } - //FIXME Does not work (all batches are persisted, but the last one only displayed later in application) -// persistenceService.createMarineLitterBatches(fishingOperationId, marineLitterBatches); - for (MarineLitterBatch marineLitterBatch : marineLitterBatches) { - - Integer objectId = marineLitterBatch.getIdAsInt(); - Collection<AttachmentRow> attachmentRows = importContext.popAttachmentRows(ObjectTypeCode.BATCH, objectId); - - // Id was only here to get attachments - marineLitterBatch.setId((String) null); - - MarineLitterBatch createdMarineLitterBatch = persistenceService.createMarineLitterBatch(marineLitterBatch); - persistAttachments(createdMarineLitterBatch.getIdAsInt(), attachmentRows); - - } - - } - - } - - } - }); - - } - - public void persistIndividualObservationBatches() { - - importContext.doActionOnCruiseContexts(new GenericFormatImportContext.CruiseContextAction() { - - @Override - public void onCruise(GenericFormatImportCruiseContext cruiseContext, ProgressionModel progressionModel) { - - for (GenericFormatImportOperationContext fishingOperationContext : cruiseContext.getFishingOperationContexts()) { - - String cruiseStr = cruiseContext.getCruiseLabel(); - String operationStr = fishingOperationContext.getFishingOperationLabel(); - - importContext.increments(t("tutti.service.genericFormat.persist.operation.individualObservations", cruiseStr, operationStr)); - - if (fishingOperationContext.withIndividualObservationBatches()) { - -// FishingOperation fishingOperation = fishingOperationContext.getFishingOperation(); -// String fishingOperationId = fishingOperation.getId(); - Collection<IndividualObservationBatch> individualObservationBatches = fishingOperationContext.getIndividualObservationBatches(); - if (log.isInfoEnabled()) { - log.info("Persist " + individualObservationBatches.size() + " individual observation(s) of " + operationStr + " for cruise: " + cruiseStr); - } -// persistenceService.createIndividualObservationBatches(fishingOperationId, individualObservationBatches); - - for (IndividualObservationBatch individualObservationBatch : individualObservationBatches) { - - Integer objectId = individualObservationBatch.getIdAsInt(); - Collection<AttachmentRow> attachmentRows = importContext.popAttachmentRows(ObjectTypeCode.SAMPLE, objectId); - - // Id was only here to get attachments - individualObservationBatch.setId((String) null); - - IndividualObservationBatch createdIndividualObservationBatch = persistenceService.createIndividualObservationBatch(individualObservationBatch); - persistAttachments(createdIndividualObservationBatch.getIdAsInt(), attachmentRows); - - } - - } - - } - - } - }); - - } - - public void persistAccidentalBatches() { - - importContext.doActionOnCruiseContexts(new GenericFormatImportContext.CruiseContextAction() { - - @Override - public void onCruise(GenericFormatImportCruiseContext cruiseContext, ProgressionModel progressionModel) { - - for (GenericFormatImportOperationContext fishingOperationContext : cruiseContext.getFishingOperationContexts()) { - - String cruiseStr = cruiseContext.getCruiseLabel(); - String operationStr = fishingOperationContext.getFishingOperationLabel(); - - importContext.increments(t("tutti.service.genericFormat.persist.operation.accidentalBatches", cruiseStr, operationStr)); - - if (fishingOperationContext.withAccidentalBatches()) { - -// FishingOperation fishingOperation = fishingOperationContext.getFishingOperation(); -// String fishingOperationId = fishingOperation.getId(); - Collection<AccidentalBatch> accidentalBatches = fishingOperationContext.getAccidentalBatches(); - if (log.isInfoEnabled()) { - log.info("Persist " + accidentalBatches.size() + " accidental batch(es) of " + operationStr + " for cruise: " + cruiseStr); - } - - for (AccidentalBatch accidentalBatch : accidentalBatches) { - - Integer objectId = accidentalBatch.getIdAsInt(); - Collection<AttachmentRow> attachmentRows = importContext.popAttachmentRows(ObjectTypeCode.SAMPLE, objectId); - - // Id was only here to get attachments - accidentalBatch.setId((String) null); - - AccidentalBatch createdAccidentalBatch = persistenceService.createAccidentalBatch(accidentalBatch); - persistAttachments(createdAccidentalBatch.getIdAsInt(), attachmentRows); - - } - - } - - } - - } - }); - - } - -} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForAccidentalCatch.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForAccidentalCatch.java index 3913e48..86446a0 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForAccidentalCatch.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForAccidentalCatch.java @@ -59,37 +59,31 @@ public class CsvConsumerForAccidentalCatch extends CsvComsumer<AccidentalCatchRo public GenericFormatImportOperationContext validateRow(ImportRow<AccidentalCatchRow> row, GenericFormatContextSupport importContext) { - GenericFormatImportOperationContext operationContext = null; + GenericFormatImportOperationContext operationContext = importContext.getValidationHelper().getFishingOperationContext(this, row, importContext); - if (row.isValid()) { + if (operationContext != null) { - operationContext = importContext.getValidationHelper().getFishingOperationContext(this, row, importContext); + //TODO checks! + AccidentalCatchRow bean = row.getBean(); - if (operationContext != null) { - - //TODO checks! - AccidentalCatchRow bean = row.getBean(); - - //TODO Use a validator ? - Caracteristic caracteristic = bean.getCaracteristic(); - if (caracteristic == null) { - //TODO Should done by parser ? - } - - //TODO Use a validator ? - if (bean.getCaracteristicValue() == null) { + //TODO Use a validator ? + Caracteristic caracteristic = bean.getCaracteristic(); + if (caracteristic == null) { + //TODO Should done by parser ? + } - } + //TODO Use a validator ? + if (bean.getCaracteristicValue() == null) { - // parse caracteristic value - String value = (String) bean.getCaracteristicValue(); - try { - Serializable serializable = importContext.parseCaracteristicValue(caracteristic, value); - bean.setCaracteristicValue(serializable); - } catch (CaracteristicValueParseException e) { - addCheckError(row, e); - } + } + // parse caracteristic value + String value = (String) bean.getCaracteristicValue(); + try { + Serializable serializable = importContext.parseCaracteristicValue(caracteristic, value); + bean.setCaracteristicValue(serializable); + } catch (CaracteristicValueParseException e) { + addCheckError(row, e); } } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForCatch.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForCatch.java index 6390ed4..257b877 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForCatch.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForCatch.java @@ -82,27 +82,21 @@ public class CsvConsumerForCatch extends CsvComsumer<CatchRow, CatchModel> { public GenericFormatImportOperationContext validateRow(ImportRow<CatchRow> row, GenericFormatContextSupport importContext) { - GenericFormatImportOperationContext operationContext = null; + GenericFormatImportOperationContext operationContext = importContext.getValidationHelper().getFishingOperationContext(this, row, importContext); - if (row.isValid()) { + if (operationContext != null) { - operationContext = importContext.getValidationHelper().getFishingOperationContext(this, row, importContext); + //TODO checks! + CatchRow bean = row.getBean(); - if (operationContext != null) { + for (ExportSampleCategory sampleCategory : bean.getSampleCategory()) { - //TODO checks! - CatchRow bean = row.getBean(); + if (sampleCategory.isFilled()) { - for (ExportSampleCategory sampleCategory : bean.getSampleCategory()) { - - if (sampleCategory.isFilled()) { - - if (sampleCategory.getCategoryValue() == null) { - //TODO - } + if (sampleCategory.getCategoryValue() == null) { + //TODO } } - } } @@ -239,7 +233,7 @@ public class CsvConsumerForCatch extends CsvComsumer<CatchRow, CatchModel> { } - protected <A extends SpeciesAbleBatch> A fillBatchCategories(GenericFormatImportOperationContext operationContext,A batch, CatchRow bean) { + protected <A extends SpeciesAbleBatch> A fillBatchCategories(GenericFormatImportOperationContext operationContext, A batch, CatchRow bean) { for (ExportSampleCategory exportSampleCategory : bean.getFilledSampleCategories()) { batch = fillBatchCategories(operationContext, batch, exportSampleCategory); @@ -249,7 +243,7 @@ public class CsvConsumerForCatch extends CsvComsumer<CatchRow, CatchModel> { } - protected <A extends SpeciesAbleBatch> A fillBatchCategories(GenericFormatImportOperationContext operationContext,A batch, ExportSampleCategory sampleCategory) { + protected <A extends SpeciesAbleBatch> A fillBatchCategories(GenericFormatImportOperationContext operationContext, A batch, ExportSampleCategory sampleCategory) { A result = null; diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForGearCaracteristic.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForGearCaracteristic.java index 7dcbd28..eee12c3 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForGearCaracteristic.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForGearCaracteristic.java @@ -53,46 +53,41 @@ public class CsvConsumerForGearCaracteristic extends CsvComsumer<GearCaracterist public GenericFormatImportCruiseContext validateRow(ImportRow<GearCaracteristicRow> row, GenericFormatContextSupport importContext) { - GenericFormatImportCruiseContext cruiseContext = null; - if (row.isValid()) { + GenericFormatImportValidationHelper validationHelper = importContext.getValidationHelper(); - GenericFormatImportValidationHelper validationHelper = importContext.getValidationHelper(); + GenericFormatImportCruiseContext cruiseContext = validationHelper.getCruise(this, row, importContext); - cruiseContext = validationHelper.getCruise(this, row, importContext); + if (cruiseContext != null) { - if (cruiseContext != null) { + GearCaracteristicRow bean = row.getBean(); - GearCaracteristicRow bean = row.getBean(); + Gear gear = bean.getGear(); + short rankOrder = bean.getRankOrder(); - Gear gear = bean.getGear(); - short rankOrder = bean.getRankOrder(); - - Gear cruiseGear = validationHelper.getGear(this, importContext, row, gear, rankOrder); - if (cruiseGear != null) { - bean.setGear(cruiseGear); - } - - //TODO Use a validator ? - Caracteristic caracteristic = bean.getCaracteristic(); - if (caracteristic == null) { - //TODO Should done by parser ? - } + Gear cruiseGear = validationHelper.getGear(this, importContext, row, gear, rankOrder); + if (cruiseGear != null) { + bean.setGear(cruiseGear); + } - //TODO Use a validator ? - if (bean.getValue() == null) { + //TODO Use a validator ? + Caracteristic caracteristic = bean.getCaracteristic(); + if (caracteristic == null) { + //TODO Should done by parser ? + } - } + //TODO Use a validator ? + if (bean.getValue() == null) { - // parse caracteristic value - String value = (String) bean.getValue(); - try { - Serializable serializable = importContext.parseCaracteristicValue(caracteristic, value); - bean.setValue(serializable); - } catch (CaracteristicValueParseException e) { - addCheckError(row, e); - } + } + // parse caracteristic value + String value = (String) bean.getValue(); + try { + Serializable serializable = importContext.parseCaracteristicValue(caracteristic, value); + bean.setValue(serializable); + } catch (CaracteristicValueParseException e) { + addCheckError(row, e); } } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForIndividualObservation.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForIndividualObservation.java index 33e101b..f0ca721 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForIndividualObservation.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForIndividualObservation.java @@ -59,37 +59,31 @@ public class CsvConsumerForIndividualObservation extends CsvComsumer<IndividualO public GenericFormatImportOperationContext validateRow(ImportRow<IndividualObservationRow> row, GenericFormatContextSupport importContext) { - GenericFormatImportOperationContext operationContext = null; + GenericFormatImportOperationContext operationContext = importContext.getValidationHelper().getFishingOperationContext(this, row, importContext); - if (row.isValid()) { + if (operationContext != null) { - operationContext = importContext.getValidationHelper().getFishingOperationContext(this, row, importContext); + //TODO checks! + IndividualObservationRow bean = row.getBean(); - if (operationContext != null) { - - //TODO checks! - IndividualObservationRow bean = row.getBean(); - - //TODO Use a validator ? - Caracteristic caracteristic = bean.getCaracteristic(); - if (caracteristic == null) { - //TODO Should done by parser ? - } - - //TODO Use a validator ? - if (bean.getCaracteristicValue() == null) { + //TODO Use a validator ? + Caracteristic caracteristic = bean.getCaracteristic(); + if (caracteristic == null) { + //TODO Should done by parser ? + } - } + //TODO Use a validator ? + if (bean.getCaracteristicValue() == null) { - // parse caracteristic value - String value = (String) bean.getCaracteristicValue(); - try { - Serializable serializable = importContext.parseCaracteristicValue(caracteristic, value); - bean.setCaracteristicValue(serializable); - } catch (CaracteristicValueParseException e) { - addCheckError(row, e); - } + } + // parse caracteristic value + String value = (String) bean.getCaracteristicValue(); + try { + Serializable serializable = importContext.parseCaracteristicValue(caracteristic, value); + bean.setCaracteristicValue(serializable); + } catch (CaracteristicValueParseException e) { + addCheckError(row, e); } } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForMarineLitter.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForMarineLitter.java index a233c52..c898935 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForMarineLitter.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForMarineLitter.java @@ -49,18 +49,12 @@ public class CsvConsumerForMarineLitter extends CsvComsumer<MarineLitterRow, Mar public GenericFormatImportOperationContext validateRow(ImportRow<MarineLitterRow> row, GenericFormatContextSupport importContext) { - GenericFormatImportOperationContext operationContext = null; + GenericFormatImportOperationContext operationContext = importContext.getValidationHelper().getFishingOperationContext(this, row, importContext); - if (row.isValid()) { + if (operationContext != null) { - operationContext = importContext.getValidationHelper().getFishingOperationContext(this, row, importContext); - - if (operationContext != null) { - - //TODO checks! - MarineLitterRow bean = row.getBean(); - - } + //TODO checks! + MarineLitterRow bean = row.getBean(); } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForOperation.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForOperation.java index c79602e..ce8074e 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForOperation.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForOperation.java @@ -56,50 +56,45 @@ public class CsvConsumerForOperation extends CsvComsumer<OperationRow, Operation public GenericFormatImportCruiseContext validateRow(ImportRow<OperationRow> row, GenericFormatContextSupport importContext) { - GenericFormatImportCruiseContext cruiseContext = null; + GenericFormatImportValidationHelper validationHelper = importContext.getValidationHelper(); - if (row.isValid()) { + GenericFormatImportCruiseContext cruiseContext = validationHelper.getCruise(this, row, importContext); - GenericFormatImportValidationHelper validationHelper = importContext.getValidationHelper(); + if (cruiseContext != null) { - cruiseContext = validationHelper.getCruise(this, row, importContext); + OperationRow bean = row.getBean(); - if (cruiseContext != null) { + FishingOperation fishingOperation = bean.getFishingOperation(); - OperationRow bean = row.getBean(); + if (cruiseContext.isFishingOperationAlreadyImported(bean)) { - FishingOperation fishingOperation = bean.getFishingOperation(); + addCheckError(row, new FishingOperationAlreadyImportedException(fishingOperation)); - if (cruiseContext.isFishingOperationAlreadyImported(bean)) { + } else { - addCheckError(row, new FishingOperationAlreadyImportedException(fishingOperation)); + Gear gear = bean.getGear(); + Short rankOrder = bean.getGearRankOrder(); - } else { + if (gear != null && rankOrder != null) { - Gear gear = bean.getGear(); - Short rankOrder = bean.getGearRankOrder(); - - if (gear != null && rankOrder != null) { - - Gear cruiseGear = validationHelper.getGear(this, importContext, row, gear, rankOrder); - if (cruiseGear != null) { - bean.setGear(cruiseGear); - } + Gear cruiseGear = validationHelper.getGear(this, importContext, row, gear, rankOrder); + if (cruiseGear != null) { + bean.setGear(cruiseGear); } - NuitonValidatorResult validatorResult = validationHelper.validateFishingOperation(fishingOperation); - - if (validatorResult.hasFatalMessages()) { - - Set<String> errorMessages = validationHelper.getMessages(validatorResult, NuitonValidatorScope.FATAL); - addCheckError(row, new FishingOperationNotValidException(fishingOperation, errorMessages)); + } + NuitonValidatorResult validatorResult = validationHelper.validateFishingOperation(fishingOperation); - } + if (validatorResult.hasFatalMessages()) { - //TODO other checks ? + Set<String> errorMessages = validationHelper.getMessages(validatorResult, NuitonValidatorScope.FATAL); + addCheckError(row, new FishingOperationNotValidException(fishingOperation, errorMessages)); } + //TODO other checks ? + } + } reportError(row); @@ -143,14 +138,14 @@ public class CsvConsumerForOperation extends CsvComsumer<OperationRow, Operation } - protected void prepareBenthos(boolean importBenthos , OperationRow bean, CatchBatch catchBatch) { - if (!importBenthos ||BooleanUtils.toBooleanDefaultIfNull(bean.getBenthosTotalSortedWeightComputed(), false)) { + protected void prepareBenthos(boolean importBenthos, OperationRow bean, CatchBatch catchBatch) { + if (!importBenthos || BooleanUtils.toBooleanDefaultIfNull(bean.getBenthosTotalSortedWeightComputed(), false)) { catchBatch.setBenthosTotalSortedWeight(null); } - if (!importBenthos ||BooleanUtils.toBooleanDefaultIfNull(bean.getBenthosTotalInertWeightComputed(), false)) { + if (!importBenthos || BooleanUtils.toBooleanDefaultIfNull(bean.getBenthosTotalInertWeightComputed(), false)) { catchBatch.setBenthosTotalInertWeight(null); } - if (!importBenthos ||BooleanUtils.toBooleanDefaultIfNull(bean.getBenthosTotalLivingNotItemizedWeightComputed(), false)) { + if (!importBenthos || BooleanUtils.toBooleanDefaultIfNull(bean.getBenthosTotalLivingNotItemizedWeightComputed(), false)) { catchBatch.setBenthosTotalLivingNotItemizedWeight(null); } } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForParameter.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForParameter.java index 129e6ea..a3fbbfb 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForParameter.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForParameter.java @@ -51,48 +51,41 @@ public class CsvConsumerForParameter extends CsvComsumer<ParameterRow, Parameter public GenericFormatImportOperationContext validateRow(ImportRow<ParameterRow> row, GenericFormatContextSupport importContext) { - GenericFormatImportOperationContext operationContext = null; + GenericFormatImportOperationContext operationContext = importContext.getValidationHelper().getFishingOperationContext(this, row, importContext); - if (row.isValid()) { + if (operationContext != null) { + ParameterRow bean = row.getBean(); - operationContext = importContext.getValidationHelper().getFishingOperationContext(this, row, importContext); + bean.setFishingOperation(operationContext.getFishingOperation()); - if (operationContext != null) { - - ParameterRow bean = row.getBean(); - - bean.setFishingOperation(operationContext.getFishingOperation()); - - //TODO Use a validator ? - if (bean.getParameterType() == null) { - //TODO Should done by parser ? - } - - //TODO Use a validator ? - Caracteristic caracteristic = bean.getCaracteristic(); - if (caracteristic == null) { - //TODO Should done by parser ? - } - - //TODO Use a validator ? - if (bean.getValue() == null) { + //TODO Use a validator ? + if (bean.getParameterType() == null) { + //TODO Should done by parser ? + } - } + //TODO Use a validator ? + Caracteristic caracteristic = bean.getCaracteristic(); + if (caracteristic == null) { + //TODO Should done by parser ? + } - // parse caracteristic value - String value = (String) bean.getValue(); - try { - Serializable serializable = importContext.parseCaracteristicValue(caracteristic, value); - bean.setValue(serializable); - } catch (CaracteristicValueParseException e) { - addCheckError(row, e); - } + //TODO Use a validator ? + if (bean.getValue() == null) { - //TODO other checks ? + } + // parse caracteristic value + String value = (String) bean.getValue(); + try { + Serializable serializable = importContext.parseCaracteristicValue(caracteristic, value); + bean.setValue(serializable); + } catch (CaracteristicValueParseException e) { + addCheckError(row, e); } + //TODO other checks ? + } reportError(row); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportAccidentalCatchAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportAccidentalCatchAction.java index f1905b4..10c1f38 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportAccidentalCatchAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportAccidentalCatchAction.java @@ -24,12 +24,18 @@ package fr.ifremer.tutti.service.genericformat.importactions; * #L% */ +import fr.ifremer.adagio.core.dao.referential.ObjectTypeCode; +import fr.ifremer.tutti.persistence.ProgressionModel; +import fr.ifremer.tutti.persistence.entities.data.AccidentalBatch; +import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.service.genericformat.GenericFormatCsvFileResult; import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportCruiseContext; import fr.ifremer.tutti.service.genericformat.GenericFormatImportOperationContext; -import fr.ifremer.tutti.service.genericformat.GenericformatImportPersitenceHelper; +import fr.ifremer.tutti.service.genericformat.GenericformatImportPersistenceHelper; import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForAccidentalCatch; import fr.ifremer.tutti.service.genericformat.csv.AccidentalCatchRow; +import fr.ifremer.tutti.service.genericformat.csv.AttachmentRow; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.csv.ImportRow; @@ -37,6 +43,7 @@ import org.nuiton.csv.ImportRuntimeException; import org.nuiton.jaxx.application.ApplicationTechnicalException; import java.io.IOException; +import java.util.Collection; import static org.nuiton.i18n.I18n.t; @@ -51,11 +58,11 @@ public class ImportAccidentalCatchAction extends ImportActionSupport { /** Logger. */ private static final Log log = LogFactory.getLog(ImportAccidentalCatchAction.class); - private final GenericformatImportPersitenceHelper persitenceHelper; + private final GenericformatImportPersistenceHelper persistenceHelper; - public ImportAccidentalCatchAction(GenericFormatImportContext importContext, GenericformatImportPersitenceHelper persitenceHelper) { + public ImportAccidentalCatchAction(GenericFormatImportContext importContext, GenericformatImportPersistenceHelper persistenceHelper) { super(importContext); - this.persitenceHelper = persitenceHelper; + this.persistenceHelper = persistenceHelper; } @Override @@ -83,7 +90,9 @@ public class ImportAccidentalCatchAction extends ImportActionSupport { for (ImportRow<AccidentalCatchRow> row : consumer) { GenericFormatImportOperationContext operationContext = consumer.validateRow(row, importContext); - consumer.prepareRowForPersist(operationContext, row); + if (operationContext != null) { + consumer.prepareRowForPersist(operationContext, row); + } } } catch (IOException e) { @@ -94,7 +103,71 @@ public class ImportAccidentalCatchAction extends ImportActionSupport { } - persitenceHelper.persistAccidentalBatches(); + persistAccidentalBatches(); + + } + + private void persistAccidentalBatches() { + + importContext.doActionOnCruiseContexts(new GenericFormatImportContext.CruiseContextAction() { + + @Override + public void onCruise(GenericFormatImportCruiseContext cruiseContext, ProgressionModel progressionModel) { + + for (GenericFormatImportOperationContext fishingOperationContext : cruiseContext.getFishingOperationContexts()) { + + boolean override = fishingOperationContext.isOverride(); + + if (override) { + + deleteAccidentalBatches(fishingOperationContext); + + } + + String cruiseStr = cruiseContext.getCruiseLabel(); + String operationStr = fishingOperationContext.getFishingOperationLabel(); + + importContext.increments(t("tutti.service.genericFormat.persist.operation.accidentalBatches", cruiseStr, operationStr)); + + if (fishingOperationContext.withAccidentalBatches()) { + + Collection<AccidentalBatch> accidentalBatches = fishingOperationContext.getAccidentalBatches(); + if (log.isInfoEnabled()) { + log.info("Persist " + accidentalBatches.size() + " accidental batch(es) of " + operationStr + " for cruise: " + cruiseStr); + } + persistAccidentalBatches(accidentalBatches); + + } + + } + + } + + private void deleteAccidentalBatches(GenericFormatImportOperationContext fishingOperationContext) { + + FishingOperation fishingOperation = fishingOperationContext.getFishingOperation(); + persistenceHelper.deleteAccidentalBatchForFishingOperation(fishingOperation.getId()); + + } + + private void persistAccidentalBatches(Collection<AccidentalBatch> batches) { + + for (AccidentalBatch accidentalBatch : batches) { + + Integer objectId = accidentalBatch.getIdAsInt(); + Collection<AttachmentRow> attachmentRows = importContext.popAttachmentRows(ObjectTypeCode.SAMPLE, objectId); + + // Id was only here to get attachments + accidentalBatch.setId((String) null); + + AccidentalBatch createdAccidentalBatch = persistenceHelper.createAccidentalBatch(accidentalBatch); + persistenceHelper.persistAttachments(createdAccidentalBatch.getIdAsInt(), attachmentRows); + + } + + } + + }); } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportCatchAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportCatchAction.java index a43995a..79c2c83 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportCatchAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportCatchAction.java @@ -24,12 +24,22 @@ package fr.ifremer.tutti.service.genericformat.importactions; * #L% */ +import fr.ifremer.adagio.core.dao.referential.ObjectTypeCode; +import fr.ifremer.tutti.persistence.ProgressionModel; +import fr.ifremer.tutti.persistence.entities.data.BenthosBatch; +import fr.ifremer.tutti.persistence.entities.data.BenthosBatchFrequency; +import fr.ifremer.tutti.persistence.entities.data.FishingOperation; +import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; +import fr.ifremer.tutti.persistence.entities.data.SpeciesBatchFrequency; import fr.ifremer.tutti.service.genericformat.GenericFormatCsvFileResult; import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportCruiseContext; import fr.ifremer.tutti.service.genericformat.GenericFormatImportOperationContext; -import fr.ifremer.tutti.service.genericformat.GenericformatImportPersitenceHelper; +import fr.ifremer.tutti.service.genericformat.GenericformatImportPersistenceHelper; import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForCatch; +import fr.ifremer.tutti.service.genericformat.csv.AttachmentRow; import fr.ifremer.tutti.service.genericformat.csv.CatchRow; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.csv.ImportRow; @@ -37,6 +47,8 @@ import org.nuiton.csv.ImportRuntimeException; import org.nuiton.jaxx.application.ApplicationTechnicalException; import java.io.IOException; +import java.util.Collection; +import java.util.List; import static org.nuiton.i18n.I18n.t; @@ -51,11 +63,11 @@ public class ImportCatchAction extends ImportActionSupport { /** Logger. */ private static final Log log = LogFactory.getLog(ImportCatchAction.class); - private final GenericformatImportPersitenceHelper persitenceHelper; + private final GenericformatImportPersistenceHelper persistenceHelper; - public ImportCatchAction(GenericFormatImportContext importContext, GenericformatImportPersitenceHelper persitenceHelper) { + public ImportCatchAction(GenericFormatImportContext importContext, GenericformatImportPersistenceHelper persistenceHelper) { super(importContext); - this.persitenceHelper = persitenceHelper; + this.persistenceHelper = persistenceHelper; } @Override @@ -84,7 +96,9 @@ public class ImportCatchAction extends ImportActionSupport { for (ImportRow<CatchRow> row : consumer) { GenericFormatImportOperationContext operationContext = consumer.validateRow(row, importContext); - consumer.prepareRowForPersist(operationContext, row); + if (operationContext != null) { + consumer.prepareRowForPersist(operationContext, row); + } } } catch (IOException e) { @@ -95,8 +109,192 @@ public class ImportCatchAction extends ImportActionSupport { } - persitenceHelper.persistSpeciesBatches(); - persitenceHelper.persistBenthosBatches(); + persistSpeciesBatches(); + persistBenthosBatches(); + + } + + public void persistSpeciesBatches() { + + importContext.doActionOnCruiseContexts(new GenericFormatImportContext.CruiseContextAction() { + + @Override + public void onCruise(GenericFormatImportCruiseContext cruiseContext, ProgressionModel progressionModel) { + + for (GenericFormatImportOperationContext fishingOperationContext : cruiseContext.getFishingOperationContexts()) { + + boolean override = fishingOperationContext.isOverride(); + + if (override) { + + deleteSpeciesBatches(fishingOperationContext); + + } + + String cruiseStr = cruiseContext.getCruiseLabel(); + String operationStr = fishingOperationContext.getFishingOperationLabel(); + + importContext.increments(t("tutti.service.genericFormat.persist.operation.speciesBatches", cruiseStr, operationStr)); + + if (fishingOperationContext.withSpeciesBatches(true)) { + + Collection<SpeciesBatch> batches = fishingOperationContext.getSpeciesBatches(true); + if (log.isInfoEnabled()) { + log.info("Persist " + batches.size() + " VRAC root species batch(es) of " + operationStr + " for cruise: " + cruiseStr); + } + persistSpeciesBatches(fishingOperationContext, batches, null); + + } + + if (fishingOperationContext.withSpeciesBatches(false)) { + + Collection<SpeciesBatch> batches = fishingOperationContext.getSpeciesBatches(false); + if (log.isInfoEnabled()) { + log.info("Persist " + batches.size() + " HORS VRAC root species batch(es) of " + operationStr + " for cruise: " + cruiseStr); + } + persistSpeciesBatches(fishingOperationContext, batches, null); + + } + + } + + } + + private void persistSpeciesBatches(GenericFormatImportOperationContext fishingOperationContext, Collection<SpeciesBatch> batches, String parentId) { + + for (SpeciesBatch batch : batches) { + + Integer batchObjectId = fishingOperationContext.getBatchObjectId(batch.getIdAsInt()); + + List<SpeciesBatchFrequency> frequencies = fishingOperationContext.getSpeciesFrequencies(batch); + + // reset temporary id to persist batch + batch.setId((Integer) null); + SpeciesBatch createdBatch = persistenceHelper.createSpeciesBatch(batch, parentId); + + Collection<AttachmentRow> attachmentRows = importContext.popAttachmentRows(ObjectTypeCode.BATCH, batchObjectId); + persistenceHelper.persistAttachments(createdBatch.getIdAsInt(), attachmentRows); + + if (CollectionUtils.isNotEmpty(frequencies)) { + + String batchId = batch.getId(); + if (log.isInfoEnabled()) { + log.info("Persist " + frequencies.size() + " frequency(ies) (species batch: " + batchId + ") of " + fishingOperationContext.getFishingOperationLabel() + " for cruise: " + importContext.decorate(fishingOperationContext.getFishingOperation().getCruise())); + } + persistenceHelper.saveSpeciesBatchFrequency(batchId, frequencies); + + } + + if (!batch.isChildBatchsEmpty()) { + + persistSpeciesBatches(fishingOperationContext, batch.getChildBatchs(), createdBatch.getId()); + + } + + } + + } + + private void deleteSpeciesBatches(GenericFormatImportOperationContext fishingOperationContext) { + + FishingOperation fishingOperation = fishingOperationContext.getFishingOperation(); + persistenceHelper.deleteSpeciesBatchForFishingOperation(fishingOperation.getId()); + + } + + }); + + + } + + public void persistBenthosBatches() { + + importContext.doActionOnCruiseContexts(new GenericFormatImportContext.CruiseContextAction() { + + @Override + public void onCruise(GenericFormatImportCruiseContext cruiseContext, ProgressionModel progressionModel) { + + for (GenericFormatImportOperationContext fishingOperationContext : cruiseContext.getFishingOperationContexts()) { + + boolean override = fishingOperationContext.isOverride(); + + if (override) { + + deleteBenthosBatches(fishingOperationContext); + + } + + String cruiseStr = cruiseContext.getCruiseLabel(); + String operationStr = fishingOperationContext.getFishingOperationLabel(); + + importContext.increments(t("tutti.service.genericFormat.persist.operation.benthosBatches", cruiseStr, operationStr)); + + if (fishingOperationContext.withBenthosBatches(true)) { + + Collection<BenthosBatch> batches = fishingOperationContext.getBenthosBatches(true); + if (log.isInfoEnabled()) { + log.info("Persist " + batches.size() + " VRAC benthos batch(es) of " + operationStr + " for cruise: " + cruiseStr); + } + persistBenthosBatches(fishingOperationContext, batches, null); + + } + + if (fishingOperationContext.withBenthosBatches(false)) { + + Collection<BenthosBatch> batches = fishingOperationContext.getBenthosBatches(false); + if (log.isInfoEnabled()) { + log.info("Persist " + batches.size() + " HORS VRAC benthos batch(es) of " + operationStr + " for cruise: " + cruiseContext.getCruiseLabel()); + } + persistBenthosBatches(fishingOperationContext, batches, null); + + } + + } + } + + private void persistBenthosBatches(GenericFormatImportOperationContext fishingOperationContext, Collection<BenthosBatch> batches, String parentId) { + + for (BenthosBatch batch : batches) { + + Integer batchObjectId = fishingOperationContext.getBatchObjectId(batch.getIdAsInt()); + + List<BenthosBatchFrequency> frequencies = fishingOperationContext.getBenthosFrequencies(batch); + + // reset temporary id to persist batch + batch.setId((Integer) null); + + BenthosBatch createdBatch = persistenceHelper.createBenthosBatch(batch, parentId); + + Collection<AttachmentRow> attachmentRows = importContext.popAttachmentRows(ObjectTypeCode.BATCH, batchObjectId); + persistenceHelper.persistAttachments(createdBatch.getIdAsInt(), attachmentRows); + + if (CollectionUtils.isNotEmpty(frequencies)) { + + String batchId = batch.getId(); + if (log.isInfoEnabled()) { + log.info("Persist " + frequencies.size() + " frequency(ies) (benthos batch: " + batchId + ") of " + fishingOperationContext.getFishingOperationLabel() + " for cruise: " + importContext.decorate(fishingOperationContext.getFishingOperation().getCruise())); + } + persistenceHelper.saveBenthosBatchFrequency(batchId, frequencies); + + } + + if (!batch.isChildBatchsEmpty()) { + + persistBenthosBatches(fishingOperationContext, batch.getChildBatchs(), createdBatch.getId()); + + } + } + + } + + private void deleteBenthosBatches(GenericFormatImportOperationContext fishingOperationContext) { + + FishingOperation fishingOperation = fishingOperationContext.getFishingOperation(); + persistenceHelper.deleteBenthosBatchForFishingOperation(fishingOperation.getId()); + + } + + }); } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportGearCaracteristicAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportGearCaracteristicAction.java index effad1b..e18f143 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportGearCaracteristicAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportGearCaracteristicAction.java @@ -24,10 +24,13 @@ package fr.ifremer.tutti.service.genericformat.importactions; * #L% */ +import fr.ifremer.tutti.persistence.ProgressionModel; +import fr.ifremer.tutti.persistence.entities.data.Cruise; +import fr.ifremer.tutti.persistence.entities.referential.Gear; import fr.ifremer.tutti.service.genericformat.GenericFormatCsvFileResult; import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; import fr.ifremer.tutti.service.genericformat.GenericFormatImportCruiseContext; -import fr.ifremer.tutti.service.genericformat.GenericformatImportPersitenceHelper; +import fr.ifremer.tutti.service.genericformat.GenericformatImportPersistenceHelper; import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForGearCaracteristic; import fr.ifremer.tutti.service.genericformat.csv.GearCaracteristicRow; import org.apache.commons.logging.Log; @@ -37,6 +40,7 @@ import org.nuiton.csv.ImportRuntimeException; import org.nuiton.jaxx.application.ApplicationTechnicalException; import java.io.IOException; +import java.util.Set; import static org.nuiton.i18n.I18n.t; @@ -51,11 +55,11 @@ public class ImportGearCaracteristicAction extends ImportActionSupport { /** Logger. */ private static final Log log = LogFactory.getLog(ImportGearCaracteristicAction.class); - private final GenericformatImportPersitenceHelper persitenceHelper; + private final GenericformatImportPersistenceHelper persistenceHelper; - public ImportGearCaracteristicAction(GenericFormatImportContext importContext, GenericformatImportPersitenceHelper persitenceHelper) { + public ImportGearCaracteristicAction(GenericFormatImportContext importContext, GenericformatImportPersistenceHelper persistenceHelper) { super(importContext); - this.persitenceHelper = persitenceHelper; + this.persistenceHelper = persistenceHelper; } @Override @@ -83,9 +87,7 @@ public class ImportGearCaracteristicAction extends ImportActionSupport { if (cruiseContext != null) { - if (row.isValid()) { - consumer.prepareRowForPersist(cruiseContext, row); - } + consumer.prepareRowForPersist(cruiseContext, row); } @@ -98,7 +100,38 @@ public class ImportGearCaracteristicAction extends ImportActionSupport { } - persitenceHelper.persistGearCaracteristics(); + persistGearCaracteristics(); + + } + + public void persistGearCaracteristics() { + + importContext.doActionOnCruiseContexts(new GenericFormatImportContext.CruiseContextAction() { + + @Override + public void onCruise(GenericFormatImportCruiseContext cruiseContext, ProgressionModel progressionModel) { + + importContext.increments(t("tutti.service.genericFormat.persist.gearCaracteristics", cruiseContext.getCruiseLabel())); + + if (cruiseContext.withGearCaracteristics()) { + + Set<Gear> gears = cruiseContext.getGearsWithcaracteristics(); + + Cruise cruise = cruiseContext.getCruise(); + + for (Gear gear : gears) { + + if (log.isInfoEnabled()) { + log.info("Persist " + gear.getCaracteristics().size() + " gear caracteristics for gear: " + gear.getName() + " for cruise: " + cruiseContext.getCruiseLabel()); + } + persistenceHelper.saveGearCaracteristics(gear, cruise); + + } + + } + + } + }); } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportIndividualObservationAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportIndividualObservationAction.java index d2bb9b6..946731a 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportIndividualObservationAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportIndividualObservationAction.java @@ -24,11 +24,17 @@ package fr.ifremer.tutti.service.genericformat.importactions; * #L% */ +import fr.ifremer.adagio.core.dao.referential.ObjectTypeCode; +import fr.ifremer.tutti.persistence.ProgressionModel; +import fr.ifremer.tutti.persistence.entities.data.FishingOperation; +import fr.ifremer.tutti.persistence.entities.data.IndividualObservationBatch; import fr.ifremer.tutti.service.genericformat.GenericFormatCsvFileResult; import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportCruiseContext; import fr.ifremer.tutti.service.genericformat.GenericFormatImportOperationContext; -import fr.ifremer.tutti.service.genericformat.GenericformatImportPersitenceHelper; +import fr.ifremer.tutti.service.genericformat.GenericformatImportPersistenceHelper; import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForIndividualObservation; +import fr.ifremer.tutti.service.genericformat.csv.AttachmentRow; import fr.ifremer.tutti.service.genericformat.csv.IndividualObservationRow; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -37,6 +43,7 @@ import org.nuiton.csv.ImportRuntimeException; import org.nuiton.jaxx.application.ApplicationTechnicalException; import java.io.IOException; +import java.util.Collection; import static org.nuiton.i18n.I18n.t; @@ -51,11 +58,11 @@ public class ImportIndividualObservationAction extends ImportActionSupport { /** Logger. */ private static final Log log = LogFactory.getLog(ImportIndividualObservationAction.class); - private final GenericformatImportPersitenceHelper persitenceHelper; + private final GenericformatImportPersistenceHelper persistenceHelper; - public ImportIndividualObservationAction(GenericFormatImportContext importContext, GenericformatImportPersitenceHelper persitenceHelper) { + public ImportIndividualObservationAction(GenericFormatImportContext importContext, GenericformatImportPersistenceHelper persistenceHelper) { super(importContext); - this.persitenceHelper = persitenceHelper; + this.persistenceHelper = persistenceHelper; } @Override @@ -83,7 +90,9 @@ public class ImportIndividualObservationAction extends ImportActionSupport { for (ImportRow<IndividualObservationRow> row : consumer) { GenericFormatImportOperationContext operationContext = consumer.validateRow(row, importContext); - consumer.prepareRowForPersist(operationContext, row); + if (operationContext != null) { + consumer.prepareRowForPersist(operationContext, row); + } } } catch (IOException e) { @@ -94,7 +103,71 @@ public class ImportIndividualObservationAction extends ImportActionSupport { } - persitenceHelper.persistIndividualObservationBatches(); + persistIndividualObservationBatches(); + + } + + private void persistIndividualObservationBatches() { + + importContext.doActionOnCruiseContexts(new GenericFormatImportContext.CruiseContextAction() { + + @Override + public void onCruise(GenericFormatImportCruiseContext cruiseContext, ProgressionModel progressionModel) { + + for (GenericFormatImportOperationContext fishingOperationContext : cruiseContext.getFishingOperationContexts()) { + + boolean override = fishingOperationContext.isOverride(); + + if (override) { + + deleteIndividualObservationBatches(fishingOperationContext); + + } + + String cruiseStr = cruiseContext.getCruiseLabel(); + String operationStr = fishingOperationContext.getFishingOperationLabel(); + + importContext.increments(t("tutti.service.genericFormat.persist.operation.individualObservations", cruiseStr, operationStr)); + + if (fishingOperationContext.withIndividualObservationBatches()) { + + Collection<IndividualObservationBatch> individualObservationBatches = fishingOperationContext.getIndividualObservationBatches(); + if (log.isInfoEnabled()) { + log.info("Persist " + individualObservationBatches.size() + " individual observation(s) of " + operationStr + " for cruise: " + cruiseStr); + } + persistIndividualObservationBatches(individualObservationBatches); + + } + + } + + } + + private void deleteIndividualObservationBatches(GenericFormatImportOperationContext fishingOperationContext) { + + FishingOperation fishingOperation = fishingOperationContext.getFishingOperation(); + persistenceHelper.deleteIndividualObservationBatchForFishingOperation(fishingOperation.getId()); + + } + + private void persistIndividualObservationBatches(Collection<IndividualObservationBatch> batches) { + + for (IndividualObservationBatch individualObservationBatch : batches) { + + Integer objectId = individualObservationBatch.getIdAsInt(); + Collection<AttachmentRow> attachmentRows = importContext.popAttachmentRows(ObjectTypeCode.SAMPLE, objectId); + + // Id was only here to get attachments + individualObservationBatch.setId((String) null); + + IndividualObservationBatch createdIndividualObservationBatch = persistenceHelper.createIndividualObservationBatch(individualObservationBatch); + persistenceHelper.persistAttachments(createdIndividualObservationBatch.getIdAsInt(), attachmentRows); + + } + + } + + }); } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportMarineLitterAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportMarineLitterAction.java index 0f4e94f..d052502 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportMarineLitterAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportMarineLitterAction.java @@ -24,11 +24,17 @@ package fr.ifremer.tutti.service.genericformat.importactions; * #L% */ +import fr.ifremer.adagio.core.dao.referential.ObjectTypeCode; +import fr.ifremer.tutti.persistence.ProgressionModel; +import fr.ifremer.tutti.persistence.entities.data.FishingOperation; +import fr.ifremer.tutti.persistence.entities.data.MarineLitterBatch; import fr.ifremer.tutti.service.genericformat.GenericFormatCsvFileResult; import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportCruiseContext; import fr.ifremer.tutti.service.genericformat.GenericFormatImportOperationContext; -import fr.ifremer.tutti.service.genericformat.GenericformatImportPersitenceHelper; +import fr.ifremer.tutti.service.genericformat.GenericformatImportPersistenceHelper; import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForMarineLitter; +import fr.ifremer.tutti.service.genericformat.csv.AttachmentRow; import fr.ifremer.tutti.service.genericformat.csv.MarineLitterRow; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -37,6 +43,7 @@ import org.nuiton.csv.ImportRuntimeException; import org.nuiton.jaxx.application.ApplicationTechnicalException; import java.io.IOException; +import java.util.Collection; import static org.nuiton.i18n.I18n.t; @@ -51,11 +58,11 @@ public class ImportMarineLitterAction extends ImportActionSupport { /** Logger. */ private static final Log log = LogFactory.getLog(ImportMarineLitterAction.class); - private final GenericformatImportPersitenceHelper persitenceHelper; + private final GenericformatImportPersistenceHelper persistenceHelper; - public ImportMarineLitterAction(GenericFormatImportContext importContext, GenericformatImportPersitenceHelper persitenceHelper) { + public ImportMarineLitterAction(GenericFormatImportContext importContext, GenericformatImportPersistenceHelper persistenceHelper) { super(importContext); - this.persitenceHelper = persitenceHelper; + this.persistenceHelper = persistenceHelper; } @Override @@ -83,7 +90,9 @@ public class ImportMarineLitterAction extends ImportActionSupport { for (ImportRow<MarineLitterRow> row : consumer) { GenericFormatImportOperationContext operationContext = consumer.validateRow(row, importContext); - consumer.prepareRowForPersist(operationContext, row); + if (operationContext != null) { + consumer.prepareRowForPersist(operationContext, row); + } } } catch (IOException e) { @@ -94,7 +103,71 @@ public class ImportMarineLitterAction extends ImportActionSupport { } - persitenceHelper.persistMarineLitterBatches(); + persistMarineLitterBatches(); + + } + + public void persistMarineLitterBatches() { + + importContext.doActionOnCruiseContexts(new GenericFormatImportContext.CruiseContextAction() { + + @Override + public void onCruise(GenericFormatImportCruiseContext cruiseContext, ProgressionModel progressionModel) { + + for (GenericFormatImportOperationContext fishingOperationContext : cruiseContext.getFishingOperationContexts()) { + + boolean override = fishingOperationContext.isOverride(); + + if (override) { + + deleteMarineLitterBatches(fishingOperationContext); + + } + + String cruiseStr = cruiseContext.getCruiseLabel(); + String operationStr = fishingOperationContext.getFishingOperationLabel(); + + importContext.increments(t("tutti.service.genericFormat.persist.operation.marineLitters", cruiseStr, operationStr)); + + if (fishingOperationContext.withMarineLitterBatches()) { + + Collection<MarineLitterBatch> marineLitterBatches = fishingOperationContext.getMarineLitterBatches(); + if (log.isInfoEnabled()) { + log.info("Persist " + marineLitterBatches.size() + " marine litter(s) of " + operationStr + " for cruise: " + cruiseStr); + } + persistMarineLitterBatches(marineLitterBatches); + + } + + } + + } + + private void persistMarineLitterBatches(Collection<MarineLitterBatch> batches) { + + for (MarineLitterBatch marineLitterBatch : batches) { + + Integer objectId = marineLitterBatch.getIdAsInt(); + Collection<AttachmentRow> attachmentRows = importContext.popAttachmentRows(ObjectTypeCode.BATCH, objectId); + + // Id was only here to get attachments + marineLitterBatch.setId((String) null); + + MarineLitterBatch createdMarineLitterBatch = persistenceHelper.createMarineLitterBatch(marineLitterBatch); + persistenceHelper.persistAttachments(createdMarineLitterBatch.getIdAsInt(), attachmentRows); + + } + + } + + private void deleteMarineLitterBatches(GenericFormatImportOperationContext fishingOperationContext) { + + FishingOperation fishingOperation = fishingOperationContext.getFishingOperation(); + persistenceHelper.deleteMarineLitterForFishingOperation(fishingOperation.getId()); + + } + + }); } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportOperationAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportOperationAction.java index dde6d82..a90370d 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportOperationAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportOperationAction.java @@ -24,16 +24,19 @@ package fr.ifremer.tutti.service.genericformat.importactions; * #L% */ +import com.google.common.base.Preconditions; import fr.ifremer.adagio.core.dao.referential.ObjectTypeCode; +import fr.ifremer.tutti.persistence.entities.TuttiEntities; import fr.ifremer.tutti.persistence.entities.data.CatchBatch; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; -import fr.ifremer.tutti.service.genericformat.GenericFormatCsvFileResult; +import fr.ifremer.tutti.persistence.model.OperationDataModel; import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; import fr.ifremer.tutti.service.genericformat.GenericFormatImportCruiseContext; -import fr.ifremer.tutti.service.genericformat.GenericformatImportPersitenceHelper; +import fr.ifremer.tutti.service.genericformat.GenericformatImportPersistenceHelper; import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForOperation; import fr.ifremer.tutti.service.genericformat.csv.AttachmentRow; import fr.ifremer.tutti.service.genericformat.csv.OperationRow; +import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.csv.ImportRow; @@ -56,16 +59,16 @@ public class ImportOperationAction extends ImportActionSupport { /** Logger. */ private static final Log log = LogFactory.getLog(ImportOperationAction.class); - private final GenericformatImportPersitenceHelper persitenceHelper; + private final GenericformatImportPersistenceHelper persistenceHelper; - public ImportOperationAction(GenericFormatImportContext importContext, GenericformatImportPersitenceHelper persitenceHelper) { + public ImportOperationAction(GenericFormatImportContext importContext, GenericformatImportPersistenceHelper persistenceHelper) { super(importContext); - this.persitenceHelper = persitenceHelper; + this.persistenceHelper = persistenceHelper; } @Override protected boolean canExecute() { - return importContext.isTechnicalFilesValid() && importContext.getSurveyFileResult().isValid() ; + return importContext.isTechnicalFilesValid() && importContext.getSurveyFileResult().isValid(); } @Override @@ -83,34 +86,162 @@ public class ImportOperationAction extends ImportActionSupport { boolean importSpecies = importContext.getImportRequest().isImportSpecies(); boolean importBenthos = importContext.getImportRequest().isImportBenthos(); - boolean importMarineLitter= importContext.getImportRequest().isImportMarineLitter(); + boolean importMarineLitter = importContext.getImportRequest().isImportMarineLitter(); - GenericFormatCsvFileResult importFileResult = importContext.getOperationFileResult(); try (CsvConsumerForOperation consumer = importContext.loadOperations(true)) { for (ImportRow<OperationRow> row : consumer) { GenericFormatImportCruiseContext cruiseContext = consumer.validateRow(row, importContext); - consumer.prepareRowForPersist(row, importSpecies, importBenthos, importMarineLitter); - OperationRow bean = row.getBean(); + if (cruiseContext != null) { - Collection<AttachmentRow> operationAttachmentRows = importContext.popAttachmentRows(ObjectTypeCode.OPERATION, bean.getFishingOperationObjectId()); - Collection<AttachmentRow> catchAttachmentRows = importContext.popAttachmentRows(ObjectTypeCode.CATCH_BATCH, bean.getCatchObjectId()); + OperationRow bean = row.getBean(); + FishingOperation fishingOperation = bean.getFishingOperation(); + CatchBatch catchBatch = bean.getCatchBatch(); - FishingOperation fishingOperation = bean.getFishingOperation(); - CatchBatch catchBatch = bean.getCatchBatch(); + Collection<AttachmentRow> operationAttachmentRows = importContext.popAttachmentRows(ObjectTypeCode.OPERATION, bean.getFishingOperationObjectId()); + Collection<AttachmentRow> catchAttachmentRows = importContext.popAttachmentRows(ObjectTypeCode.CATCH_BATCH, bean.getCatchObjectId()); - persitenceHelper.persistFishingOperation(cruiseContext, fishingOperation, catchBatch, operationAttachmentRows, catchAttachmentRows); + OperationDataModel selectionFishingOperation = cruiseContext.getSelectedFishingOperation(fishingOperation); + + if (selectionFishingOperation == null) { + + // skip this operation (not selected) + skipOperation(cruiseContext, fishingOperation); + + } else { + + // process this operation + + consumer.prepareRowForPersist(row, importSpecies, importBenthos, importMarineLitter); + + processOperation(cruiseContext, fishingOperation, catchBatch, operationAttachmentRows, catchAttachmentRows); + + } + + } } } catch (IOException e) { throw new ApplicationTechnicalException("Could not close operation.csv file", e); } catch (ImportRuntimeException e) { - importFileResult.addGlobalError(e.getMessage()); + importContext.getOperationFileResult().addGlobalError(e.getMessage()); + + } + + } + + private void skipOperation(GenericFormatImportCruiseContext cruiseContext, FishingOperation fishingOperation) { + + String cruiseStr = cruiseContext.getCruiseLabel(); + String operationStr = importContext.decorate(fishingOperation); + importContext.increments(t("tutti.service.genericFormat.persist.skipNotSelected.operation", cruiseStr, operationStr)); + cruiseContext.addSkippedFishingOperation(fishingOperation); + + } + + private void processOperation(GenericFormatImportCruiseContext cruiseContext, FishingOperation fishingOperation, CatchBatch catchBatch, Collection<AttachmentRow> operationAttachmentRows, Collection<AttachmentRow> catchAttachmentRows) { + + String cruiseStr = cruiseContext.getCruiseLabel(); + String operationStr = importContext.decorate(fishingOperation); + OperationDataModel existingOperationData = cruiseContext.getExistingFishingOperationData(fishingOperation); + + Pair<FishingOperation, CatchBatch> savedFishingOperation; + + if (existingOperationData == null) { + + // New operation + importContext.increments(t("tutti.service.genericFormat.persist.create.operation", cruiseStr, operationStr)); + savedFishingOperation = addFishingOperation(fishingOperation, catchBatch, operationAttachmentRows, catchAttachmentRows); + + } else { + + // Existing operation + fishingOperation.setId(existingOperationData.getId()); + if (importContext.getImportRequest().isUpdateOperations()) { + + // Update operation + importContext.increments(t("tutti.service.genericFormat.persist.update.operation", cruiseStr, operationStr)); + savedFishingOperation = updateFishingOperation(fishingOperation, catchBatch, operationAttachmentRows, catchAttachmentRows); + + } else { + + // Skip update operation + importContext.increments(t("tutti.service.genericFormat.persist.skip.operation", cruiseStr, operationStr)); + savedFishingOperation = Pair.of(fishingOperation, catchBatch); + + } + } + + importContext.addImportedFishingOperation(savedFishingOperation.getLeft(), savedFishingOperation.getRight()); + + } + + private Pair<FishingOperation, CatchBatch> addFishingOperation(FishingOperation fishingOperation, CatchBatch catchBatch, Collection<AttachmentRow> operationAttachmentRows, Collection<AttachmentRow> catchAttachmentRows) { + + String cruiseStr = importContext.decorate(fishingOperation); + + boolean createCruise = TuttiEntities.isNew(fishingOperation); + Preconditions.checkState(createCruise, "In addFishingOperation method, can't update existing operation: " + cruiseStr); + + if (log.isInfoEnabled()) { + log.info("Create operation: " + cruiseStr); + } + + FishingOperation createdFishingOperation = persistenceHelper.createFishingOperation(fishingOperation); + + catchBatch.setFishingOperation(createdFishingOperation); + CatchBatch createdCatchBatch = persistenceHelper.createCatchBatch(catchBatch); + + boolean importAttachments = importContext.getImportRequest().isImportAttachments(); + + if (importAttachments) { + + persistenceHelper.persistAttachments(createdFishingOperation.getIdAsInt(), operationAttachmentRows); + persistenceHelper.persistAttachments(createdCatchBatch.getIdAsInt(), catchAttachmentRows); } + return Pair.of(createdFishingOperation, createdCatchBatch); + + } + + private Pair<FishingOperation, CatchBatch> updateFishingOperation(FishingOperation fishingOperation, CatchBatch catchBatch, Collection<AttachmentRow> operationAttachmentRows, Collection<AttachmentRow> catchAttachmentRows) { + + String operationStr = importContext.decorate(fishingOperation); + + boolean createFishingOperation = TuttiEntities.isNew(fishingOperation); + Preconditions.checkState(!createFishingOperation, "In updateFishingOperation method, can't create new operation: " + operationStr); + Preconditions.checkState(importContext.getImportRequest().isUpdateOperations(), "In updateFishingOperation method, must be allowed to update operation: " + operationStr); + + if (log.isInfoEnabled()) { + log.info("Persist fishing Operation: " + operationStr); + } + + FishingOperation updatedFishingOperation = persistenceHelper.saveFishingOperation(fishingOperation); + + String existingCatchBatchId = persistenceHelper.getCatchBatchId(updatedFishingOperation.getId()); + catchBatch.setId(existingCatchBatchId); + catchBatch.setFishingOperation(updatedFishingOperation); + + CatchBatch updatedCatchBatch = persistenceHelper.saveCatchBatch(catchBatch); + + boolean importAttachments = importContext.getImportRequest().isImportAttachments(); + + if (importAttachments) { + + // delete previous attachments + persistenceHelper.deleteAllAttachments(ObjectTypeCode.OPERATION, fishingOperation.getIdAsInt()); + persistenceHelper.deleteAllAttachments(ObjectTypeCode.CATCH_BATCH, catchBatch.getIdAsInt()); + + persistenceHelper.persistAttachments(updatedFishingOperation.getIdAsInt(), operationAttachmentRows); + persistenceHelper.persistAttachments(updatedCatchBatch.getIdAsInt(), catchAttachmentRows); + + } + + return Pair.of(updatedFishingOperation, updatedCatchBatch); + } } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportParameterAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportParameterAction.java index ed1d397..a7c7975 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportParameterAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportParameterAction.java @@ -24,10 +24,14 @@ package fr.ifremer.tutti.service.genericformat.importactions; * #L% */ +import fr.ifremer.tutti.persistence.ProgressionModel; +import fr.ifremer.tutti.persistence.entities.CaracteristicMap; +import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.service.genericformat.GenericFormatCsvFileResult; import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportCruiseContext; import fr.ifremer.tutti.service.genericformat.GenericFormatImportOperationContext; -import fr.ifremer.tutti.service.genericformat.GenericformatImportPersitenceHelper; +import fr.ifremer.tutti.service.genericformat.GenericformatImportPersistenceHelper; import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForParameter; import fr.ifremer.tutti.service.genericformat.csv.ParameterRow; import org.apache.commons.logging.Log; @@ -51,11 +55,11 @@ public class ImportParameterAction extends ImportActionSupport { /** Logger. */ private static final Log log = LogFactory.getLog(ImportParameterAction.class); - private final GenericformatImportPersitenceHelper persitenceHelper; + private final GenericformatImportPersistenceHelper persistenceHelper; - public ImportParameterAction(GenericFormatImportContext importContext, GenericformatImportPersitenceHelper persitenceHelper) { + public ImportParameterAction(GenericFormatImportContext importContext, GenericformatImportPersistenceHelper persistenceHelper) { super(importContext); - this.persitenceHelper = persitenceHelper; + this.persistenceHelper = persistenceHelper; } @Override @@ -82,7 +86,9 @@ public class ImportParameterAction extends ImportActionSupport { for (ImportRow<ParameterRow> row : consumer) { GenericFormatImportOperationContext operationContext = consumer.validateRow(row, importContext); - consumer.prepareRowForPersist(operationContext, row); + if (operationContext != null) { + consumer.prepareRowForPersist(operationContext, row); + } } } catch (IOException e) { @@ -93,7 +99,67 @@ public class ImportParameterAction extends ImportActionSupport { } - persitenceHelper.persistFishingOperationParameters(); + persistFishingOperationParameters(); + + } + + public void persistFishingOperationParameters() { + + importContext.doActionOnCruiseContexts(new GenericFormatImportContext.CruiseContextAction() { + + @Override + public void onCruise(GenericFormatImportCruiseContext cruiseContext, ProgressionModel progressionModel) { + + boolean updateOperations = importContext.getImportRequest().isUpdateOperations(); + + for (GenericFormatImportOperationContext fishingOperationContext : cruiseContext.getFishingOperationContexts()) { + + String cruiseStr = cruiseContext.getCruiseLabel(); + String operationStr = fishingOperationContext.getFishingOperationLabel(); + + importContext.increments(t("tutti.service.genericFormat.persist.operation.parameters", cruiseStr, operationStr)); + + if (updateOperations) { + + boolean persist = false; + + FishingOperation fishingOperation = fishingOperationContext.getFishingOperation(); + + if (fishingOperationContext.withGearFeatures()) { + + CaracteristicMap gearUseFeatures = fishingOperationContext.getGearUseFeatures(); + fishingOperation.setGearUseFeatures(gearUseFeatures); + if (log.isInfoEnabled()) { + log.info("Persist " + gearUseFeatures.size() + " gear use features of " + operationStr + " for cruise: " + cruiseStr); + } + + persist = true; + + } + + if (fishingOperationContext.withVesselFeatures()) { + + CaracteristicMap vesselUseFeatures = fishingOperationContext.getVesselUseFeatures(); + fishingOperation.setVesselUseFeatures(vesselUseFeatures); + if (log.isInfoEnabled()) { + log.info("Persist " + vesselUseFeatures.size() + " vessel use features of " + operationStr + " for cruise: " + cruiseStr); + } + + persist = true; + + } + + if (persist) { + + persistenceHelper.saveFishingOperation(fishingOperation); + + } + + } + + } + } + }); } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportProtocolAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportProtocolAction.java index f1801bc..2ff1643 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportProtocolAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportProtocolAction.java @@ -27,11 +27,10 @@ package fr.ifremer.tutti.service.genericformat.importactions; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocols; import fr.ifremer.tutti.persistence.entities.referential.Species; -import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.service.genericformat.GenericFormatArchive; import fr.ifremer.tutti.service.genericformat.GenericFormatContextSupport; import fr.ifremer.tutti.service.genericformat.GenericFormatFileResult; -import fr.ifremer.tutti.service.protocol.ProtocolImportExportService; +import fr.ifremer.tutti.service.genericformat.GenericformatImportPersistenceHelper; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.jaxx.application.ApplicationTechnicalException; @@ -52,14 +51,11 @@ public class ImportProtocolAction extends ImportActionSupport { /** Logger. */ private static final Log log = LogFactory.getLog(ImportProtocolAction.class); - private final PersistenceService persistenceService; + private final GenericformatImportPersistenceHelper persistenceHelper; - private final ProtocolImportExportService protocolImportExportService; - - public ImportProtocolAction(GenericFormatContextSupport importContext, PersistenceService persistenceService, ProtocolImportExportService protocolImportExportService) { + public ImportProtocolAction(GenericFormatContextSupport importContext, GenericformatImportPersistenceHelper persistenceHelper) { super(importContext); - this.persistenceService = persistenceService; - this.protocolImportExportService = protocolImportExportService; + this.persistenceHelper = persistenceHelper; } @Override @@ -92,17 +88,17 @@ public class ImportProtocolAction extends ImportActionSupport { try { - TuttiProtocol tuttiProtocol = protocolImportExportService.importProtocol(archive.getProtocolPath().toFile()); + TuttiProtocol tuttiProtocol = persistenceHelper.importProtocol(archive.getProtocolPath().toFile()); Map<String, String> idTranslationMap = importContext.getReferentialTemporarySpeciesFileResult().getIdTranslationMap(); TuttiProtocols.translateReferenceTaxonIds(tuttiProtocol, idTranslationMap); String protocolOriginalName = tuttiProtocol.getName(); - String newName = persistenceService.getFirstAvailableName(protocolOriginalName); + String newName = persistenceHelper.getProtocolFirstAvailableName(protocolOriginalName); tuttiProtocol.setName(newName); - List<Species> referentSpecies = persistenceService.getAllReferentSpecies(); + List<Species> referentSpecies = persistenceHelper.getAllReferentSpecies(); // Check missing species Map<Integer, String> missingSpecies = TuttiProtocols.detectMissingSpecies(tuttiProtocol, referentSpecies); @@ -127,8 +123,7 @@ public class ImportProtocolAction extends ImportActionSupport { importContext.increments(t("tutti.service.genericFormat.import.protocol", protocolOriginalName)); - tuttiProtocol = persistenceService.createProtocol(tuttiProtocol); - persistenceService.setProtocol(tuttiProtocol); + tuttiProtocol = persistenceHelper.createProtocol(tuttiProtocol); importContext.setImportedProtocol(tuttiProtocol); importContext.setProtocolOriginalName(protocolOriginalName); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialGearAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialGearAction.java index 468bb9b..ec108ee 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialGearAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialGearAction.java @@ -27,9 +27,9 @@ package fr.ifremer.tutti.service.genericformat.importactions; import fr.ifremer.tutti.persistence.entities.referential.Gear; import fr.ifremer.tutti.service.genericformat.GenericFormatContextSupport; import fr.ifremer.tutti.service.genericformat.GenericFormatReferentialImportResult; +import fr.ifremer.tutti.service.genericformat.GenericformatImportPersistenceHelper; import fr.ifremer.tutti.service.referential.ReferentialImportRequest; import fr.ifremer.tutti.service.referential.ReferentialImportResult; -import fr.ifremer.tutti.service.referential.ReferentialTemporaryGearService; import fr.ifremer.tutti.service.referential.consumer.CsvConsumerForTemporaryGear; import fr.ifremer.tutti.service.referential.csv.GearRow; import org.apache.commons.logging.Log; @@ -53,11 +53,11 @@ public class ImportReferentialGearAction extends ImportActionSupport { /** Logger. */ private static final Log log = LogFactory.getLog(ImportReferentialGearAction.class); - private final ReferentialTemporaryGearService referentialTemporaryGearService; + private final GenericformatImportPersistenceHelper persistenceHelper; - public ImportReferentialGearAction(GenericFormatContextSupport importContext, ReferentialTemporaryGearService referentialTemporaryGearService) { + public ImportReferentialGearAction(GenericFormatContextSupport importContext, GenericformatImportPersistenceHelper persistenceHelper) { super(importContext); - this.referentialTemporaryGearService = referentialTemporaryGearService; + this.persistenceHelper = persistenceHelper; } @Override @@ -84,7 +84,7 @@ public class ImportReferentialGearAction extends ImportActionSupport { importContext.increments(t("tutti.service.genericFormat.import.temporaryGears")); - ReferentialImportRequest<Gear, Integer> referentialImportRequest = referentialTemporaryGearService.createReferentialImportRequest(); + ReferentialImportRequest<Gear, Integer> referentialImportRequest = persistenceHelper.createGearImportRequest(); GenericFormatReferentialImportResult<Gear, Integer> importFileResult = importContext.getReferentialTemporaryGearFileResult(); try (CsvConsumerForTemporaryGear consumer = importContext.loadTemporaryGears(false)) { @@ -104,7 +104,7 @@ public class ImportReferentialGearAction extends ImportActionSupport { if (importFileResult.isValid()) { - ReferentialImportResult<Gear> referentialImportResult = referentialTemporaryGearService.executeImportRequest(referentialImportRequest); + ReferentialImportResult<Gear> referentialImportResult = persistenceHelper.importGears(referentialImportRequest); importFileResult.flushResult(referentialImportRequest, referentialImportResult); if (log.isInfoEnabled()) { log.info("Temporary gears import result: " + importFileResult.getReport()); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialPersonAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialPersonAction.java index 7b84048..cdde930 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialPersonAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialPersonAction.java @@ -27,6 +27,7 @@ package fr.ifremer.tutti.service.genericformat.importactions; import fr.ifremer.tutti.persistence.entities.referential.Person; import fr.ifremer.tutti.service.genericformat.GenericFormatContextSupport; import fr.ifremer.tutti.service.genericformat.GenericFormatReferentialImportResult; +import fr.ifremer.tutti.service.genericformat.GenericformatImportPersistenceHelper; import fr.ifremer.tutti.service.referential.ReferentialImportRequest; import fr.ifremer.tutti.service.referential.ReferentialImportResult; import fr.ifremer.tutti.service.referential.ReferentialTemporaryPersonService; @@ -53,11 +54,11 @@ public class ImportReferentialPersonAction extends ImportActionSupport { /** Logger. */ private static final Log log = LogFactory.getLog(ImportReferentialPersonAction.class); - private final ReferentialTemporaryPersonService referentialTemporaryPersonService; + private final GenericformatImportPersistenceHelper persistenceHelper; - public ImportReferentialPersonAction(GenericFormatContextSupport importContext, ReferentialTemporaryPersonService referentialTemporaryPersonService) { + public ImportReferentialPersonAction(GenericFormatContextSupport importContext, GenericformatImportPersistenceHelper persistenceHelper) { super(importContext); - this.referentialTemporaryPersonService = referentialTemporaryPersonService; + this.persistenceHelper = persistenceHelper; } @Override @@ -86,7 +87,7 @@ public class ImportReferentialPersonAction extends ImportActionSupport { GenericFormatReferentialImportResult<Person, Integer> importFileResult = importContext.getReferentialTemporaryPersonFileResult(); - ReferentialImportRequest<Person, Integer> referentialImportRequest = referentialTemporaryPersonService.createReferentialImportRequest(); + ReferentialImportRequest<Person, Integer> referentialImportRequest = persistenceHelper.createPersonImportRequest(); try (CsvConsumerForTemporaryPerson consumer = importContext.loadTemporaryPersons(false)) { for (ImportRow<PersonRow> row : consumer) { consumer.checkRowForGenericFormatImport(row, referentialImportRequest); @@ -104,7 +105,7 @@ public class ImportReferentialPersonAction extends ImportActionSupport { if (importFileResult.isValid()) { - ReferentialImportResult<Person> referentialImportResult = referentialTemporaryPersonService.executeImportRequest(referentialImportRequest); + ReferentialImportResult<Person> referentialImportResult = persistenceHelper.importPersons(referentialImportRequest); importFileResult.flushResult(referentialImportRequest, referentialImportResult); if (log.isInfoEnabled()) { log.info("Temporary persons import result: " + importFileResult.getReport()); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialSpeciesAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialSpeciesAction.java index 742ce33..0de96d8 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialSpeciesAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialSpeciesAction.java @@ -27,9 +27,9 @@ package fr.ifremer.tutti.service.genericformat.importactions; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.service.genericformat.GenericFormatContextSupport; import fr.ifremer.tutti.service.genericformat.GenericFormatReferentialImportResult; +import fr.ifremer.tutti.service.genericformat.GenericformatImportPersistenceHelper; import fr.ifremer.tutti.service.referential.ReferentialImportRequest; import fr.ifremer.tutti.service.referential.ReferentialImportResult; -import fr.ifremer.tutti.service.referential.ReferentialTemporarySpeciesService; import fr.ifremer.tutti.service.referential.consumer.CsvConsumerForTemporarySpecies; import fr.ifremer.tutti.service.referential.csv.SpeciesRow; import org.apache.commons.logging.Log; @@ -53,11 +53,11 @@ public class ImportReferentialSpeciesAction extends ImportActionSupport { /** Logger. */ private static final Log log = LogFactory.getLog(ImportReferentialSpeciesAction.class); - private final ReferentialTemporarySpeciesService referentialTemporarySpeciesService; + private final GenericformatImportPersistenceHelper persistenceHelper; - public ImportReferentialSpeciesAction(GenericFormatContextSupport importContext, ReferentialTemporarySpeciesService referentialTemporarySpeciesService) { + public ImportReferentialSpeciesAction(GenericFormatContextSupport importContext, GenericformatImportPersistenceHelper persistenceHelper) { super(importContext); - this.referentialTemporarySpeciesService = referentialTemporarySpeciesService; + this.persistenceHelper = persistenceHelper; } @Override @@ -84,7 +84,7 @@ public class ImportReferentialSpeciesAction extends ImportActionSupport { log.info("Import temporary species."); } - ReferentialImportRequest<Species, Integer> referentialImportRequest = referentialTemporarySpeciesService.createReferentialImportRequest(); + ReferentialImportRequest<Species, Integer> referentialImportRequest = persistenceHelper.createSpeciesImportRequest(); GenericFormatReferentialImportResult<Species, Integer> importFileResult = importContext.getReferentialTemporarySpeciesFileResult(); try (CsvConsumerForTemporarySpecies consumer = importContext.loadTemporarySpecies(false)) { @@ -104,7 +104,7 @@ public class ImportReferentialSpeciesAction extends ImportActionSupport { if (importFileResult.isValid()) { - ReferentialImportResult<Species> referentialImportResult = referentialTemporarySpeciesService.executeImportRequest(referentialImportRequest); + ReferentialImportResult<Species> referentialImportResult = persistenceHelper.importSpecies(referentialImportRequest); importFileResult.flushResult(referentialImportRequest, referentialImportResult); if (log.isInfoEnabled()) { diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialVesselAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialVesselAction.java index e6a1615..a275391 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialVesselAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialVesselAction.java @@ -27,6 +27,7 @@ package fr.ifremer.tutti.service.genericformat.importactions; import fr.ifremer.tutti.persistence.entities.referential.Vessel; import fr.ifremer.tutti.service.genericformat.GenericFormatContextSupport; import fr.ifremer.tutti.service.genericformat.GenericFormatReferentialImportResult; +import fr.ifremer.tutti.service.genericformat.GenericformatImportPersistenceHelper; import fr.ifremer.tutti.service.referential.ReferentialImportRequest; import fr.ifremer.tutti.service.referential.ReferentialImportResult; import fr.ifremer.tutti.service.referential.ReferentialTemporaryVesselService; @@ -53,11 +54,11 @@ public class ImportReferentialVesselAction extends ImportActionSupport { /** Logger. */ private static final Log log = LogFactory.getLog(ImportReferentialVesselAction.class); - private final ReferentialTemporaryVesselService referentialTemporaryVesselService; + private final GenericformatImportPersistenceHelper persistenceHelper; - public ImportReferentialVesselAction(GenericFormatContextSupport importContext, ReferentialTemporaryVesselService referentialTemporaryVesselService) { + public ImportReferentialVesselAction(GenericFormatContextSupport importContext, GenericformatImportPersistenceHelper persistenceHelper) { super(importContext); - this.referentialTemporaryVesselService = referentialTemporaryVesselService; + this.persistenceHelper = persistenceHelper; } @Override @@ -80,7 +81,7 @@ public class ImportReferentialVesselAction extends ImportActionSupport { importContext.increments(t("tutti.service.genericFormat.import.temporaryVessels")); - ReferentialImportRequest<Vessel, String> referentialImportRequest = referentialTemporaryVesselService.createReferentialImportRequest(); + ReferentialImportRequest<Vessel, String> referentialImportRequest = persistenceHelper.createVesselsImportRequest(); GenericFormatReferentialImportResult<Vessel, String> importFileResult = importContext.getReferentialTemporaryVesselFileResult(); try (CsvConsumerForTemporaryVessel consumer = importContext.loadTemporaryVessels(false)) { @@ -100,7 +101,7 @@ public class ImportReferentialVesselAction extends ImportActionSupport { if (importFileResult.isValid()) { - ReferentialImportResult<Vessel> referentialImportResult = referentialTemporaryVesselService.executeImportRequest(referentialImportRequest); + ReferentialImportResult<Vessel> referentialImportResult = persistenceHelper.importVessels(referentialImportRequest); importFileResult.flushResult(referentialImportRequest, referentialImportResult); if (log.isInfoEnabled()) { diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportSurveyAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportSurveyAction.java index 1abd298..ef6f88b 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportSurveyAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportSurveyAction.java @@ -24,13 +24,19 @@ package fr.ifremer.tutti.service.genericformat.importactions; * #L% */ +import com.google.common.base.Preconditions; import fr.ifremer.adagio.core.dao.referential.ObjectTypeCode; +import fr.ifremer.tutti.persistence.entities.TuttiEntities; +import fr.ifremer.tutti.persistence.entities.data.Cruise; +import fr.ifremer.tutti.persistence.entities.data.FishingOperation; +import fr.ifremer.tutti.persistence.model.CruiseDataModel; import fr.ifremer.tutti.service.genericformat.GenericFormatCsvFileResult; import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; -import fr.ifremer.tutti.service.genericformat.GenericformatImportPersitenceHelper; +import fr.ifremer.tutti.service.genericformat.GenericformatImportPersistenceHelper; import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForSurvey; import fr.ifremer.tutti.service.genericformat.csv.AttachmentRow; import fr.ifremer.tutti.service.genericformat.csv.SurveyRow; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.csv.ImportRow; @@ -39,6 +45,7 @@ import org.nuiton.jaxx.application.ApplicationTechnicalException; import java.io.IOException; import java.util.Collection; +import java.util.Set; import static org.nuiton.i18n.I18n.t; @@ -53,11 +60,11 @@ public class ImportSurveyAction extends ImportActionSupport { /** Logger. */ private static final Log log = LogFactory.getLog(ImportSurveyAction.class); - private final GenericformatImportPersitenceHelper persitenceHelper; + private final GenericformatImportPersistenceHelper persistenceHelper; - public ImportSurveyAction(GenericFormatImportContext importContext, GenericformatImportPersitenceHelper persitenceHelper) { + public ImportSurveyAction(GenericFormatImportContext importContext, GenericformatImportPersistenceHelper persistenceHelper) { super(importContext); - this.persitenceHelper = persitenceHelper; + this.persistenceHelper = persistenceHelper; } @Override @@ -83,11 +90,27 @@ public class ImportSurveyAction extends ImportActionSupport { for (ImportRow<SurveyRow> row : consumer) { consumer.validateRow(row, importContext); + consumer.prepareRowForPersist(row); SurveyRow bean = row.getBean(); + Cruise cruise = bean.getCruise(); + Collection<AttachmentRow> attachmentRows = importContext.popAttachmentRows(ObjectTypeCode.SCIENTIFIC_CRUISE, bean.getObjectId()); - persitenceHelper.persistCruise(bean.getCruise(), attachmentRows); + + CruiseDataModel selectionCruiseData = importContext.getImportRequest().getSelectedCruise(cruise); + + if (selectionCruiseData == null) { + + // skip this cruise (not selected) + skipCruise(cruise); + + } else { + + // process this cruise + processCruise(cruise, attachmentRows, selectionCruiseData); + + } } } catch (IOException e) { @@ -100,4 +123,113 @@ public class ImportSurveyAction extends ImportActionSupport { } + protected void skipCruise(Cruise cruise) { + + String cruiseStr = importContext.decorate(cruise); + importContext.increments(t("tutti.service.genericFormat.persist.skipNotSelected.cruise", cruiseStr)); + importContext.addSkippedCruise(cruise); + + } + + protected void processCruise(Cruise cruise, Collection<AttachmentRow> attachmentRows, CruiseDataModel selectionCruiseData) { + + String cruiseStr = importContext.decorate(cruise); + + CruiseDataModel existingCruiseData = importContext.getImportRequest().getExistingCruiseData(cruise); + + Set<FishingOperation> existingFishingOperations; + + Cruise savedCruise; + + if (existingCruiseData == null) { + + // New cruise + importContext.increments(t("tutti.service.genericFormat.persist.create.cruise", cruiseStr)); + savedCruise = addCruise(cruise, attachmentRows); + + existingFishingOperations = null; + + } else { + + // Existing cruise + + if (importContext.getImportRequest().isUpdateCruises()) { + + // Update cruise + importContext.increments(t("tutti.service.genericFormat.persist.update.cruise", cruiseStr)); + savedCruise = updateCruise(cruise, attachmentRows); + + } else { + + // skip update cruise + importContext.increments(t("tutti.service.genericFormat.persist.skip.cruise", cruiseStr)); + savedCruise = cruise; + + } + + existingFishingOperations = persistenceHelper.getFishingOperations(existingCruiseData.getId()); + + } + + importContext.addImportedCruise(savedCruise, selectionCruiseData, existingCruiseData, existingFishingOperations); + + } + + public Cruise addCruise(Cruise cruise, Collection<AttachmentRow> attachmentRows) { + + String cruiseStr = importContext.decorate(cruise); + + boolean createCruise = TuttiEntities.isNew(cruise); + Preconditions.checkState(createCruise, "In addCruise method, can't update existing cruise: " + cruiseStr); + + if (log.isInfoEnabled()) { + log.info("Create cruise: " + cruiseStr); + } + + + Cruise savedCruise = persistenceHelper.createCruise(cruise); + + boolean importAttachments = importContext.getImportRequest().isImportAttachments(); + + if (importAttachments) { + + if (CollectionUtils.isNotEmpty(attachmentRows)) { + persistenceHelper. persistAttachments(savedCruise.getIdAsInt(), attachmentRows); + } + + } + + return savedCruise; + + } + + public Cruise updateCruise(Cruise cruise, Collection<AttachmentRow> attachmentRows) { + + String cruiseStr = importContext.decorate(cruise); + + boolean createCruise = TuttiEntities.isNew(cruise); + Preconditions.checkState(!createCruise, "In updateCruise method, can't create new cruise: " + cruiseStr); + Preconditions.checkState(importContext.getImportRequest().isUpdateCruises(), "In updateCruise method, must be allowed to update cruise: " + cruiseStr); + + if (log.isInfoEnabled()) { + log.info("Update existing cruise: " + cruiseStr); + } + + Cruise savedCruise = persistenceHelper.saveCruise(cruise); + + boolean importAttachments = importContext.getImportRequest().isImportAttachments(); + + if (importAttachments) { + + // delete previous attachments + persistenceHelper.deleteAllAttachments(ObjectTypeCode.SCIENTIFIC_CRUISE, cruise.getIdAsInt()); + + persistenceHelper.persistAttachments(savedCruise.getIdAsInt(), attachmentRows); + + } + + return savedCruise; + + } + } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImpotSampleCategoryAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImpotSampleCategoryAction.java index 8b805a5..0b3a14d 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImpotSampleCategoryAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImpotSampleCategoryAction.java @@ -26,9 +26,9 @@ package fr.ifremer.tutti.service.genericformat.importactions; import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModelEntry; -import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.service.genericformat.GenericFormatContextSupport; import fr.ifremer.tutti.service.genericformat.GenericFormatCsvFileResult; +import fr.ifremer.tutti.service.genericformat.GenericformatImportPersistenceHelper; import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForSampleCategory; import fr.ifremer.tutti.service.genericformat.csv.SampleCategoryRow; import org.apache.commons.logging.Log; @@ -56,11 +56,11 @@ public class ImpotSampleCategoryAction extends ImportActionSupport { /** Logger. */ private static final Log log = LogFactory.getLog(ImpotSampleCategoryAction.class); - private final PersistenceService persistenceService; + private final GenericformatImportPersistenceHelper persistenceHelper; - public ImpotSampleCategoryAction(GenericFormatContextSupport importContext, PersistenceService persistenceService) { + public ImpotSampleCategoryAction(GenericFormatContextSupport importContext, GenericformatImportPersistenceHelper persistenceHelper) { super(importContext); - this.persistenceService = persistenceService; + this.persistenceHelper = persistenceHelper; } @Override @@ -116,7 +116,7 @@ public class ImpotSampleCategoryAction extends ImportActionSupport { if (log.isInfoEnabled()) { log.info("Will use sample category model: " + sampleCategoryModel); } - persistenceService.setSampleCategoryModel(sampleCategoryModel); + persistenceHelper.setSampleCategoryModel(sampleCategoryModel); importContext.setImportedSampleCategoryModel(sampleCategoryModel); } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateAccidentalCatchAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateAccidentalCatchAction.java index 56b7627..4417916 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateAccidentalCatchAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateAccidentalCatchAction.java @@ -74,7 +74,7 @@ public class ValidateAccidentalCatchAction extends ImportActionSupport { GenericFormatImportOperationContext operationContext = consumer.validateRow(row, importContext); - if (row.isValid()) { + if (operationContext != null) { consumer.prepareRowForPersist(operationContext, row); } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateCatchAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateCatchAction.java index 94037ee..2fda8f4 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateCatchAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateCatchAction.java @@ -74,7 +74,7 @@ public class ValidateCatchAction extends ImportActionSupport { GenericFormatImportOperationContext operationContext = consumer.validateRow(row, importContext); - if (row.isValid()) { + if (operationContext != null) { consumer.prepareRowForPersist(operationContext, row); } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateGearCaracteristicAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateGearCaracteristicAction.java index 0b60aad..dabd0cc 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateGearCaracteristicAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateGearCaracteristicAction.java @@ -76,9 +76,7 @@ public class ValidateGearCaracteristicAction extends ImportActionSupport { if (cruiseContext != null) { - if (row.isValid()) { - consumer.prepareRowForPersist(cruiseContext, row); - } + consumer.prepareRowForPersist(cruiseContext, row); } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateIndividualObservationAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateIndividualObservationAction.java index a17bd42..6d35e1c 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateIndividualObservationAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateIndividualObservationAction.java @@ -75,7 +75,7 @@ public class ValidateIndividualObservationAction extends ImportActionSupport { GenericFormatImportOperationContext operationContext = consumer.validateRow(row, importContext); - if (row.isValid()) { + if (operationContext != null) { consumer.prepareRowForPersist(operationContext, row); } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateMarineLitterAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateMarineLitterAction.java index 43f929a..0dd8656 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateMarineLitterAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateMarineLitterAction.java @@ -74,7 +74,7 @@ public class ValidateMarineLitterAction extends ImportActionSupport { GenericFormatImportOperationContext operationContext = consumer.validateRow(row, importContext); - if (row.isValid()) { + if (operationContext != null) { consumer.prepareRowForPersist(operationContext, row); } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateOperationAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateOperationAction.java index 1962899..ab1718f 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateOperationAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateOperationAction.java @@ -80,7 +80,7 @@ public class ValidateOperationAction extends ImportActionSupport { GenericFormatImportCruiseContext cruiseContext = consumer.validateRow(row, importContext); - if (cruiseContext != null && row.isValid()) { + if (cruiseContext != null) { consumer.prepareRowForPersist(row, importSpecies, importBenthos, importMarineLitter); OperationRow bean = row.getBean(); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateParameterAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateParameterAction.java index db7bc11..8bcb592 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateParameterAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateParameterAction.java @@ -74,7 +74,7 @@ public class ValidateParameterAction extends ImportActionSupport { GenericFormatImportOperationContext operationContext = consumer.validateRow(row, importContext); - if (row.isValid()) { + if (operationContext != null) { consumer.prepareRowForPersist(operationContext, row); } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateSurveyAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateSurveyAction.java index a0355c7..bf78825 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateSurveyAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateSurveyAction.java @@ -24,13 +24,12 @@ package fr.ifremer.tutti.service.genericformat.importactions; * #L% */ -import com.google.common.collect.Sets; import fr.ifremer.tutti.persistence.entities.data.Cruise; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.persistence.model.CruiseDataModel; -import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.service.genericformat.GenericFormatContextSupport; import fr.ifremer.tutti.service.genericformat.GenericFormatCsvFileResult; +import fr.ifremer.tutti.service.genericformat.GenericformatImportPersistenceHelper; import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForSurvey; import fr.ifremer.tutti.service.genericformat.csv.SurveyRow; import org.apache.commons.logging.Log; @@ -55,11 +54,13 @@ public class ValidateSurveyAction extends ImportActionSupport { /** Logger. */ private static final Log log = LogFactory.getLog(ValidateSurveyAction.class); - private final PersistenceService persistenceService; + private static int cruiseId = -1; - public ValidateSurveyAction(GenericFormatContextSupport importContext, PersistenceService persistenceService) { + private final GenericformatImportPersistenceHelper persistenceHelper; + + public ValidateSurveyAction(GenericFormatContextSupport importContext, GenericformatImportPersistenceHelper persistenceHelper) { super(importContext); - this.persistenceService = persistenceService; + this.persistenceHelper = persistenceHelper; } @Override @@ -93,13 +94,16 @@ public class ValidateSurveyAction extends ImportActionSupport { existingFishingOperations = null; + // add a temporary id to simulate persist behaviour + cruise.setId(getNextCruiseId()); + } else { - existingFishingOperations = Sets.newHashSet(persistenceService.getAllFishingOperation(existingCruiseData.getId())); + existingFishingOperations = persistenceHelper.getFishingOperations(existingCruiseData.getId()); } - importContext.addImportedCruise(cruise, existingCruiseData, existingFishingOperations); + importContext.addImportedCruise(cruise, null, existingCruiseData, existingFishingOperations); } @@ -115,4 +119,7 @@ public class ValidateSurveyAction extends ImportActionSupport { } + private static int getNextCruiseId() { + return cruiseId--; + } } diff --git a/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties b/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties index 9689ff3..382ef25 100644 --- a/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties +++ b/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties @@ -213,6 +213,8 @@ tutti.service.genericFormat.invalid.cruise= tutti.service.genericFormat.invalid.fishingOperation= tutti.service.genericFormat.load.attachments= tutti.service.genericFormat.load.protocol= +tutti.service.genericFormat.persist.create.cruise= +tutti.service.genericFormat.persist.create.operation= tutti.service.genericFormat.persist.cruise= tutti.service.genericFormat.persist.gearCaracteristics= tutti.service.genericFormat.persist.operation= @@ -222,6 +224,12 @@ tutti.service.genericFormat.persist.operation.individualObservations= tutti.service.genericFormat.persist.operation.marineLitters= tutti.service.genericFormat.persist.operation.parameters= tutti.service.genericFormat.persist.operation.speciesBatches= +tutti.service.genericFormat.persist.skip.cruise= +tutti.service.genericFormat.persist.skip.operation= +tutti.service.genericFormat.persist.skipNotSelected.cruise= +tutti.service.genericFormat.persist.skipNotSelected.operation= +tutti.service.genericFormat.persist.update.cruise= +tutti.service.genericFormat.persist.update.operation= tutti.service.genericFormat.remove.existingCruise.fishingOperation= tutti.service.genericFormat.reuse.protocol= tutti.service.genericFormat.skip.import.accidentalCatches= diff --git a/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties b/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties index 1dcd543..e9b9ee0 100644 --- a/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties +++ b/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties @@ -177,15 +177,22 @@ tutti.service.genericFormat.invalid.cruise=Erreur d'élévation de poids sur les tutti.service.genericFormat.invalid.fishingOperation=L'élévation des poids ne peut pas être réalisée sur le trait %s, pour la raison suivante \:<ul>%s</ul> tutti.service.genericFormat.load.attachments=Chargement des pièces jointes tutti.service.genericFormat.load.protocol=Import du protocol +tutti.service.genericFormat.persist.create.cruise=Création de la campagne <strong>%s</strong> +tutti.service.genericFormat.persist.create.operation=Création du trait <strong>%s</strong> - <strong>%s</strong> tutti.service.genericFormat.persist.cruise=Sauvegarde de la campagne <strong>%s</strong> tutti.service.genericFormat.persist.gearCaracteristics=Sauvegarde des caractéristiques des engins de la campagne <strong>%s</strong> -tutti.service.genericFormat.persist.operation=Sauvegarde du trait <strong>%s</strong> - <strong>%s</strong> tutti.service.genericFormat.persist.operation.accidentalBatches=Sauvegarde des captures accidentelles du trait <strong>%s</strong> - <strong>%s</strong> tutti.service.genericFormat.persist.operation.benthosBatches=Sauvegarde des lots benthos du trait <strong>%s</strong> - <strong>%s</strong> tutti.service.genericFormat.persist.operation.individualObservations=Sauvegarde des observations individuelles du trait <strong>%s</strong> - <strong>%s</strong> tutti.service.genericFormat.persist.operation.marineLitters=Sauvegarde des macro-déchets du trait <strong>%s</strong> - <strong>%s</strong> tutti.service.genericFormat.persist.operation.parameters=Sauvegarde des caractéristiques du trait <strong>%s</strong> - <strong>%s</strong> tutti.service.genericFormat.persist.operation.speciesBatches=Sauvegarde des lots espèces du trait <strong>%s</strong> - <strong>%s</strong> +tutti.service.genericFormat.persist.skip.cruise=Ne pas mettre à jour la campagne <strong>%s</strong> +tutti.service.genericFormat.persist.skip.operation=Ne pas mettre à jour le trait <strong>%s</strong> - <strong>%s</strong> +tutti.service.genericFormat.persist.skipNotSelected.cruise=Ne pas mettre à jour la campagne non sélectionnée <strong>%s</strong> +tutti.service.genericFormat.persist.skipNotSelected.operation=Ne pas mettre à jour le trait non sélectionné <strong>%s</strong> - <strong>%s</strong> +tutti.service.genericFormat.persist.update.cruise=Mise à jour de la campagne <strong>%s</strong> +tutti.service.genericFormat.persist.update.operation=Mise à jour du trait <strong>%s</strong> - <strong>%s</strong> tutti.service.genericFormat.remove.existingCruise.fishingOperation=Suppression du trait <strong>%s</strong> - <strong>%s</strong> tutti.service.genericFormat.reuse.protocol=Réutilisation du protocol existant %s tutti.service.genericFormat.skip.import.accidentalCatches= -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
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 12408e1d65846a1ad084a6e12b54bb9450bb1f0b Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Apr 1 14:42:02 2015 +0200 fix count lines of import files --- .../genericformat/GenericFormatArchive.java | 40 +++++++++++++--------- .../genericformat/GenericFormatArchiveTest.java | 38 ++++++++++++++++++++ .../GenericFormatImportServiceTest.java | 12 ++++++- .../GenericFormatImportServiceValidTest.java | 13 ++++++- .../genericFormat/test_countLines/oneEmptyLine.txt | 0 .../genericFormat/test_countLines/oneLine.txt | 1 + .../genericFormat/test_countLines/twoLines.txt | 2 ++ .../test_countLines/twoLines_secondEmpty.txt | 1 + .../genericFormat/test_countLines/zeroLines.txt | 0 9 files changed, 88 insertions(+), 19 deletions(-) diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatArchive.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatArchive.java index d02da4d..ede41b5 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatArchive.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatArchive.java @@ -31,7 +31,6 @@ import org.nuiton.jaxx.application.ApplicationIOUtil; import org.nuiton.jaxx.application.ApplicationTechnicalException; import org.nuiton.util.ZipUtil; -import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.LineNumberReader; @@ -377,7 +376,7 @@ public class GenericFormatArchive implements Serializable { throw new ApplicationTechnicalException("Could not explode zipfile " + archiveFile, e); } File[] files = workingDirectory.listFiles(); - if (files==null || files.length!=1) { + if (files == null || files.length != 1) { throw new ApplicationTechnicalException("Archive should contains onyl one directory"); } return files[0]; @@ -450,22 +449,10 @@ public class GenericFormatArchive implements Serializable { } else { - //FIXME The LineNumberReader can in some case be wrong, improve it - try (BufferedReader bufferedReader = Files.newBufferedReader(path, Charset.forName("UTF-8"))) { + int nbLines = countLines(path); + result = nbLines - 1; + countLines.put(archiveFilePath, result); - try (LineNumberReader lineNumberReader = new LineNumberReader(bufferedReader)) { - lineNumberReader.skip(Long.MAX_VALUE); - result = lineNumberReader.getLineNumber() - 1; - if (result == -1) { - result = 0; - } - countLines.put(archiveFilePath, result); - - } - - } catch (IOException e) { - throw new ApplicationTechnicalException("Could not read " + path.toFile().getName() + " file from archive " + archiveFile, e); - } } } @@ -474,4 +461,23 @@ public class GenericFormatArchive implements Serializable { } + protected static int countLines(Path path) { + + try (LineNumberReader reader = new LineNumberReader(Files.newBufferedReader(path, Charset.forName("UTF-8")))) { + String lastLine = null; + String line; + while ((line = reader.readLine()) != null) { + lastLine = line; + } + int cnt = reader.getLineNumber(); + if (lastLine != null && lastLine.trim().isEmpty()) { + cnt--; + } + return cnt; + } catch (IOException e) { + throw new ApplicationTechnicalException("Could not read file " + path.toFile().getName(), e); + } + + } + } diff --git a/tutti-service/src/test/java/fr/ifremer/tutti/service/genericformat/GenericFormatArchiveTest.java b/tutti-service/src/test/java/fr/ifremer/tutti/service/genericformat/GenericFormatArchiveTest.java new file mode 100644 index 0000000..0e25f43 --- /dev/null +++ b/tutti-service/src/test/java/fr/ifremer/tutti/service/genericformat/GenericFormatArchiveTest.java @@ -0,0 +1,38 @@ +package fr.ifremer.tutti.service.genericformat; + +import org.junit.Assert; +import org.junit.Test; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Paths; + +/** + * Created on 4/1/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14.3 + */ +public class GenericFormatArchiveTest { + + @Test + public void testCountLines() throws IOException { + + assertCountLines("src/test/resources/genericFormat/test_countLines/zeroLines.txt", 0); + assertCountLines("src/test/resources/genericFormat/test_countLines/oneEmptyLine.txt", 0); + assertCountLines("src/test/resources/genericFormat/test_countLines/oneLine.txt", 1); + assertCountLines("src/test/resources/genericFormat/test_countLines/twoLines_secondEmpty.txt", 1); + assertCountLines("src/test/resources/genericFormat/test_countLines/twoLines.txt", 2); + + } + + protected void assertCountLines(String filepath, int expected) throws IOException { + + File file = Paths.get(new File("").getAbsolutePath(), filepath).toFile(); + Assert.assertTrue("File " + file + " does not exists", file.exists()); + int actual = GenericFormatArchive.countLines(file.toPath()); + Assert.assertEquals("Sould have " + expected + " lines in file " + file, expected, actual); + + } + +} diff --git a/tutti-service/src/test/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportServiceTest.java b/tutti-service/src/test/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportServiceTest.java index 9be2a0e..e494f3d 100644 --- a/tutti-service/src/test/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportServiceTest.java +++ b/tutti-service/src/test/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportServiceTest.java @@ -28,6 +28,7 @@ import fr.ifremer.tutti.persistence.ProgressionModel; import fr.ifremer.tutti.persistence.entities.CaracteristicMap; import fr.ifremer.tutti.persistence.entities.data.Cruise; import fr.ifremer.tutti.persistence.entities.referential.GearWithOriginalRankOrder; +import fr.ifremer.tutti.persistence.model.ProgramDataModel; import fr.ifremer.tutti.service.ServiceDbResource; import fr.ifremer.tutti.service.referential.ReferentialTemporaryGearService; import fr.ifremer.tutti.service.referential.ReferentialTemporaryPersonService; @@ -211,8 +212,17 @@ public class GenericFormatImportServiceTest extends GenericFormatImportServiceTe GenericFormatImportConfiguration importConfiguration = new GenericFormatImportConfiguration(); importConfiguration.setImportFile(archiveFile); - importConfiguration.setProgramId(programId); importConfiguration.setOverrideData(overrideData); + importConfiguration.setImportSpecies(true); + importConfiguration.setImportBenthos(true); + importConfiguration.setImportMarineLitter(true); + importConfiguration.setImportAccidentalCatch(true); + importConfiguration.setImportIndividualObservation(true); + importConfiguration.setImportAttachments(true); + importConfiguration.setUpdateCruises(true); + importConfiguration.setUpdateOperations(true); + ProgramDataModel dataModel = persistenceService.loadProgram(programId, true); + importConfiguration.setDataToExport(dataModel); File reportFile = getServiceDbResource().getConfig().newTempFile(archivName, ".pdf"); importConfiguration.setReportFile(reportFile); diff --git a/tutti-service/src/test/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportServiceValidTest.java b/tutti-service/src/test/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportServiceValidTest.java index b074ae6..50eb7d0 100644 --- a/tutti-service/src/test/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportServiceValidTest.java +++ b/tutti-service/src/test/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportServiceValidTest.java @@ -26,6 +26,7 @@ package fr.ifremer.tutti.service.genericformat; import com.google.common.base.Joiner; import fr.ifremer.tutti.persistence.ProgressionModel; +import fr.ifremer.tutti.persistence.model.ProgramDataModel; import fr.ifremer.tutti.service.ServiceDbResource; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -1038,7 +1039,17 @@ public class GenericFormatImportServiceValidTest extends GenericFormatImportServ GenericFormatImportConfiguration importConfiguration = new GenericFormatImportConfiguration(); importConfiguration.setImportFile(archiveFile); - importConfiguration.setProgramId(programId); + + ProgramDataModel dataModel = persistenceService.loadProgram(programId, true); + importConfiguration.setDataToExport(dataModel); + importConfiguration.setImportSpecies(true); + importConfiguration.setImportBenthos(true); + importConfiguration.setImportMarineLitter(true); + importConfiguration.setImportAccidentalCatch(true); + importConfiguration.setImportIndividualObservation(true); + importConfiguration.setImportAttachments(true); + importConfiguration.setUpdateCruises(true); + importConfiguration.setUpdateOperations(true); File reportFile = getServiceDbResource().getConfig().newTempFile(archivName, ".pdf"); importConfiguration.setReportFile(reportFile); diff --git a/tutti-service/src/test/resources/genericFormat/test_countLines/oneEmptyLine.txt b/tutti-service/src/test/resources/genericFormat/test_countLines/oneEmptyLine.txt new file mode 100644 index 0000000..e69de29 diff --git a/tutti-service/src/test/resources/genericFormat/test_countLines/oneLine.txt b/tutti-service/src/test/resources/genericFormat/test_countLines/oneLine.txt new file mode 100644 index 0000000..8c7e5a6 --- /dev/null +++ b/tutti-service/src/test/resources/genericFormat/test_countLines/oneLine.txt @@ -0,0 +1 @@ +A \ No newline at end of file diff --git a/tutti-service/src/test/resources/genericFormat/test_countLines/twoLines.txt b/tutti-service/src/test/resources/genericFormat/test_countLines/twoLines.txt new file mode 100644 index 0000000..2fe4ab0 --- /dev/null +++ b/tutti-service/src/test/resources/genericFormat/test_countLines/twoLines.txt @@ -0,0 +1,2 @@ +A +B \ No newline at end of file diff --git a/tutti-service/src/test/resources/genericFormat/test_countLines/twoLines_secondEmpty.txt b/tutti-service/src/test/resources/genericFormat/test_countLines/twoLines_secondEmpty.txt new file mode 100644 index 0000000..f70f10e --- /dev/null +++ b/tutti-service/src/test/resources/genericFormat/test_countLines/twoLines_secondEmpty.txt @@ -0,0 +1 @@ +A diff --git a/tutti-service/src/test/resources/genericFormat/test_countLines/zeroLines.txt b/tutti-service/src/test/resources/genericFormat/test_countLines/zeroLines.txt new file mode 100644 index 0000000..e69de29 -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
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 c2d4a8af53efb4e093be6b7729d6af7d9a9d06e4 Merge: 2feb60c 12408e1 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Apr 1 14:42:14 2015 +0200 fixes #6822: [IMPORT GENERIQUE] Définir les différentes statégies d'import possible Merge branch 'feature/6822' into develop .../tutti/persistence/entities/data/Cruises.java | 31 ++ .../entities/data/FishingOperations.java | 19 + .../tutti/persistence/model/CruiseDataModel.java | 14 + .../tutti/persistence/model/DataModelSupport.java | 19 + .../tutti/persistence/model/ProgramDataModel.java | 14 + .../genericformat/GenericFormatArchive.java | 40 +- .../genericformat/GenericFormatContextSupport.java | 108 ++-- .../GenericFormatImportConfiguration.java | 139 +++++- .../GenericFormatImportCruiseContext.java | 101 +++- .../GenericFormatImportCruiseResult.java | 2 +- .../GenericFormatImportOperationContext.java | 13 + .../GenericFormatImportOperationResult.java | 9 +- .../genericformat/GenericFormatImportRequest.java | 93 +++- .../genericformat/GenericFormatImportService.java | 69 +-- .../GenericFormatImportValidationHelper.java | 74 ++- .../genericformat/GenericFormatResultSupport.java | 11 + .../GenericFormatValidateFileContext.java | 64 ++- .../GenericFormatValidateFileResult.java | 1 + .../GenericformatImportPersistenceHelper.java | 277 +++++++++++ .../GenericformatImportPersitenceHelper.java | 550 --------------------- .../consumer/CsvConsumerForAccidentalCatch.java | 44 +- .../consumer/CsvConsumerForCatch.java | 26 +- .../consumer/CsvConsumerForGearCaracteristic.java | 55 +-- .../CsvConsumerForIndividualObservation.java | 44 +- .../consumer/CsvConsumerForMarineLitter.java | 14 +- .../consumer/CsvConsumerForOperation.java | 81 +-- .../consumer/CsvConsumerForParameter.java | 57 +-- .../consumer/CsvConsumerForSurvey.java | 12 +- .../service/genericformat/csv/OperationModel.java | 18 +- .../importactions/DoCheckWeightAction.java | 2 +- .../importactions/DoCleanWeightAction.java | 1 + .../importactions/ImportAccidentalCatchAction.java | 95 +++- .../importactions/ImportCatchAction.java | 223 ++++++++- .../ImportGearCaracteristicAction.java | 57 ++- .../ImportIndividualObservationAction.java | 95 +++- .../importactions/ImportMarineLitterAction.java | 95 +++- .../importactions/ImportOperationAction.java | 171 ++++++- .../importactions/ImportParameterAction.java | 87 +++- .../importactions/ImportProtocolAction.java | 46 +- .../importactions/ImportReferentialGearAction.java | 32 +- .../ImportReferentialPersonAction.java | 32 +- .../ImportReferentialSpeciesAction.java | 32 +- .../ImportReferentialVesselAction.java | 31 +- .../importactions/ImportSurveyAction.java | 167 ++++++- .../importactions/ImpotSampleCategoryAction.java | 10 +- .../importactions/LoadAttachmentsAction.java | 9 +- .../ValidateAccidentalCatchAction.java | 2 +- .../importactions/ValidateCatchAction.java | 2 +- .../ValidateGearCaracteristicAction.java | 6 +- .../ValidateIndividualObservationAction.java | 2 +- .../importactions/ValidateMarineLitterAction.java | 2 +- .../importactions/ValidateOperationAction.java | 11 +- .../importactions/ValidateParameterAction.java | 2 +- .../importactions/ValidateSurveyAction.java | 35 +- .../resources/i18n/tutti-service_en_GB.properties | 17 + .../resources/i18n/tutti-service_fr_FR.properties | 33 +- .../genericformat/GenericFormatArchiveTest.java | 38 ++ .../GenericFormatImportServiceTest.java | 12 +- .../GenericFormatImportServiceValidTest.java | 13 +- .../genericFormat/test_countLines/oneEmptyLine.txt | 0 .../genericFormat/test_countLines/oneLine.txt | 1 + .../genericFormat/test_countLines/twoLines.txt | 2 + .../test_countLines/twoLines_secondEmpty.txt | 1 + .../genericFormat/test_countLines/zeroLines.txt | 0 .../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 | 161 +++++- ...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 | 22 +- .../tree/DataSelectTreeCellEditor.java | 65 --- .../genericformat/tree/DataSelectTreeModel.java | 175 +++++++ .../tree/DataSelectTreeNodeSupport.java | 9 + ....java => ExportDataSelectTreeCellRenderer.java} | 6 +- ....java => ImportDataSelectTreeCellRenderer.java} | 99 ++-- .../resources/i18n/tutti-ui-swing_en_GB.properties | 23 + .../resources/i18n/tutti-ui-swing_fr_FR.properties | 24 +- 91 files changed, 3137 insertions(+), 1381 deletions(-) -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
participants (1)
-
codelutin.com scm