gvsig-projects-pool / org.gvsig.online / trunk / org.gvsig.online / org.gvsig.online.swing / org.gvsig.online.swing.impl / src / main / java / org / gvsig / online / swing / impl / initworkspace / OnlineJInitWorkingcopyImpl.java @ 9515
History | View | Annotate | Download (30.7 KB)
1 |
/**
|
---|---|
2 |
* gvSIG. Desktop Geographic Information System.
|
3 |
*
|
4 |
* Copyright (c) 2007-2020 gvSIG Association
|
5 |
*
|
6 |
* This program is free software; you can redistribute it and/or
|
7 |
* modify it under the terms of the GNU General Public License
|
8 |
* as published by the Free Software Foundation; either version 2
|
9 |
* of the License, or (at your option) any later version.
|
10 |
*
|
11 |
* This program is distributed in the hope that it will be useful,
|
12 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14 |
* GNU General Public License for more details.
|
15 |
*
|
16 |
* You should have received a copy of the GNU General Public License
|
17 |
* along with this program; if not, write to the Free Software
|
18 |
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
19 |
* MA 02110-1301, USA.
|
20 |
*
|
21 |
* For any additional information, do not hesitate to contact us
|
22 |
* at info AT gvsig.com, or visit our website www.gvsig.com.
|
23 |
*/
|
24 |
package org.gvsig.online.swing.impl.initworkspace; |
25 |
|
26 |
import java.awt.event.ActionEvent; |
27 |
import java.awt.event.ActionListener; |
28 |
import java.awt.event.FocusEvent; |
29 |
import java.awt.event.FocusListener; |
30 |
import java.io.File; |
31 |
import java.io.IOException; |
32 |
import java.net.URL; |
33 |
import java.util.ArrayList; |
34 |
import java.util.List; |
35 |
import javax.swing.DefaultComboBoxModel; |
36 |
import javax.swing.ImageIcon; |
37 |
import javax.swing.JComponent; |
38 |
import javax.swing.JOptionPane; |
39 |
import javax.swing.SwingUtilities; |
40 |
import javax.swing.event.ChangeEvent; |
41 |
import javax.swing.event.ChangeListener; |
42 |
import javax.swing.event.TableModelEvent; |
43 |
import javax.swing.event.TableModelListener; |
44 |
import org.apache.commons.collections4.CollectionUtils; |
45 |
import org.apache.commons.lang3.StringUtils; |
46 |
import org.gvsig.fmap.dal.store.h2.H2SpatialUtils; |
47 |
import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters; |
48 |
import org.gvsig.fmap.dal.store.jdbc2.JDBCServerExplorer; |
49 |
import org.gvsig.fmap.dal.swing.DALSwingLocator; |
50 |
import org.gvsig.fmap.dal.swing.DataSwingManager; |
51 |
import org.gvsig.fmap.geom.primitive.Envelope; |
52 |
import org.gvsig.fmap.mapcontrol.MapControl; |
53 |
import org.gvsig.online.lib.api.OnlineLayer; |
54 |
import org.gvsig.online.lib.api.OnlineLocator; |
55 |
import org.gvsig.online.lib.api.OnlineManager; |
56 |
import static org.gvsig.online.lib.api.OnlineManager.AUTH_MODE_ONLINE; |
57 |
import static org.gvsig.online.lib.api.OnlineManager.ERR_NO_ERROR; |
58 |
import static org.gvsig.online.lib.api.OnlineManager.ERR_PROJECT_REQUIRED; |
59 |
import static org.gvsig.online.lib.api.OnlineManager.ERR_WORKINGAREA_REQUIRED; |
60 |
import org.gvsig.online.lib.api.OnlineProject; |
61 |
import org.gvsig.online.lib.api.OnlineSite; |
62 |
import org.gvsig.online.lib.api.OnlineUserIdentificationRequester; |
63 |
import org.gvsig.online.lib.api.OnlineUserIdentificationRequester.OnlineUserIdentificationRequesterFactory; |
64 |
import org.gvsig.online.lib.api.workingcopy.OnlineWorkingcopy; |
65 |
import org.gvsig.online.lib.api.workingcopy.OnlineWorkingcopyDescriptor; |
66 |
import org.gvsig.online.lib.api.workingcopy.WorkingArea; |
67 |
import org.gvsig.online.swing.api.OnlineJInitWorkingcopy; |
68 |
import org.gvsig.online.swing.api.OnlineSwingLocator; |
69 |
import org.gvsig.online.swing.api.OnlineSwingServices; |
70 |
import org.gvsig.online.swing.impl.OnlineSwingCommons; |
71 |
import static org.gvsig.online.swing.impl.OnlineSwingCommons.notInSwingThreadInvokeLater; |
72 |
import org.gvsig.online.swing.impl.workingarea.WorkingAreaPickerControllerImpl; |
73 |
import org.gvsig.tools.ToolsLocator; |
74 |
import org.gvsig.tools.dataTypes.CoercionException; |
75 |
import org.gvsig.tools.dataTypes.DataTypes; |
76 |
import org.gvsig.tools.dataTypes.DataTypesManager; |
77 |
import org.gvsig.tools.dispose.DisposeUtils; |
78 |
import org.gvsig.tools.i18n.I18nManager; |
79 |
import org.gvsig.tools.swing.api.Component; |
80 |
import org.gvsig.tools.swing.api.ToolsSwingLocator; |
81 |
import org.gvsig.tools.swing.api.ToolsSwingManager; |
82 |
import org.gvsig.tools.swing.api.ToolsSwingUtils; |
83 |
import org.gvsig.tools.swing.api.bookmarkshistory.TextFieldWithHistoryAndBookmarkController; |
84 |
import org.gvsig.tools.swing.api.pickercontroller.FilePickerController; |
85 |
import org.gvsig.tools.swing.api.pickercontroller.PickerController; |
86 |
import org.gvsig.tools.swing.api.task.TaskStatusController; |
87 |
import org.gvsig.tools.swing.api.task.TaskStatusSwingManager; |
88 |
import org.gvsig.tools.swing.api.threadsafedialogs.ThreadSafeDialogsManager; |
89 |
import org.gvsig.tools.swing.api.windowmanager.Dialog; |
90 |
import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2; |
91 |
import org.gvsig.tools.task.SimpleTaskStatus; |
92 |
import org.gvsig.tools.task.UserCancelTaskException; |
93 |
import org.gvsig.tools.util.LabeledValue; |
94 |
import org.gvsig.tools.util.LabeledValueImpl; |
95 |
import org.slf4j.LoggerFactory; |
96 |
|
97 |
/**
|
98 |
*
|
99 |
* @author gvSIG Team
|
100 |
*/
|
101 |
@SuppressWarnings("UseSpecificCatch") |
102 |
public class OnlineJInitWorkingcopyImpl extends OnlineJInitWorkingcopyView |
103 |
implements Component, OnlineJInitWorkingcopy { |
104 |
|
105 |
private static final org.slf4j.Logger LOGGER = LoggerFactory.getLogger(OnlineJInitWorkingcopyImpl.class); |
106 |
|
107 |
private Dialog dialog; |
108 |
|
109 |
private OnlineSite site;
|
110 |
private JDBCServerExplorer workspaceServer;
|
111 |
|
112 |
private FilePickerController workspaceFilePicker;
|
113 |
private PickerController<JDBCServerExplorerParameters> workspaceServerPicker;
|
114 |
private TextFieldWithHistoryAndBookmarkController siteURLController;
|
115 |
private WorkingAreaPickerControllerImpl workingAreaPicker;
|
116 |
private TaskStatusController taskStatusController;
|
117 |
private OnlineUserIdentificationRequester.OnlineUserIdentificationRequesterConfig authenticationRequesterConfig;
|
118 |
|
119 |
|
120 |
public OnlineJInitWorkingcopyImpl() {
|
121 |
translate(); |
122 |
|
123 |
initComponents(); |
124 |
|
125 |
} |
126 |
|
127 |
private void initComponents() { |
128 |
ToolsSwingManager toolsSwingManager = ToolsSwingLocator.getToolsSwingManager(); |
129 |
TaskStatusSwingManager taskStatusManager = ToolsSwingLocator.getTaskStatusSwingManager(); |
130 |
OnlineSwingServices onlineservices = OnlineSwingLocator.getOnlineSwingManager().getDefaultServices(); |
131 |
OnlineManager onlineManager = OnlineLocator.getOnlineManager(); |
132 |
|
133 |
this.taskStatusController = taskStatusManager.createTaskStatusController(
|
134 |
null,
|
135 |
this.lblStatusTitle,
|
136 |
this.lblStatusMessages,
|
137 |
this.pbStatus,
|
138 |
this.btnStatusCancel,
|
139 |
null
|
140 |
); |
141 |
this.taskStatusController.setShowCancelButton(false); |
142 |
this.taskStatusController.setShowRemoveTaskButton(false); |
143 |
// this.taskStatusController.bind(ToolsLocator.getTaskStatusManager());
|
144 |
SwingUtilities.invokeLater(() -> {this.setVisibleStatus(false); }); |
145 |
|
146 |
this.workspaceFilePicker = toolsSwingManager.createFilePickerController(
|
147 |
txtWorkspaceFile, |
148 |
btnWorkspaceFile |
149 |
); |
150 |
this.workspaceFilePicker.addChangeListener((ChangeEvent e) -> { |
151 |
if (StringUtils.isBlank(this.txtWorkspaceName.getText())) { |
152 |
File file = this.workspaceFilePicker.get(); |
153 |
if(file != null){ |
154 |
this.txtWorkspaceName.setText(H2SpatialUtils.removeH2FileNameExtension(file.getName()));
|
155 |
} |
156 |
} |
157 |
doUpdateComponents(); |
158 |
}); |
159 |
|
160 |
this.txtWorkspaceFile.addFocusListener(new FocusListener() { |
161 |
@Override
|
162 |
public void focusGained(FocusEvent e) { |
163 |
//DO NOTHING
|
164 |
} |
165 |
|
166 |
@Override
|
167 |
public void focusLost(FocusEvent e) { |
168 |
doUpdateComponents(); |
169 |
} |
170 |
}); |
171 |
|
172 |
this.txtWorkspaceName.addActionListener((ActionEvent e) -> { |
173 |
doUpdateComponents(); |
174 |
}); |
175 |
|
176 |
this.txtWorkspaceName.addFocusListener(new FocusListener() { |
177 |
@Override
|
178 |
public void focusGained(FocusEvent e) { |
179 |
//DO NOTHING
|
180 |
} |
181 |
|
182 |
@Override
|
183 |
public void focusLost(FocusEvent e) { |
184 |
doUpdateComponents(); |
185 |
} |
186 |
}); |
187 |
|
188 |
this.siteURLController = toolsSwingManager.createTextFieldWithHistoryAndBookmarkController(
|
189 |
OnlineSwingCommons.BOOKMARKSANDHISTORY_SITE_URL, |
190 |
txtSiteURL, |
191 |
btnSiteURLRefresh, |
192 |
btnSiteURLHistory, |
193 |
btnSiteURLBookmarks |
194 |
); |
195 |
this.siteURLController.setEnabled(true); |
196 |
this.siteURLController.addActionListener((ActionEvent e) -> { |
197 |
doChangeSiteURL(); |
198 |
}); |
199 |
|
200 |
OnlineUserIdentificationRequesterFactory defaultAuthenticationFactory = null;
|
201 |
DefaultComboBoxModel<LabeledValue<OnlineUserIdentificationRequesterFactory>> userIdentificationRequestersModel = new DefaultComboBoxModel<>(); |
202 |
for (OnlineUserIdentificationRequesterFactory factory : onlineManager.getUserIdentificationRequesters()) {
|
203 |
userIdentificationRequestersModel.addElement( |
204 |
new LabeledValueImpl<OnlineUserIdentificationRequesterFactory>(
|
205 |
factory.getName(), factory |
206 |
) |
207 |
); |
208 |
if( defaultAuthenticationFactory == null || StringUtils.equalsIgnoreCase(factory.getName(), AUTH_MODE_ONLINE)) { |
209 |
defaultAuthenticationFactory = factory; |
210 |
} |
211 |
} |
212 |
this.authenticationRequesterConfig = null; |
213 |
this.cboAuthentication.setModel(userIdentificationRequestersModel);
|
214 |
this.cboAuthentication.setSelectedIndex(-1); |
215 |
|
216 |
this.cboAuthentication.addActionListener((ActionEvent e) -> { |
217 |
doChangeAuthentication(); |
218 |
}); |
219 |
this.btnAuthentication.addActionListener((ActionEvent e) -> { |
220 |
doAuthenticationRequesterConfig(); |
221 |
}); |
222 |
this.btnAuthenticationTest.addActionListener((ActionEvent e) -> { |
223 |
doAuthenticationTest(); |
224 |
}); |
225 |
|
226 |
this.cboProjects.addActionListener((ActionEvent e) -> { |
227 |
SwingUtilities.invokeLater(() -> {doChangeProject();});
|
228 |
}); |
229 |
|
230 |
this.workingAreaPicker = new WorkingAreaPickerControllerImpl( |
231 |
() -> {return getSite();},
|
232 |
txtWorkingAreaLabel, |
233 |
txtWorkingArea, |
234 |
btnWorkingAreaFromView, |
235 |
btnWorkingAreaDialog, |
236 |
btnWorkingAreaHistory, |
237 |
btnWorkingAreaBookmarks, |
238 |
() -> { |
239 |
LabeledValue<MapControl> n = onlineservices.getActiveMapControl(); |
240 |
return (n == null) ? null : n.getValue(); |
241 |
}, |
242 |
() -> { |
243 |
List<OnlineLayer> selectedLayers = getLayersModel().getSelectedLayers();
|
244 |
if (selectedLayers.isEmpty()) {
|
245 |
return null; |
246 |
} |
247 |
return selectedLayers;
|
248 |
} |
249 |
); |
250 |
this.workingAreaPicker.addChangeListener((ChangeEvent e) -> { |
251 |
doUpdateComponents(); |
252 |
}); |
253 |
|
254 |
SwingUtilities.invokeLater(() -> { clearMessage(); });
|
255 |
ToolsSwingUtils.ensureRowsCols(this, 15, 40, 25, 100); |
256 |
|
257 |
} |
258 |
|
259 |
@Override
|
260 |
public void setDialog(Dialog dialog) { |
261 |
this.dialog = dialog;
|
262 |
this.doUpdateComponents();
|
263 |
} |
264 |
|
265 |
private void doUpdateComponents() { |
266 |
message("");
|
267 |
|
268 |
boolean enableAll = true; |
269 |
|
270 |
boolean isThereURL = false; |
271 |
boolean isThereAuth = false; |
272 |
boolean isThereSite = false; |
273 |
boolean isThereProject = false; |
274 |
boolean isThereDbfile = false; |
275 |
boolean isThereWsName = false; |
276 |
boolean isThereSelectedsLayers = false; |
277 |
boolean isThereWorkingArea = false; |
278 |
|
279 |
// 0. Check is processing
|
280 |
enableAll = !this.isProcessing();
|
281 |
|
282 |
// 1. Check Site URL
|
283 |
if( enableAll ) {
|
284 |
URL url = this.getSiteURL(); |
285 |
isThereURL = (url != null);
|
286 |
if( !isThereURL ) {
|
287 |
if( StringUtils.isBlank(this.txtSiteURL.getText()) ) { |
288 |
message2(enableAll, "_The_site_url_is_blank");
|
289 |
} else {
|
290 |
message2(enableAll, "_Invalid_site_url");
|
291 |
} |
292 |
} |
293 |
enableAll = enableAll && isThereURL; |
294 |
} |
295 |
|
296 |
// Check auth
|
297 |
if( enableAll ) {
|
298 |
isThereAuth = (this.authenticationRequesterConfig != null); |
299 |
if( !isThereAuth ) {
|
300 |
message2(enableAll, "_Select_a_Online_authentication_mode");
|
301 |
} |
302 |
enableAll = enableAll && isThereAuth; |
303 |
} |
304 |
|
305 |
// Check site
|
306 |
if( enableAll ) {
|
307 |
isThereSite = (this.getSite() != null); |
308 |
if( !isThereSite ) {
|
309 |
message2(enableAll, "_Select_a_valid_Online_url_and_authentication_mode");
|
310 |
} |
311 |
enableAll = enableAll && isThereSite; |
312 |
} |
313 |
|
314 |
// 2. Check online project
|
315 |
if( enableAll ) {
|
316 |
OnlineProject project = this.getProject();
|
317 |
isThereProject = (project != null);
|
318 |
if( !isThereProject ) {
|
319 |
message2(enableAll, "_Select_a_Online_project");
|
320 |
} |
321 |
enableAll = enableAll && isThereProject; |
322 |
} |
323 |
|
324 |
// 3. Check workspace file
|
325 |
if( enableAll ) {
|
326 |
File f = this.getWorkspaceFile(); |
327 |
isThereDbfile = (f!=null);
|
328 |
if( !isThereDbfile ) {
|
329 |
message2(enableAll, "_Selected_working_copy_file_is_not_valid");
|
330 |
} else {
|
331 |
f = H2SpatialUtils.normalizeH2File(f); |
332 |
if( f.exists() ) {
|
333 |
message2(enableAll, "_Selected_working_copy_file_already_exists");
|
334 |
isThereDbfile = false;
|
335 |
} |
336 |
} |
337 |
enableAll = enableAll && isThereDbfile; |
338 |
} |
339 |
|
340 |
// 4. Check workspace name
|
341 |
if( enableAll ) {
|
342 |
String wsname = this.getWorkspaceName(); |
343 |
isThereWsName = StringUtils.isNotBlank(wsname); |
344 |
if( !isThereWsName ) {
|
345 |
message2(enableAll, "_Need_a_working_copy_name");
|
346 |
} else {
|
347 |
OnlineManager manager = OnlineLocator.getOnlineManager(); |
348 |
OnlineWorkingcopyDescriptor ws = manager.getWorkingcopyDescriptor(wsname); |
349 |
if( ws!=null ) { |
350 |
message2(enableAll, "_A_working_copy_with_that_name_already_exists");
|
351 |
isThereWsName = false;
|
352 |
} |
353 |
} |
354 |
enableAll = isThereURL && isThereWsName; |
355 |
} |
356 |
|
357 |
|
358 |
// 5. Check layers selected
|
359 |
if( enableAll || isThereProject ) {
|
360 |
isThereSelectedsLayers = !this.getLayersModel().isSelectionEmpty();
|
361 |
if( !isThereSelectedsLayers ) {
|
362 |
message2(enableAll, "_You_must_select_some_layer");
|
363 |
} |
364 |
enableAll = isThereURL && isThereSelectedsLayers; |
365 |
} |
366 |
|
367 |
// 6. Check selected working area
|
368 |
if( enableAll || isThereProject ) {
|
369 |
WorkingArea workingArea = this.workingAreaPicker.getWithoutAddHistory();
|
370 |
isThereWorkingArea = (workingArea != null && workingArea.getValue() != null); |
371 |
if( !isThereWorkingArea ) {
|
372 |
message2(enableAll, "_You_must_select_a_working_area");
|
373 |
} |
374 |
enableAll = isThereURL && isThereWorkingArea; |
375 |
} |
376 |
|
377 |
|
378 |
this.siteURLController.setEnabled(!this.isProcessing()); |
379 |
this.cboAuthentication.setEnabled(isThereURL);
|
380 |
this.btnAuthentication.setEnabled(isThereAuth && this.authenticationRequesterConfig.hasIdentificationConfig()); |
381 |
this.btnAuthenticationTest.setEnabled(isThereAuth);
|
382 |
this.cboProjects.setEnabled(isThereURL && this.cboProjects.getModel().getSize()>0 ); |
383 |
this.workspaceFilePicker.setEnabled(isThereProject);
|
384 |
this.chkCreateConnectionToDatabase.setEnabled(isThereProject && isThereDbfile);
|
385 |
this.txtWorkspaceName.setEnabled(isThereProject && isThereDbfile);
|
386 |
this.tblLayers.setEnabled(isThereURL && isThereProject);
|
387 |
this.txtWorkingAreaLabel.setEnabled(isThereProject);
|
388 |
|
389 |
this.txtWorkingArea.setEnabled(isThereProject);
|
390 |
this.btnWorkingAreaFromView.setEnabled(isThereProject);
|
391 |
this.btnWorkingAreaDialog.setEnabled(isThereSelectedsLayers);
|
392 |
|
393 |
if (this.dialog != null) { |
394 |
this.dialog.setButtonEnabled(WindowManager_v2.BUTTON_OK,enableAll);
|
395 |
} |
396 |
} |
397 |
|
398 |
|
399 |
@Override
|
400 |
public JComponent asJComponent() { |
401 |
return this; |
402 |
} |
403 |
|
404 |
private void translate() { |
405 |
ToolsSwingManager swingManager = ToolsSwingLocator.getToolsSwingManager(); |
406 |
swingManager.translate(this.chkCreateConnectionToDatabase);
|
407 |
swingManager.translate(this.lblWorkspaceName);
|
408 |
swingManager.translate(this.lblSiteUrl);
|
409 |
swingManager.translate(this.lblProjects);
|
410 |
swingManager.translate(this.lblWorkspaceFile);
|
411 |
swingManager.translate(this.lblLayers);
|
412 |
swingManager.translate(this.lblWorkspaceFile);
|
413 |
swingManager.translate(this.lblWorkingArea);
|
414 |
swingManager.translate(this.btnWorkingAreaFromView);
|
415 |
swingManager.translate(this.btnWorkingAreaDialog);
|
416 |
} |
417 |
|
418 |
private URL getSiteURL() { |
419 |
if(siteURLController.isEnabled()){
|
420 |
String value = this.siteURLController.getText(); |
421 |
|
422 |
URL url;
|
423 |
DataTypesManager manager = ToolsLocator.getDataTypesManager(); |
424 |
try {
|
425 |
url = (URL) manager.coerce(DataTypes.URL, value);
|
426 |
} catch (CoercionException ex) {
|
427 |
String s = (value==null)? "null":StringUtils.abbreviate(value, 100); |
428 |
LOGGER.warn("Can't coerce value ("+s+") to "+DataTypes.URL_NAME+".", ex); |
429 |
return null; |
430 |
} |
431 |
|
432 |
return url;
|
433 |
} |
434 |
return null; |
435 |
} |
436 |
|
437 |
private File getWorkspaceFile() { |
438 |
File file = this.workspaceFilePicker.get(); |
439 |
return file;
|
440 |
} |
441 |
|
442 |
@Override
|
443 |
public int actionPerformed() { |
444 |
I18nManager i18n = ToolsLocator.getI18nManager(); |
445 |
OnlineManager manager = OnlineLocator.getOnlineManager(); |
446 |
OnlineProject theProject = this.getProject();
|
447 |
WorkingArea workingArea = this.workingAreaPicker.get();
|
448 |
if (theProject == null ) { |
449 |
return ERR_PROJECT_REQUIRED;
|
450 |
} |
451 |
if (workingArea==null ) { |
452 |
return ERR_WORKINGAREA_REQUIRED;
|
453 |
} |
454 |
int err = ERR_NO_ERROR;
|
455 |
SimpleTaskStatus status = this.getTaskStatus();
|
456 |
try {
|
457 |
File file = this.getWorkspaceFile(); |
458 |
if (file != null) { |
459 |
status.setTitle(i18n.getTranslation("_Initializing_workspace"));
|
460 |
err = manager.initWorkingcopy(file, theProject, getWorkspaceName(), getTaskStatus()); |
461 |
if (err == ERR_NO_ERROR ) {
|
462 |
OnlineWorkingcopy ws = manager.openWorkingcopy(file); |
463 |
if( this.chkCreateConnectionToDatabase.isSelected() ) { |
464 |
ws.addToConnectionPool(); |
465 |
} |
466 |
ws.download_config(true, status);
|
467 |
ws.download_resources(true, status);
|
468 |
ws.setCurrentWorkingArea(workingArea); |
469 |
LayersTableModel model = (LayersTableModel) this.tblLayers.getModel();
|
470 |
List<OnlineLayer> selectedLayers = model.getSelectedLayers();
|
471 |
if( !CollectionUtils.isEmpty(selectedLayers) ) {
|
472 |
status.setRangeOfValues(0, selectedLayers.size());
|
473 |
status.setCurValue(0);
|
474 |
for (OnlineLayer layer : selectedLayers) {
|
475 |
status.incrementCurrentValue(); |
476 |
status.setTitle(i18n.getTranslation("_Adding_layer")+" "+layer.getName()); |
477 |
if( status.isCancellationRequested() ) {
|
478 |
status.cancel(); |
479 |
throw new UserCancelTaskException(); |
480 |
} |
481 |
String fieldForLabel = "ogc_fid"; // FIXME: Pedir en el GUI |
482 |
String label = layer.getName(); // FIXME: Pedir en el GUI |
483 |
int tileSize = layer.calculateTileSize(5000, status); |
484 |
ws.addEntity( |
485 |
layer.getFeatureType(), |
486 |
layer.getName(), |
487 |
layer.getTitle(), |
488 |
fieldForLabel, |
489 |
label, |
490 |
layer.getPkName(), |
491 |
tileSize |
492 |
); |
493 |
} |
494 |
|
495 |
status.setRangeOfValues(0, selectedLayers.size());
|
496 |
status.setCurValue(0);
|
497 |
for (OnlineLayer layer : selectedLayers) {
|
498 |
status.incrementCurrentValue(); |
499 |
status.setTitle(i18n.getTranslation("_Downloading_layer")+" "+layer.getName()); |
500 |
if( status.isCancellationRequested() ) {
|
501 |
status.cancel(); |
502 |
throw new UserCancelTaskException(); |
503 |
} |
504 |
err = ws.download(layer.getName(),workingArea.getValue(), status); |
505 |
if (err != ERR_NO_ERROR ) {
|
506 |
// TODO: Que hacer aqui si da error
|
507 |
} |
508 |
} |
509 |
} |
510 |
} |
511 |
|
512 |
} |
513 |
} catch (UserCancelTaskException ex) {
|
514 |
LOGGER.info("Cancelled by user.");
|
515 |
err = OnlineManager.ERR_CANCELLED_BY_USER; |
516 |
} catch (Exception ex) { |
517 |
LOGGER.info("Can't initialize workspace", ex);
|
518 |
err = OnlineManager.ERR_EXCEPTION; |
519 |
} |
520 |
if( err==ERR_NO_ERROR || err == OnlineManager.ERR_CANCELLED_BY_USER) {
|
521 |
URL siteurl = getSiteURL();
|
522 |
if( siteurl != null ) { |
523 |
this.siteURLController.addHistory(siteurl.toString());
|
524 |
} |
525 |
} |
526 |
return err;
|
527 |
} |
528 |
|
529 |
private OnlineSite createSite() {
|
530 |
try {
|
531 |
OnlineManager manager = OnlineLocator.getOnlineManager(); |
532 |
URL url = getSiteURL();
|
533 |
if (url != null){ |
534 |
return manager.connectSite(this.authenticationRequesterConfig, url); |
535 |
} |
536 |
} catch (IOException ex) { |
537 |
LOGGER.warn("Can't connect to site '"+this.txtSiteURL.getText()+"'", ex); |
538 |
} |
539 |
return null; |
540 |
} |
541 |
|
542 |
private OnlineSite getSite() {
|
543 |
if (site == null){ |
544 |
this.site = createSite();
|
545 |
} |
546 |
return site;
|
547 |
} |
548 |
|
549 |
private OnlineProject getProject() {
|
550 |
OnlineSite theSite = this.getSite();
|
551 |
if( theSite == null ) { |
552 |
return null; |
553 |
} |
554 |
LabeledValue<Integer> item = (LabeledValue<Integer>) this.cboProjects.getSelectedItem(); |
555 |
if( item == null ) { |
556 |
return null; |
557 |
} |
558 |
return theSite.getProject(item.getValue());
|
559 |
} |
560 |
|
561 |
@Override
|
562 |
public String getWorkspaceName() { |
563 |
return txtWorkspaceName.getText();
|
564 |
} |
565 |
|
566 |
public static void selfRegister() { |
567 |
|
568 |
} |
569 |
|
570 |
@Override
|
571 |
public boolean isProcessing() { |
572 |
return false; |
573 |
} |
574 |
|
575 |
private void message2(boolean doMessage, String s) { |
576 |
if( doMessage ) {
|
577 |
message(s); |
578 |
} |
579 |
} |
580 |
|
581 |
private void message(String message) { |
582 |
if( notInSwingThreadInvokeLater(() -> {message(message);}) ) {
|
583 |
return;
|
584 |
} |
585 |
String s = message;
|
586 |
if( StringUtils.startsWith(s, "_") ) { |
587 |
I18nManager i18n = ToolsLocator.getI18nManager(); |
588 |
s = i18n.getTranslation(s); |
589 |
} |
590 |
this.lblStatusMessages.setText(s);
|
591 |
// this.lblStatusMessages.setToolTipText(toolTipText);
|
592 |
|
593 |
} |
594 |
|
595 |
@Override
|
596 |
public ImageIcon loadImage(String imageName) { |
597 |
return OnlineSwingCommons.loadImage(imageName);
|
598 |
} |
599 |
|
600 |
private void doChangeSiteURL() { |
601 |
URL url = null; |
602 |
try {
|
603 |
OnlineManager onlineManager = OnlineLocator.getOnlineManager(); |
604 |
url = this.getSiteURL();
|
605 |
if( url == null || this.authenticationRequesterConfig==null ) { |
606 |
DisposeUtils.dispose(this.site);
|
607 |
this.site = null; |
608 |
return;
|
609 |
} |
610 |
this.site = onlineManager.connectSite(this.authenticationRequesterConfig,url); |
611 |
this.siteURLController.addHistory(url.toString());
|
612 |
doFillProjects(); |
613 |
doUpdateComponents(); |
614 |
} catch (Exception ex) { |
615 |
LOGGER.warn("Can't chage site url ("+url+").",ex); |
616 |
} |
617 |
} |
618 |
|
619 |
private void doFillProjects() { |
620 |
OnlineSite theSite = this.getSite();
|
621 |
if( theSite == null ) { |
622 |
return;
|
623 |
} |
624 |
List<LabeledValue<Integer>> projects = new ArrayList<>(); |
625 |
for (OnlineProject project : theSite.projects()) {
|
626 |
projects.add(new LabeledValueImpl<>(project.getTitle(),project.getId()));
|
627 |
} |
628 |
projects.sort((LabeledValue<Integer> o1, LabeledValue<Integer> o2) -> o1.getLabel().compareTo(o2.getLabel())); |
629 |
DefaultComboBoxModel<LabeledValue<Integer>> model = new DefaultComboBoxModel<>(); |
630 |
for (LabeledValue<Integer> project : projects) { |
631 |
model.addElement(project); |
632 |
} |
633 |
this.cboProjects.setModel(model);
|
634 |
this.cboProjects.setSelectedIndex(-1); |
635 |
this.workspaceFilePicker.set(null); |
636 |
this.txtWorkspaceName.setText(""); |
637 |
this.clearLayers();
|
638 |
} |
639 |
|
640 |
private void doChangeProject() { |
641 |
OnlineSite theSite = this.getSite();
|
642 |
LabeledValue<Integer> selected = (LabeledValue<Integer>) this.cboProjects.getSelectedItem(); |
643 |
if( selected == null || theSite == null ) { |
644 |
this.workspaceFilePicker.set(null); |
645 |
this.txtWorkspaceName.setText(""); |
646 |
this.clearLayers();
|
647 |
return;
|
648 |
} |
649 |
int projectId = selected.getValue();
|
650 |
OnlineProject project = theSite.getProject(projectId); |
651 |
|
652 |
List<OnlineLayer> layers = new ArrayList<>(); |
653 |
for (OnlineLayer layer : project.layers()) {
|
654 |
if( layer.isHidden() ) {
|
655 |
continue;
|
656 |
} |
657 |
layers.add(layer); |
658 |
} |
659 |
layers.sort((OnlineLayer o1, OnlineLayer o2) -> o1.getLabel().compareTo(o2.getLabel())); |
660 |
LayersTableModel model = new LayersTableModel(layers);
|
661 |
model.addTableModelListener(new TableModelListener() { |
662 |
@Override
|
663 |
public void tableChanged(TableModelEvent e) { |
664 |
doUpdateComponents(); |
665 |
} |
666 |
}); |
667 |
this.tblLayers.setModel(model);
|
668 |
doUpdateComponents(); |
669 |
} |
670 |
|
671 |
private void clearLayers() { |
672 |
LayersTableModel model = new LayersTableModel();
|
673 |
this.tblLayers.setModel(model);
|
674 |
} |
675 |
|
676 |
private LayersTableModel getLayersModel() {
|
677 |
return (LayersTableModel) this.tblLayers.getModel(); |
678 |
} |
679 |
|
680 |
private SimpleTaskStatus getTaskStatus() {
|
681 |
SimpleTaskStatus taskStatus = ToolsLocator.getTaskStatusManager().createDefaultSimpleTaskStatus("_Create_workingcopy");
|
682 |
taskStatus.setAutoremove(true);
|
683 |
taskStatus.add(); |
684 |
taskStatus.setIndeterminate(); |
685 |
this.taskStatusController.bind(taskStatus);
|
686 |
return taskStatus;
|
687 |
} |
688 |
|
689 |
public void setVisibleStatus(boolean visible) { |
690 |
if( notInSwingThreadInvokeLater(() -> {setVisibleStatus(visible);}) ) {
|
691 |
return;
|
692 |
} |
693 |
this.lblStatusTitle.setVisible(visible);
|
694 |
this.pbStatus.setVisible(visible);
|
695 |
this.lblStatusMessages.setVisible(true); |
696 |
} |
697 |
|
698 |
private void clearMessage() { |
699 |
message(" ");
|
700 |
} |
701 |
|
702 |
private void doChangeAuthentication() { |
703 |
LabeledValue<OnlineUserIdentificationRequesterFactory> item = (LabeledValue<OnlineUserIdentificationRequesterFactory>) this.cboAuthentication.getSelectedItem();
|
704 |
if (item == null) { |
705 |
return;
|
706 |
} |
707 |
OnlineUserIdentificationRequesterFactory factory = item.getValue(); |
708 |
if (this.authenticationRequesterConfig!=null && StringUtils.equalsIgnoreCase(factory.getName(), this.authenticationRequesterConfig.getName())) { |
709 |
return;
|
710 |
} |
711 |
URL url = null; |
712 |
try {
|
713 |
url = this.getSiteURL();
|
714 |
if( url == null ) { |
715 |
return;
|
716 |
} |
717 |
this.authenticationRequesterConfig = factory.create(url.toString());
|
718 |
OnlineManager onlineManager = OnlineLocator.getOnlineManager(); |
719 |
if (url == null || this.authenticationRequesterConfig == null) { |
720 |
DisposeUtils.dispose(this.site);
|
721 |
this.site = null; |
722 |
return;
|
723 |
} |
724 |
this.site = onlineManager.connectSite(this.authenticationRequesterConfig, url); |
725 |
doFillProjects(); |
726 |
doUpdateComponents(); |
727 |
} catch (Exception ex) { |
728 |
LOGGER.warn("Can't chage autentication mode.", ex);
|
729 |
} |
730 |
} |
731 |
|
732 |
private void doAuthenticationRequesterConfig() { |
733 |
if( this.getSiteURL()==null || this.authenticationRequesterConfig==null ) { |
734 |
return;
|
735 |
} |
736 |
if( !this.authenticationRequesterConfig.hasIdentificationConfig() ) { |
737 |
return;
|
738 |
} |
739 |
if( this.authenticationRequesterConfig.requestIdentificationConfig() ) { |
740 |
// reconstruimos el site con la nueva configuaracion.
|
741 |
this.site = this.createSite(); |
742 |
} |
743 |
} |
744 |
|
745 |
private void doAuthenticationTest() { |
746 |
if( this.getSiteURL()==null || this.authenticationRequesterConfig==null ) { |
747 |
LOGGER.warn("Can't run authentication test. Configure authentication.");
|
748 |
return;
|
749 |
} |
750 |
ThreadSafeDialogsManager dialogs = ToolsSwingLocator.getThreadSafeDialogsManager(); |
751 |
I18nManager i18n = ToolsLocator.getI18nManager(); |
752 |
OnlineUserIdentificationRequester requester = this.authenticationRequesterConfig.createUserIdentificationRequester();
|
753 |
if( requester==null ) { |
754 |
// LOGGER.warn("Can't run authentication test. Configure authentication.");
|
755 |
dialogs.messageDialog( |
756 |
i18n.getTranslation("_Cant_run_authentication_test")
|
757 |
+ "\n"
|
758 |
+ i18n.getTranslation("_Review_the_authentication_settings"),
|
759 |
i18n.getTranslation(i18n.getTranslation("_Authentication_testing")),
|
760 |
JOptionPane.WARNING_MESSAGE
|
761 |
); |
762 |
return;
|
763 |
} |
764 |
if( !requester.requestIdentification() ) {
|
765 |
// LOGGER.warn("Test authentication failed");
|
766 |
dialogs.messageDialog( |
767 |
i18n.getTranslation("_Test_authentication_failed"),
|
768 |
i18n.getTranslation(i18n.getTranslation("_Authentication_testing")),
|
769 |
JOptionPane.WARNING_MESSAGE
|
770 |
); |
771 |
return;
|
772 |
} |
773 |
// LOGGER.warn("Test authentication ok");
|
774 |
dialogs.messageDialog( |
775 |
i18n.getTranslation("_Passed_the_authentication_test"),
|
776 |
i18n.getTranslation(i18n.getTranslation("_Authentication_testing")),
|
777 |
JOptionPane.WARNING_MESSAGE
|
778 |
); |
779 |
} |
780 |
} |