1 package fr.ifremer.dali.ui.swing.content.manage.program.strategies;
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.dto.configuration.programStrategy.ProgramDTO;
27 import fr.ifremer.dali.dto.configuration.programStrategy.StrategyDTO;
28 import fr.ifremer.dali.ui.swing.action.AbstractCheckModelAction;
29 import fr.ifremer.dali.ui.swing.action.AbstractDaliSaveAction;
30 import fr.ifremer.dali.ui.swing.content.manage.program.ProgramsUI;
31 import fr.ifremer.dali.ui.swing.content.manage.program.ProgramsUIModel;
32 import fr.ifremer.dali.ui.swing.content.manage.program.SaveAction;
33 import fr.ifremer.dali.ui.swing.content.manage.program.menu.SearchAction;
34 import fr.ifremer.dali.ui.swing.content.manage.program.strategies.duplicate.SelectProgramUI;
35 import fr.ifremer.quadrige3.ui.core.dto.QuadrigeBeans;
36 import org.apache.commons.logging.Log;
37 import org.apache.commons.logging.LogFactory;
38 import org.nuiton.jaxx.application.swing.AbstractApplicationUIHandler;
39
40 import static org.nuiton.i18n.I18n.t;
41
42
43
44
45 public class DuplicateStrategyAction extends AbstractCheckModelAction<StrategiesTableUIModel, StrategiesTableUI, StrategiesTableUIHandler> {
46
47 private static final Log LOG = LogFactory.getLog(DuplicateStrategyAction.class);
48
49 private StrategyDTO strategyToDuplicate;
50 private StrategyDTO duplicateStrategy;
51 private ProgramDTO sourceProgram;
52 private ProgramDTO targetProgram;
53 private boolean localToNational;
54
55
56
57
58
59
60 public DuplicateStrategyAction(final StrategiesTableUIHandler handler) {
61 super(handler, false);
62 }
63
64 private ProgramsUI getProgramsUI() {
65 return getUI().getParentContainer(ProgramsUI.class);
66 }
67
68
69
70
71 @Override
72 protected Class<? extends AbstractDaliSaveAction> getSaveActionClass() {
73 return SaveAction.class;
74 }
75
76
77
78
79 @Override
80 protected boolean isModelModify() {
81 final ProgramsUIModel model = getModel().getParentModel();
82 return model != null && model.isModify();
83 }
84
85
86
87
88 @Override
89 protected void setModelModify(boolean modelModify) {
90 final ProgramsUIModel model = getModel().getParentModel();
91 if (model != null) {
92 model.setModify(modelModify);
93 }
94 }
95
96
97
98
99 @Override
100 protected boolean isModelValid() {
101 final ProgramsUIModel model = getModel().getParentModel();
102 return model == null || model.isValid();
103 }
104
105
106
107
108 @Override
109 protected AbstractApplicationUIHandler<?, ?> getSaveHandler() {
110 return getProgramsUI().getHandler();
111 }
112
113
114
115
116 @Override
117 public boolean prepareAction() throws Exception {
118 if (!super.prepareAction()) {
119 return false;
120 }
121
122 if (getModel().getParentModel().getProgramsUIModel().getSingleSelectedRow() == null || getModel().getSelectedRows().size() != 1) {
123 return false;
124 }
125
126 duplicateStrategy = null;
127 strategyToDuplicate = getModel().getSelectedRows().iterator().next().toBean();
128 sourceProgram = getModel().getParentModel().getProgramsUIModel().getSingleSelectedRow().toBean();
129
130
131 SelectProgramUI selectProgramUI = new SelectProgramUI(getContext());
132 selectProgramUI.getModel().setSourceProgram(sourceProgram);
133 selectProgramUI.getModel().setSourceStrategy(strategyToDuplicate);
134 getHandler().openDialog(selectProgramUI);
135 targetProgram = selectProgramUI.getModel().getTargetProgram();
136 if (targetProgram == null) {
137
138 return false;
139 }
140
141
142 localToNational = QuadrigeBeans.isLocalStatus(sourceProgram.getStatus()) && !QuadrigeBeans.isLocalStatus(targetProgram.getStatus());
143 if (localToNational) {
144 getContext().getDialogHelper().showWarningDialog(t("dali.action.duplicate.strategy.warning.localReferential", decorate(strategyToDuplicate)));
145 }
146
147 return true;
148 }
149
150
151
152
153 @Override
154 public void doAction() throws Exception {
155
156
157 if (!sourceProgram.equals(targetProgram)) {
158
159
160 getProgramsUI().getMenuUI().getModel().setLoading(true);
161 getModel().setLoading(true);
162
163 getProgramsUI().getMenuUI().getProgramCodeCombo().setSelectedItem(targetProgram);
164 getProgramsUI().getMenuUI().getModel().setLoading(false);
165
166 getActionEngine().runFullInternalAction(
167 getActionFactory().createLogicAction(getProgramsUI().getMenuUI().getHandler(), SearchAction.class)
168 );
169
170
171 while (getModel().isLoading()) {
172
173 try {
174 Thread.sleep(100);
175 } catch (InterruptedException ignored) {
176 }
177 }
178 }
179
180
181 duplicateStrategy = getContext().getProgramStrategyService().duplicateStrategy(strategyToDuplicate, targetProgram, localToNational);
182
183 }
184
185
186
187
188 @Override
189 public void postSuccessAction() {
190 super.postSuccessAction();
191
192 if (duplicateStrategy == null) {
193 LOG.error("the strategy to duplicate is null, duplication aborted !");
194 return;
195 }
196
197
198 StrategiesTableRowModel row = getModel().addNewRow(duplicateStrategy);
199
200 getModel().setModify(true);
201
202
203 getHandler().setFocusOnCell(row);
204 }
205 }