Statistics
| Revision:

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

History | View | Annotate | Download (16.5 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.HeadlessException;
28
import java.awt.event.ActionEvent;
29
import java.awt.event.ActionListener;
30
import java.io.IOException;
31
import java.net.MalformedURLException;
32
import java.net.URL;
33
import java.net.UnknownHostException;
34
import java.util.prefs.Preferences;
35

    
36
import javax.swing.JOptionPane;
37
import javax.swing.JPanel;
38

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

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

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

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

    
176
                ServerDataPersistence persistence = new ServerDataPersistence(this,ServerData.SERVER_TYPE_WMTS);
177
                persistence.addServerData(new ServerData(host, ServerData.SERVER_TYPE_WMTS));
178
                persistence.setPersistent();
179
        }
180
        
181
        /**
182
         * Thread to connect to a WMTS server
183
         * @author Nacho Brodin (nachobrodin@gmail.com)
184
         */
185
        public class ConnectThread extends Thread {
186
                private ICancellable              cancel      = null;
187
                private WMTSServerExplorer        explorer    = null;
188
                private WMTSWizard                wizard      = null;
189
                
190
                public ConnectThread(ICancellable cancel, WMTSServerExplorer explorer, WMTSWizard wizard) {
191
                        this.cancel = cancel;
192
                        this.explorer = explorer;
193
                        this.wizard = wizard;
194
                }
195
                
196
            public void run() {
197
                    if(!checkHostAndNetwork())
198
                            return;
199
                    
200
                    try {
201
                            explorer.connect(cancel);
202
                        } catch (WMTSException e) {
203
                                serverPanel.getTxtAbstract().setText("Connection closed... \n" + e.getMessage());
204
                                JOptionPane.showMessageDialog(null, Messages.getText("wmts_cant_connect"), Messages.getText("Error"), JOptionPane.ERROR_MESSAGE);
205
                                return;
206
                        } finally {
207
                                ((CancelTaskImpl)cancel).setCanceled(false);
208
                        }
209
                        
210
                        DataStoreParameters parameters = explorer.getStoreParameters();
211
                        if(parameters instanceof WMTSDataParameters) {
212
                                storeParams = (WMTSDataParameters) parameters;
213
                        }
214
                        
215
                        if(parameters instanceof TileDataParameters) {
216
                                DataParameters p = ((TileDataParameters) parameters).getDataParameters();
217
                                if(p instanceof WMTSDataParameters)
218
                                        storeParams = (WMTSDataParameters) p;
219
                        }
220
                        
221
                        wizard.rellenarControles();
222
            }
223
        }
224
        
225
        /**
226
         * Checks if the network and host are reachable
227
         * @return true if both are reachable and false if they are not
228
         */
229
        private boolean checkHostAndNetwork() {
230
                if(!explorer.isHostReachable()) {
231
                        JOptionPane.showMessageDialog(null, Messages.getText("host_unreachable"), Messages.getText("Error"), JOptionPane.ERROR_MESSAGE);
232
                        serverPanel.getTxtAbstract().setText("Connection closed... \n");
233
                        return false;
234
                }
235
                return true;
236
        }
237

    
238
        /**
239
         * DOCUMENT ME!
240
         */
