Statistics
| Revision:

gvsig-raster / org.gvsig.raster / branches / org.gvsig.raster.2.4 / org.gvsig.wcs / org.gvsig.wcs.swing / org.gvsig.wcs.swing.impl / src / main / java / org / gvsig / wcs / swing / impl / DefaultWCSParametersPanelController.java @ 8844

History | View | Annotate | Download (30.6 KB)

1
/* gvSIG. Desktop Geographic Information System.
2
 *
3
 * Copyright ? 2007-2018 gvSIG Association
4
 *
5
 * This program is free software; you can redistribute it and/or
6
 * modify it under the terms of the GNU General Public License
7
 * as published by the Free Software Foundation; either version 2
8
 * of the License, or (at your option) any later version.
9
 *
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 * GNU General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU General Public License
16
 * along with this program; if not, write to the Free Software
17
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
18
 * MA  02110-1301, USA.
19
 *
20
 * For any additional information, do not hesitate to contact us
21
 * at info AT gvsig.com, or visit our website www.gvsig.com.
22
 */
23
package org.gvsig.wcs.swing.impl;
24

    
25
import java.awt.Component;
26
import java.awt.event.ActionEvent;
27
import java.awt.event.ActionListener;
28
import java.awt.event.MouseAdapter;
29
import java.awt.event.MouseEvent;
30
import java.net.URL;
31
import java.util.Iterator;
32
import java.util.List;
33
import java.util.Map;
34

    
35
import javax.swing.DefaultComboBoxModel;
36
import javax.swing.DefaultListCellRenderer;
37
import javax.swing.DefaultListModel;
38
import javax.swing.JComponent;
39
import javax.swing.JTextArea;
40
import javax.swing.ListSelectionModel;
41
import javax.swing.SwingUtilities;
42
import javax.swing.event.ListDataEvent;
43
import javax.swing.event.ListDataListener;
44
import javax.swing.event.ListSelectionEvent;
45
import javax.swing.event.ListSelectionListener;
46

    
47
import org.apache.commons.lang3.StringUtils;
48
import org.cresques.cts.IProjection;
49
import org.slf4j.Logger;
50
import org.slf4j.LoggerFactory;
51

    
52
import org.gvsig.fmap.crs.CRSFactory;
53
import org.gvsig.fmap.dal.DALLocator;
54
import org.gvsig.fmap.dal.DataManager;
55
import org.gvsig.fmap.dal.DataServerExplorerParameters;
56
import org.gvsig.fmap.dal.DataServerExplorerPool;
57
import org.gvsig.fmap.dal.DataServerExplorerPoolEntry;
58
import org.gvsig.fmap.dal.OpenDataStoreParameters;
59
import org.gvsig.tools.ToolsLocator;
60
import org.gvsig.tools.dispose.DisposeUtils;
61
import org.gvsig.tools.i18n.I18nManager;
62
import org.gvsig.tools.swing.api.ToolsSwingLocator;
63
import org.gvsig.tools.swing.icontheme.IconTheme;
64
import org.gvsig.wcs.provider.DefaultWCSRasterServerExplorer;
65
import org.gvsig.wcs.provider.WCSCoverageData;
66
import org.gvsig.wcs.provider.WCSRasterProviderParameters;
67
import org.gvsig.wcs.provider.WCSRasterServerExplorer;
68
import org.gvsig.wcs.provider.WCSRasterServerExplorerParameters;
69
import org.gvsig.wcs.swing.api.WCSParametersPanel;
70

    
71
/**
72
 * @author fdiaz
73
 *
74
 */
