1 package fr.ifremer.tutti.ui.swing.content.operation.fishing.actions;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 import fr.ifremer.tutti.persistence.entities.CaracteristicMap;
26 import fr.ifremer.tutti.persistence.entities.TuttiEntities;
27 import fr.ifremer.tutti.persistence.entities.data.CatchBatch;
28 import fr.ifremer.tutti.persistence.entities.data.CatchBatchs;
29 import fr.ifremer.tutti.persistence.entities.data.FishingOperation;
30 import fr.ifremer.tutti.service.PersistenceService;
31 import fr.ifremer.tutti.service.ValidationService;
32 import fr.ifremer.tutti.ui.swing.content.operation.EditFishingOperationUI;
33 import fr.ifremer.tutti.ui.swing.content.operation.EditFishingOperationUIHandler;
34 import fr.ifremer.tutti.ui.swing.content.operation.EditFishingOperationUIModel;
35 import fr.ifremer.tutti.ui.swing.content.operation.FishingOperationsUIModel;
36 import fr.ifremer.tutti.ui.swing.content.operation.fishing.AbstractCaracteristicTabUIModel;
37 import fr.ifremer.tutti.ui.swing.content.operation.fishing.GearUseFeatureTabUIModel;
38 import fr.ifremer.tutti.ui.swing.content.operation.fishing.VesselUseFeatureTabUIModel;
39 import fr.ifremer.tutti.ui.swing.util.actions.LongActionSupport;
40 import org.apache.commons.logging.Log;
41 import org.apache.commons.logging.LogFactory;
42
43
44
45
46
47
48
49 public class SaveFishingOperationAction extends LongActionSupport<EditFishingOperationUIModel, EditFishingOperationUI, EditFishingOperationUIHandler> {
50
51
52 private static final Log log = LogFactory.getLog(SaveFishingOperationAction.class);
53
54
55
56
57
58
59 protected boolean updateUI;
60
61 protected boolean moveTab;
62
63 public SaveFishingOperationAction(EditFishingOperationUIHandler handler) {
64 super(handler, true);
65 }
66
67 public void setUpdateUI(boolean updateUI) {
68 this.updateUI = updateUI;
69 }
70
71 @Override
72 public void releaseAction() {
73 updateUI = true;
74 super.releaseAction();
75 }
76
77 @Override
78 public void doAction() throws Exception {
79
80
81 EditFishingOperationUIModel beanToSave = handler.getFishingOperationMonitor().getBean();
82
83 moveTab = true;
84
85
86 boolean mustSave = beanToSave.getFishingOperation() != null && beanToSave.isValid();
87
88 if (mustSave) {
89
90
91 beanToSave.convertGearShootingCoordinatesToDD();
92
93
94 FishingOperation toSave = beanToSave.toEntity();
95
96 AbstractCaracteristicTabUIModel[] subModels = handler.getSubModels();
97 for (AbstractCaracteristicTabUIModel subModel : subModels) {
98 Class<?> modelClass = subModel.getClass();
99 CaracteristicMap caracteristics = subModel.getCaracteristicMap();
100 if (subModel.isModify()) {
101
102 moveTab = false;
103 }
104 if (modelClass.isAssignableFrom(VesselUseFeatureTabUIModel.class)) {
105 toSave.setVesselUseFeatures(caracteristics);
106 } else if (modelClass.isAssignableFrom(GearUseFeatureTabUIModel.class)) {
107 toSave.setGearUseFeatures(caracteristics);
108 }
109 subModel.setModify(false);
110 }
111
112 sendMessage("[ Trait - Caractéristiques générales ] Sauvegarde des modifications de " + decorate(toSave) + ".");
113
114 if (log.isInfoEnabled()) {
115 log.info("FishingOperation " + toSave.getId() + " was modified, will save it.");
116 }
117
118 saveFishingOperation(toSave);
119
120 }
121
122 }
123
124 @Override
125 public void postSuccessAction() {
126 super.postSuccessAction();
127 handler.getFishingOperationMonitor().clearModified();
128 getModel().setModify(false);
129 if (moveTab && ValidationService.VALIDATION_CONTEXT_EDIT.equals(getContext().getValidationContext())) {
130 handler.getParentUi().getTabPane().setSelectedIndex(1);
131 handler.getParentUi().getCatchesTabContent().getTabPane().setSelectedIndex(1);
132 }
133 }
134
135 protected void saveFishingOperation(FishingOperation toSave) {
136
137 boolean create = TuttiEntities.isNew(toSave);
138
139 if (create) {
140
141 createFishingOperation(toSave);
142
143 } else {
144
145 FishingOperationsUIModel model = getHandler().getParentUi().getModel();
146 model.setEditionAdjusting(true);
147
148 try {
149
150 persistFishingOperation(toSave);
151
152 } finally {
153
154 model.setEditionAdjusting(false);
155
156 }
157
158 }
159
160 }
161
162 private void createFishingOperation(FishingOperation toSave) {
163
164 FishingOperationsUIModel model = getHandler().getParentUi().getModel();
165 PersistenceService service = getContext().getPersistenceService();
166
167
168 FishingOperation savedFishingOperation = service.createFishingOperation(toSave);
169
170
171 CatchBatch catchBatch = CatchBatchs.newCatchBatch();
172 catchBatch.setFishingOperation(savedFishingOperation);
173 service.createCatchBatch(catchBatch);
174
175
176 model.addFishingOperation(savedFishingOperation);
177
178
179 model.setSelectedFishingOperation(savedFishingOperation);
180
181 }
182
183 private void persistFishingOperation(FishingOperation toSave) {
184
185
186 PersistenceService service = getContext().getPersistenceService();
187
188 FishingOperationsUIModel model = getHandler().getParentUi().getModel();
189
190
191 FishingOperation savedFishingOperation = service.saveFishingOperation(toSave);
192
193 model.setSelectedFishingOperation(null);
194
195
196 model.updateFishingOperation(savedFishingOperation);
197
198 model.setSelectedFishingOperation(savedFishingOperation);
199
200 getDataContext().reloadFishingOperation();
201
202 }
203
204 }