Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.plugin / org.gvsig.exportto.app / org.gvsig.exportto.app.mainplugin / src / main / java / org / gvsig / export / app / extension / ExportLayerExtension.java @ 43926

History | View | Annotate | Download (9.48 KB)

1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright (C) 2007-2013 gvSIG Association.
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 3
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
 * For any additional information, do not hesitate to contact us
22
 * at info AT gvsig.com, or visit our website www.gvsig.com.
23
 */
24
package org.gvsig.export.app.extension;
25

    
26
import java.awt.Dimension;
27
import javax.swing.JComponent;
28
import javax.swing.JOptionPane;
29
import org.cresques.cts.ICoordTrans;
30
import org.cresques.cts.IProjection;
31

    
32
import org.gvsig.andami.IconThemeHelper;
33
import org.gvsig.andami.plugins.Extension;
34
import org.gvsig.app.ApplicationLocator;
35
import org.gvsig.app.ApplicationManager;
36
import org.gvsig.app.project.ProjectManager;
37
import org.gvsig.app.project.documents.view.ViewDocument;
38
import org.gvsig.app.project.documents.view.ViewManager;
39
import org.gvsig.export.ExportLocator;
40
import org.gvsig.export.ExportManager;
41
import org.gvsig.export.ExportProcess;
42
import org.gvsig.export.Filter;
43
import org.gvsig.export.spi.ExportServiceFactory;
44
import org.gvsig.export.swing.ExportFinishListenerAdapter;
45
import org.gvsig.export.swing.ExportSwingLocator;
46
import org.gvsig.fmap.mapcontext.MapContext;
47
import org.gvsig.fmap.mapcontext.layers.FLayer;
48
import org.gvsig.fmap.mapcontext.layers.FLayers;
49
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
50
import org.gvsig.tools.ToolsLocator;
51
import org.gvsig.tools.dataTypes.DataTypes;
52
import org.gvsig.tools.i18n.I18nManager;
53
import org.gvsig.tools.swing.api.ToolsSwingLocator;
54
import org.gvsig.tools.swing.api.windowmanager.WindowManager;
55
import org.gvsig.tools.util.ArrayUtils;
56
import org.gvsig.export.swing.ExportSwingManager;
57
import org.gvsig.export.swing.JExportProcessPanel;
58
import org.gvsig.fmap.dal.DALLocator;
59
import org.gvsig.fmap.dal.DataManager;
60
import org.gvsig.fmap.dal.DataStore;
61
import org.gvsig.fmap.dal.OpenDataStoreParameters;
62
import org.gvsig.fmap.mapcontext.MapContextLocator;
63
import org.gvsig.fmap.mapcontext.MapContextManager;
64

    
65

    
66
/**
67
 * @author gvSIG Team
68
 * @version $Id$
69
 *
70
 */