75
public class DefaultWCSParametersPanelController extends DefaultWCSParametersPanelView implements WCSParametersPanel {
76

    
77
    /**
78
     *
79
     */
80
    private static final long serialVersionUID = 5431162883398861777L;
81
    private static final String NAME = "DefaultGoogleMapsParametersPanelController";
82
    private static final Logger logger = LoggerFactory.getLogger(DefaultWCSParametersPanelController.class);
83
    private static final int TAB_CONNECTION_INDEX = 0;
84
    private static final int TAB_COVERAGES_INDEX = 1;
85
    private static final int TAB_FORMATS_INDEX = 2;
86
    private static final int TAB_TIME_INDEX = 3;
87
    private static final int TAB_PARAMETERSS_INDEX = 4;
88
    private WCSRasterServerExplorer serverExplorer;
89
    private String format = null;
90
    private String projection = "";
91
    private IProjection mapCtxProj = null;
92

    
93
    private Thread connectionThread;
94
    private WCSCoverageData selectedCoverage;
95

    
96
    /**
97
     *
98
     */
99
    public DefaultWCSParametersPanelController() {
100
        super();
101
        initComponents();
102
        translate();
103
    }
104

    
105
    @Override
106
    public void setPreferredProjection(IProjection proj) {
107
        mapCtxProj = proj;
108
    }
109

    
110
    private void translate() {
111
        I18nManager i18nManager = ToolsLocator.getI18nManager();
112
        // Title tab translate
113
        for (int i = 0; i < tabWCS.getTabCount(); i++) {
114
            tabWCS.setTitleAt(i, i18nManager.getTranslation(tabWCS.getTitleAt(i)));
115
        }
116

    
117
        // Tab connection
118
        lblServer.setText(i18nManager.getTranslation(lblServer.getText()));
119
        lblServer.setToolTipText(i18nManager.getTranslation(lblServer.getToolTipText()));
120

    
121
        cboServerList.setToolTipText(i18nManager.getTranslation(cboServerList.getToolTipText()));
122

    
123
        lblUser.setText(i18nManager.getTranslation(lblUser.getText()));
124
        lblUser.setToolTipText(i18nManager.getTranslation(lblUser.getToolTipText()));
125

    
126
        txtUser.setToolTipText(i18nManager.getTranslation(txtUser.getToolTipText()));
127

    
128
        lblPassword.setText(i18nManager.getTranslation(lblPassword.getText()));
129
        lblPassword.setToolTipText(i18nManager.getTranslation(lblPassword.getToolTipText()));
130

    
131
        txtPassword.setToolTipText(i18nManager.getTranslation(txtPassword.getToolTipText()));
132

    
133
        chkRefreshCache.setText(i18nManager.getTranslation(chkRefreshCache.getText()));
134
        chkRefreshCache.setToolTipText(i18nManager.getTranslation(chkRefreshCache.getToolTipText()));
135

    
136
        btnConnect.setText(i18nManager.getTranslation(btnConnect.getText()));
137
        btnConnect.setToolTipText(i18nManager.getTranslation(btnConnect.getToolTipText()));
138

    
139
        btnCancel.setText(i18nManager.getTranslation(btnCancel.getText()));
140
        btnCancel.setToolTipText(i18nManager.getTranslation(btnCancel.getToolTipText()));
141

    
142
        chkLocalCache.setText(i18nManager.getTranslation(chkLocalCache.getText()));
143
        chkLocalCache.setToolTipText(i18nManager.getTranslation(chkLocalCache.getToolTipText()));
144

    
145
        chkRefreshLocalCache.setText(i18nManager.getTranslation(chkRefreshLocalCache.getText()));
146
        chkRefreshLocalCache.setToolTipText(i18nManager.getTranslation(chkRefreshLocalCache.getToolTipText()));
147

    
148
        lblInformation.setText(i18nManager.getTranslation(lblInformation.getText()));
149
        lblInformation.setToolTipText(i18nManager.getTranslation(lblInformation.getToolTipText()));
150

    
151
        // Tab layers
152
        lblCoverageName.setText(i18nManager.getTranslation(lblCoverageName.getText()));
153
        lblCoverageName.setToolTipText(i18nManager.getTranslation(lblCoverageName.getToolTipText()));
154

    
155
        txtCoverageName.setToolTipText(i18nManager.getTranslation(txtCoverageName.getToolTipText()));
156

    
157
        lblSelectCoverage.setText(i18nManager.getTranslation(lblSelectCoverage.getText()));
158
        lblSelectCoverage.setToolTipText(i18nManager.getTranslation(lblSelectCoverage.getToolTipText()));
159

    
160
        lstCoverageSelector.setToolTipText(i18nManager.getTranslation(lstCoverageSelector.getToolTipText()));
161

    
162
        chkShowLayerNames.setText(i18nManager.getTranslation(chkShowLayerNames.getText()));
163
        chkShowLayerNames.setToolTipText(i18nManager.getTranslation(chkShowLayerNames.getToolTipText()));
164

    
165
        // Tab format
166
        lblFormats.setText(i18nManager.getTranslation(lblFormats.getText()));
167
        lblFormats.setToolTipText(i18nManager.getTranslation(lblFormats.getToolTipText()));
168

    
169
        lstFormats.setToolTipText(i18nManager.getTranslation(lstFormats.getToolTipText()));
170

    
171
        chkUseInterpolation.setText(i18nManager.getTranslation(chkUseInterpolation.getText()));
172
        chkUseInterpolation.setToolTipText(i18nManager.getTranslation(chkUseInterpolation.getToolTipText()));
173

    
174
        cboInterpolationMethod.setToolTipText(i18nManager.getTranslation(cboInterpolationMethod.getToolTipText()));
175

    
176
        lblProjection.setText(i18nManager.getTranslation(lblProjection.getText()));
177
        lblProjection.setToolTipText(i18nManager.getTranslation(lblProjection.getToolTipText()));
178

    
179
        lstProjections.setToolTipText(i18nManager.getTranslation(lstProjections.getToolTipText()));
180

    
181
        // Tab time
182
        //FIXME:
183
        lblSettings.setText(i18nManager.getTranslation(lblSettings.getText()));
184
        lblSettings.setToolTipText(i18nManager.getTranslation(lblSettings.getToolTipText()));
185

    
186
        lstDimensionsSettings.setToolTipText(i18nManager.getTranslation(lstDimensionsSettings.getToolTipText()));
187

    
188
        lblSettingsEditor.setText(i18nManager.getTranslation(lblSettingsEditor.getText()));
189
        lblSettingsEditor.setToolTipText(i18nManager.getTranslation(lblSettingsEditor.getToolTipText()));
190

    
191
        lstDimensions.setToolTipText(i18nManager.getTranslation(lstDimensions.getToolTipText()));
192

    
193
        lblValue.setText(i18nManager.getTranslation(lblValue.getText()));
194
        lblValue.setToolTipText(i18nManager.getTranslation(lblValue.getToolTipText()));
195

    
196
        lblFieldValue.setText("");
197
        lblFieldValue.setToolTipText(i18nManager.getTranslation(lblFieldValue.getToolTipText()));
198

    
199
        sldValues.setToolTipText(i18nManager.getTranslation(sldValues.getToolTipText()));
200

    
201
        btnFirst.setText(""); // btnFirst.getText()));
202
        btnFirst.setToolTipText(i18nManager.getTranslation(btnFirst.getToolTipText()));
203

    
204
        btnPrevious.setText(""); // btnPrevious.getText()));
205
        btnPrevious.setToolTipText(i18nManager.getTranslation(btnPrevious.getToolTipText()));
206

    
207
        txtDimensionNumber.setToolTipText(i18nManager.getTranslation(txtDimensionNumber.getToolTipText()));
208

    
209
        btnNext.setText(""); // btnNext.getText()));
210
        btnNext.setToolTipText(i18nManager.getTranslation(btnNext.getToolTipText()));
211

    
212
        btnLast.setText(""); // btnLast.getText()));
213
        btnLast.setToolTipText(i18nManager.getTranslation(btnLast.getToolTipText()));
214

    
215
        rdbSimpleValue.setText(i18nManager.getTranslation(rdbSimpleValue.getText()));
216
        rdbSimpleValue.setToolTipText(i18nManager.getTranslation(rdbSimpleValue.getToolTipText()));
217

    
218
        rdbMultipleValue.setText(i18nManager.getTranslation(rdbMultipleValue.getText()));
219
        rdbMultipleValue.setToolTipText(i18nManager.getTranslation(rdbMultipleValue.getToolTipText()));
220

    
221
        rdbInterval.setText(i18nManager.getTranslation(rdbInterval.getText()));
222
        rdbInterval.setToolTipText(i18nManager.getTranslation(rdbInterval.getToolTipText()));
223

    
224
        btnAddSetting.setText(i18nManager.getTranslation(btnAddSetting.getText()));
225
        btnAddSetting.setToolTipText(i18nManager.getTranslation(btnAddSetting.getToolTipText()));
226

    
227
        btnClearSetting.setText(i18nManager.getTranslation(btnClearSetting.getText()));
228
        btnClearSetting.setToolTipText(i18nManager.getTranslation(btnClearSetting.getToolTipText()));
229

    
230
        txtSetting.setToolTipText(i18nManager.getTranslation(txtSetting.getToolTipText()));
231

    
232
        btnSet.setText(i18nManager.getTranslation(btnSet.getText()));
233
        btnSet.setToolTipText(i18nManager.getTranslation(btnSet.getToolTipText()));
234

    
235
        //Tab parameters
236

    
237
        lblParameters.setText(i18nManager.getTranslation(lblParameters.getText()));
238
        lblParameters.setToolTipText(i18nManager.getTranslation(lblParameters.getToolTipText()));
239

    
240
        cboParameters.setToolTipText(i18nManager.getTranslation(cboParameters.getToolTipText()));
241

    
242
        lstValues.setToolTipText(i18nManager.getTranslation(lstValues.getToolTipText()));
243

    
244
    }
245

    
246
    private void initComponents() {
247
        fillConnections();
248

    
249
        IconTheme iconTheme = ToolsSwingLocator.getIconThemeManager().getCurrent();
250

    
251
        this.btnFirst.setIcon(iconTheme.get("first-value-icon"));
252
        this.btnPrevious.setIcon(iconTheme.get("previous-value-icon"));
253
        this.btnNext.setIcon(iconTheme.get("next-value-icon"));
254
        this.btnLast.setIcon(iconTheme.get("last-value-icon"));
255

    
256
        this.btnConnect.addActionListener(new ActionListener() {
257

    
258
            @Override
259
            public void actionPerformed(ActionEvent e) {
260
                doConnect();
261
            }
262
        });
263

    
264
        this.btnCancel.addActionListener(new ActionListener() {
265

    
266
            @Override
267
            public void actionPerformed(ActionEvent e) {
268
                doCancelConnection();
269
            }
270
        });
271

    
272
        initializeLstCoverageSelector();
273
        initializeLstProjections();
274
        initializeChkUseInterpolation();
275
        initializeCboInterpolationMethods();
276
        initializeCboParameters();
277
        initializeLstValues();
278

    
279
//        initializeTblDimensions();
280

    
281
        this.chkShowLayerNames.setSelected(true);
282
        this.chkShowLayerNames.addActionListener(new ActionListener() {
283

    
284
            @Override
285
            public void actionPerformed(ActionEvent e) {
286
                updateLstCoverageSelector();
287
                updateTxtCoverageName();
288
                firePropertyChange("all", null, null);
289
            }
290
        });
291

    
292
        updateComponents();
293

    
294
    }
295

    
296
    private void initializeChkUseInterpolation() {
297
        chkUseInterpolation.addActionListener(new ActionListener() {
298
            @Override
299
            public void actionPerformed(ActionEvent e) {
300
                cboInterpolationMethod.setEnabled(chkUseInterpolation.isSelected());
301
                firePropertyChange("all", null, null);
302
            }
303
        });
304

    
305
    }
306

    
307
    @Override
308
    public JComponent asJComponent() {
309
        return this;
310
    }
311

    
312
    @Override
313
    public void dispose() {
314
        DisposeUtils.disposeQuietly(serverExplorer);
315
    }
316

    
317
    private void doConnect() {
318
        final String selectedItem = (String) cboServerList.getSelectedItem();
319
        if (StringUtils.isEmpty(selectedItem)) {
320
            return;
321
        }
322

    
323
        btnConnect.setEnabled(false);
324
        btnCancel.setEnabled(true);
325

    
326
        connectionThread = new Thread(new Runnable() {
327

    
328
            @Override
329
            public void run() {
330
                DataManager manager = DALLocator.getDataManager();
331
                final DataServerExplorerParameters parameters;
332
                try {
333
                    parameters = manager.createServerExplorerParameters("WCS");
334
                    parameters.setDynValue(WCSRasterServerExplorerParameters.WCS_SERVICE_PARAMETER_NAME, new URL(
335
                        selectedItem)); // "service"
336
                    parameters.setDynValue(WCSRasterServerExplorerParameters.WCS_OVERRIDE_CAPABILITIES_PARAMETER_NAME,
337
                        chkRefreshCache.isSelected()); // "override_capabilities"
338

    
339
                    final DefaultWCSRasterServerExplorer serverExplorer =
340
                        (DefaultWCSRasterServerExplorer) manager.openServerExplorer("WCS", parameters);
341

    
342
                    SwingUtilities.invokeLater(new Runnable() {
343

    
344
                        @Override
345
                        public void run() {
346
//                            if(Thread.interrupted()){
347
//                                return;
348
//                            }
349
                            setServerExplorer(serverExplorer);
350
                            DataServerExplorerPool pool = DALLocator.getDataManager().getDataServerExplorerPool();
351

    
352
                            pool.add(((URL) parameters
353
                                .getDynValue(WCSRasterServerExplorerParameters.WCS_SERVICE_PARAMETER_NAME)).toString(),
354
                                serverExplorer.getParameters());
355

    
356
                        }
357
                    });
358
                } catch (Exception e) {
359
                    // FIXME: ?Mostrar di?logo para preguntar si se desea
360
                    // eliminar el servidor del pool de servidores en caso de
361
                    // existir ah??
362
                    setServerExplorer(null);
363
                }
364

    
365
            }
366
        }, "WCSConnection");
367
        connectionThread.start();
368
        try {
369
            Thread.sleep(2);
370
        } catch (InterruptedException e) {
371
        }
372
    }
373

    
374

    
375
    protected void doCancelConnection() {
376
//        if(connectionThread != null && connectionThread.isAlive()){
377
//            connectionThread.interrupt();
378
//        }
379
    }
380

    
381

    
382
    private void setServerExplorer(WCSRasterServerExplorer serverExplorer) {
383
        this.serverExplorer = serverExplorer;
384

    
385
        this.updateComponents();
386

    
387
        updateLstCoverageSelector();
388

    
389
        if(this.serverExplorer!=null){
390
            txtInformation.setText(serverExplorer.getInfoString());
391
        }
392

    
393
        tabWCS.setEnabledAt(4, true);
394
        firePropertyChange("all", null, null);
395
    }
396

    
397

    
398

    
399
    private void updateLstFormats() {
400
        if (this.serverExplorer != null) {
401
            List<String> formats = null;
402
            if (this.selectedCoverage != null) {
403
                formats = this.selectedCoverage.getFormats();
404
                fillFormats(formats);
405
            } else {
406
                formats = this.serverExplorer.getFormats();
407
                fillFormats(formats);
408
            }
409
            int formatIndex = -1;
410
            if (!StringUtils.isEmpty(format)) {
411
                if (formats.contains(format)) {
412
                    formatIndex = formats.indexOf(format);
413
                }
414
            } else {
415
                if (formats.size() > 0) {
416
                    formatIndex = 0;
417
                    format = formats.get(formatIndex);
418
                }
419
            }
420
            lstFormats.getSelectionModel().setSelectionInterval(formatIndex, formatIndex);
421
        } else {
422
            fillFormats(null);
423
            format = null;
424
        }
425

    
426
    }
427

    
428
    private void updateComponents() {
429

    
430
        if (serverExplorer == null) {
431
            cboServerList.setEnabled(true);
432

    
433
            // Authentication of WCS servers is not yet implemented, when implemented, enabling the following four controls.
434
            lblUser.setEnabled(false);
435
            lblPassword.setEnabled(false);
436
            txtUser.setEnabled(false);
437
            txtPassword.setEnabled(false);
438

    
439
            chkRefreshCache.setEnabled(true);
440
            btnConnect.setEnabled(true);
441
            btnCancel.setEnabled(false);
442

    
443
            chkLocalCache.setEnabled(false);
444
            chkRefreshLocalCache.setEnabled(false);
445
            txtInformation.setEnabled(false);
446
            chkUseInterpolation.setEnabled(false);
447

    
448
            cboInterpolationMethod.setEnabled(false);
449

    
450
            tabWCS.setEnabledAt(TAB_COVERAGES_INDEX, false);
451
            tabWCS.setEnabledAt(TAB_FORMATS_INDEX, false);
452
            tabWCS.setEnabledAt(TAB_TIME_INDEX, false);
453
            tabWCS.setEnabledAt(TAB_PARAMETERSS_INDEX, false);
454
        } else {
455
            cboServerList.setEnabled(false);
456
            lblUser.setEnabled(false);
457
            lblPassword.setEnabled(false);
458
            txtUser.setEnabled(false);
459
            txtPassword.setEnabled(false);
460

    
461
            chkRefreshCache.setEnabled(false);
462
            btnConnect.setEnabled(false);
463
            btnCancel.setEnabled(false);
464

    
465
            chkLocalCache.setEnabled(true);
466
            chkRefreshLocalCache.setEnabled(true);
467
            txtInformation.setEnabled(true);
468
            chkUseInterpolation.setEnabled(true);
469

    
470
            cboInterpolationMethod.setEnabled(true);
471

    
472
            tabWCS.setEnabledAt(TAB_COVERAGES_INDEX, true);
473
        }
474

    
475
    }
476

    
477
    @SuppressWarnings("unchecked")
478
    private void fillConnections() {
479
        DefaultComboBoxModel<String> model = new DefaultComboBoxModel<>();
480

    
481
        DataServerExplorerPool pool = DALLocator.getDataManager().getDataServerExplorerPool();
482
        Iterator<?> it = pool.iterator();
483
        while (it.hasNext()) {
484
            DataServerExplorerPoolEntry entry = (DataServerExplorerPoolEntry) it.next();
485
            DataServerExplorerParameters parameters = entry.getExplorerParameters();
486
            if (parameters instanceof WCSRasterServerExplorerParameters) {
487
                model.addElement(((URL) parameters
488
                    .getDynValue(WCSRasterServerExplorerParameters.WCS_SERVICE_PARAMETER_NAME)).toString());
489
            }
490
        }
491

    
492
        this.cboServerList.setModel(model);
493
    }
494

    
495
    @SuppressWarnings("unchecked")
496
    private void fillFormats(List<String> formats) {
497
        final DefaultListModel<String> model = new DefaultListModel<>();
498
        if (formats != null) {
499
            for (Iterator<String> iterator = formats.iterator(); iterator.hasNext();) {
500
                model.addElement(iterator.next());
501
            }
502
            lstFormats.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
503
            lstFormats.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
504

    
505
                @Override
506
                public void valueChanged(ListSelectionEvent e) {
507
                    int index = lstFormats.getSelectedIndex();
508
                    if(index>=0){
509
                        format = model.getElementAt(index);
510
                        firePropertyChange("all", null, null);
511
                    } else {
512
                        format = null;
513
                    }
514
                }
515
            });
516
        }
