Statistics
| Revision:

svn-gvsig-desktop / 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 @ 43377

History | View | Annotate | Download (7.45 KB)

1

    
2
package org.gvsig.h2spatial;
3

    
4
import java.awt.event.ActionEvent;
5
import java.awt.event.ActionListener;
6
import java.io.File;
7
import java.net.BindException;
8
import java.sql.SQLException;
9
import java.text.MessageFormat;
10
import java.util.ArrayList;
11
import java.util.List;
12
import org.apache.commons.collections.CollectionUtils;
13
import org.apache.commons.io.FilenameUtils;
14
import org.apache.commons.lang3.ArrayUtils;
15
import org.apache.commons.lang3.StringUtils;
16
import org.gvsig.andami.IconThemeHelper;
17
import org.gvsig.andami.plugins.Extension;
18
import org.gvsig.app.ApplicationLocator;
19
import org.gvsig.app.ApplicationManager;
20
import org.gvsig.app.project.documents.view.ViewDocument;
21
import org.gvsig.app.project.documents.view.ViewManager;
22
import org.gvsig.fmap.dal.DALLocator;
23
import org.gvsig.fmap.dal.feature.FeatureStore;
24
import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemStoreParameters;
25
import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorer;
26
import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
27
import org.gvsig.fmap.dal.swing.DALSwingLocator;
28
import org.gvsig.fmap.dal.swing.jdbc.JDBCConnectionPanel;
29
import org.gvsig.fmap.mapcontext.MapContextLocator;
30
import org.gvsig.fmap.mapcontext.MapContextManager;
31
import org.gvsig.fmap.mapcontext.layers.FLayer;
32
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
33
import org.gvsig.tools.ToolsLocator;
34
import org.gvsig.tools.swing.api.ToolsSwingLocator;
35
import org.gvsig.tools.swing.api.windowmanager.Dialog;
36
import org.gvsig.tools.swing.api.windowmanager.WindowManager;
37
import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
38
import org.gvsig.webbrowser.WebBrowserFactory;
39
import org.gvsig.webbrowser.WebBrowserPanel;
40
import org.h2.tools.Server;
41

    
42

    
43
public class H2SpatialExtension extends Extension {
44

    
45
    @Override
46
    public void initialize() {
47
    }
48

    
49
    @Override
50
    public boolean canQueryByAction() {
51
        return true;
52
    }
53
    
54
    @Override
55
    public void postInitialize() {
56
        MapContextManager mapContextMgr = MapContextLocator.getMapContextManager();
57
        
58
        IconThemeHelper.registerIcon("layer", "layer-icon-h2", this);
59
        mapContextMgr.registerIconLayer("H2Spatial", "layer-icon-h2");
60
    }
61
    
62
    @Override
63
    public void execute(String actionCommand) {
64
        if( "tools-h2spatial-show-admintool".equalsIgnoreCase(actionCommand) ) {
65
            startserver();
66
            startbrowser();
67
            return;
68
        }
69
        if( "tools-h2spatial-linklayer".equalsIgnoreCase(actionCommand) ) {
70
            linkActiveLayers();
71
        }
72
    }
73
    
74
    private void startserver()  {
75
        try {
76
            Server server = Server.createWebServer("-webPort","8082");
77
            server.start();
78
        } catch (SQLException ex) {
79
            if( ex.getCause() instanceof BindException ) {
80
                logger.warn("Can't start H2 web server, ? Already running ?");
81
            } else {
82
                logger.warn("Can't start H2 web server.",ex);
83
            }
84
        }
85
    }
86

    
87
    private List<FLyrVect> getSelectedLayers() {
88
        ApplicationManager application = ApplicationLocator.getManager();
89
        ViewDocument viewdoc = (ViewDocument) application.getActiveDocument(ViewManager.TYPENAME);
90
        if( viewdoc == null ) {
91
            return null;
92
        }
93
        FLayer[] layers = viewdoc.getMapContext().getLayers().getActives();
94
        if( ArrayUtils.isEmpty(layers) ) {
95
            return null;
96
        }
97
        List<FLyrVect> r = new ArrayList<>();
98
        for( FLayer layer : layers ) {
99
            if( layer instanceof FLyrVect ) {
100
                FeatureStore store = ((FLyrVect)layer).getFeatureStore();
101
                if( store != null ) {
102
                    if( store.getParameters() instanceof FilesystemStoreParameters &&
103
                        StringUtils.equalsIgnoreCase(store.getProviderName(),"Shape") ) {
104
                        r.add((FLyrVect) layer);
105
                    }
106
                }
107
            }
108
        }
109
        if( r.isEmpty() ) {
110
            return null;
111
        }
112
        return r;
113
    }
114
    
115
    @Override
116
    public boolean isEnabled() {
117
        return true;
118
    }
119

    
120
    @Override
121
    public boolean isVisible() {
122
        return true;
123
    }
124

    
125
    @Override
126
    public boolean isEnabled(String action) {
127
        if( "tools-h2spatial-show-admintool".equalsIgnoreCase(action) ) {
128
            return true;
129
        } 
130
        if( "tools-h2spatial-linklayer".equalsIgnoreCase(action) ) {
131
            return ! CollectionUtils.isEmpty(this.getSelectedLayers());
132
        }
133
        return false;
134
    }
135

    
136
    @Override
137
    public boolean isVisible(String action) {
138
        return true;
139
    }
140

    
141
    
142
    
143
    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
        WindowManager winmanager = ToolsSwingLocator.getWindowManager();
150
        WebBrowserPanel webbrowser = WebBrowserFactory.createWebBrowserPanel();
151
        winmanager.showWindow(
152
            webbrowser.asJComponent(), 
153
            ToolsLocator.getI18nManager().getTranslation("_H2_administration_tool"), 
154
            WindowManager.MODE.WINDOW
155
        );
156
        webbrowser.setPage("http://localhost:8082");
157
        
158
    }
