Statistics
| Revision:

gvsig-raster / org.gvsig.raster.wmts / trunk / org.gvsig.raster.wmts / org.gvsig.raster.wmts.app / org.gvsig.raster.wmts.app.wmtsclient / src / main / java / org / gvsig / raster / wmts / app / wmtsclient / gui / wizard / WMTSWizard.java @ 1361

History | View | Annotate | Download (15.7 KB)

1
/* gvSIG. Geographic Information System of the Valencian Government
2
*
3
* Copyright (C) 2007-2008 Infrastructures and Transports Department
4
* of the Valencian Government (CIT)
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
*/
22
 
23
package org.gvsig.raster.wmts.app.wmtsclient.gui.wizard;
24

    
25
import java.awt.GridBagConstraints;
26
import java.awt.GridBagLayout;
27
import java.awt.event.ActionEvent;
28
import java.awt.event.ActionListener;
29
import java.net.MalformedURLException;
30
import java.net.URL;
31
import java.util.prefs.Preferences;
32

    
33
import javax.swing.JOptionPane;
34
import javax.swing.JPanel;
35

    
36
import org.cresques.cts.IProjection;
37
import org.gvsig.andami.PluginServices;
38
import org.gvsig.andami.persistence.serverData.ServerDataPersistence;
39
import org.gvsig.andami.ui.mdiManager.IWindow;
40
import org.gvsig.app.gui.WizardPanel;
41
import org.gvsig.app.gui.wizards.WizardListener;
42
import org.gvsig.app.gui.wizards.WizardListenerSupport;
43
import org.gvsig.app.project.documents.view.gui.AbstractViewPanel;
44
import org.gvsig.compat.net.ICancellable;
45
import org.gvsig.fmap.dal.DALLocator;
46
import org.gvsig.fmap.dal.DataManager;
47
import org.gvsig.fmap.dal.DataParameters;
48
import org.gvsig.fmap.dal.DataStoreParameters;
49
import org.gvsig.fmap.dal.coverage.store.parameter.TileDataParameters;
50
import org.gvsig.fmap.dal.exception.InitializeException;
51
import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
52
import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
53
import org.gvsig.fmap.mapcontext.exceptions.LoadLayerException;
54
import org.gvsig.gui.beans.Messages;
55
import org.gvsig.raster.tools.app.basic.RasterToolsUtil;
56
import org.gvsig.raster.util.CancelTaskImpl;
57
import org.gvsig.raster.wmts.app.wmtsclient.gui.panel.WMTSParamsPanel;
58
import org.gvsig.raster.wmts.app.wmtsclient.gui.panel.main.IServerPanel;
59
import org.gvsig.raster.wmts.app.wmtsclient.gui.panel.main.NextPrevPanel;
60
import org.gvsig.raster.wmts.app.wmtsclient.layer.FLyrWMTS;
61
import org.gvsig.raster.wmts.io.WMTSDataParameters;
62
import org.gvsig.raster.wmts.io.WMTSServerExplorer;
63
import org.gvsig.raster.wmts.io.WMTSServerExplorerParameters;
64
import org.gvsig.remoteclient.wmts.exception.WMTSException;
65
import org.gvsig.remoteclient.wmts.struct.WMTSServiceIdentification;
66
import org.gvsig.utils.NotExistInXMLEntity;
67
import org.gvsig.utils.XMLEntity;
68
import org.gvsig.utils.swing.jcomboServer.ServerData;
69

    
70
/**
71
 * The WMTS properties container panel.
72
 * @author Nacho Brodin (nachobrodin@gmail.com)
73
 */