517
        lstFormats.setModel(model);
518
    }
519

    
520
    private void doSelectCoverage(Object selected) {
521
        if (selected instanceof WCSCoverageData) {
522
            selectedCoverage = (WCSCoverageData)selected;
523
            tabWCS.setEnabledAt(TAB_FORMATS_INDEX,true);
524
            updateLstFormats();
525
            updateLstProjections();
526
            updateCboInterpolationMethods();
527
            updateCboParameters();
528
        }
529
        this.updateTxtCoverageName();
530
        firePropertyChange("all", null, null);
531

    
532
    }
533

    
534
    @SuppressWarnings("unchecked")
535
    private void initializeCboInterpolationMethods() {
536
      DefaultComboBoxModel<String> model = new DefaultComboBoxModel<>();
537
      cboInterpolationMethod.setModel(model);
538
  }
539

    
540
    private void updateCboInterpolationMethods() {
541
        @SuppressWarnings("unchecked")
542
        DefaultComboBoxModel<String> model = (DefaultComboBoxModel<String>) cboInterpolationMethod.getModel();
543
        model.removeAllElements();
544
        List<String> methods = selectedCoverage.getInterpolationMethods();
545
        for (Iterator<String> iterator = methods.iterator(); iterator.hasNext();) {
546
            String method = iterator.next();
547
            model.addElement(method);
548
        }
549
        cboInterpolationMethod.setSelectedIndex(0);
550
    }