159
    
160
    private void linkActiveLayers() {
161
        final List<FLyrVect> layers = this.getSelectedLayers();
162
        if( CollectionUtils.isEmpty(layers) ) {
163
            return;
164
        }
165
        final JDBCConnectionPanel jdbcConnectionPanel = DALSwingLocator.getSwingManager().createJDBCConnectionPanel();
166
        jdbcConnectionPanel.setConnectorFilter(new JDBCConnectionPanel.ConnectorFilter() {
167
            @Override
168
            public boolean accept(JDBCServerExplorerParameters parameters) {
169
                return StringUtils.equalsIgnoreCase(parameters.getExplorerName(), "H2Spatial");
170
            }
171
        });
172
        WindowManager_v2 winmanager = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
173
        final Dialog dlg = winmanager.createDialog(
174
            jdbcConnectionPanel.asJComponent(),
175
            "Select database",
176
            null, 
177
            WindowManager_v2.BUTTONS_OK_CANCEL
178
        );
179
        dlg.addActionListener(new ActionListener() {
180
            @Override
181
            public void actionPerformed(ActionEvent e) {
182
                if( dlg.getAction()==WindowManager_v2.BUTTONS_OK ) {
183
                    JDBCServerExplorerParameters params = jdbcConnectionPanel.getServerExplorerParameters();
184
                    linkLayers(layers, params);
185
                }
186
            }
187
        });
188
        dlg.show(WindowManager.MODE.WINDOW);
189
    }
190
    
191
    private void linkLayers(List<FLyrVect> layers, JDBCServerExplorerParameters params) {
192
        try {
193
            JDBCServerExplorer explorer = (JDBCServerExplorer) DALLocator.getDataManager().openServerExplorer(
194
                params.getExplorerName(),
195
                params
196
            );
197
            for( FLyrVect layer : layers ) {
198
                FilesystemStoreParameters layerParameters = (FilesystemStoreParameters) 
199
                    layer.getFeatureStore().getParameters();
200
                File f = layerParameters.getFile();
201
                String sql = MessageFormat.format(
202
                    "CALL FILE_TABLE(''{0}'', ''{1}'')",
203
                    FilenameUtils.normalize(f.getAbsolutePath(), true),
204
                    layer.getName()
205
                );
206
                explorer.execute(sql);
207
            }
208
        } catch (Exception ex) {
209
        }
210
    }
211
}