Statistics
| Revision:

gvsig-raster / org.gvsig.raster / branches / org.gvsig.raster.2.4 / org.gvsig.wmts / org.gvsig.wmts.app / org.gvsig.wmts.app.mainplugin / src / main / java / org / gvsig / wmts / app / mainplugin / WMTSAddLayerPanel.java @ 8842

History | View | Annotate | Download (7.32 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.wmts.app.mainplugin;
24

    
25
import java.awt.BorderLayout;
26
import java.io.File;
27
import java.util.List;
28

    
29
import javax.swing.JOptionPane;
30

    
31
import org.slf4j.Logger;
32
import org.slf4j.LoggerFactory;
33

    
34
import org.gvsig.andami.Launcher;
35
import org.gvsig.app.ApplicationLocator;
36
import org.gvsig.app.ApplicationManager;
37
import org.gvsig.app.gui.WizardPanel;
38
import org.gvsig.app.project.documents.view.toc.actions.LayerErrorsPanel;
39
import org.gvsig.fmap.dal.DALLocator;
40
import org.gvsig.fmap.dal.DataManager;
41
import org.gvsig.fmap.dal.DataStoreParameters;
42
import org.gvsig.fmap.dal.exception.DataException;
43
import org.gvsig.fmap.dal.raster.api.RasterCache;
44
import org.gvsig.fmap.dal.raster.api.RasterStore;
45
import org.gvsig.fmap.mapcontext.MapContext;
46
import org.gvsig.fmap.mapcontext.MapContextLocator;
47
import org.gvsig.fmap.mapcontext.MapContextManager;
48
import org.gvsig.fmap.mapcontext.layers.FLayer;
49
import org.gvsig.tools.ToolsLocator;
50
import org.gvsig.tools.dispose.DisposeUtils;
51
import org.gvsig.tools.dynobject.DynObject;
52
import org.gvsig.tools.i18n.I18nManager;
53
import org.gvsig.tools.identitymanagement.UnauthorizedException;
54
import org.gvsig.tools.swing.api.ToolsSwingLocator;
55
import org.gvsig.tools.swing.api.windowmanager.WindowManager;
56
import org.gvsig.wmts.provider.WMTSRasterProviderParameters;
57
import org.gvsig.wmts.provider.tree.WMTSLayerNode;
58
import org.gvsig.wmts.swing.api.WMTSParametersPanel;
59
import org.gvsig.wmts.swing.api.WMTSSwingLocator;
60

    
61
/**
62
 * @author fdiaz
63
 *
64
 */
65
public class WMTSAddLayerPanel extends WizardPanel {
66

    
67
    /**
68
     *
69
     */
70
    private static final long serialVersionUID = 208280947322242604L;
71
    private WMTSParametersPanel panel = null;
72
    private static final Logger logger = LoggerFactory.getLogger(WMTSAddLayerPanel.class);
73

    
74
    /**
75
     *
76
     */
77
    public WMTSAddLayerPanel() {
78
        // TODO Auto-generated constructor stub
79
    }
80

    
81
    /*
82
     * (non-Javadoc)
83
     *
84
     * @see org.gvsig.app.gui.WizardPanel#initWizard()
85
     */
86
    @Override
87
    public void initWizard() {
88
        I18nManager i18nManager = ToolsLocator.getI18nManager();
89
        setTabName(i18nManager.getTranslation("WMTS"));
90

    
91
        this.setLayout(new BorderLayout());
92
        panel = WMTSSwingLocator.getManager().createWMTSParametersPanel();
93

    
94
        if (this.getMapCtrl() == null) {
95
            throw new IllegalArgumentException("MapControl need");
96
        }
97
        MapContext mapContext = this.getMapContext();
98
        panel.setPreferredProjection(mapContext.getProjection());
99

    
100
        this.add(panel.asJComponent(), BorderLayout.CENTER);
101
    }
102

    
103
    /*
104
     * (non-Javadoc)
105
     *
106
     * @see org.gvsig.app.gui.WizardPanel#execute()
107
     */
108
    @Override
109
    public void execute() {
110
        if (this.getMapCtrl() == null) {
111
            throw new IllegalArgumentException("MapControl need");
112
        }
113
        final MapContext mapContext = this.getMapContext();
114

    
115
        final WMTSLayerNode node = this.panel.getParameters();
116
        final boolean refreshLocalCache = this.panel.refreshLocalCache();
117
        Thread task = new Thread(new Runnable() {
118

    
119
            @Override
120
            public void run() {
121
                FLayer layer = createSingleLayer(node.getTitle(), node.getParameters(), refreshLocalCache);
122
                getMapCtrl().addLayer(layer);
123
                mapContext.invalidate();
124
                DisposeUtils.dispose(layer);
125
            }
126
        });
127
        task.start();
128
        logger.info("LayersTree added");
129

    
130
    }
131

    
132
    private FLayer createSingleLayer(final String layerName, final DataStoreParameters parameters, boolean refreshLocalCache) {
133
        final MapContextManager manager = MapContextLocator.getMapContextManager();
134

    
135
        logger.info("addLayer('{}',...)", layerName);
136

    
137
        FLayer layer = null;
138
        try {
139
            DataManager dataManager = DALLocator.getDataManager();
140
            RasterStore store = (RasterStore) dataManager.openStore(parameters.getDataStoreName(), parameters);
141

    
142
            DynObject tileParameters = dataManager.createStoreParameters("TileCache");
143

    
144
            File rootFolder = new File(Launcher.getAppHomeDir() + File.separator + "gvsig_rcache");
145

    
146
            if (tileParameters.getDynClass().getDynField("rootFolder") != null) {
147
                tileParameters.setDynValue("rootFolder", rootFolder);
148
            }
149

    
150
            try {
151
                store.useCache("TileCache", tileParameters);
152
                if (refreshLocalCache) {
153
                    RasterCache cache = store.getCache();
154
                    cache.deleteAll();
155
                }
156
            } catch (DataException e) {
157
                logger.warn("Can't cache the layer.", e);
158
            }
159

    
160
            layer = manager.createLayer(layerName, store);
161
            DisposeUtils.disposeQuietly(store);
162
            return layer;
163
        } catch (UnauthorizedException e) {
164
            I18nManager i18nManager = ToolsLocator.getI18nManager();
165
            ApplicationManager application = ApplicationLocator.getManager();
166
            String resource = ""; // FIXME: coger el server de los parametros
167
            application.messageDialog(
168
                i18nManager.getTranslation("_User_0_is_not_authorized_to_1_on_resource_2_3", new String[] {
169
                    e.getIdentity().getID(), e.getActionName(), e.getResourceName(), resource }),
170
                i18nManager.getTranslation("_Unauthorized_access"), JOptionPane.WARNING_MESSAGE);
171
            logger.warn("Unauthorized access to layer '" + layerName + "'.", e);
172
        } catch (Exception e) {
173
            LayerErrorsPanel panel = new LayerErrorsPanel(layerName, e);
174
            panel.setLayer(layer);
175

    
176
            I18nManager i18nManager = ToolsLocator.getI18nManager();
177
            ToolsSwingLocator.getWindowManager().showWindow(panel,
178
                i18nManager.getTranslation("_Problems_loading_the_layer"), WindowManager.MODE.WINDOW);
179
            logger.warn("Can't load layer '" + layerName + "'.", e);
180

    
181
        }
182
        return null;
183

    
184
    }
185

    
186
    /*
187
     * (non-Javadoc)
188
     *
189
     * @see org.gvsig.app.gui.WizardPanel#close()
190
     */
191
    @Override
192
    public void close() {
193
        this.dispose();
194
    }
195

    
196
    /**
197
     * Dispose filters and explorer
198
     */
199
    public void dispose() {
200
        panel.dispose();
201
    }
202

    
203
    @Override
204
    public DataStoreParameters[] getParameters() {
205

    
206
        List<WMTSRasterProviderParameters> parametersList = null; //this.panel.getParameters().getAllChildren();
207
        return parametersList.toArray(new DataStoreParameters[parametersList.size()]);
208
    }
209

    
210

    
211
}