Statistics
| Revision:

gvsig-raster / org.gvsig.raster / branches / org.gvsig.raster.2.4 / org.gvsig.webmap / org.gvsig.webmap.app / org.gvsig.webmap.app.mainplugin / src / main / java / org / gvsig / webmap / app / mainplugin / AddWebMapLayerWizard.java @ 8840

History | View | Annotate | Download (12.6 KB)

1
/* gvSIG. Desktop Geographic Information System.
2
 *
3
 * Copyright ? 2007-2016 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.webmap.app.mainplugin;
24

    
25
import java.awt.GridBagConstraints;
26
import java.awt.GridBagLayout;
27
import java.awt.Insets;
28
import java.beans.PropertyChangeEvent;
29
import java.beans.PropertyChangeListener;
30
import java.io.File;
31
import java.util.HashMap;
32
import java.util.List;
33
import java.util.Map;
34

    
35
import javax.swing.JLabel;
36
import javax.swing.JOptionPane;
37
import javax.swing.JTabbedPane;
38
import javax.swing.event.ChangeEvent;
39
import javax.swing.event.ChangeListener;
40

    
41
import org.slf4j.Logger;
42
import org.slf4j.LoggerFactory;
43

    
44
import org.gvsig.andami.Launcher;
45
import org.gvsig.andami.PluginServices;
46
import org.gvsig.app.ApplicationLocator;
47
import org.gvsig.app.ApplicationManager;
48
import org.gvsig.app.gui.WizardPanel;
49
import org.gvsig.app.gui.wizards.WizardListener;
50
import org.gvsig.app.gui.wizards.WizardListenerSupport;
51
import org.gvsig.app.project.documents.view.toc.actions.LayerErrorsPanel;
52
import org.gvsig.fmap.dal.DALLocator;
53
import org.gvsig.fmap.dal.DataManager;
54
import org.gvsig.fmap.dal.DataStoreParameters;
55
import org.gvsig.fmap.dal.DataStoreProviderFactory;
56
import org.gvsig.fmap.dal.exception.DataException;
57
import org.gvsig.fmap.dal.raster.api.RasterCache;
58
import org.gvsig.fmap.dal.raster.api.RasterStore;
59
import org.gvsig.fmap.dal.spi.DALSPILocator;
60
import org.gvsig.fmap.dal.spi.DataManagerProviderServices;
61
import org.gvsig.fmap.dal.swing.dataStoreParameters.DataStoreParametersPanelFactory;
62
import org.gvsig.fmap.dal.swing.dataStoreParameters.DataStoreParametersPanelFactory_v2;
63
import org.gvsig.fmap.dal.swing.dataStoreParameters.DataStoreParametersPanel_v2;
64
import org.gvsig.fmap.mapcontext.MapContext;
65
import org.gvsig.fmap.mapcontext.MapContextLocator;
66
import org.gvsig.fmap.mapcontext.MapContextManager;
67
import org.gvsig.fmap.mapcontext.layers.FLayer;
68
import org.gvsig.tools.ToolsLocator;
69
import org.gvsig.tools.dispose.DisposeUtils;
70
import org.gvsig.tools.dynobject.DynObject;
71
import org.gvsig.tools.i18n.I18nManager;
72
import org.gvsig.tools.identitymanagement.UnauthorizedException;
73
import org.gvsig.tools.swing.api.ToolsSwingLocator;
74
import org.gvsig.tools.swing.api.windowmanager.WindowManager;
75
import org.gvsig.webmap.lib.api.WebMapLocator;
76
import org.gvsig.webmap.lib.api.WebMapManager;
77

    
78
/**
79
 * Wizard panel to add a new WebMap layer
80
 *
81
 * @author dmartinez (dmartinez@disid.com)
82
 */
