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 @ 1812

History | View | Annotate | Download (15.9 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.util.CancelTaskImpl;
56
import org.gvsig.raster.wmts.app.wmtsclient.gui.panel.WMTSParamsPanel;
57
import org.gvsig.raster.wmts.app.wmtsclient.gui.panel.main.IServerPanel;
58
import org.gvsig.raster.wmts.app.wmtsclient.gui.panel.main.NextPrevPanel;
59
import org.gvsig.raster.wmts.app.wmtsclient.layer.FLyrWMTS;
60
import org.gvsig.raster.wmts.io.WMTSDataParameters;
61
import org.gvsig.raster.wmts.io.WMTSServerExplorer;
62
import org.gvsig.raster.wmts.io.WMTSServerExplorerParameters;
63
import org.gvsig.raster.wmts.ogc.exception.WMTSException;
64
import org.gvsig.raster.wmts.ogc.struct.WMTSServiceIdentification;
65
import org.gvsig.utils.NotExistInXMLEntity;
66
import org.gvsig.utils.XMLEntity;
67
import org.gvsig.utils.swing.jcomboServer.ServerData;
68

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

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

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

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

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

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

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

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

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

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

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

    
404
                serverPanel.getTxtHost().setServerList(servers);
405
        }
406

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

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

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

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

    
450
        @Override
451
        public void close() {
452
        }
453

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