Revision 63 org.gvsig.catalog/branches/org.gvsig.catalog-CSW2.0.2/org.gvsig.catalog/org.gvsig.catalog.extension/src/main/java/org/gvsig/catalog/loaders/PostgisLayerLoader.java
PostgisLayerLoader.java | ||
---|---|---|
40 | 40 |
*/ |
41 | 41 |
package org.gvsig.catalog.loaders; |
42 | 42 |
|
43 |
import java.awt.Dimension; |
|
44 |
import java.net.MalformedURLException; |
|
45 |
import java.net.URL; |
|
43 | 46 |
import java.util.StringTokenizer; |
44 | 47 |
import java.util.TreeMap; |
45 | 48 |
|
49 |
import javax.swing.JLabel; |
|
50 |
import javax.swing.JOptionPane; |
|
51 |
import javax.swing.JPanel; |
|
52 |
import javax.swing.JPasswordField; |
|
53 |
|
|
54 |
import org.apache.commons.dbcp.SQLNestedException; |
|
55 |
import org.apache.commons.lang3.StringUtils; |
|
46 | 56 |
import org.gvsig.catalog.schemas.Resource; |
47 | 57 |
import org.gvsig.catalog.utils.Strings; |
48 | 58 |
import org.gvsig.fmap.dal.DataStoreParameters; |
49 | 59 |
import org.gvsig.fmap.dal.exception.InitializeException; |
50 | 60 |
import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException; |
61 |
import org.gvsig.fmap.dal.resource.db.DBParameters; |
|
62 |
import org.gvsig.fmap.dal.store.jdbc.JDBCConnectionParameters; |
|
63 |
import org.gvsig.fmap.mapcontext.layers.FLayer; |
|
51 | 64 |
import org.gvsig.i18n.Messages; |
52 | 65 |
|
53 | 66 |
|
... | ... | |
59 | 72 |
*/ |
60 | 73 |
|
61 | 74 |
public class PostgisLayerLoader extends GvSigLayerLoader{ |
62 |
|
|
63 |
public PostgisLayerLoader(Resource resource) { |
|
64 |
super(resource); |
|
65 |
} |
|
66 | 75 |
|
67 |
protected boolean hasSpecificLayer() {
|
|
68 |
return false;
|
|
69 |
}
|
|
76 |
public PostgisLayerLoader(Resource resource) {
|
|
77 |
super(resource);
|
|
78 |
}
|
|
70 | 79 |
|
71 |
protected String getLayerName() { |
|
72 |
return getResource().getName(); |
|
73 |
} |
|
74 |
|
|
75 |
protected DataStoreParameters createDataStoreParameters() |
|
76 |
throws InitializeException, ProviderNotRegisteredException { |
|
77 |
String jdbcUrl = getResource().getLinkage(); |
|
78 |
String table = getResource().getName(); |
|
79 |
|
|
80 |
DataStoreParameters dataStoreParameters = DATA_MANAGER.createStoreParameters("PostgreSQL"); |
|
81 |
parseParams(dataStoreParameters, jdbcUrl, table); |
|
82 |
|
|
83 |
return dataStoreParameters; |
|
84 |
} |
|
80 |
protected boolean hasSpecificLayer() { |
|
81 |
return false; |
|
82 |
} |
|
85 | 83 |
|
86 |
private void parseParams(DataStoreParameters dataStoreParameters, String jdbcUrl, String table){ |
|
87 |
StringTokenizer sti = new StringTokenizer(jdbcUrl,"?"); |
|
88 |
String dbURL = sti.nextToken(); |
|
89 |
String p = sti.nextToken(); |
|
90 |
TreeMap map = separateParams(p); |
|
91 |
String user = (String) map.get((String) "USER"); |
|
92 |
String pwd = (String) map.get((String) "PASSWORD"); |
|
93 |
map = Strings.separateParams(table); |
|
94 |
dataStoreParameters.setDynValue("USER", user); |
|
95 |
dataStoreParameters.setDynValue("PASSWORD",pwd); |
|
96 |
dataStoreParameters.setDynValue("WHERECLAUSE",""); |
|
97 |
dataStoreParameters.setDynValue("DBURL",dbURL); |
|
98 |
} |
|
84 |
protected String getLayerName() { |
|
85 |
return getResource().getName(); |
|
86 |
} |
|
99 | 87 |
|
100 |
private TreeMap separateParams(String pairValues){ |
|
101 |
TreeMap map = new TreeMap(); |
|
102 |
String[] params = pairValues.split("&"); |
|
103 |
for (int i = 0; i < params.length; i++) { |
|
104 |
String[] nameValue = params[i].split("="); |
|
105 |
map.put(nameValue[0].toUpperCase(), nameValue[1]); |
|
106 |
} |
|
107 |
return map; |
|
108 |
} |
|
88 |
protected DataStoreParameters createDataStoreParameters() |
|
89 |
throws InitializeException, ProviderNotRegisteredException { |
|
90 |
String jdbcUrl = getResource().getLinkage(); |
|
91 |
String table = getResource().getName(); |
|
109 | 92 |
|
110 |
/* |
|
111 |
* (non-Javadoc) |
|
112 |
* @see es.gva.cit.gvsig.catalogClient.loaders.LayerLoader#getErrorMessage() |
|
113 |
*/ |
|
114 |
protected String getErrorMessage() { |
|
115 |
return Messages.getText("postgisError") + ".\n" + |
|
116 |
Messages.getText("server") + ": " + |
|
117 |
getResource().getLinkage() + "\n" + |
|
118 |
Messages.getText("parameters") + ": " + |
|
119 |
getResource().getName(); |
|
120 |
} |
|
93 |
DataStoreParameters dataStoreParameters = DATA_MANAGER.createStoreParameters("PostgreSQL"); |
|
94 |
parseParams(dataStoreParameters, jdbcUrl, table); |
|
121 | 95 |
|
122 |
/* |
|
123 |
* (non-Javadoc) |
|
124 |
* @see es.gva.cit.gvsig.catalogClient.loaders.LayerLoader#getWindowMessage() |
|
125 |
*/ |
|
126 |
protected String getWindowMessage() { |
|
127 |
return Messages.getText("postgisLoad"); |
|
128 |
} |
|
96 |
return dataStoreParameters; |
|
97 |
} |
|
129 | 98 |
|
99 |
private void parseParams(DataStoreParameters dataStoreParameters, String jdbcUrl, String table){ |
|
100 |
StringTokenizer sti = new StringTokenizer(jdbcUrl,"?"); |
|
101 |
String dbURL = sti.nextToken(); |
|
102 |
String user = ""; |
|
103 |
String pwd = ""; |
|
104 |
if(sti.hasMoreTokens()){ |
|
105 |
String p = sti.nextToken(); |
|
130 | 106 |
|
107 |
TreeMap map = separateParams(p); |
|
108 |
user = (String) map.get((String) "USER"); |
|
109 |
pwd = (String) map.get((String) "PASSWORD"); |
|
110 |
map = Strings.separateParams(table); |
|
111 |
dataStoreParameters.setDynValue("USER", user); |
|
112 |
dataStoreParameters.setDynValue("PASSWORD",pwd); |
|
113 |
dataStoreParameters.setDynValue("WHERECLAUSE",""); |
|
114 |
dataStoreParameters.setDynValue("DBURL",dbURL); |
|
115 |
}else{ |
|
116 |
if(dbURL.startsWith("jdbc:postgresql://")){ |
|
117 |
//jdbc:postgresql://test.gvsig.net:7432/gvsig:****@test |
|
118 |
try { |
|
119 |
URL url = new URL(dbURL.replace("jdbc:postgresql://", "http://")); |
|
120 |
if(url != null) { |
|
121 |
dataStoreParameters.setDynValue(JDBCConnectionParameters.HOST_PARAMTER_NAME, url.getHost()); |
|
122 |
dataStoreParameters.setDynValue(JDBCConnectionParameters.PORT_PARAMTER_NAME, url.getPort()+""); |
|
123 |
// /gvsig:****@test |
|
124 |
String path = url.getPath(); |
|
125 |
user = path.substring(1, path.indexOf(":")); |
|
126 |
pwd = getCredentials(user); |
|
127 |
|
|
128 |
String db = path.substring(path.indexOf("@")+1); |
|
129 |
|
|
130 |
dataStoreParameters.setDynValue(DBParameters.USER_PARAMTER_NAME, user); |
|
131 |
dataStoreParameters.setDynValue(DBParameters.PASSWORD_PARAMTER_NAME, pwd); |
|
132 |
dataStoreParameters.setDynValue(JDBCConnectionParameters.DBNAME_PARAMTER_NAME, db); |
|
133 |
} |
|
134 |
} catch (MalformedURLException e) { |
|
135 |
// TODO Auto-generated catch block |
|
136 |
e.printStackTrace(); |
|
137 |
} |
|
138 |
|
|
139 |
} |
|
140 |
} |
|
141 |
|
|
142 |
dataStoreParameters.setDynValue("Table", table); |
|
143 |
} |
|
144 |
|
|
145 |
|
|
146 |
|
|
147 |
|
|
148 |
private String getCredentials(String user) { |
|
149 |
JPanel panel = new JPanel(); |
|
150 |
JLabel label = new JLabel(Messages.getText("password_needed")+" ("+user+"):"); |
|
151 |
JPasswordField pass = new JPasswordField(); |
|
152 |
pass.setPreferredSize(new Dimension(150, 25)); |
|
153 |
panel.add(label); |
|
154 |
panel.add(pass); |
|
155 |
String[] options = new String[]{Messages.getText("connectButton"), Messages.getText("cancelSearchButton")}; |
|
156 |
int option = JOptionPane.showOptionDialog(null, panel, Messages.getText("password_needed_title"), |
|
157 |
JOptionPane.NO_OPTION, JOptionPane.PLAIN_MESSAGE, |
|
158 |
null, options, options[1]); |
|
159 |
if(option == 0){ |
|
160 |
return new String(pass.getPassword()); |
|
161 |
} |
|
162 |
return ""; |
|
163 |
} |
|
164 |
|
|
165 |
// public void loadLayer() throws LayerLoaderException { |
|
166 |
// FLayer layer; |
|
167 |
// try{ |
|
168 |
// if (hasSpecificLayer()){ |
|
169 |
// layer = createLayerFromExtensionPoint(); |
|
170 |
// }else{ |
|
171 |
// layer = createLayerFromParameters(); |
|
172 |
// } |
|
173 |
// if (layer != null){ |
|
174 |
// addLayerToView(layer); |
|
175 |
// } |
|
176 |
// } catch (Exception e) { |
|
177 |
// if(e. instanceof SQLNestedException){ |
|
178 |
// JPanel panel = new JPanel(); |
|
179 |
// JLabel label = new JLabel("Enter a password:"); |
|
180 |
// JPasswordField pass = new JPasswordField(); |
|
181 |
// panel.add(label); |
|
182 |
// panel.add(pass); |
|
183 |
// String[] options = new String[]{"OK", "Cancel"}; |
|
184 |
// int option = JOptionPane.showOptionDialog(null, panel, "The title", |
|
185 |
// JOptionPane.NO_OPTION, JOptionPane.PLAIN_MESSAGE, |
|
186 |
// null, options, options[1]); |
|
187 |
// if(option == 0 && !StringUtils.isBlank(new String(pass.getPassword()))){ |
|
188 |
// String pwd = new String(pass.getPassword()); |
|
189 |
// try{ |
|
190 |
// DataStoreParameters dataStoreParameters = createDataStoreParameters(); |
|
191 |
// dataStoreParameters.setDynValue(DBParameters.PASSWORD_PARAMTER_NAME, pwd); |
|
192 |
// MAP_CONTEXT_MANAGER.createLayer(getLayerName(), dataStoreParameters); |
|
193 |
// }catch (Exception ex) { |
|
194 |
// throw new LayerLoaderException(ex.getMessage(), ex, getWindowMessage()); |
|
195 |
// } |
|
196 |
// }else{ |
|
197 |
// throw new LayerLoaderException(e.getMessage(), e, getWindowMessage()); |
|
198 |
// } |
|
199 |
// }else{ |
|
200 |
// e.printStackTrace(); |
|
201 |
// throw new LayerLoaderException(e.getMessage(), e, getWindowMessage()); |
|
202 |
// } |
|
203 |
// } |
|
204 |
// |
|
205 |
// } |
|
206 |
|
|
207 |
private TreeMap separateParams(String pairValues){ |
|
208 |
TreeMap map = new TreeMap(); |
|
209 |
String[] params = pairValues.split("&"); |
|
210 |
for (int i = 0; i < params.length; i++) { |
|
211 |
String[] nameValue = params[i].split("="); |
|
212 |
map.put(nameValue[0].toUpperCase(), nameValue[1]); |
|
213 |
} |
|
214 |
return map; |
|
215 |
} |
|
216 |
|
|
217 |
/* |
|
218 |
* (non-Javadoc) |
|
219 |
* @see es.gva.cit.gvsig.catalogClient.loaders.LayerLoader#getErrorMessage() |
|
220 |
*/ |
|
221 |
protected String getErrorMessage() { |
|
222 |
return Messages.getText("postgisError") + ".\n" + |
|
223 |
Messages.getText("server") + ": " + |
|
224 |
getResource().getLinkage() + "\n" + |
|
225 |
Messages.getText("parameters") + ": " + |
|
226 |
getResource().getName(); |
|
227 |
} |
|
228 |
|
|
229 |
/* |
|
230 |
* (non-Javadoc) |
|
231 |
* @see es.gva.cit.gvsig.catalogClient.loaders.LayerLoader#getWindowMessage() |
|
232 |
*/ |
|
233 |
protected String getWindowMessage() { |
|
234 |
return Messages.getText("postgisLoad"); |
|
235 |
} |
|
236 |
|
|
237 |
|
|
131 | 238 |
} |
Also available in: Unified diff