71
public class ExportLayerExtension extends Extension {
72

    
73
    @Override
74
    public void initialize() {
75
        IconThemeHelper.registerIcon("action", "layer-export", this);
76
        IconThemeHelper.registerIcon("picker", "picker-crs", this);
77
    }
78

    
79
    @Override
80
    public void postInitialize() {
81
        super.postInitialize();
82
        ProjectManager projectManager = ApplicationLocator.getProjectManager();
83
        ViewManager viewManager = (ViewManager) projectManager.getDocumentManager(ViewManager.TYPENAME);
84
        viewManager.addTOCContextAction("layer-exportto");
85

    
86
    }
87

    
88
    @Override
89
    public void execute(String actionCommand) {
90
        this.execute(actionCommand, null);
91
    }
92

    
93
    @Override
94
    public void execute(String command, Object[] args) {
95
        if( !"exportto".equalsIgnoreCase(command) ) {
96
            return;
97
        }
98
        Object layer = ArrayUtils.get(args, 0);
99
        if( layer instanceof FLyrVect ) {
100
            WindowManager.MODE mode = WindowManager.MODE.fromInteger(
101
                    (Integer)ArrayUtils.get(args, 1,DataTypes.INT, 0)
102
            );
103
            FLyrVect layervect = (FLyrVect) layer;
104
            MapContext mapContext = layervect.getMapContext();
105
            this.showExport(layervect, mapContext.getProjection(), mapContext, mode);
106
            return;
107
        }
108
        
109
        ApplicationManager application = ApplicationLocator.getManager();
110
        ViewDocument view = (ViewDocument) application.getActiveDocument(ViewManager.TYPENAME);
111
        if ( view != null ) {
112
            MapContext mapContext = view.getMapContext();
113
            FLayers layers = mapContext.getLayers();
114
            FLayer[] actives = layers.getActives();
115
            try {
116
                if ( actives.length == 1 ) {
117
                    if( actives[0] instanceof FLyrVect ) {
118
                        showExport(
119
                            (FLyrVect) actives[0], 
120
                            mapContext.getProjection(),
121
                            mapContext, 
122
                            WindowManager.MODE.WINDOW
123
                        );
124
                    }
125
                } else {
126
                    for (FLayer theLayer : actives) {
127
                        if (layer instanceof FLyrVect) {
128
                            showExport(
129
                                (FLyrVect) theLayer, 
130
                                mapContext.getProjection(),
131
                                mapContext, 
132
                                WindowManager.MODE.DIALOG
133
                            );
134
                        }
135
                    }
136
                }
137
            } catch (Exception e) {
138
                logger.warn("Can't run export wizard.", e);
139
            }
140
        }
141
    }
142

    
143
    public void showExport(
144
            FLyrVect layer, 
145
            IProjection contextProjetion,
146
            final MapContext mapContext, 
147
            WindowManager.MODE mode
148
        ) {
149
        I18nManager i18n = ToolsLocator.getI18nManager();
150
        ExportManager manager = ExportLocator.getManager();
151
        ExportSwingManager swingManager = ExportSwingLocator.getSwingManager();
152

    
153
        final ExportProcess process = manager.createProcess();
154
        process.setSourceFeatureStore(layer.getFeatureStore());
155
        process.setContextProjection(contextProjetion);
156
        process.setSourceProjection(layer.getProjection());
157
        ICoordTrans ct = layer.getCoordTrans();
158
        if( ct==null ) {
159
            process.setSourceTransformation(null);
160
        } else {
161
            process.setSourceProjection(ct.getPOrig());
162
            process.setSourceTransformation(ct);
163
        }
164
        JExportProcessPanel panel = swingManager.createJExportProcessPanel(
165
            process,
166
            new Filter<ExportServiceFactory>() {
167
                @Override
168
                public boolean apply(ExportServiceFactory factory) {
169
                    return factory.hasVectorialSupport();
170
                }
171
            }
172
        );
173
        panel.addFinishListener(new ExportFinishListenerAdapter() {
174
            @Override
175
            public void finished(JExportProcessPanel exportPanel) {
176
                doAddlayer(process, mapContext);
177
            }
178
        });
179
        JComponent component = panel.asJComponent();
180
        component.setPreferredSize(new Dimension(component.getPreferredSize().width, 530));
181
        
182
        WindowManager winmgr = ToolsSwingLocator.getWindowManager();
183
        winmgr.showWindow(
184
                panel.asJComponent(), 
185
                i18n.getTranslation("_Export_to"), 
186
                mode
187
        );
188
    }
189

    
190
    private void doAddlayer(ExportProcess process, MapContext mapContext) {
191
        ApplicationManager application = ApplicationLocator.getManager();
192
        I18nManager i18n = ToolsLocator.getI18nManager();
193

    
194
        int n = application.confirmDialog(
195
                i18n.getTranslation("_Add_new_layer_to_current_view"), 
196
                i18n.getTranslation("_Export"), 
197
                JOptionPane.YES_NO_OPTION, 
198
                JOptionPane.QUESTION_MESSAGE, 
199
                "AddExportedLayerToView"
200
        );
201
        if( n != JOptionPane.YES_OPTION ) {
202
            return;
203
        }
204
        try {
205
            DataManager dataManager = DALLocator.getDataManager();
206
            MapContextManager mapContextManager = MapContextLocator.getMapContextManager();
207
            
208
            for (OpenDataStoreParameters params : process.getTargetOpenStoreParameters()) {
209
                DataStore store = dataManager.openStore(params.getDataStoreName(), params);
210
                FLayer layer = mapContextManager.createLayer(store.getName(), store);
211
                mapContext.getLayers().addLayer(layer);
212
            }
213
            application.messageDialog(
214
                    i18n.getTranslation("_Layer_added_to_view"), 
215
                    null, 
216
                    i18n.getTranslation("_Export"), 
217
                    JOptionPane.QUESTION_MESSAGE, 
218
                    "ExportedLayerAddedToView"
219
            );
220
        } catch (Exception ex) {
221
            logger.warn("Can't add exported layer to view",ex);
222
            application.messageDialog(
223
                    i18n.getTranslation("_Cant_add_exported_layer_to_view"), 
224
                    null, 
225
                    i18n.getTranslation("_Export"), 
226
                    JOptionPane.WARNING_MESSAGE, 
227
                    "CantAddExportedLayerToView"
228
            );
229
        }
230
    }
231

    
232
    @Override
233
    public boolean isEnabled() {
234
        ApplicationManager application = ApplicationLocator.getManager();
235
        ViewDocument view = (ViewDocument) application.getActiveDocument(ViewManager.TYPENAME);
236
        if ( view != null ) {
237
            return view.getMapContext().hasActiveVectorLayers();
238
        }
239
        return false;
240
    }
241

    
242
    @Override
243
    public boolean isVisible() {
244
        ApplicationManager application = ApplicationLocator.getManager();
245
        ViewDocument view = (ViewDocument) application.getActiveDocument(ViewManager.TYPENAME);
246
        return view != null;
247
    }
248

    
249
}