1 package fr.ifremer.quadrige3.ui.swing.synchro.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.quadrige3.core.security.AuthenticationInfo;
27 import fr.ifremer.quadrige3.core.service.ClientServiceLocator;
28 import fr.ifremer.quadrige3.synchro.service.client.SynchroRestClientService;
29 import fr.ifremer.quadrige3.synchro.vo.SynchroImportContextVO;
30 import fr.ifremer.quadrige3.synchro.vo.SynchroProgressionStatus;
31 import fr.ifremer.quadrige3.synchro.vo.SynchroProgressionVO;
32 import fr.ifremer.quadrige3.ui.swing.synchro.SynchroUIHandler;
33 import org.apache.commons.logging.Log;
34 import org.apache.commons.logging.LogFactory;
35 import org.nuiton.i18n.I18n;
36
37 import java.beans.PropertyChangeListener;
38
39 import static org.nuiton.i18n.I18n.t;
40
41
42
43
44
45
46 public class ImportSynchroStartAction extends AbstractSynchroAction {
47
48 private static final Log log = LogFactory.getLog(ImportSynchroStartAction.class);
49
50 private boolean silentIfNoData = false;
51
52
53
54
55
56
57 public ImportSynchroStartAction(SynchroUIHandler handler) {
58 super(handler);
59 }
60
61 public void setSilentIfNoData(boolean silentIfNoData) {
62 this.silentIfNoData = silentIfNoData;
63 }
64
65
66
67
68 @Override
69 public boolean initAction() {
70 super.initAction();
71
72 getModel().getProgressionModel().clear();
73 getModel().getProgressionModel().setTotal(100);
74 getHandler().showProgressCard();
75
76 return true;
77 }
78
79
80
81
82 @Override
83 public void doAction() throws Exception {
84
85 if (log.isDebugEnabled()) {
86 log.debug(String.format("try to connect to synchronization site : %s", getBaseUri()));
87 }
88
89 boolean silentIfErrorOrNoData = getModel().getImportJobId() != null;
90
91
92 getModel().setStatus(SynchroProgressionStatus.RUNNING);
93
94 SynchroRestClientService service = ClientServiceLocator.instance().getSynchroRestClientService();
95
96
97 AuthenticationInfo authenticationInfo = !getContext().isAuthenticated() || getContext().isAuthenticatedAsLocalUser()
98 ? null
99 : getContext().getAuthenticationInfo();
100
101
102 PropertyChangeListener listener = evt -> {
103 if (SynchroImportContextVO.PROPERTY_JOB_ID.equals(evt.getPropertyName())) {
104
105 getModel().saveImportContext();
106 }
107 };
108 getModel().getSynchroImportContext().addPropertyChangeListener(listener);
109
110
111 SynchroProgressionVO serverImportResult = service.startImport(
112 authenticationInfo,
113 getModel().getSynchroImportContext(),
114 getModel().getProgressionModel());
115
116 SynchroProgressionStatus serverImportStatus = SynchroProgressionStatus.valueOf(serverImportResult.getStatus());
117
118
119 getModel().getSynchroImportContext().removePropertyChangeListener(listener);
120
121
122 if ((silentIfNoData && serverImportStatus == SynchroProgressionStatus.NO_DATA)
123 ||
124 (silentIfErrorOrNoData
125 && (serverImportStatus == SynchroProgressionStatus.FAILED
126 || serverImportStatus == SynchroProgressionStatus.NO_DATA))) {
127
128
129 getModel().resetImportContext();
130 getModel().saveImportContext();
131 }
132
133
134 else if (serverImportStatus == SynchroProgressionStatus.FAILED) {
135 throw new SynchroException(I18n.t("quadrige3.error.synchro.status", getModel().getProgressionModel().getMessage()));
136 }
137
138
139 else if (serverImportStatus == SynchroProgressionStatus.NO_DATA) {
140 throw new SynchroException(I18n.t("quadrige3.error.synchro.import.noData"));
141 }
142
143
144 else if (getModel().getStatus() == SynchroProgressionStatus.RUNNING) {
145 getModel().setStatus(serverImportStatus);
146 getModel().setImportJobId(serverImportResult.getJobId());
147 getModel().setTransferFilename(serverImportResult.getFileName());
148 }
149 }
150
151
152
153
154 @Override
155 public void doneAction() {
156
157 getModel().saveImportContext();
158
159
160 if (isWait()) {
161 return;
162 }
163
164 SynchroProgressionStatus serverImportStatus = getModel().getStatus();
165
166 if (serverImportStatus == SynchroProgressionStatus.SUCCESS) {
167
168 ImportSynchroDownloadAction action
169 = getContext().getActionFactory().createNonBlockingUIAction(handler, ImportSynchroDownloadAction.class);
170 action.execute();
171 }
172
173
174
175 else if (serverImportStatus == SynchroProgressionStatus.NOT_STARTED) {
176
177 getUI().getHandler().report(t("quadrige3.synchro.report.idle"), false);
178 }
179 }
180
181 @Override
182 public void disposeAction() {
183 super.disposeAction();
184 silentIfNoData = false;
185 }
186 }