1 package fr.ifremer.tutti.ui.swing.content.validation.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 com.google.common.collect.Lists;
26 import fr.ifremer.tutti.persistence.entities.data.Cruise;
27 import fr.ifremer.tutti.service.catches.ValidateCruiseOperationsService;
28 import fr.ifremer.tutti.ui.swing.util.actions.LongActionSupport;
29 import fr.ifremer.tutti.ui.swing.content.cruise.EditCruiseUI;
30 import fr.ifremer.tutti.ui.swing.content.cruise.EditCruiseUIModel;
31 import fr.ifremer.tutti.ui.swing.content.operation.EditFishingOperationUIModel;
32 import fr.ifremer.tutti.ui.swing.content.validation.ValidateCruiseUI;
33 import fr.ifremer.tutti.ui.swing.content.validation.ValidateCruiseUIHandler;
34 import fr.ifremer.tutti.ui.swing.content.validation.ValidateCruiseUIModel;
35 import org.nuiton.validator.NuitonValidatorResult;
36
37 import java.beans.PropertyChangeEvent;
38 import java.beans.PropertyChangeListener;
39 import java.util.List;
40
41 import static org.nuiton.i18n.I18n.t;
42
43
44
45
46
47
48
49 public class EditCruiseInValidationUIAction extends LongActionSupport<ValidateCruiseUIModel, ValidateCruiseUI, ValidateCruiseUIHandler> {
50
51
52 private final ValidateCruiseOperationsService validationService;
53
54
55
56
57
58
59
60
61 protected Cruise cruise;
62
63 protected final PropertyChangeListener modelListener = new PropertyChangeListener() {
64
65 protected final List<String> propertiesToIgnore = Lists.newArrayList(
66 EditFishingOperationUIModel.PROPERTY_VALID,
67 EditFishingOperationUIModel.PROPERTY_PERSISTED
68 );
69
70 @Override
71 public void propertyChange(PropertyChangeEvent evt) {
72
73 EditCruiseUIModel model = (EditCruiseUIModel) evt.getSource();
74
75 if (EditCruiseUIModel.PROPERTY_MODIFY.equals(evt.getPropertyName())) {
76
77 if (!model.isModify()) {
78
79
80 Cruise cruise = getDataContext().reloadCruise();
81 getModel().setCruise(cruise);
82 }
83
84 } else if (!propertiesToIgnore.contains(evt.getPropertyName())) {
85
86 Cruise cruise = model.toEntity();
87 NuitonValidatorResult validationResult = validationService.validateCruiseCruise(cruise);
88
89 ValidateCruiseUIModel uiModel = getModel();
90 uiModel.setCruiseValidatorResult(validationResult);
91
92 getHandler().updateCurrentCruiseNode(validationResult);
93 }
94
95 }
96 };
97
98 public EditCruiseInValidationUIAction(ValidateCruiseUIHandler handler) {
99 super(handler, true);
100 setActionDescription(t("tutti.validateCruise.action.editCruise.tip"));
101 validationService = getContext().getValidateCruiseOperationsService();
102 }
103
104 public void setCruise(Cruise cruise) {
105 this.cruise = cruise;
106 }
107
108 @Override
109 public boolean prepareAction() throws Exception {
110 removeListener();
111
112 return super.prepareAction();
113 }
114
115 public void removeListener() {
116 EditCruiseUI operationPanel = getUI().getCruisePanel();
117 operationPanel.getModel().removePropertyChangeListener(modelListener);
118 }
119
120 @Override
121 public void doAction() throws Exception {
122 getUI().getCruisePanel().getHandler().reloadCruise(cruise);
123 }
124
125 @Override
126 public void postSuccessAction() {
127 super.postSuccessAction();
128
129 EditCruiseUI cruisePanel = getUI().getCruisePanel();
130 cruisePanel.getModel().addPropertyChangeListener(modelListener);
131 }
132
133 @Override
134 public void releaseAction() {
135 super.releaseAction();
136 cruise = null;
137 }
138 }