83
public class AddWebMapLayerWizard extends WizardPanel { //implements MouseListener {
84

    
85
    private static final long serialVersionUID = 1L;
86
    private static final String TAB_NAME = "WebMaps";
87
    private static Logger logger = LoggerFactory.getLogger(AddWebMapLayerWizard.class.getName());
88
    private JTabbedPane tabbedPane = null;
89
    private WizardListenerSupport listenerSupport = null;
90
    private Map<String, DataStoreProviderFactory> providerFactories = null;
91

    
92
    /**
93
     * This method creates this class
94
     */
95
    public AddWebMapLayerWizard() {
96
        super();
97
    }
98

    
99
    /**
100
     * This method initializes this
101
     */
102
    private void initialize() {
103
        I18nManager i18nManager = ToolsLocator.getI18nManager();
104
        providerFactories = new HashMap<String, DataStoreProviderFactory>();
105
        setTabName(i18nManager.getTranslation(TAB_NAME));
106
        setLayout(new GridBagLayout());
107
        GridBagConstraints gridBagConstraints = new GridBagConstraints();
108
        gridBagConstraints.fill = GridBagConstraints.BOTH;
109
        gridBagConstraints.weightx = 1.0;
110
        gridBagConstraints.weighty = 1.0;
111
        gridBagConstraints.insets = new Insets(6, 6, 6, 6);
112

    
113
        tabbedPane = new JTabbedPane();
114
        WebMapManager webMapManager = WebMapLocator.getManager();
115
        List<DataStoreParametersPanelFactory> factories = webMapManager.getDataParametersPanel();
116
        if (factories.isEmpty()) {
117
            tabbedPane.add(new JLabel(i18nManager.getTranslation("_not_installed_webmap_services_found")));
118
        } else {
119
            for (DataStoreParametersPanelFactory factory : factories) {
120
                DataStoreParametersPanelFactory_v2 fact = (DataStoreParametersPanelFactory_v2) factory;
121

    
122
                DataManagerProviderServices manager = DALSPILocator.getDataManagerProviderServices();
123
                DataStoreProviderFactory providerFactory = manager.getStoreProviderFactory(fact.getName());
124
                DynObject params = providerFactory.createParameters();
125

    
126
                providerFactories.put(i18nManager.getTranslation(providerFactory.getName()), providerFactory);
127
                DataStoreParametersPanel_v2 parametersPanel = (DataStoreParametersPanel_v2) fact.create(params);
128

    
129
                // FIXME: ? Meter un getLabel en el
130
                // DataStoreParametersPanelFactory_v2 ?
131
                tabbedPane.add(i18nManager.getTranslation(providerFactory.getName()), parametersPanel.asJComponent());
132
                parametersPanel.asJComponent().addPropertyChangeListener(new PropertyChangeListener() {
133
                    @Override
134
                    public void propertyChange(PropertyChangeEvent evt) {
135
                        getWizardListenerSupport().callStateChanged(areSettingsValid());
136
                    }
137
                });
138
            }
139
        }
140

    
141
        add(tabbedPane, gridBagConstraints);
142
        tabbedPane.addChangeListener(new ChangeListener() {
143

    
144
            @Override
145
            public void stateChanged(ChangeEvent e) {
146
                DataStoreParametersPanel_v2 panel = (DataStoreParametersPanel_v2) tabbedPane.getSelectedComponent();
147
                getWizardListenerSupport().callStateChanged(panel.areSettingsValid());
148
            }
149
        });
150
    }
151

    
152
    private DataStoreProviderFactory getSelectedProviderFactory() {
153
        int index = tabbedPane.getSelectedIndex();
154
        String label = tabbedPane.getTitleAt(index);
155
        return providerFactories.get(label);
156
    }
157

    
158
    private WizardListenerSupport getWizardListenerSupport() {
159
        if (listenerSupport == null)
160
            listenerSupport = new WizardListenerSupport();
161
        return listenerSupport;
162
    }
163

    
164
    @Override
165
    public void addWizardListener(WizardListener listener) {
166
        getWizardListenerSupport().addWizardListener(listener);
167
        getWizardListenerSupport().callStateChanged(false);
168
    }
169

    
170
    @Override
171
    public void removeWizardListener(WizardListener listener) {
172
        getWizardListenerSupport().removeWizardListener(listener);
173
    }
174

    
175
    @Override
176
    public void close() {
177

    
178
    }
179

    
180
    @Override
181
    public void execute() {
182
        if (providerFactories.isEmpty()) {
183
            close();
184
            return;
185
        }
186
        if (!areSettingsValid()) {
187
            messageBoxInfo("error_creating_parameters", PluginServices.getMDIManager().getActiveWindow(), null);
188
            return;
189
        }
190
        DataStoreParametersPanel_v2 panel = (DataStoreParametersPanel_v2) tabbedPane.getSelectedComponent();
191
        DataStoreProviderFactory providerFactory = getSelectedProviderFactory();
192
        final DynObject parameters = providerFactory.createParameters();
193
        panel.fetchParameters(parameters);
194

    
195
        final MapContext mapContext = this.getMapContext();
196

    
197
        Thread task = new Thread(new Runnable() {
198

    
199
            @Override
200
            public void run() {
201
                FLayer layer = createSingleLayer((DataStoreParameters) parameters);
202
                getMapCtrl().addLayer(layer);
203
                mapContext.invalidate();
204
                DisposeUtils.dispose(layer);
205
            }
206
        });
207
        task.start();
208
        logger.info("Layer added");
209
    }
210

    
211
    @Override
212
    public boolean areSettingsValid() {
213
        boolean valid = super.areSettingsValid();
214
        DataStoreParametersPanel_v2 panel = (DataStoreParametersPanel_v2) tabbedPane.getSelectedComponent();
215

    
216
        return valid && panel.areSettingsValid();
217
    }
218

    
219
//    /**
220
//     * Adds the layer to the MapContext selected
221
//     *
222
//     * @param mapContext
223
//     * @param layer
224
//     */
225
//    private void addLayerToMapContext(MapContext mapContext, FLayer layer) {
226
//        mapContext.beginAtomicEvent();
227
//        layer.setVisible(true);
228
//        mapContext.getLayers().addLayer(layer);
229
//        mapContext.callLegendChanged();
230
//        mapContext.endAtomicEvent();
231
//    }
232

    
233
    private void messageBoxInfo(String msg, Object parentWindow, Exception exception) {
234
        LoggerFactory.getLogger(getClass()).debug(msg, exception);
235
        I18nManager i18nManager = ToolsLocator.getI18nManager();
236
        String string = i18nManager.getTranslation("accept"); //PluginServices.getText(parentWindow, "accept");
237
        Object[] options = { string };
238
        JOptionPane.showOptionDialog((java.awt.Component) /*PluginServices.getMainFrame()*/parentWindow,
239
            "<html>" + i18nManager.getTranslation(msg).replaceAll("\n", "<br>") + "</html>",
240
            i18nManager.getTranslation("confirmacion"),
241
            JOptionPane.OK_OPTION,
242
            JOptionPane.INFORMATION_MESSAGE,
243
            null,
244
            options,
245
            string);
246
    }
247

    
248
    @Override
249
    public DataStoreParameters[] getParameters() {
250
        DataStoreParameters dataStoreParams = (DataStoreParameters) getSelectedProviderFactory().createParameters();
251
        return new DataStoreParameters[] { dataStoreParams };
252
    }
253

    
254
    @Override
255
    public void initWizard() {
256
        initialize();
257
    }
258

    
259
    private FLayer createSingleLayer(final DataStoreParameters parameters) {
260
        I18nManager i18nManager = ToolsLocator.getI18nManager();
261
        final MapContextManager manager = MapContextLocator.getMapContextManager();
262

    
263

    
264
        logger.info("addLayer('{}',...)", parameters.getDataStoreName());
265

    
266
        DataStoreParametersPanel_v2 paramsPanel = (DataStoreParametersPanel_v2) tabbedPane.getSelectedComponent();
267
        FLayer layer = null;
268
        String layerName = "";
269
        try {
270
            DataManager dataManager = DALLocator.getDataManager();
271
            RasterStore store = (RasterStore) dataManager.openStore(parameters.getDataStoreName(), parameters);
272
            layerName = store.getName();
273

    
274
            DynObject tileParameters = dataManager.createStoreParameters("TileCache");
275

    
276
            File rootFolder = new File(Launcher.getAppHomeDir() + File.separator + "gvsig_rcache");
277

    
278
            if (tileParameters.getDynClass().getDynField("rootFolder") != null) {
279
                tileParameters.setDynValue("rootFolder", rootFolder);
280
            }
281

    
282
            try {
283
                if (paramsPanel.isTiled()) {
284
                    store.useCache("TileCache", tileParameters);
285
                    if (paramsPanel.refreshLocalCache()) {
286
                        RasterCache cache = store.getCache();
287
                        cache.deleteAll();
288
                    }
289
                }
290
            } catch (DataException e) {
291
                logger.warn("Can't cache the layer.", e);
292
            }
293

    
294
            layer = manager.createLayer(layerName, store);
295
            DisposeUtils.disposeQuietly(store);
296
            return layer;
297
        } catch (UnauthorizedException e) {
298
            ApplicationManager application = ApplicationLocator.getManager();
299
            String resource = ""; // FIXME: coger el server de los parametros
300
            application.messageDialog(
301
                i18nManager.getTranslation("_User_0_is_not_authorized_to_1_on_resource_2_3", new String[] {
302
                    e.getIdentity().getID(), e.getActionName(), e.getResourceName(), resource }),
303
                i18nManager.getTranslation("_Unauthorized_access"), JOptionPane.WARNING_MESSAGE);
304
            logger.warn("Unauthorized access to layer '" + layerName + "'.", e);
305
        } catch (Exception e) {
306
            LayerErrorsPanel panel = new LayerErrorsPanel(layerName, e);
307
            panel.setLayer(layer);
308

    
309
            ToolsSwingLocator.getWindowManager().showWindow(panel,
310
                i18nManager.getTranslation("_Problems_loading_the_layer"), WindowManager.MODE.WINDOW);
311
            logger.warn("Can't load layer '" + layerName + "'.", e);
312
        }
313
        return null;
314

    
315
    }
316

    
317
}