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 @ 44070

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

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

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

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

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

    
250
}