Revision 956 org.gvsig.raster.postgis/trunk/org.gvsig.raster.postgis/org.gvsig.raster.postgis.app/org.gvsig.raster.postgis.app.postgisrasterclient/src/main/java/org/gvsig/raster/postgis/app/postgisrasterclient/gui/AddPostGISRasterLayerWizard.java
AddPostGISRasterLayerWizard.java | ||
---|---|---|
29 | 29 |
import java.util.Map.Entry; |
30 | 30 |
|
31 | 31 |
import javax.swing.JComboBox; |
32 |
import javax.swing.JOptionPane; |
|
33 | 32 |
import javax.swing.JPanel; |
33 |
import javax.swing.event.ListSelectionEvent; |
|
34 |
import javax.swing.event.ListSelectionListener; |
|
34 | 35 |
|
35 | 36 |
import org.apache.commons.collections.map.HashedMap; |
36 | 37 |
import org.gvsig.andami.PluginServices; |
... | ... | |
42 | 43 |
import org.gvsig.compat.net.ICancellable; |
43 | 44 |
import org.gvsig.fmap.dal.DALLocator; |
44 | 45 |
import org.gvsig.fmap.dal.DataManager; |
45 |
import org.gvsig.fmap.dal.DataStore; |
|
46 | 46 |
import org.gvsig.fmap.dal.DataStoreParameters; |
47 |
import org.gvsig.fmap.dal.coverage.store.parameter.RasterDataParameters; |
|
48 | 47 |
import org.gvsig.fmap.dal.exception.DataException; |
49 | 48 |
import org.gvsig.fmap.dal.exception.InitializeException; |
50 | 49 |
import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException; |
... | ... | |
56 | 55 |
import org.gvsig.fmap.dal.serverexplorer.db.DBServerExplorer; |
57 | 56 |
import org.gvsig.fmap.dal.serverexplorer.db.DBServerExplorerParameters; |
58 | 57 |
import org.gvsig.fmap.dal.store.db.DBStoreParameters; |
59 |
import org.gvsig.fmap.mapcontext.MapContext; |
|
60 |
import org.gvsig.fmap.mapcontext.exceptions.LoadLayerException; |
|
61 |
import org.gvsig.fmap.mapcontext.layers.FLayer; |
|
62 | 58 |
import org.gvsig.geodb.ExtDB_Spatial; |
63 | 59 |
import org.gvsig.geodb.vectorialdb.wizard.MyExplorer; |
64 | 60 |
import org.gvsig.geodb.vectorialdb.wizard.VectorialDBConnectionParamsDialog; |
65 |
import org.gvsig.raster.fmap.layers.DefaultFLyrRaster; |
|
66 |
import org.gvsig.raster.fmap.layers.FLyrRaster; |
|
67 | 61 |
import org.gvsig.raster.postgis.io.PostGISRasterCoreException; |
68 |
import org.gvsig.raster.postgis.io.PostGISRasterServerExplorer; |
|
69 |
import org.gvsig.raster.postgis.io.PostGISRasterServerExplorerParameters; |
|
70 | 62 |
import org.gvsig.raster.postgis.swing.AddLayerUI; |
71 | 63 |
import org.gvsig.raster.postgis.swing.PostGISRasterSwingLocator; |
72 | 64 |
import org.gvsig.raster.util.CancelTaskImpl; |
73 |
import org.gvsig.raster.util.RasterNotLoadException; |
|
74 | 65 |
import org.gvsig.tools.dynobject.DynObject; |
75 | 66 |
import org.slf4j.Logger; |
76 | 67 |
import org.slf4j.LoggerFactory; |
... | ... | |
79 | 70 |
* Wizard panel to add a new PostGIS raster layer |
80 | 71 |
* @author Nacho Brodin (nachobrodin@gmail.com) |
81 | 72 |
*/ |
82 |
public class AddPostGISRasterLayerWizard extends WizardPanel implements ActionListener { |
|
73 |
public class AddPostGISRasterLayerWizard extends WizardPanel implements ActionListener, ListSelectionListener {
|
|
83 | 74 |
private static final long serialVersionUID = 1L; |
84 | 75 |
private static final String TAB_NAME = "PostGIS Raster"; |
85 | 76 |
private static Logger logger = LoggerFactory.getLogger(AddPostGISRasterLayerWizard.class.getName()); |
86 | 77 |
private AbstractViewPanel view = null; |
87 | 78 |
private AddLayerUI apiUI = null; |
88 |
private DBServerExplorerParameters dbExplorerParameters = null; |
|
89 | 79 |
private ICancellable cancel = null; |
80 |
private LayerLoaderManager layerLoaderManager = null; |
|
90 | 81 |
|
91 | 82 |
/** |
92 | 83 |
* Thread to connect to a PostGIS raster server |
... | ... | |
101 | 92 |
|
102 | 93 |
public void run() { |
103 | 94 |
try { |
104 |
loadLayer();
|
|
95 |
layerLoaderManager.loadLayers();
|
|
105 | 96 |
} finally { |
106 | 97 |
((CancelTaskImpl)cancel).setCanceled(false); |
107 | 98 |
} |
... | ... | |
135 | 126 |
apiUI = PostGISRasterSwingLocator.getSwingManager().createAddLayerUI(); |
136 | 127 |
apiUI.addListenerToBDSelectionCombo(this); |
137 | 128 |
apiUI.addListenerToNewDBButton(this); |
129 |
apiUI.addListenerToTableSelector(this); |
|
138 | 130 |
|
139 | 131 |
view = (AbstractViewPanel) iw; |
140 | 132 |
setMapCtrl(view.getMapControl()); |
... | ... | |
142 | 134 |
JPanel mainPanel = (JPanel)apiUI.getComponent(); |
143 | 135 |
mainPanel.setBounds(new java.awt.Rectangle(0, 0, 501, 350)); |
144 | 136 |
add(mainPanel, null); |
137 |
|
|
138 |
layerLoaderManager = new LayerLoaderManager(apiUI); |
|
139 |
|
|
145 | 140 |
loadVectorialDBDatasourcesCombo(null); |
146 | 141 |
} |
147 | 142 |
|
... | ... | |
174 | 169 |
values.setDynValue("db_connections", connections); |
175 | 170 |
} |
176 | 171 |
} |
177 |
|
|
178 |
/** |
|
179 |
* Return FLayers if user performs multi selection. |
|
180 |
*/ |
|
181 |
public void loadLayer() { |
|
182 |
MapContext mapContext = null; |
|
183 |
IWindow[] w = PluginServices.getMDIManager().getAllWindows(); |
|
184 |
for (int i = 0; i < w.length; i++) { |
|
185 |
if (w[i] instanceof org.gvsig.app.project.documents.view.gui.AbstractViewPanel) { |
|
186 |
mapContext = ((org.gvsig.app.project.documents.view.gui.AbstractViewPanel)w[i]).getMapControl().getMapContext(); |
|
187 |
} |
|
188 |
} |
|
189 |
|
|
190 |
String host = dbExplorerParameters.getHost(); |
|
191 |
if(host.compareTo("localhost") == 0) |
|
192 |
host = "127.0.0.1"; |
|
193 |
Integer port = dbExplorerParameters.getPort(); |
|
194 |
String dbname = dbExplorerParameters.getDBName(); |
|
195 |
String user = dbExplorerParameters.getUser(); |
|
196 |
String password = dbExplorerParameters.getPassword(); |
|
197 |
String table = null; |
|
198 |
String schema = null; |
|
199 |
|
|
200 |
List<Object> tables = apiUI.getSelectedTables(); |
|
201 |
|
|
202 |
for(int i = 0; i < tables.size(); i++) { |
|
203 |
TableListItem item = (TableListItem)tables.get(i); |
|
204 |
schema = item.getSchema(); |
|
205 |
table = item.getTableName(); |
|
206 |
|
|
207 |
String connString = null; |
|
208 |
if(schema == null) |
|
209 |
connString = "PG:host='" + host + "' port='" + port + "' dbname='" + dbname + "' user='" + user + "' password='" + password + "' table='" + table + "'"; |
|
210 |
else |
|
211 |
connString = "PG:host='" + host + "' port='" + port + "' dbname='" + dbname + "' user='" + user + "' password='" + password + "' schema='" + schema + "' table='" + table + "'"; |
|
212 |
|
|
213 |
//connString += " column='rast' where='rid = 1041'"; |
|
214 |
try { |
|
215 |
FLayer layer = createLayer(getFormatedRasterFileName(connString), connString, item); |
|
216 |
|
|
217 |
//Adds the layer to the view |
|
218 |
mapContext.beginAtomicEvent(); |
|
219 |
layer.setVisible(true); |
|
220 |
mapContext.getLayers().addLayer(layer); |
|
221 |
mapContext.callLegendChanged(); |
|
222 |
mapContext.endAtomicEvent(); |
|
223 |
mapContext.invalidate(); |
|
224 |
} catch (LoadLayerException e) { |
|
225 |
logger.error("Error creating layer: " + e.getMessage(), e); |
|
226 |
showConnectionErrorMessage(PluginServices.getText(this, "error_creating_layer")); |
|
227 |
} |
|
228 |
} |
|
229 |
} |
|
230 | 172 |
|
231 |
/** |
|
232 |
* Builds a new raster layer |
|
233 |
* @param fileName |
|
234 |
* @return |
|
235 |
* @throws RasterNotLoadException |
|
236 |
* @throws LoadLayerException |
|
237 |
*/ |
|
238 |
@SuppressWarnings("deprecation") |
|
239 |
public FLyrRaster createLayer(String layerName, String conn, TableListItem item) throws LoadLayerException { |
|
240 |
DataManager dataManager = DALLocator.getDataManager(); |
|
241 |
DataStore dataStore = null; |
|
242 |
try { |
|
243 |
PostGISRasterServerExplorerParameters explorerParams = (PostGISRasterServerExplorerParameters) dataManager.createServerExplorerParameters(PostGISRasterServerExplorer.NAME); |
|
244 |
explorerParams.setHost(conn); |
|
245 |
PostGISRasterServerExplorer explorer = (PostGISRasterServerExplorer) dataManager.createServerExplorer(explorerParams); |
|
246 |
RasterDataParameters storeParameters = (RasterDataParameters)explorer.getStoreParameters(); |
|
247 |
storeParameters.setURI(conn); |
|
248 |
storeParameters.setDynValue("DBPARAMS", item.getDBStoreParameters()); |
|
249 |
storeParameters.setDynValue("DBEXPLORER", item.getExplorer()); |
|
250 |
dataStore = dataManager.createStore(storeParameters); |
|
251 |
} catch (ValidateDataParametersException e) { |
|
252 |
throw new LoadLayerException("Error validating parameters", e); |
|
253 |
} catch (InitializeException e) { |
|
254 |
throw new LoadLayerException("Error initializating layer.", e); |
|
255 |
} catch (ProviderNotRegisteredException e) { |
|
256 |
throw new LoadLayerException("Provider not registered.", e); |
|
257 |
} catch (PostGISRasterCoreException e) { |
|
258 |
throw new LoadLayerException("", e); |
|
259 |
} |
|
260 |
|
|
261 |
DefaultFLyrRaster lyr = new DefaultFLyrRaster(); |
|
262 |
lyr.setName(layerName); |
|
263 |
lyr.setDataStore(dataStore); |
|
264 |
return lyr; |
|
265 |
} |
|
266 |
|
|
267 |
/** |
|
268 |
* Gets the name of a raster file |
|
269 |
*/ |
|
270 |
private String getFormatedRasterFileName(String name) { |
|
271 |
String newName = ""; |
|
272 |
String schema = null; |
|
273 |
String table = null; |
|
274 |
int index = name.indexOf(" schema='") + 8; |
|
275 |
if(index != -1) { |
|
276 |
try { |
|
277 |
schema = name.substring(index + 1, name.indexOf("'", index + 1)); |
|
278 |
newName += schema + "."; |
|
279 |
} catch (StringIndexOutOfBoundsException e) { |
|
280 |
} |
|
281 |
} |
|
282 |
index = name.indexOf(" table='") + 7; |
|
283 |
if(index != -1) { |
|
284 |
try { |
|
285 |
table = name.substring(index + 1, name.indexOf("'", index + 1)); |
|
286 |
newName += table; |
|
287 |
} catch (StringIndexOutOfBoundsException e) { |
|
288 |
} |
|
289 |
} |
|
290 |
return newName; |
|
291 |
} |
|
292 |
|
|
293 | 173 |
@Override |
294 | 174 |
public void close() { |
295 | 175 |
|
... | ... | |
297 | 177 |
|
298 | 178 |
@Override |
299 | 179 |
public void execute() { |
300 |
showConnectionInfoMessage(PluginServices.getText(this, "loading_postgis_raster_layer")); |
|
180 |
layerLoaderManager.showConnectionInfoMessage(PluginServices.getText(this, "loading_postgis_raster_layer"));
|
|
301 | 181 |
cancel = new CancelTaskImpl(); |
302 | 182 |
new ConnectThread(cancel).start(); |
303 | 183 |
} |
... | ... | |
353 | 233 |
|
354 | 234 |
} catch (ReadException e) { |
355 | 235 |
logger.info("While getting table names: " + e.getMessage(), e); |
356 |
showConnectionErrorMessage(PluginServices.getText(this, "error_getting_tables")); |
|
236 |
layerLoaderManager.showConnectionErrorMessage(PluginServices.getText(this, "error_getting_tables"));
|
|
357 | 237 |
return; |
358 | 238 |
} catch (Exception e) { |
359 | 239 |
logger.info("While getting table names: " + e.getMessage(), e); |
360 |
showConnectionErrorMessage(PluginServices.getText(this, "error_getting_tables")); |
|
240 |
layerLoaderManager.showConnectionErrorMessage(PluginServices.getText(this, "error_getting_tables"));
|
|
361 | 241 |
return; |
362 | 242 |
} |
363 | 243 |
} |
... | ... | |
414 | 294 |
MyExplorer sel = addNewConnection(); |
415 | 295 |
|
416 | 296 |
if (sel != null) { |
417 |
dbExplorerParameters = sel.getDbSeverExplorerParameters(); |
|
297 |
DBServerExplorerParameters dbExplorerParameters = sel.getDbSeverExplorerParameters(); |
|
298 |
layerLoaderManager.setDBServerExplorerParameters(dbExplorerParameters); |
|
418 | 299 |
loadVectorialDBDatasourcesCombo(sel); |
419 | 300 |
apiUI.getDBCombo().setSelectedItem(sel); |
420 | 301 |
} |
... | ... | |
431 | 312 |
if (selected instanceof MyExplorer) { |
432 | 313 |
MyExplorer sel_obj = (MyExplorer) selected; |
433 | 314 |
dbCombo.repaint(); |
434 |
dbExplorerParameters = sel_obj.getDbSeverExplorerParameters(); |
|
315 |
DBServerExplorerParameters dbExplorerParameters = sel_obj.getDbSeverExplorerParameters(); |
|
316 |
layerLoaderManager.setDBServerExplorerParameters(dbExplorerParameters); |
|
435 | 317 |
updateTableList(dbExplorerParameters); |
436 | 318 |
} |
437 | 319 |
} |
... | ... | |
455 | 337 |
try { |
456 | 338 |
resp = newco.getParameters(); |
457 | 339 |
} catch (Exception e) { |
458 |
showConnectionErrorMessage(e.getMessage()); |
|
340 |
layerLoaderManager.showConnectionErrorMessage(e.getMessage());
|
|
459 | 341 |
return null; |
460 | 342 |
} |
461 | 343 |
PluginsManager manager = PluginsLocator.getManager(); |
... | ... | |
474 | 356 |
return null; |
475 | 357 |
} |
476 | 358 |
} |
477 |
|
|
478 |
/**
|
|
479 |
* Shows an error
|
|
480 |
* @param _msg
|
|
359 |
|
|
360 |
/* |
|
361 |
* (non-Javadoc)
|
|
362 |
* @see javax.swing.event.ListSelectionListener#valueChanged(javax.swing.event.ListSelectionEvent)
|
|
481 | 363 |
*/ |
482 |
private void showConnectionErrorMessage(String _msg) { |
|
483 |
String msg = (_msg.length() > 300) ? "" : (": " + _msg); |
|
484 |
String title = PluginServices.getText(this, "connection_error"); |
|
485 |
JOptionPane.showMessageDialog(apiUI.getComponent(), title + msg, title, |
|
486 |
JOptionPane.ERROR_MESSAGE); |
|
364 |
public void valueChanged(ListSelectionEvent e) { |
|
365 |
if (apiUI.isAddTableEvent(e.getSource())) { |
|
366 |
List<Object> tables = apiUI.getSelectedTables(); |
|
367 |
apiUI.clearSubdatasetList(); |
|
368 |
|
|
369 |
if(tables.size() == 1) { |
|
370 |
TableListItem item = (TableListItem)tables.get(0); |
|
371 |
String schema = item.getSchema(); |
|
372 |
String table = item.getTableName(); |
|
373 |
long columns = layerLoaderManager.getNumberOfColumns(schema, table); |
|
374 |
for (int i = 0; i < columns; i++) { |
|
375 |
apiUI.addSubdatasetToTable(schema + "." + table + " rid = " + i); |
|
376 |
} |
|
377 |
} |
|
378 |
} |
|
487 | 379 |
} |
488 | 380 |
|
489 |
/** |
|
490 |
* Shows a information window |
|
491 |
* @param _msg |
|
492 |
*/ |
|
493 |
private void showConnectionInfoMessage(String _msg) { |
|
494 |
String msg = (_msg.length() > 300) ? "" : (": " + _msg); |
|
495 |
String title = PluginServices.getText(this, "warning"); |
|
496 |
JOptionPane.showMessageDialog(apiUI.getComponent(), title + msg, title, |
|
497 |
JOptionPane.WARNING_MESSAGE); |
|
498 |
} |
|
499 |
|
|
500 | 381 |
} |
Also available in: Unified diff