Revision 43400 trunk/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.h2spatial.app/org.gvsig.h2spatial.app.mainplugin/src/main/java/org/gvsig/h2spatial/H2SpatialExtension.java

View differences:

H2SpatialExtension.java
9 9
import java.text.MessageFormat;
10 10
import java.util.ArrayList;
11 11
import java.util.List;
12
import javax.swing.JOptionPane;
12 13
import org.apache.commons.collections.CollectionUtils;
13 14
import org.apache.commons.io.FilenameUtils;
14 15
import org.apache.commons.lang3.ArrayUtils;
16
import org.apache.commons.lang3.BooleanUtils;
15 17
import org.apache.commons.lang3.StringUtils;
16 18
import org.gvsig.andami.IconThemeHelper;
17 19
import org.gvsig.andami.plugins.Extension;
......
20 22
import org.gvsig.app.project.documents.view.ViewDocument;
21 23
import org.gvsig.app.project.documents.view.ViewManager;
22 24
import org.gvsig.fmap.dal.DALLocator;
25
import org.gvsig.fmap.dal.DataManager;
23 26
import org.gvsig.fmap.dal.feature.FeatureStore;
24 27
import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemStoreParameters;
25 28
import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorer;
26 29
import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
27 30
import org.gvsig.fmap.dal.swing.DALSwingLocator;
28 31
import org.gvsig.fmap.dal.swing.jdbc.JDBCConnectionPanel;
32
import org.gvsig.fmap.geom.primitive.Envelope;
29 33
import org.gvsig.fmap.mapcontext.MapContextLocator;
30 34
import org.gvsig.fmap.mapcontext.MapContextManager;
31 35
import org.gvsig.fmap.mapcontext.layers.FLayer;
32 36
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
33 37
import org.gvsig.tools.ToolsLocator;
38
import org.gvsig.tools.folders.FoldersManager;
39
import org.gvsig.tools.i18n.I18nManager;
34 40
import org.gvsig.tools.swing.api.ToolsSwingLocator;
35 41
import org.gvsig.tools.swing.api.windowmanager.Dialog;
36 42
import org.gvsig.tools.swing.api.windowmanager.WindowManager;
......
42 48

  
43 49
public class H2SpatialExtension extends Extension {
44 50

  
51
    public static String DAL_EXPLORER_NAME = "H2Spatial";
52
    
45 53
    @Override
46 54
    public void initialize() {
47 55
    }
......
61 69
    
62 70
    @Override
63 71
    public void execute(String actionCommand) {
64
        if( "tools-h2spatial-show-admintool".equalsIgnoreCase(actionCommand) ) {
72
        switch(actionCommand.toLowerCase()) {
73
        case "tools-h2spatial-show-admintool":
65 74
            startserver();
66 75
            startbrowser();
67
            return;
68
        }
69
        if( "tools-h2spatial-linklayer".equalsIgnoreCase(actionCommand) ) {
76
            break;
77
        
78
        case "tools-h2spatial-linklayer":
70 79
            linkActiveLayers();
80
            break;
81

  
82
        case "tools-h2spatial-import":
83
            importTables();
84
            break;
85

  
86
        case "tools-h2spatial-downloadosm":
87
            downloadOSM();
88
            break;
71 89
        }
72 90
    }
73 91
    
......
124 142

  
125 143
    @Override
126 144
    public boolean isEnabled(String action) {
145
        ApplicationManager application = ApplicationLocator.getManager();
146

  
127 147
        if( "tools-h2spatial-show-admintool".equalsIgnoreCase(action) ) {
128 148
            return true;
129 149
        } 
130 150
        if( "tools-h2spatial-linklayer".equalsIgnoreCase(action) ) {
131 151
            return ! CollectionUtils.isEmpty(this.getSelectedLayers());
132 152
        }
153
        if( "tools-h2spatial-import".equalsIgnoreCase(action) ) {
154
            return true;
155
        }
156
        if( "tools-h2spatial-downloadosm".equalsIgnoreCase(action) ) {
157
            ViewDocument viewDoc = (ViewDocument) application.getActiveDocument(ViewManager.TYPENAME);
158
            if( viewDoc == null ) {
159
                return false;
160
            }
161
            Envelope env = viewDoc.getMapContext().getViewPort().getEnvelope();
162
            return !(env != null && env.isEmpty());
163
        }
133 164
        return false;
134 165
    }
135 166

  
......
138 169
        return true;
139 170
    }
140 171

  
141
    
142
    
143 172
    private void startbrowser() {
144
//        try {
145
//            DesktopOpen desktop = ToolsUtilLocator.getToolsUtilManager().createDesktopOpen();
146
//            desktop.browse(new URI("http://localhost:8082"));
147
//        } catch (URISyntaxException ex) {
148
//        }
149 173
        WindowManager winmanager = ToolsSwingLocator.getWindowManager();
150 174
        WebBrowserPanel webbrowser = WebBrowserFactory.createWebBrowserPanel();
151 175
        winmanager.showWindow(
......
157 181
        
158 182
    }
159 183
    
184
    private void importTables() {
185
        I18nManager i18n = ToolsLocator.getI18nManager();
186
        WindowManager_v2 winmanager = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
187
        final importTable panel = new importTable();
188
        final Dialog dlg = winmanager.createDialog(
189
            panel,
190
            i18n.getTranslation("_Select_files_to_import"),
191
            i18n.getTranslation("_Select_files_to_import_as_tables_in_H2_database"),
192
            WindowManager_v2.BUTTONS_OK_CANCEL
193
        );
194
        dlg.addActionListener(new ActionListener() {
195
            @Override
196
            public void actionPerformed(ActionEvent e) {
197
                if( dlg.getAction()==WindowManager_v2.BUTTONS_OK ) {
198
                    doImportTables(
199
                        panel.getExplorerParameters(),
200
                        panel.getFileType(),
201
                        panel.getFile(),
202
                        panel.getTableName(),
203
                        panel.getDeleteTables()
204
                    );
205
                }
206
            }
207
        });
208
        dlg.show(WindowManager.MODE.WINDOW);
209
    }
210
    
211
    private void doImportTables(JDBCServerExplorerParameters explorerParameters, String fileType, File file, String tableName, boolean deleteTables) {
212
        I18nManager i18n = ToolsLocator.getI18nManager();
213
        ApplicationManager application = ApplicationLocator.getManager();
214

  
215
        StringBuilder sql = new StringBuilder();
216
        switch(fileType.toLowerCase()) {
217
        case "gpx":
218
            sql.append("CALL GPXRead('");
219
            sql.append(file.getAbsolutePath());
220
            sql.append("', '");
221
            sql.append(tableName);
222
            sql.append("', ");
223
            sql.append(BooleanUtils.toStringTrueFalse(deleteTables));
224
            sql.append(");");
225
            break;
226
        case "geojson":
227
            sql.append("CALL GeoJsonRead('");
228
            sql.append(file.getAbsolutePath());
229
            sql.append("', '");
230
            sql.append(tableName);
231
            sql.append("');");
232
            break;
233
        case "osm":
234
            sql.append("CALL OSMRead('");
235
            sql.append(file.getAbsolutePath());
236
            sql.append("', '");
237
            sql.append(tableName);
238
            sql.append("', ");
239
            sql.append(BooleanUtils.toStringTrueFalse(deleteTables));
240
            sql.append(");");
241
            break;
242
        default:
243
            return;
244
        }
245
        try {
246
            DataManager dataManager = DALLocator.getDataManager();
247
            JDBCServerExplorer explorer = (JDBCServerExplorer) dataManager.openServerExplorer(
248
                explorerParameters.getExplorerName(), 
249
                explorerParameters
250
            );
251
            explorer.execute(sql.toString());
252
        } catch(Exception ex) {
253
            logger.warn("Can't import file.",ex);
254
            application.messageDialog(
255
                i18n.getTranslation("_Warning"), 
256
                i18n.getTranslation("_Cant_import_file.") + 
257
                    "\n" + 
258
                    i18n.getTranslation("_See_the_log_file_to_more_information"), 
259
                JOptionPane.WARNING_MESSAGE
260
            );
261
        }
262
    }
263
    
160 264
    private void linkActiveLayers() {
161 265
        final List<FLyrVect> layers = this.getSelectedLayers();
162 266
        if( CollectionUtils.isEmpty(layers) ) {
......
166 270
        jdbcConnectionPanel.setConnectorFilter(new JDBCConnectionPanel.ConnectorFilter() {
167 271
            @Override
168 272
            public boolean accept(JDBCServerExplorerParameters parameters) {
169
                return StringUtils.equalsIgnoreCase(parameters.getExplorerName(), "H2Spatial");
273
                return StringUtils.equalsIgnoreCase(parameters.getExplorerName(), DAL_EXPLORER_NAME);
170 274
            }
171 275
        });
172 276
        WindowManager_v2 winmanager = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
......
208 312
        } catch (Exception ex) {
209 313
        }
210 314
    }
315

  
316
    private void downloadOSM() {
317
        
318
        I18nManager i18n = ToolsLocator.getI18nManager();
319
        FoldersManager foldersManager = ToolsLocator.getFoldersManager();
320
        ApplicationManager application = ApplicationLocator.getManager();
321
        
322
        ViewDocument viewDoc = (ViewDocument) application.getActiveDocument(ViewManager.TYPENAME);
323
        if( viewDoc == null ) {
324
            return;
325
        }
326
        final Envelope env = viewDoc.getMapContext().getViewPort().getEnvelope();
327
        final File[] files = application.showSaveFileDialog(
328
            i18n.getTranslation("_Select_the_file_in_which_to_save_the_data"), 
329
            foldersManager.get("DataFolder")
330
        );
331
        if( !ArrayUtils.isEmpty(files) ) {
332
            final JDBCConnectionPanel jdbcConnectionPanel = DALSwingLocator.getSwingManager().createJDBCConnectionPanel();
333
            jdbcConnectionPanel.setConnectorFilter(new JDBCConnectionPanel.ConnectorFilter() {
334
                @Override
335
                public boolean accept(JDBCServerExplorerParameters parameters) {
336
                    return StringUtils.equalsIgnoreCase(parameters.getExplorerName(), DAL_EXPLORER_NAME);
337
                }
338
            });
339
            WindowManager_v2 winmanager = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
340
            final Dialog dlg = winmanager.createDialog(
341
                jdbcConnectionPanel.asJComponent(),
342
                "Select database",
343
                null, 
344
                WindowManager_v2.BUTTONS_OK_CANCEL
345
            );
346
            dlg.addActionListener(new ActionListener() {
347
                @Override
348
                public void actionPerformed(ActionEvent e) {
349
                    if( dlg.getAction()==WindowManager_v2.BUTTONS_OK ) {
350
                        doDownloadOSM( 
351
                            env, 
352
                            files[0], 
353
                            jdbcConnectionPanel.getServerExplorerParameters()
354
                        );
355
                    }
356
                }
357
            });
358
            dlg.show(WindowManager.MODE.WINDOW);
359
        }
360
    }
361
    
362
    private void doDownloadOSM(Envelope env, File f, JDBCServerExplorerParameters explorerParameters) {
363
        I18nManager i18n = ToolsLocator.getI18nManager();
364
        ApplicationManager application = ApplicationLocator.getManager();
365
        
366
        try {
367
            String sql = MessageFormat.format(
368
                "CALL ST_OSMDownloader(''{0}'':geometry, ''{1}'');",
369
                env.getGeometry().convertToWKT(),
370
                f.getAbsolutePath()
371
            );
372
            DataManager dataManager = DALLocator.getDataManager();
373
            JDBCServerExplorer explorer = (JDBCServerExplorer) dataManager.openServerExplorer(
374
                explorerParameters.getExplorerName(), 
375
                explorerParameters
376
            );
377
            explorer.execute(sql);
378
        } catch(Exception ex) {
379
            logger.warn("Can't download from OSM.",ex);
380
            application.messageDialog(
381
                i18n.getTranslation("_Warning"), 
382
                i18n.getTranslation("_Cant_download_from_OSM.") + 
383
                    "\n" + 
384
                    i18n.getTranslation("_See_the_log_file_to_more_information"), 
385
                JOptionPane.WARNING_MESSAGE
386
            );
387
        }
388
    }
211 389
}

Also available in: Unified diff