Statistics
| Revision:

gvsig-raster / org.gvsig.raster / branches / org.gvsig.raster.2.4 / org.gvsig.wms / org.gvsig.wms.app / org.gvsig.wms.app.mainplugin / src / main / java / org / gvsig / wms / app / mainplugin / WMSAddLayerPanel.java @ 8845

History | View | Annotate | Download (9.23 KB)

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

    
25
import java.awt.BorderLayout;
26
import java.beans.PropertyChangeEvent;
27
import java.beans.PropertyChangeListener;
28
import java.io.File;
29
import java.util.List;
30

    
31
import javax.swing.JOptionPane;
32

    
33
import org.slf4j.Logger;
34
import org.slf4j.LoggerFactory;
35

    
36
import org.gvsig.andami.Launcher;
37
import org.gvsig.app.ApplicationLocator;
38
import org.gvsig.app.ApplicationManager;
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.toc.actions.LayerErrorsPanel;
43
import org.gvsig.fmap.dal.DALLocator;
44
import org.gvsig.fmap.dal.DataManager;
45
import org.gvsig.fmap.dal.DataStoreParameters;
46
import org.gvsig.fmap.dal.exception.DataException;
47
import org.gvsig.fmap.dal.raster.api.RasterCache;
48
import org.gvsig.fmap.dal.raster.api.RasterStore;
49
import org.gvsig.fmap.mapcontext.MapContext;
50
import org.gvsig.fmap.mapcontext.MapContextLocator;
51
import org.gvsig.fmap.mapcontext.MapContextManager;
52
import org.gvsig.fmap.mapcontext.layers.FLayer;
53
import org.gvsig.fmap.mapcontext.layers.FLayers;
54
import org.gvsig.tools.ToolsLocator;
55
import org.gvsig.tools.dispose.DisposeUtils;
56
import org.gvsig.tools.dynobject.DynObject;
57
import org.gvsig.tools.i18n.I18nManager;
58
import org.gvsig.tools.identitymanagement.UnauthorizedException;
59
import org.gvsig.tools.swing.api.ToolsSwingLocator;
60
import org.gvsig.tools.swing.api.windowmanager.WindowManager;
61
import org.gvsig.wms.provider.WMSLayerNode;
62
import org.gvsig.wms.provider.WMSRasterProviderParameters;
63
import org.gvsig.wms.swing.api.WMSParametersPanel;
64
import org.gvsig.wms.swing.api.WMSSwingLocator;
65

    
66
/**
67
 * @author fdiaz
68
 *
69
 */
