Statistics
| Revision:

gvsig-raster / org.gvsig.raster / branches / org.gvsig.raster.2.4 / org.gvsig.wcs / org.gvsig.wcs.app / org.gvsig.wcs.app.mainplugin / src / main / java / org / gvsig / wcs / app / mainplugin / WCSAddLayerPanel.java @ 8844

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

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

    
30
import javax.swing.JOptionPane;
31

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

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

    
63
/**
64
 * @author fdiaz
65
 *
66
 */
67
public class WCSAddLayerPanel extends WizardPanel {
68

    
69
    /**
70
     *
71
     */
72
    private static final long serialVersionUID = 208280947322242604L;
73
    private WCSParametersPanel panel = null;
74
    private static final Logger logger = LoggerFactory.getLogger(WCSAddLayerPanel.class);
75
    private WizardListenerSupport listenerSupport = null;
76

    
77

    
78
    /**
79
     *
80
     */
81
    public WCSAddLayerPanel() {
82
        // TODO Auto-generated constructor stub
83
    }
84

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

    
95
        this.setLayout(new BorderLayout());
96
        panel = WCSSwingLocator.getManager().createWCSParametersPanel();
97

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

    
104

    
105
        this.add(panel.asJComponent(), BorderLayout.CENTER);
106

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

    
115
    private WizardListenerSupport getWizardListenerSupport() {
116
        if (listenerSupport == null)
117
            listenerSupport = new WizardListenerSupport();
118
        return listenerSupport;
119
    }
120

    
121
    @Override
122
    public void addWizardListener(WizardListener listener) {
123
        getWizardListenerSupport().addWizardListener(listener);
124
        getWizardListenerSupport().callStateChanged(false);
125
    }
126

    
127
    @Override
128
    public void removeWizardListener(WizardListener listener) {
129
        getWizardListenerSupport().removeWizardListener(listener);
130
    }
131

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

    
144

    
145
        Thread task = new Thread(new Runnable() {
146

    
147
            @Override
148
            public void run() {
149
                FLayer layer = createSingleLayer(panel.getParameters());
150
                getMapCtrl().addLayer(layer);
151
                mapContext.invalidate();
152
                DisposeUtils.disposeQuietly(layer);
153
            }
154
        });
155
        task.start();
156
        logger.info("LayersTree added");
157

    
158
    }
159

    
160
    private FLayer createSingleLayer(final DataStoreParameters parameters) {
161
        final MapContextManager manager = MapContextLocator.getMapContextManager();
162

    
163
        FLayer layer = null;
164
        String layerName = (String)parameters.getDynValue(WCSRasterProviderParameters.WCS_COVERAGENAME_PARAMETER_NAME);
165
        try {
166
            DataManager dataManager = DALLocator.getDataManager();
167
            RasterStore store = (RasterStore) dataManager.openStore(parameters.getDataStoreName(), parameters);
168

    
169
            if (panel.isTiled()) {
170
                DynObject tileParameters = dataManager.createStoreParameters("TileCache");
171

    
172
                File rootFolder = new File(Launcher.getAppHomeDir() + File.separator + "gvsig_rcache");
173

    
174
                if (tileParameters.getDynClass().getDynField("rootFolder") != null) {
175
                    tileParameters.setDynValue("rootFolder", rootFolder);
176
                }
177

    
178
                try {
179
                    store.useCache("TileCache", tileParameters);
180
                    if (panel.refreshLocalCache()) {
181
                        RasterCache cache = store.getCache();
182
                        cache.deleteAll();
183
                    }
184
                } catch (DataException e) {
185
                    logger.warn("Can't cache the layer.", e);
186
                }
187

    
188
            }
189

    
190
            layer = manager.createLayer(layerName, store);
191
            DisposeUtils.disposeQuietly(store);
192
            return layer;
193
        } catch (UnauthorizedException e) {
194
            I18nManager i18nManager = ToolsLocator.getI18nManager();
195
            ApplicationManager application = ApplicationLocator.getManager();
196
            String resource = ""; // FIXME: coger el server de los parametros
197
            application.messageDialog(
198
                i18nManager.getTranslation("_User_0_is_not_authorized_to_1_on_resource_2_3", new String[] {
199
                    e.getIdentity().getID(), e.getActionName(), e.getResourceName(), resource }),
200
                i18nManager.getTranslation("_Unauthorized_access"), JOptionPane.WARNING_MESSAGE);
201
            logger.warn("Unauthorized access to layer '" + layerName + "'.", e);
202
        } catch (Exception e) {
203
            LayerErrorsPanel panel = new LayerErrorsPanel(layerName, e);
204
            panel.setLayer(layer);
205

    
206
            I18nManager i18nManager = ToolsLocator.getI18nManager();
207
            ToolsSwingLocator.getWindowManager().showWindow(panel,
208
                i18nManager.getTranslation("_Problems_loading_the_layer"), WindowManager.MODE.WINDOW);
209
            logger.warn("Can't load layer '" + layerName + "'.", e);
210

    
211
        }
212
        return null;
213

    
214
    }
215

    
216
    /*
217
     * (non-Javadoc)
218
     *
219
     * @see org.gvsig.app.gui.WizardPanel#close()
220
     */
221
    @Override
222
    public void close() {
223
        this.dispose();
224
    }
225

    
226
    /**
227
     * Dispose filters and explorer
228
     */
229
    public void dispose() {
230
        panel.dispose();
231
    }
232

    
233
    @Override
234
    public DataStoreParameters[] getParameters() {
235
        return null;
236

    
237
//        List<WCSRasterProviderParameters> parametersList = this.panel.getParameters().getAllChildren();
238
//        return parametersList.toArray(new DataStoreParameters[parametersList.size()]);
239
    }
240

    
241
    @Override
242
    public boolean areSettingsValid() {
243
        boolean valid = super.areSettingsValid();
244
        return valid && panel.areSettingsValid();
245
    }
246

    
247

    
248
}