551

    
552
    @SuppressWarnings("unchecked")
553
    private void initializeCboParameters() {
554
        DefaultComboBoxModel<String> model = new DefaultComboBoxModel<>();
555
        cboParameters.setModel(model);
556
        cboParameters.addActionListener(new ActionListener() {
557

    
558
            @Override
559
            public void actionPerformed(ActionEvent e) {
560
                String selected = (String) cboParameters.getSelectedItem();
561
                if(selected!=null){
562
                    updateLstValues(selected);
563
                }
564
            }
565
        });
566
    }
567

    
568
    private void updateCboParameters() {
569
        @SuppressWarnings("unchecked")
570
        DefaultComboBoxModel<String> model = (DefaultComboBoxModel<String>) cboParameters.getModel();
571

    
572
        Map<String, List<String>> wcsParameters = selectedCoverage.getWCSParameters();
573
        for (Iterator<String> iterator = wcsParameters.keySet().iterator(); iterator.hasNext();) {
574
            String method = iterator.next();
575
            model.addElement(method);
576
        }
577
        cboParameters.setSelectedIndex(0);
578
    }
579

    
580
    @SuppressWarnings("unchecked")
581
    private void initializeLstValues() {
582
        DefaultListModel<String> model = new DefaultListModel<>();
583
        lstValues.setModel(model);
584
        lstValues.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
585
    }