70
public class WMSAddLayerPanel extends WizardPanel {
71

    
72
    /**
73
     *
74
     */
75
    private static final long serialVersionUID = 208280947322242604L;
76
    private static final Logger logger = LoggerFactory.getLogger(WMSAddLayerPanel.class);
77

    
78
    private WMSParametersPanel panel = null;
79
    private WizardListenerSupport listenerSupport = null;
80

    
81
    /**
82
     *
83
     */
84
    public WMSAddLayerPanel() {
85
        // TODO Auto-generated constructor stub
86
    }
87

    
88
    /*
89
     * (non-Javadoc)
90
     *
91
     * @see org.gvsig.app.gui.WizardPanel#initWizard()
92
     */
93
    @Override
94
    public void initWizard() {
95
        I18nManager i18nManager = ToolsLocator.getI18nManager();
96
        setTabName(i18nManager.getTranslation("WMS"));
97

    
98
        this.setLayout(new BorderLayout());
99
        panel = WMSSwingLocator.getManager().createWMSParametersPanel();
100

    
101
        if (this.getMapCtrl() == null) {
102
            throw new IllegalArgumentException("MapControl need");
103
        }
104
        MapContext mapContext = this.getMapContext();
105
        panel.setPreferredProjection(mapContext.getProjection());
106

    
107

    
108
        this.add(panel.asJComponent(), BorderLayout.CENTER);
109

    
110
        panel.asJComponent().addPropertyChangeListener(new PropertyChangeListener() {
111
            @Override
112
            public void propertyChange(PropertyChangeEvent evt) {
113
                getWizardListenerSupport().callStateChanged(areSettingsValid());
114
            }
115
        });
116
    }
117

    
118
    private WizardListenerSupport getWizardListenerSupport() {
119
        if (listenerSupport == null)
120
            listenerSupport = new WizardListenerSupport();
121
        return listenerSupport;
122
    }
123

    
124
    @Override
125
    public void addWizardListener(WizardListener listener) {
126
        getWizardListenerSupport().addWizardListener(listener);
127
        getWizardListenerSupport().callStateChanged(false);
128
    }
129

    
130
    @Override
131
    public void removeWizardListener(WizardListener listener) {
132
        getWizardListenerSupport().removeWizardListener(listener);
133
    }
134

    
135
    /*
136
     * (non-Javadoc)
137
     *
138
     * @see org.gvsig.app.gui.WizardPanel#execute()
139
     */
140
    @Override
141
    public void execute() {
142
        if (this.getMapCtrl() == null) {
143
            throw new IllegalArgumentException("MapControl need");
144
        }
145
        final MapContext mapContext = this.getMapContext();
146

    
147
        final WMSLayerNode node = this.panel.getParameters();
148
        Thread task = new Thread(new Runnable() {
149

    
150
            @Override
151
            public void run() {
152
                FLayer layer = createLayersTree(mapContext, node);
153
                getMapCtrl().addLayer(layer);
154
                mapContext.invalidate();
155
                DisposeUtils.dispose(layer);
156
            }
157
        });
158
        task.start();
159
        logger.info("LayersTree added");
160

    
161
    }
162

    
163
    private FLayer createLayersTree(final MapContext mapContext, final WMSLayerNode node) {
164
        if (node.isLeaf()) {
165
            FLayer layer = createSingleLayer(node.getTitle(), node.getParameters());
166
            return layer;
167
        } else {
168
            FLayers group = mapContext.getNewGroupLayer(null);
169
            group.setName(node.getTitle());
170
            logger.info("addGroup('{}',...)", group.getName());
171
            for (int i = 0; i < node.getChildCount(); i++) {
172
                FLayer layer = createLayersTree(mapContext, (WMSLayerNode) node.getChildAt(i));
173
                group.addLayer(layer);
174
                DisposeUtils.disposeQuietly(layer);
175
            }
176
            return group;
177
        }
178
    }
179

    
180
    private FLayer createSingleLayer(final String layerName, final DataStoreParameters parameters) {
181
        final MapContextManager manager = MapContextLocator.getMapContextManager();
182

    
183
        logger.info("addLayer('{}',...)", layerName);
184

    
185
        FLayer layer = null;
186
        try {
187
            DataManager dataManager = DALLocator.getDataManager();
188
            RasterStore store = (RasterStore) dataManager.openStore(parameters.getDataStoreName(), parameters);
189

    
190
            if (panel.isTiled()) {
191
                DynObject tileParameters = dataManager.createStoreParameters("TileCache");
192

    
193
                File rootFolder = new File(Launcher.getAppHomeDir() + File.separator + "gvsig_rcache");
194

    
195
                if (tileParameters.getDynClass().getDynField("rootFolder") != null) {
196
                    tileParameters.setDynValue("rootFolder", rootFolder);
197
                }
198

    
199
                try {
200
                    store.useCache("TileCache", tileParameters);
201
                    if(panel.refreshLocalCache()){
202
                        RasterCache cache = store.getCache();
203
                        cache.deleteAll();
204
                    }
205
                } catch (DataException e) {
206
                    logger.warn("Can't cache the layer.", e);
207
                }
208

    
209
            }
210

    
211
            layer = manager.createLayer(layerName, store);
212
            DisposeUtils.disposeQuietly(store);
213
            return layer;
214
        } catch (UnauthorizedException e) {
215
            I18nManager i18nManager = ToolsLocator.getI18nManager();
216
            ApplicationManager application = ApplicationLocator.getManager();
217
            String resource = ""; // FIXME: coger el server de los parametros
218
            application.messageDialog(
219
                i18nManager.getTranslation("_User_0_is_not_authorized_to_1_on_resource_2_3", new String[] {
220
                    e.getIdentity().getID(), e.getActionName(), e.getResourceName(), resource }),
221
                i18nManager.getTranslation("_Unauthorized_access"), JOptionPane.WARNING_MESSAGE);
222
            logger.warn("Unauthorized access to layer '" + layerName + "'.", e);
223
        } catch (Exception e) {
224
            LayerErrorsPanel panel = new LayerErrorsPanel(layerName, e);
225
            panel.setLayer(layer);
226

    
227
            I18nManager i18nManager = ToolsLocator.getI18nManager();
228
            ToolsSwingLocator.getWindowManager().showWindow(panel,
229
                i18nManager.getTranslation("_Problems_loading_the_layer"), WindowManager.MODE.WINDOW);
230
            logger.warn("Can't load layer '" + layerName + "'.", e);
231

    
232
        }
233
        return null;
234

    
235
    }
236

    
237
    /*
238
     * (non-Javadoc)
239
     *
240
     * @see org.gvsig.app.gui.WizardPanel#close()
241
     */
242
    @Override
243
    public void close() {
244
        this.dispose();
245
    }
246

    
247
    /**
248
     * Dispose filters and explorer
249
     */
250
    public void dispose() {
251
        panel.dispose();
252
    }
253

    
254
    @Override
255
    public DataStoreParameters[] getParameters() {
256

    
257
        List<WMSRasterProviderParameters> parametersList = this.panel.getParameters().getAllChildren();
258
        return parametersList.toArray(new DataStoreParameters[parametersList.size()]);
259
    }
260

    
261
    @Override
262
    public boolean areSettingsValid() {
263
        boolean valid = super.areSettingsValid();
264
        return valid && panel.areSettingsValid();
265
    }
266

    
267
}