1 package fr.ifremer.dali.ui.swing.action;
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 import fr.ifremer.dali.ui.swing.util.DaliUI;
27 import fr.ifremer.quadrige3.ui.swing.AbstractUIHandler;
28 import fr.ifremer.quadrige3.ui.swing.model.AbstractBeanUIModel;
29 import org.nuiton.jaxx.application.swing.AbstractApplicationUIHandler;
30
31 import javax.swing.JOptionPane;
32
33 import java.util.ArrayList;
34 import java.util.List;
35
36 import static org.nuiton.i18n.I18n.t;
37
38
39
40
41
42
43
44
45 public abstract class AbstractCheckModelAction<M extends AbstractBeanUIModel, UI extends DaliUI<M, ?>, H extends AbstractUIHandler<M, UI>>
46 extends AbstractDaliAction<M, UI, H> {
47
48
49
50
51
52
53
54 protected AbstractCheckModelAction(final H handler, final boolean hideBody) {
55 super(handler, hideBody);
56 }
57
58
59
60
61
62
63 protected abstract Class<? extends AbstractDaliSaveAction> getSaveActionClass();
64
65
66
67
68
69
70 protected abstract boolean isModelModify();
71
72
73
74
75
76
77 protected abstract void setModelModify(boolean modelModify);
78
79
80
81
82
83
84 protected abstract boolean isModelValid();
85
86
87
88
89
90
91 protected abstract AbstractApplicationUIHandler<?, ?> getSaveHandler();
92
93
94 @Override
95 public boolean prepareAction() throws Exception {
96 boolean canContinue = super.prepareAction();
97
98 if (canContinue && isModelModify()) {
99
100
101 final int result = askSaveBeforeLeaving(t("dali.action.common.askSaveBeforeLeaving.message"));
102 switch (result) {
103 case JOptionPane.YES_OPTION:
104
105 if (isModelValid()) {
106
107
108 AbstractDaliSaveAction saveAction = getActionFactory().createLogicAction(getSaveHandler(), getSaveActionClass());
109 if (saveAction.prepareAction()) {
110 if (this instanceof AbstractCheckBeforeChangeScreenAction) {
111 saveAction.setFromChangeScreenAction(true);
112 }
113 saveAction.setFromCheckModelAction(true);
114 getActionEngine().runInternalAction(saveAction);
115
116
117 canContinue = saveAction.isAllowChangeScreen();
118 } else {
119 canContinue = false;
120 }
121 } else {
122
123
124 displayErrorMessage(t("dali.action.save.errors.title"), t("dali.action.save.errors.remove"));
125
126
127 canContinue = false;
128 }
129 break;
130
131 case JOptionPane.NO_OPTION:
132
133 canContinue = true;
134 break;
135
136 default:
137
138 canContinue = false;
139 break;
140 }
141 }
142 return canContinue;
143 }
144
145
146 protected List<AbstractBeanUIModel> getOtherModelsToModify() {
147 return new ArrayList<>();
148 }
149
150
151 @Override
152 public void postSuccessAction() {
153 super.postSuccessAction();
154
155
156 getOtherModelsToModify().forEach(model -> model.setModify(false));
157
158
159
160 setModelModify(false);
161 }
162 }