586

    
587
    private void updateLstValues(String selected) {
588
        Map<String, List<String>> wcsParameters = selectedCoverage.getWCSParameters();
589
        @SuppressWarnings("unchecked")
590
        DefaultListModel<String> model = (DefaultListModel<String>) lstValues.getModel();
591
        model.clear();
592
        List<String> values = wcsParameters.get(selected);
593
        for (Iterator<String> iterator = values.iterator(); iterator.hasNext();) {
594
            String value = (String) iterator.next();
595
            model.addElement(value);
596
        }
597
        if(!values.isEmpty()){
598
            lstValues.setSelectionInterval(0, values.size()-1);
599
        }
600
    }
601

    
602
    private void updateTxtCoverageName() {
603
        if (selectedCoverage != null) {
604
            if (!chkShowLayerNames.isSelected()) {
605
                txtCoverageName.setText(selectedCoverage.getTitle());
606
            } else {
607
                txtCoverageName.setText(selectedCoverage.toString());
608
            }
609
        } else {
610
            txtCoverageName.setText("");
611
        }
612
    }
613

    
614

    
615
    @SuppressWarnings("unchecked")
616
    private void initializeLstCoverageSelector() {
617
        final DefaultListModel<WCSCoverageData> model = new DefaultListModel<>();
618

    
619
        lstCoverageSelector.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
620

    
621
        model.addListDataListener(new ListDataListener() {
622

    
623
            @Override
624
            public void intervalRemoved(ListDataEvent e) {
625
                updateLstProjections();
626
            }
627

    
628
            @Override
629
            public void intervalAdded(ListDataEvent e) {
630
                updateLstProjections();
631
            }
632

    
633
            @Override
634
            public void contentsChanged(ListDataEvent e) {
635
                updateLstProjections();
636
            }
637
        });
638

    
639
        lstCoverageSelector.addMouseListener(new MouseAdapter() {
640

    
641
            @Override
642
            public void mouseClicked(MouseEvent e) {
643
                if (e.getClickCount() == 2) {
644
                    doSelectCoverage(lstCoverageSelector.getSelectedValue());
645
                }
646
            }
647
        });
648

    
649
        lstCoverageSelector.setCellRenderer(new DefaultListCellRenderer() {
650

    
651
            /**
652
             *
653
             */
654
            private static final long serialVersionUID = 1430645485530520129L;
655
            JTextArea comp = new JTextArea();
656

    
657
            @SuppressWarnings("rawtypes")
658
            @Override
659
            public Component getListCellRendererComponent(javax.swing.JList list, Object value, int index,
660
                boolean isSelected, boolean cellHasFocus) {
661

    
662
                if (value instanceof WCSCoverageData) {
663
                    WCSCoverageData node = (WCSCoverageData) value;
664
                    String text = "";
665
                    if (!chkShowLayerNames.isSelected()) {
666
                        text = node.getTitle();
667
                    } else {
668
                        text = node.toString();
669
                    }
670
                    comp.setText(text);
671
                }
672
                if (isSelected) {
673
                    comp.setBackground(list.getSelectionBackground());
674
                    comp.setForeground(list.getSelectionForeground());
675
                } else {
676
                    comp.setBackground(list.getBackground());
677
                    comp.setForeground(list.getForeground());
678
                }
679
                return comp;
680
            }
681
        });
682
        lstCoverageSelector.setModel(model);
683
    }