74
@SuppressWarnings({ "unused", "deprecation" })
75
public class WMTSWizard extends WizardPanel implements ActionListener {
76
        private static final long             serialVersionUID   = 1L;
77
        //private static Logger               logger             = Logger.getLogger(WMTSWizard.class.getName());
78
        protected int                         page               = 0;
79
        protected boolean                     connected          = false;
80
        private IServerPanel                  serverPanel        = null;
81
        private NextPrevPanel                 nextPrevPanel      = null;
82
        
83
        private WizardListenerSupport         listenerSupport    = null;
84
        protected WMTSParamsPanel             wmtsParamsPanel    = null;
85
        private static Preferences            fPrefs             = Preferences.userRoot().node( "gvsig.wmts-wizard" );
86
        private boolean                       refreshing         = fPrefs.getBoolean("refresh_capabilities", false);
87
        protected int                         firstPage          = 0;
88
        private IProjection                   proj               = null;
89
        private ICancellable                  cancel             = null;
90
        private WMTSDataParameters            storeParams        = null;
91
        private WMTSServerExplorer            explorer           = null;
92

    
93
        /**
94
         * This is the default constructor
95
         */
96
        public WMTSWizard() {
97
                super();
98
                firstPage = 0;
99
                page = firstPage;
100
                initialize();
101
                
102
                IWindow[] windows = PluginServices.getMDIManager().getAllWindows();
103
                for (int i = 0; i < windows.length; i++) {
104
                        if(windows[i] instanceof AbstractViewPanel)
105
                                proj = ((AbstractViewPanel)windows[i]).getProjection();
106
                }
107
                cancel = new CancelTaskImpl();
108
        }
109
        
110
        /**
111
         * This method initializes this
112
         */
113
        private void initialize() {
114
                setTabName("WMTS");
115
                setLayout(new GridBagLayout());
116
                GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
117
                gridBagConstraints1.fill = GridBagConstraints.BOTH;
118
                gridBagConstraints1.weightx = 1.0;
119
                gridBagConstraints1.weighty = 1.0;
120
                gridBagConstraints1.insets = new java.awt.Insets(2, 12, 10, 12);
121
                
122
                setVisible(true);
123
                add(getIserverPanel(), gridBagConstraints1);
124
                
125
                gridBagConstraints1.insets = new java.awt.Insets(2, 0, 10, 0);
126
                add(getPanelPage2(), gridBagConstraints1);
127
                gridBagConstraints1.fill = GridBagConstraints.HORIZONTAL;
128
                gridBagConstraints1.anchor = GridBagConstraints.EAST;
129
                gridBagConstraints1.weighty = 0;
130
                gridBagConstraints1.gridy = 1;
131
                add(getNextPrevPanel(), gridBagConstraints1);
132
                activarVisualizarBotones();
133
                loadServers();
134
        }
135
        
136
        /**
137
         * This method checks for the options selected within the configuration
138
         * dialog are correct.
139
         *
140
         * @return true if you're done, false if not.
141
         */
142
        public boolean areSettingsValid() {
143
                return wmtsParamsPanel.isCorrectlyConfigured();
144
        }
145
        
146
        private WizardListenerSupport getWizardListenerSupport() {
147
                if(listenerSupport == null)
148
                        listenerSupport = new WizardListenerSupport();
149
                return listenerSupport;
150
        }
151
        
152
        /**
153
         * This method initializes jPanel
154
         *
155
         * @return javax.swing.JPanel
156
         */
157
        public NextPrevPanel getNextPrevPanel() {
158
                if (nextPrevPanel == null) {
159
                        nextPrevPanel = new NextPrevPanel();
160
                        nextPrevPanel.getBtnNext().addActionListener(this);
161
                        nextPrevPanel.getBtnPrev().addActionListener(this);
162
                }
163
                return nextPrevPanel;
164
        }
165

    
166
        /**
167
         * DOCUMENT ME!
168
         *
169
         * @param host DOCUMENT ME!
170
         */
171
        private void addHost(String host) {
172
                host = host.trim();
173

    
174
                ServerDataPersistence persistence = new ServerDataPersistence(this,ServerData.SERVER_TYPE_WMTS);
175
                persistence.addServerData(new ServerData(host, ServerData.SERVER_TYPE_WMTS));
176
                persistence.setPersistent();
177
        }
178
        
179
        /**
180
         * Thread to connect to a WMTS server
181
         * @author Nacho Brodin (nachobrodin@gmail.com)
182
         */
183
        public class ConnectThread extends Thread {
184
                private ICancellable              cancel      = null;
185
                private WMTSServerExplorer        explorer    = null;
186
                private WMTSWizard                wizard      = null;
187
                
188
                public ConnectThread(ICancellable cancel, WMTSServerExplorer explorer, WMTSWizard wizard) {
189
                        this.cancel = cancel;
190
                        this.explorer = explorer;
191
                        this.wizard = wizard;
192
                }
193
                
194
            public void run() {
195
                    try {
196
                            explorer.connect(cancel);
197
                        } catch (WMTSException e) {
198
                                serverPanel.getTxtAbstract().setText("Connection closed... \n" + e.getMessage());
199
                                JOptionPane.showMessageDialog(null, Messages.getText("wmts_cant_connect"), Messages.getText("Error"), JOptionPane.ERROR_MESSAGE);
200
                                return;
201
                        } finally {
202
                                ((CancelTaskImpl)cancel).setCanceled(false);
203
                        }
204
                        
205
                        DataStoreParameters parameters = explorer.getStoreParameters();
206
                        if(parameters instanceof WMTSDataParameters) {
207
                                storeParams = (WMTSDataParameters) parameters;
208
                        }
209
                        
210
                        if(parameters instanceof TileDataParameters) {
211
                                DataParameters p = ((TileDataParameters) parameters).getDataParameters();
212
                                if(p instanceof WMTSDataParameters)
213
                                        storeParams = (WMTSDataParameters) p;
214
                        }
215
                        
216
                        wizard.rellenarControles();
217
            }
218
        }
219

    
220
        /**
221
         * DOCUMENT ME!
222
         */
223
        private void rellenarControles() {
224
                try {
225
                        String host = serverPanel.getTxtHost().getModel().getSelectedItem().toString();
226
                        WMTSServiceIdentification id = explorer.getServiceIdentification();
227
                        
228
                        serverPanel.getJLabelTitle().setText(id.getTitle());
229
                        nextPrevPanel.getJLabelServerTypeValue().setText(id.getServiceType());
230
                        serverPanel.getTxtAbstract().setText(id.getAbstract());
231

    
232
                        addHost(host);
233
                        wmtsParamsPanel.setWizardData(explorer);
234
                        connected = true;
235
                        activarVisualizarBotones();
236
                } catch (Exception e) {
237
                        if (e.getMessage() == null) {
238
                                serverPanel.getTxtAbstract().setText(PluginServices.getText(this,"error"));
239
                        } else {
240
                                serverPanel.getTxtAbstract().setText(e.getMessage());
241
                        }
242
                        getWizardListenerSupport().callError(e);
243
                        nextPrevPanel.getBtnNext().setEnabled(false);
244
                        nextPrevPanel.getBtnPrev().setEnabled(true);
245
                } finally {
246
                        serverPanel.getBtnCancel().setEnabled(false);
247
                }
248
        }
249
        
250
        public void actionPerformed(ActionEvent e) {
251
                if(e.getSource() == serverPanel.getBtnConnect()) {
252
                        serverPanel.getBtnCancel().setEnabled(true);
253
                        serverPanel.getTxtAbstract().setText("Trying to connect...");
254
                        
255
                        String host = serverPanel.getTxtHost().getModel().getSelectedItem().toString();
256
                        try {
257
                                DataManager datamanager = DALLocator.getDataManager();
258
                                WMTSServerExplorerParameters explorerParams = (WMTSServerExplorerParameters) datamanager.createServerExplorerParameters(WMTSServerExplorer.NAME);
259
                                explorerParams.setHost(host);
260
                                explorerParams.setLongitudeFirst(serverPanel.getChkInvertAxisOrder().isSelected());
261
                                
262
                                explorer = (WMTSServerExplorer) datamanager.createServerExplorer(explorerParams);
263
                                
264
                                ((CancelTaskImpl)cancel).setCanceled(false);
265
                                new ConnectThread(cancel, explorer, this).start();
266
                                
267
                        } catch (InitializeException e1) {
268
                                serverPanel.getTxtAbstract().setText("Error creating WMTS layer");
269
                        } catch (ProviderNotRegisteredException e1) {
270
                                serverPanel.getTxtAbstract().setText("Provider not registered. I cannot connect.");
271
                        } catch (ValidateDataParametersException e1) {
272
                                serverPanel.getTxtAbstract().setText("Parameters not valid. I cannot connect.");
273
                        }
274
                }
275
                
276
                if(e.getSource() == serverPanel.getBtnCancel()) {
277
                        serverPanel.getTxtAbstract().setText("Cancelled...");
278
                        ((CancelTaskImpl)cancel).setCanceled(true);
279
                        serverPanel.getBtnCancel().setEnabled(false);
280
                }
281
                
282
                if(e.getSource() == nextPrevPanel.getBtnPrev()) {
283
                        page --;
284
                        if (page > firstPage) {
285
                                wmtsParamsPanel.retrocedeTab();
286
                                page = wmtsParamsPanel.currentPage() + 1;
287
                                activarVisualizarBotones();
288
                        } else if (page == firstPage){
289
                                activarVisualizarBotones();
290
                                page = firstPage +1;
291
                                serverPanel.getJLabelTitle().setText("-");
292
                                serverPanel.getTxtAbstract().setText("");
293
                                wmtsParamsPanel.retrocedeTab();
294
                                getIserverPanel().setVisible(true);
295
                                getPanelPage2().setVisible(false);
296
                                nextPrevPanel.getBtnNext().setEnabled(false);
297
                                connected = false;
298
                        }
299
                        getWizardListenerSupport().callStateChanged(wmtsParamsPanel.isCorrectlyConfigured());
300
                }
301
                
302
                if(e.getSource() == nextPrevPanel.getBtnNext()) {
303
                        if (page > firstPage) {
304
                                // si page es mayor que cero, vamos enfocando las
305
                                // sucesivas SOLAPAS del WMTSParamsPanel
306
                                wmtsParamsPanel.avanzaTab();
307
                                page = wmtsParamsPanel.currentPage();
308
                        }
309
                        page++;
310
                        getIserverPanel().setVisible(false);
311
                        getPanelPage2().setVisible(true);
312
                        activarVisualizarBotones();
313
                }
314
        }
315
        
316
        private JPanel getIserverPanel() {
317
                if (serverPanel == null) {
318
                        serverPanel = new IServerPanel();
319
                        serverPanel.getBtnCancel().addActionListener(this);
320
                        serverPanel.getBtnConnect().addActionListener(this);
321
                }
322
                return serverPanel;
323
        }        
324
        
325
        protected JPanel getPanelPage2() {
326
                if (wmtsParamsPanel == null){
327
                        wmtsParamsPanel = new WMTSParamsPanel();
328
                        wmtsParamsPanel.setListenerSupport(getWizardListenerSupport());
329
                        wmtsParamsPanel.getJTabbedPane().addMouseListener(
330
                                        new java.awt.event.MouseAdapter() {
331
                                                public void mouseClicked(java.awt.event.MouseEvent e) {
332
                                                        page = wmtsParamsPanel.currentPage() + 1;
333
                                                        activarVisualizarBotones();
334
                                                }
335
                                        });
336
                }
337
                return wmtsParamsPanel;
338
        }
339

    
340
        /**
341
         * DOCUMENT ME!
342
         */
343
        protected void activarVisualizarBotones() {
344
                if (page == firstPage) {
345
                        nextPrevPanel.getBtnPrev().setEnabled(false);
346
                        nextPrevPanel.getBtnPrev().setVisible(true);
347

    
348
                        if (connected) {
349
                                nextPrevPanel.getBtnNext().setEnabled(true);
350
                        } else {
351
                                nextPrevPanel.getBtnNext().setEnabled(false);
352
                        }
353
                } else if (page < wmtsParamsPanel.getNumTabs()) {
354
                        nextPrevPanel.getBtnNext().setEnabled(true);
355
                        nextPrevPanel.getBtnNext().setVisible(true);
356
                        nextPrevPanel.getBtnPrev().setEnabled(true);
357
                        nextPrevPanel.getBtnPrev().setVisible(true);
358
                        if (wmtsParamsPanel.nextEnabledPage()==-1) {
359
                                nextPrevPanel.getBtnNext().setEnabled(false);
360
                        }
361
                        getWizardListenerSupport().callStateChanged(wmtsParamsPanel.isCorrectlyConfigured());
362
                } else if (page == wmtsParamsPanel.getNumTabs()) {
363
                        nextPrevPanel.getBtnNext().setVisible(false);
364
                        nextPrevPanel.getBtnNext().setEnabled(false);
365
                        getWizardListenerSupport().callStateChanged(wmtsParamsPanel.isCorrectlyConfigured());
366
                }
367
        }
368

    
369
        /**
370
         * This method initializes txtHost
371
         * @return javax.swing.JTextField
372
         */
373
        private void loadServers() {
374
                ServerDataPersistence persistence = new ServerDataPersistence(this, ServerData.SERVER_TYPE_WMTS);
375
                ServerData[] servers = persistence.getArrayOfServerData();
376

    
377
                if (servers.length == 0) {
378
                        PluginServices ps = PluginServices.getPluginServices(this);
379
                        XMLEntity xml = ps.getPersistentXML();
380
                        try {
381
                                String[] oldServers = xml.getStringArrayProperty("wmts-servers");
382
                                servers = new ServerData[oldServers.length];
383
                                for (int i = 0; i < oldServers.length; i++) {
384
                                        servers[i] = new ServerData(oldServers[i], ServerData.SERVER_TYPE_WMTS);
385
                                }
386
                                xml.remove("wmts-servers");
387
                                ps.setPersistentXML(xml);
388
                        } catch (NotExistInXMLEntity e) {
389
                                // Old servers doesn't exist
390
                                servers = new ServerData[3];
391
                                servers[0] = new ServerData("http://www.ign.es/wmts/ign-base", ServerData.SERVER_TYPE_WMTS);
392
                                servers[1] = new ServerData("http://maps.opengeo.org/geowebcache/service/wmts", ServerData.SERVER_TYPE_WMTS);
393
                                servers[2] = new ServerData("http://v2.suite.opengeo.org/geoserver/gwc/service/wmts/", ServerData.SERVER_TYPE_WMTS);
394
                        }
395

    
396
                        for (int i = 0; i < servers.length; i++) {
397
                                persistence.addServerData(servers[i]);
398
                        }
399
                        persistence.setPersistent();
400
                }
401

    
402
                serverPanel.getTxtHost().setServerList(servers);
403
        }
404

    
405
        /**
406
         * DOCUMENT ME!
407
         * @param listener
408
         */
409
        public void addWizardListener(WizardListener listener) {
410
                getWizardListenerSupport().addWizardListener(listener);
411
                getWizardListenerSupport().callStateChanged(false);
412
        }
413

    
414
        /**
415
         * DOCUMENT ME!
416
         * @param listener
417
         */
418
        public void removeWizardListener(WizardListener listener) {
419
                getWizardListenerSupport().removeWizardListener(listener);
420
        }
421

    
422
        /**
423
         * Devuelve el host que est� escrito en el cuadro de texto del host o null
424
         * en caso de que no haya nada escrito o est� mal escrito
425
         *
426
         * @return URL del host
427
         */
428
        public URL getHost() {
429
                try {
430
                        if ((serverPanel.getTxtHost() == null)|| (serverPanel.getTxtHost().getModel().getSelectedItem() == null)) {
431
                                return new URL(explorer.getHost());
432
                        } else {
433
                                return new URL(serverPanel.getTxtHost().getModel().getSelectedItem().toString());
434
                        }
435
                } catch (MalformedURLException e) {
436
                        return null;
437
                }
438
        }
439

    
440
        public void initWizard() {
441
        }
442
        
443
        @Override
444
        public DataStoreParameters[] getParameters() {
445
                return null;
446
        }
447

    
448
        @Override
449
        public void close() {
450
        }
451

    
452
        @Override
453
        public void execute() {
454
                try {
455
                        wmtsParamsPanel.setDeleteCache(serverPanel.getChkCaching().isSelected());
456
                        FLyrWMTS[] layerList = wmtsParamsPanel.getLayers();
457
                        for (int i = 0; i < layerList.length; i++) {
458
                                getMapCtrl().getMapContext().getLayers().addLayer(layerList[i]);
459
                        }
460
                } catch (LoadLayerException e) {
461
                        e.printStackTrace();
462
                }
463
        }
464
}  //  @jve:decl-index=0:visual-constraint="10,10"