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

View differences:

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