684

    
685
    private void updateLstCoverageSelector() {
686
         @SuppressWarnings("unchecked")
687
        DefaultListModel<WCSCoverageData> model = ((DefaultListModel<WCSCoverageData>)lstCoverageSelector.getModel());
688
        model.clear();
689
        if(serverExplorer!=null){
690
            List<WCSCoverageData> coverages = serverExplorer.getCoverageList();
691
            for (Iterator<WCSCoverageData> iterator = coverages.iterator(); iterator.hasNext();) {
692
                WCSCoverageData wcsCoverageData = iterator.next();
693
                model.addElement(wcsCoverageData);
694
            }
695
        }
696
    }
697

    
698
    @SuppressWarnings("unchecked")
699
    private void initializeLstProjections() {
700

    
701
        final DefaultListModel<String> model = new DefaultListModel<>();
702

    
703
        lstProjections.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
704

    
705
        ListSelectionModel selectionModel = lstProjections.getSelectionModel();
706
        selectionModel.addListSelectionListener(new ListSelectionListener() {
707
            @Override
708
            public void valueChanged(ListSelectionEvent e) {
709
                int selectedRow = lstProjections.getSelectedIndex();
710
                if (selectedRow >= 0 && selectedRow < model.getSize()) {
711
                    projection = model.getElementAt(selectedRow);
712
                    firePropertyChange("all", null, null);
713
                }
714
            }
715
        });
716

    
717
        lstProjections.setModel(model);
718
    }
