1 package fr.ifremer.tutti.service.genericformat;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 import fr.ifremer.tutti.persistence.ProgressionModel;
28 import fr.ifremer.tutti.persistence.entities.data.CatchBatch;
29 import fr.ifremer.tutti.persistence.entities.data.Cruise;
30 import fr.ifremer.tutti.persistence.entities.data.Cruises;
31 import fr.ifremer.tutti.persistence.entities.data.FishingOperation;
32 import fr.ifremer.tutti.persistence.entities.data.FishingOperations;
33 import fr.ifremer.tutti.persistence.model.CruiseDataModel;
34 import fr.ifremer.tutti.persistence.model.OperationDataModel;
35 import fr.ifremer.tutti.persistence.model.ProgramDataModel;
36 import fr.ifremer.tutti.service.PersistenceService;
37 import fr.ifremer.tutti.service.genericformat.importactions.RestoreAfterValidateAction;
38 import org.nuiton.decorator.Decorator;
39
40 import java.util.LinkedHashSet;
41 import java.util.Set;
42
43
44
45
46
47
48
49 public class GenericFormatValidateFileContext extends GenericFormatContextSupport {
50
51 private final RestoreAfterValidateAction closeAction;
52
53 public GenericFormatValidateFileContext(GenericFormatImportRequest importRequest,
54 ProgressionModel progressionModel,
55 PersistenceService persistenceService,
56 Decorator<Cruise> cruiseDecorator,
57 Decorator<FishingOperation> fishingOperationDecorator) {
58
59 super(importRequest, progressionModel, persistenceService, cruiseDecorator, fishingOperationDecorator);
60 this.closeAction = new RestoreAfterValidateAction(this, persistenceService);
61
62 }
63
64 @Override
65 protected void onClose() {
66
67 closeAction.execute();
68
69 }
70
71 public ProgramDataModel toDataModel() {
72
73 final Set<CruiseDataModel> importedCruises = new LinkedHashSet<>();
74
75 doActionOnSortedCruiseContexts((cruiseContext, progressionModel) -> {
76
77 Cruise cruise = cruiseContext.getCruise();
78
79 CruiseDataModel existingCruiseData = cruiseContext.getExistingCruiseData();
80
81 Set<OperationDataModel> operations = new LinkedHashSet<>();
82
83 for (GenericFormatImportOperationContext fishingOperationContext : cruiseContext.orderedFishingOperationContexts()) {
84 FishingOperation fishingOperation = fishingOperationContext.getFishingOperation();
85
86
87 String naturalId = FishingOperations.getNaturalId(fishingOperation);
88 fishingOperation.setId(naturalId);
89 OperationDataModel operation = new OperationDataModel(fishingOperation);
90 fishingOperation.setId((String) null);
91
92 OperationDataModel existingFishingOperationData = fishingOperationContext.getExistingFishingOperationData();
93 if (existingFishingOperationData != null) {
94 operation.setOptionalId(existingFishingOperationData.getId());
95 }
96
97 operations.add(operation);
98 }
99
100
101 String naturalId = Cruises.getNaturalId(cruise);
102 cruise.setId(naturalId);
103 CruiseDataModel cruiseModel = new CruiseDataModel(cruise, operations);
104 cruise.setId((String) null);
105
106 if (existingCruiseData != null) {
107 cruiseModel.setOptionalId(existingCruiseData.getId());
108 }
109
110 importedCruises.add(cruiseModel);
111
112 });
113 return new ProgramDataModel(getImportRequest().getProgram(), importedCruises);
114
115 }
116
117 public void addImportedFishingOperation(FishingOperation fishingOperation, CatchBatch catchBatch) {
118
119
120 fishingOperation.setId(getNextFishingOperationId());
121
122
123 catchBatch.setId(getNextCatchBatchId());
124
125 super.addImportedFishingOperation(fishingOperation, catchBatch);
126
127 }
128
129 private int fishinOperationId = -1;
130
131 private int catchBatchId = -1;
132
133 private int getNextFishingOperationId() {
134 return fishinOperationId--;
135 }
136
137 private int getNextCatchBatchId() {
138 return catchBatchId--;
139 }
140
141 }