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 | 43377 | jjdelcerro | |
---|---|---|---|
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 | } |