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

History | View | Annotate | Download (15.1 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.JPanel;
34

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

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

    
91
        /**
92
         * This is the default constructor
93
         */
94
        public WMTSWizard() {
95
                super();
96
                firstPage = 0;
97
                page = firstPage;
98
                initialize();
99
                
100
                IWindow[] windows = PluginServices.getMDIManager().getAllWindows();
101
                for (int i = 0; i < windows.length; i++) {
102
                        if(windows[i] instanceof AbstractViewPanel)
103
                                proj = ((AbstractViewPanel)windows[i]).getProjection();
104
                }
105
                cancel = new CancelTaskImpl();
106
        }
107
        
108
        /**
109
         * This method initializes this
110
         */
111
        private void initialize() {
112
                setTabName("WMTS");
113
                setLayout(new GridBagLayout());
114
                GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
115
                gridBagConstraints1.fill = GridBagConstraints.BOTH;
116
                gridBagConstraints1.weightx = 1.0;
117
                gridBagConstraints1.weighty = 1.0;
118
                gridBagConstraints1.insets = new java.awt.Insets(2, 12, 10, 12);
119
                
120
                setVisible(true);
121
                add(getIserverPanel(), gridBagConstraints1);
122
                
123
                gridBagConstraints1.insets = new java.awt.Insets(2, 0, 10, 0);
124
                add(getPanelPage2(), gridBagConstraints1);
125
                gridBagConstraints1.fill = GridBagConstraints.HORIZONTAL;
126
                gridBagConstraints1.anchor = GridBagConstraints.EAST;
127
                gridBagConstraints1.weighty = 0;
128
                gridBagConstraints1.gridy = 1;
129
                add(getNextPrevPanel(), gridBagConstraints1);
130
                activarVisualizarBotones();
131
                loadServers();
132
        }
133
        
134
        /**
135
         * This method initializes jPanel
136
         *
137
         * @return javax.swing.JPanel
138
         */
139
        public NextPrevPanel getNextPrevPanel() {
140
                if (nextPrevPanel == null) {
141
                        nextPrevPanel = new NextPrevPanel();
142
                        nextPrevPanel.getBtnNext().addActionListener(this);
143
                        nextPrevPanel.getBtnPrev().addActionListener(this);
144
                }
145
                return nextPrevPanel;
146
        }
147

    
148
        /**
149
         * DOCUMENT ME!
150
         *
151
         * @param host DOCUMENT ME!
152
         */
153
        private void addHost(String host) {
154
                host = host.trim();
155

    
156
                ServerDataPersistence persistence = new ServerDataPersistence(this,ServerData.SERVER_TYPE_WMTS);
157
                persistence.addServerData(new ServerData(host, ServerData.SERVER_TYPE_WMTS));
158
                persistence.setPersistent();
159
        }
160
        
161
        /**
162
         * Thread to connect to a WMTS server
163
         * @author Nacho Brodin (nachobrodin@gmail.com)
164
         */
165
        public class ConnectThread extends Thread {
166
                private ICancellable              cancel      = null;
167
                private WMTSServerExplorer        explorer    = null;
168
                private WMTSWizard                wizard      = null;
169
                
170
                public ConnectThread(ICancellable cancel, WMTSServerExplorer explorer, WMTSWizard wizard) {
171
                        this.cancel = cancel;
172
                        this.explorer = explorer;
173
                        this.wizard = wizard;
174
                }
175
                
176
            public void run() {
177
                    try {
178
                            explorer.connect(cancel);
179
                        } catch (WMTSException e) {
180
                                serverPanel.getTxtAbstract().setText("Connection closed... \n" + e.getMessage());
181
                                RasterToolsUtil.messageBoxError("The connection cannot be established", this, e);
182
                                return;
183
                        } finally {
184
                                ((CancelTaskImpl)cancel).setCanceled(false);
185
                        }
186
                        
187
                        DataStoreParameters parameters = explorer.getStoreParameters();
188
                        if(parameters instanceof WMTSDataParameters) {
189
                                storeParams = (WMTSDataParameters) parameters;
190
                        }
191
                        
192
                        if(parameters instanceof TileDataParameters) {
193
                                DataParameters p = ((TileDataParameters) parameters).getDataParameters();
194
                                if(p instanceof WMTSDataParameters)
195
                                        storeParams = (WMTSDataParameters) p;
196
                        }
197
                        
198
                        wizard.rellenarControles();
199
            }
200
        }
201

    
202
        /**
203
         * DOCUMENT ME!
204
         */
205
        private void rellenarControles() {
206
                try {
207
                        String host = serverPanel.getTxtHost().getModel().getSelectedItem().toString();
208
                        WMTSServiceIdentification id = explorer.getServiceIdentification();
209
                        
210
                        serverPanel.getJLabelTitle().setText(id.getTitle());
211
                        nextPrevPanel.getJLabelServerTypeValue().setText(id.getServiceType());
212
                        serverPanel.getTxtAbstract().setText(id.getAbstract());
213

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

    
322
        /**
323
         * DOCUMENT ME!
324
         */
325
        protected void activarVisualizarBotones() {
326
                if (page == firstPage) {
327
                        nextPrevPanel.getBtnPrev().setEnabled(false);
328
                        nextPrevPanel.getBtnPrev().setVisible(true);
329

    
330
                        if (connected) {
331
                                nextPrevPanel.getBtnNext().setEnabled(true);
332
                        } else {
333
                                nextPrevPanel.getBtnNext().setEnabled(false);
334
                        }
335
                } else if (page < wmtsParamsPanel.getNumTabs()) {
336
                        nextPrevPanel.getBtnNext().setEnabled(true);
337
                        nextPrevPanel.getBtnNext().setVisible(true);
338
                        nextPrevPanel.getBtnPrev().setEnabled(true);
339
                        nextPrevPanel.getBtnPrev().setVisible(true);
340
                        if (wmtsParamsPanel.nextEnabledPage()==-1) {
341
                                nextPrevPanel.getBtnNext().setEnabled(false);
342
                        }
343
                        listenerSupport.callStateChanged(wmtsParamsPanel.isCorrectlyConfigured());
344
                } else if (page == wmtsParamsPanel.getNumTabs()) {
345
                        nextPrevPanel.getBtnNext().setVisible(false);
346
                        nextPrevPanel.getBtnNext().setEnabled(false);
347
                        listenerSupport.callStateChanged(wmtsParamsPanel.isCorrectlyConfigured());
348
                }
349
        }
350

    
351
        /**
352
         * This method initializes txtHost
353
         * @return javax.swing.JTextField
354
         */
355
        private void loadServers() {
356
                ServerDataPersistence persistence = new ServerDataPersistence(this, ServerData.SERVER_TYPE_WMTS);
357
                ServerData[] servers = persistence.getArrayOfServerData();
358

    
359
                if (servers.length == 0) {
360
                        PluginServices ps = PluginServices.getPluginServices(this);
361
                        XMLEntity xml = ps.getPersistentXML();
362
                        try {
363
                                String[] oldServers = xml.getStringArrayProperty("wmts-servers");
364
                                servers = new ServerData[oldServers.length];
365
                                for (int i = 0; i < oldServers.length; i++) {
366
                                        servers[i] = new ServerData(oldServers[i], ServerData.SERVER_TYPE_WMTS);
367
                                }
368
                                xml.remove("wmts-servers");
369
                                ps.setPersistentXML(xml);
370
                        } catch (NotExistInXMLEntity e) {
371
                                // Old servers doesn't exist
372
                                servers = new ServerData[3];
373
                                servers[0] = new ServerData("http://www.ign.es/wmts/ign-base", ServerData.SERVER_TYPE_WMTS);
374
                                servers[1] = new ServerData("http://maps.opengeo.org/geowebcache/service/wmts", ServerData.SERVER_TYPE_WMTS);
375
                                servers[2] = new ServerData("http://v2.suite.opengeo.org/geoserver/gwc/service/wmts/", ServerData.SERVER_TYPE_WMTS);
376
                        }
377

    
378
                        for (int i = 0; i < servers.length; i++) {
379
                                persistence.addServerData(servers[i]);
380
                        }
381
                        persistence.setPersistent();
382
                }
383

    
384
                serverPanel.getTxtHost().setServerList(servers);
385
        }
386

    
387
        /**
388
         * DOCUMENT ME!
389
         * @param listener
390
         */
391
        public void addWizardListener(WizardListener listener) {
392
                listenerSupport.addWizardListener(listener);
393
        }
394

    
395
        /**
396
         * DOCUMENT ME!
397
         * @param listener
398
         */
399
        public void removeWizardListener(WizardListener listener) {
400
                listenerSupport.removeWizardListener(listener);
401
        }
402

    
403
        /**
404
         * Devuelve el host que est� escrito en el cuadro de texto del host o null
405
         * en caso de que no haya nada escrito o est� mal escrito
406
         *
407
         * @return URL del host
408
         */
409
        public URL getHost() {
410
                try {
411
                        if ((serverPanel.getTxtHost() == null)|| (serverPanel.getTxtHost().getModel().getSelectedItem() == null)) {
412
                                return new URL(explorer.getHost());
413
                        } else {
414
                                return new URL(serverPanel.getTxtHost().getModel().getSelectedItem().toString());
415
                        }
416
                } catch (MalformedURLException e) {
417
                        return null;
418
                }
419
        }
420

    
421
        public void initWizard() {
422
        }
423
        
424
        @Override
425
        public DataStoreParameters[] getParameters() {
426
                return null;
427
        }
428

    
429
        @Override
430
        public void close() {
431
        }
432

    
433
        @Override
434
        public void execute() {
435
                try {
436
                        wmtsParamsPanel.setDeleteCache(serverPanel.getChkCaching().isSelected());
437
                        FLyrWMTS[] layerList = wmtsParamsPanel.getLayers();
438
                        for (int i = 0; i < layerList.length; i++) {
439
                                getMapCtrl().getMapContext().getLayers().addLayer(layerList[i]);
440
                        }
441
                } catch (LoadLayerException e) {
442
                        e.printStackTrace();
443
                }
444
        }
445
}  //  @jve:decl-index=0:visual-constraint="10,10"