719

    
720
    @SuppressWarnings("unchecked")
721
    private void updateLstProjections() {
722

    
723
        DefaultListModel<String> model = (DefaultListModel<String>) lstProjections.getModel();
724
        model.clear();
725
        if(selectedCoverage!=null){
726
            List<String> srss = selectedCoverage.getSrss();
727
            for (Iterator<String> iterator = srss.iterator(); iterator.hasNext();) {
728
                String srs = iterator.next();
729
                model.addElement(srs);
730
            }
731
        }
732
        selectProjection();
733
    }
734

    
735
    @SuppressWarnings("unchecked")
736
    private void selectProjection() {
737
        if(!StringUtils.isEmpty(projection)){
738
            DefaultListModel<String> model = (DefaultListModel<String>) lstProjections.getModel();
739
            for (int i=0; i<model.size(); i++) {
740
                if(projection.equals(model.elementAt(i))){
741
                    lstProjections.setSelectedIndex(i);
742
                    firePropertyChange("all", null, null);
743
                    return;
744
                }
745
            }
746
        } else if(mapCtxProj != null){
747
            DefaultListModel<String> model = (DefaultListModel<String>) lstProjections.getModel();
748
            for (int i=0; i<model.size(); i++) {
749

    
750
                String srs = model.elementAt(i);
751
                try{
752
                    IProjection crs=CRSFactory.getCRS(model.elementAt(i));
753
                    if(crs!=null && crs.equals(mapCtxProj)){
754
                        lstProjections.setSelectedIndex(i);
755
                        firePropertyChange("all", null, null);
756
                        return;
757
                    }
758
                }catch(Exception e){
759
                    logger.info("Can't get crs from: '"+srs+"' code", e);
760
                }
761
            }
762
        };
763
        if(lstProjections.getModel().getSize()>0){
764
            lstProjections.setSelectedIndex(0);
765
        }
766
        firePropertyChange("all", null, null);
767
    }