241
        private void rellenarControles() {
242
                try {
243
                        String host = serverPanel.getTxtHost().getModel().getSelectedItem().toString();
244
                        WMTSServiceIdentification id = explorer.getOGCClient().getServiceIdentification();
245
                        
246
                        serverPanel.getJLabelTitle().setText(id.getTitle());
247
                        nextPrevPanel.getJLabelServerTypeValue().setText(id.getServiceType());
248
                        serverPanel.getTxtAbstract().setText(id.getAbstract());
249

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

    
358
        /**
359
         * DOCUMENT ME!
360
         */
361
        protected void activarVisualizarBotones() {
362
                if (page == firstPage) {
363
                        nextPrevPanel.getBtnPrev().setEnabled(false);
364
                        nextPrevPanel.getBtnPrev().setVisible(true);
365

    
366
                        if (connected) {
367
                                nextPrevPanel.getBtnNext().setEnabled(true);
368
                        } else {
369
                                nextPrevPanel.getBtnNext().setEnabled(false);
370
                        }
371
                } else if (page < wmtsParamsPanel.getNumTabs()) {
372
                        nextPrevPanel.getBtnNext().setEnabled(true);
373
                        nextPrevPanel.getBtnNext().setVisible(true);
374
                        nextPrevPanel.getBtnPrev().setEnabled(true);
375
                        nextPrevPanel.getBtnPrev().setVisible(true);
376
                        if (wmtsParamsPanel.nextEnabledPage()==-1) {
377
                                nextPrevPanel.getBtnNext().setEnabled(false);
378
                        }
379
                        getWizardListenerSupport().callStateChanged(wmtsParamsPanel.isCorrectlyConfigured());
380
                } else if (page == wmtsParamsPanel.getNumTabs()) {
381
                        nextPrevPanel.getBtnNext().setVisible(false);
382
                        nextPrevPanel.getBtnNext().setEnabled(false);
383
                        getWizardListenerSupport().callStateChanged(wmtsParamsPanel.isCorrectlyConfigured());
384
                }
385
        }
386

    
387
        /**
388
         * This method initializes txtHost
389
         * @return javax.swing.JTextField
390
         */
391
        private void loadServers() {
392
                ServerDataPersistence persistence = new ServerDataPersistence(this, ServerData.SERVER_TYPE_WMTS);
393
                ServerData[] servers = persistence.getArrayOfServerData();
394

    
395
                if (servers.length == 0) {
396
                        PluginServices ps = PluginServices.getPluginServices(this);
397
                        XMLEntity xml = ps.getPersistentXML();
398
                        try {
399
                                String[] oldServers = xml.getStringArrayProperty("wmts-servers");
400
                                servers = new ServerData[oldServers.length];
401
                                for (int i = 0; i < oldServers.length; i++) {
402
                                        servers[i] = new ServerData(oldServers[i], ServerData.SERVER_TYPE_WMTS);
403
                                }
404
                                xml.remove("wmts-servers");
405
                                ps.setPersistentXML(xml);
406
                        } catch (NotExistInXMLEntity e) {
407
                                // Old servers doesn't exist
408
                                servers = new ServerData[2];
409
                                servers[0] = new ServerData("http://v2.suite.opengeo.org/geoserver/gwc/service/wmts/", ServerData.SERVER_TYPE_WMTS);
410
                                servers[1] = new ServerData("http://maps.opengeo.org/geowebcache/service/wmts", ServerData.SERVER_TYPE_WMTS);
411
                                
412
                                /*servers[0] = new ServerData("http://www.ign.es/wmts/ign-base", ServerData.SERVER_TYPE_WMTS);
413
                                servers[1] = new ServerData("http://maps.opengeo.org/geowebcache/service/wmts", ServerData.SERVER_TYPE_WMTS);
414
                                servers[2] = new ServerData("http://v2.suite.opengeo.org/geoserver/gwc/service/wmts/", ServerData.SERVER_TYPE_WMTS);*/
415
                        }
416

    
417
                        for (int i = 0; i < servers.length; i++) {
418
                                persistence.addServerData(servers[i]);
419
                        }
420
                        persistence.setPersistent();
421
                }
422

    
423
                serverPanel.getTxtHost().setServerList(servers);
424
        }
425

    
426
        /**
427
         * DOCUMENT ME!
428
         * @param listener
429
         */
430
        public void addWizardListener(WizardListener listener) {
431
                getWizardListenerSupport().addWizardListener(listener);
432
                getWizardListenerSupport().callStateChanged(false);
433
        }
434

    
435
        /**
436
         * DOCUMENT ME!
437
         * @param listener
438
         */
439
        public void removeWizardListener(WizardListener listener) {
440
                getWizardListenerSupport().removeWizardListener(listener);
441
        }
442

    
443
        /**
444
         * Devuelve el host que est� escrito en el cuadro de texto del host o null
445
         * en caso de que no haya nada escrito o est� mal escrito
446
         *
447
         * @return URL del host
448
         */
449
        public URL getHost() {
450
                try {
451
                        if ((serverPanel.getTxtHost() == null)|| (serverPanel.getTxtHost().getModel().getSelectedItem() == null)) {
452
                                return new URL(explorer.getHost());
453
                        } else {
454
                                return new URL(serverPanel.getTxtHost().getModel().getSelectedItem().toString());
455
                        }
456
                } catch (MalformedURLException e) {
457
                        return null;
458
                }
459
        }
460

    
461
        public void initWizard() {
462
        }
463
        
464
        @Override
465
        public DataStoreParameters[] getParameters() {
466
                return null;
467
        }
468

    
469
        @Override
470
        public void close() {
471
        }
472

    
473
        @Override
474
        public void execute() {
475
                try {
476
                        wmtsParamsPanel.setDeleteCache(serverPanel.getChkCaching().isSelected());
477
                        FLyrWMTS[] layerList = wmtsParamsPanel.getLayers();
478
                        for (int i = 0; i < layerList.length; i++) {
479
                                getMapCtrl().getMapContext().getLayers().addLayer(layerList[i]);
480
                        }
481
                } catch (LoadLayerException e) {
482
                        e.printStackTrace();
483
                }
484
        }
485
}  //  @jve:decl-index=0:visual-constraint="10,10"