768

    
769
    @Override
770
    public OpenDataStoreParameters getParameters() {
771
        fillParametersInCoverageData(selectedCoverage);
772
        return selectedCoverage.getParameters();
773
    }
774

    
775
    private WCSCoverageData fillParametersInCoverageData(WCSCoverageData node) {
776

    
777
        WCSRasterProviderParameters parameters = (WCSRasterProviderParameters) node.getParameters();
778
        parameters.setFormat(format);
779
        if(chkUseInterpolation.isSelected()){
780
            parameters.setInterpolation((String) cboInterpolationMethod.getSelectedItem());
781
        }
782
        try {
783
            IProjection crs = CRSFactory.getCRS(projection);
784
            parameters.setCRS(crs);
785
        } catch (Exception e) {
786
            logger.info("Can't get crs from: '" + projection + "' code", e);
787
        }
788
        @SuppressWarnings("unchecked")
789
        List<String> bands = lstValues.getSelectedValuesList();
790
        parameters.setBands(bands);
791

    
792
        return node;
793
    }
794

    
795
    @Override
796
    public boolean isTiled() {
797
        return chkLocalCache.isSelected();
798
    }
799

    
800
    @Override
801
    public boolean refreshLocalCache() {
802
        return chkRefreshLocalCache.isSelected();
803
    }
804

    
805
    @Override
806
    public boolean areSettingsValid() {
807
        return serverExplorer!=null && format!=null && projection!=null && selectedCoverage!=null && !lstValues.getSelectedValuesList().isEmpty();
808
    }
809
}