Revision 956

View differences:

org.gvsig.raster.postgis/trunk/org.gvsig.raster.postgis/org.gvsig.raster.postgis.app/org.gvsig.raster.postgis.app.postgisrasterclient/package.info
1 1
#
2
#Fri Jan 20 13:14:39 CET 2012
2
#Tue Jan 24 17:38:55 CET 2012
3 3
owner=gvSIG Association
4 4
code=org.gvsig.raster.postgis.app.postgisrasterclient
5 5
java-version=j1_5
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/LayerLoaderManager.java
1
/* gvSIG. Geographic Information System of the Valencian Government
2
 *
3
 * Copyright (C) 2007-2008 Infrastructures and Transports Department
4
 * of the Valencian Government (CIT)
5
 *
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 2
9
 * of the License, or (at your option) any later version.
10
 *
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
 * MA  02110-1301, USA.
20
 *
21
 */
22
package org.gvsig.raster.postgis.app.postgisrasterclient.gui;
23

  
24
import java.util.List;
25

  
26
import javax.swing.JOptionPane;
27

  
28
import org.gvsig.andami.PluginServices;
29
import org.gvsig.andami.ui.mdiManager.IWindow;
30
import org.gvsig.fmap.dal.DALLocator;
31
import org.gvsig.fmap.dal.DataManager;
32
import org.gvsig.fmap.dal.DataStore;
33
import org.gvsig.fmap.dal.DataStoreParameters;
34
import org.gvsig.fmap.dal.coverage.store.parameter.RasterDataParameters;
35
import org.gvsig.fmap.dal.coverage.store.parameter.TileDataParameters;
36
import org.gvsig.fmap.dal.exception.DataException;
37
import org.gvsig.fmap.dal.exception.InitializeException;
38
import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
39
import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
40
import org.gvsig.fmap.dal.feature.FeatureStore;
41
import org.gvsig.fmap.dal.serverexplorer.db.DBServerExplorerParameters;
42
import org.gvsig.fmap.mapcontext.MapContext;
43
import org.gvsig.fmap.mapcontext.exceptions.LoadLayerException;
44
import org.gvsig.fmap.mapcontext.layers.FLayer;
45
import org.gvsig.raster.fmap.layers.DefaultFLyrRaster;
46
import org.gvsig.raster.fmap.layers.FLyrRaster;
47
import org.gvsig.raster.postgis.io.PostGISRasterCoreException;
48
import org.gvsig.raster.postgis.io.PostGISRasterServerExplorer;
49
import org.gvsig.raster.postgis.io.PostGISRasterServerExplorerParameters;
50
import org.gvsig.raster.postgis.swing.AddLayerUI;
51
import org.gvsig.raster.util.RasterNotLoadException;
52
import org.slf4j.Logger;
53
import org.slf4j.LoggerFactory;
54

  
55
/**
56
 * Manager to load layers in TOC. There are some strategies, load a entire layer
57
 * or load subdatasets depending on the user selection or the layer structure.
58
 * 
59
 * @author Nacho Brodin (nachobrodin@gmail.com)
60
 */
61
public class LayerLoaderManager {
62
	private static Logger               logger                = LoggerFactory.getLogger(AddPostGISRasterLayerWizard.class.getName());
63
	private AddLayerUI                  apiUI                 = null;
64
	private DBServerExplorerParameters  dbExplorerParameters  = null;
65
	private MapContext                  mapContext            = null;
66
	
67
	public LayerLoaderManager(AddLayerUI ui) {
68
		this.apiUI = ui;
69
	}
70
	
71
	/**
72
	 * Assigns a {@link DBServerExplorerParameters} 
73
	 * @param params
74
	 */
75
	public void setDBServerExplorerParameters(DBServerExplorerParameters params) {
76
		this.dbExplorerParameters = params;
77
	}
78
	
79
	/**
80
	 * Gets the {@link DBServerExplorerParameters}
81
	 * @return {@link DBServerExplorerParameters}
82
	 */
83
	public DBServerExplorerParameters getDBServerExplorerParameters() {
84
		return this.dbExplorerParameters;
85
	}
86
	
87
	/**
88
	 * Return FLayers if user performs multi selection.
89
	 */
90
	public void loadLayers() {
91
		if(dbExplorerParameters == null)
92
			return;
93
		
94
		List<Object> tables = apiUI.getSelectedTables();
95
		
96
		//Para una tabla seleccionada
97
		if(tables.size() == 1) {
98
			TableListItem item = (TableListItem)tables.get(0);
99
			String schema = item.getSchema();
100
			String table = item.getTableName();
101
			
102
			//Sin subdatasets
103
			if(getNumberOfColumns(schema, table) == 1) {
104
				loadOneLayer(item, -1);
105
			} 
106
			//Con subdatasets
107
			else { 
108
				int[] subdatasets = apiUI.getSelectedSubdatasets();
109
				if(subdatasets == null || subdatasets.length <= 0) {
110
					long cols = getNumberOfColumns(schema, table);
111
					for (int i = 0; i < cols; i++) {
112
						loadOneLayer(item, i + 1);
113
					}
114
				} else {
115
					for (int i = 0; i < subdatasets.length; i++) {
116
						loadOneLayer(item, subdatasets[i] + 1);
117
					}
118
				}
119
			}
120
		}
121
		
122
		//Para m?s de una tabla seleccionada (se usan todos los subdatasets)
123
		if(tables.size() > 1) {
124
			for (int i = 0; i < tables.size(); i++) {
125
				TableListItem item = (TableListItem)tables.get(i);
126
				String schema = item.getSchema();
127
				String table = item.getTableName();
128
				long subdatasets = getNumberOfColumns(schema, table);
129
				for (int j = 0; j < subdatasets; j++) {
130
					loadOneLayer(item, j + 1);
131
				}
132
			}
133
		}
134

  
135
	}
136
	
137
	/**
138
	 * Loads only one layer
139
	 * @param item
140
	 * @param subdataset
141
	 */
142
	private void loadOneLayer(TableListItem item, int subdataset) {
143
		String host = dbExplorerParameters.getHost();
144
		if(host.compareTo("localhost") == 0)
145
			host = "127.0.0.1";
146
		Integer port = dbExplorerParameters.getPort();
147
		String dbname = dbExplorerParameters.getDBName();
148
		String user = dbExplorerParameters.getUser();
149
		String password = dbExplorerParameters.getPassword();
150
		String schema = item.getSchema();
151
		String table = item.getTableName();
152
		String connString = null;
153
		if(schema == null)
154
			connString = "PG:host='" + host + "' port='" + port + "' dbname='" + dbname + "' user='" + user + "' password='" + password + "' table='" + table + "'";
155
		else
156
			connString = "PG:host='" + host + "' port='" + port + "' dbname='" + dbname + "' user='" + user + "' password='" + password + "' schema='" + schema + "' table='" + table + "'";
157
		
158
		if(subdataset >= 0)
159
			connString += " column='rast' where='rid = "+ subdataset + "'";
160
		
161
		try {
162
			FLayer layer = createLayer(getFormatedRasterFileName(connString), connString, item, getNumberOfColumns(schema, table));
163

  
164
			//Adds the layer to the view
165
			getMapContext().beginAtomicEvent();
166
			layer.setVisible(true);
167
			getMapContext().getLayers().addLayer(layer);
168
			getMapContext().callLegendChanged();
169
			getMapContext().endAtomicEvent();
170
			getMapContext().invalidate();
171
		} catch (LoadLayerException e) {
172
			logger.info("Error creating layer: " + e.getMessage(), e);
173
			//showConnectionErrorMessage(PluginServices.getText(this, "error_creating_layer") + "");
174
		}
175
	}
176
	
177
	/**
178
	 * Gets the MapContext
179
	 * @return
180
	 */
181
	private MapContext getMapContext() {
182
		if(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
		return mapContext;
191
	}
192
	
193
	/**
194
	 * Builds a new raster layer
195
	 * @param fileName
196
	 * @return
197
	 * @throws RasterNotLoadException 
198
	 * @throws LoadLayerException 
199
	 */
200
	@SuppressWarnings("deprecation")
201
	public FLyrRaster createLayer(String layerName, String conn, TableListItem item, long nColumns) throws LoadLayerException {
202
		DataManager dataManager = DALLocator.getDataManager();
203
		DataStore dataStore = null;
204
		try {
205
			PostGISRasterServerExplorerParameters explorerParams = (PostGISRasterServerExplorerParameters) dataManager.createServerExplorerParameters(PostGISRasterServerExplorer.NAME);
206
			explorerParams.setHost(conn);
207
			PostGISRasterServerExplorer explorer = (PostGISRasterServerExplorer) dataManager.createServerExplorer(explorerParams);
208
			RasterDataParameters storeParameters = (RasterDataParameters)explorer.getStoreParameters();
209
			storeParameters.setURI(conn);
210
			storeParameters.setDynValue("BLOCKS", nColumns);
211
			storeParameters.setDynValue("DBPARAMS", item.getDBStoreParameters());
212
			storeParameters.setDynValue("DBEXPLORER", item.getExplorer());
213
			
214
			if(apiUI.isLayerTiled()) {
215
				DataManager manager = DALLocator.getDataManager();
216
				TileDataParameters tileParams = null;
217
				try {
218
					tileParams = (TileDataParameters) manager.createStoreParameters("Tile Store");
219
				} catch (InitializeException e) {
220
					throw new LoadLayerException("", e);
221
				} catch (ProviderNotRegisteredException e) {
222
					throw new LoadLayerException("", e);
223
				}
224
				tileParams.setDataParameters(storeParameters);
225
				dataStore = dataManager.createStore(tileParams);
226
			} else
227
				dataStore = dataManager.createStore(storeParameters);
228
		} catch (ValidateDataParametersException e) {
229
			throw new LoadLayerException("Error validating parameters", e);
230
		} catch (InitializeException e) {
231
			throw new LoadLayerException("Error initializating layer.", e);
232
		} catch (ProviderNotRegisteredException e) {
233
			throw new LoadLayerException("Provider not registered.", e);
234
		} catch (PostGISRasterCoreException e) {
235
			throw new LoadLayerException("", e);
236
		}
237
		
238
		DefaultFLyrRaster lyr = new DefaultFLyrRaster();
239
		lyr.setName(layerName);
240
		lyr.setDataStore(dataStore);
241
		return lyr;
242
	}
243
	
244
	/**
245
	 * Gets the number of column of the selected table
246
	 * @param schema
247
	 * @param table
248
	 * @return
249
	 */
250
	@SuppressWarnings("deprecation")
251
	public long getNumberOfColumns(String schema, String table) {
252
		DataManager manager = DALLocator.getDataManager();
253
		try {
254
			DataStoreParameters params = manager.createStoreParameters("PostgreSQL");
255

  
256
			params.setDynValue("host", dbExplorerParameters.getHost());
257
			params.setDynValue("port", dbExplorerParameters.getPort());
258
			params.setDynValue("dbuser", dbExplorerParameters.getUser());
259
			params.setDynValue("password", dbExplorerParameters.getPassword());
260
			params.setDynValue("schema",  schema);
261
			params.setDynValue("dbname", dbExplorerParameters.getDBName());
262
			params.setDynValue("table", table);
263

  
264
			FeatureStore store = (FeatureStore)manager.createStore(params);
265
			long size = store.getFeatureCount();
266
			store.dispose();
267
			return size;
268
		} catch (DataException e) {
269
			return 0;
270
		} catch (ValidateDataParametersException e) {
271
			return 0;
272
		}
273
	}
274
	
275
	/**
276
	 * Gets the name of a raster file
277
	 */
278
	private String getFormatedRasterFileName(String name) {
279
		String newName = "";
280
		String schema = null;
281
		String table = null;
282
		int index = name.indexOf(" schema='") + 8;
283
		if(index != -1) {
284
			try {
285
				schema = name.substring(index + 1, name.indexOf("'", index + 1)); 
286
				newName += schema + ".";
287
			} catch (StringIndexOutOfBoundsException e) {
288
			}
289
		}
290
		index = name.indexOf(" table='") + 7;
291
		if(index != -1) {
292
			try {
293
				table = name.substring(index + 1, name.indexOf("'", index + 1));
294
				newName += table;
295
			} catch (StringIndexOutOfBoundsException e) {
296
			}
297
		}
298
		return newName;
299
	}
300
	
301
	/**
302
	 * Shows an error
303
	 * @param _msg
304
	 */
305
	public void showConnectionErrorMessage(String _msg) {
306
		String msg = (_msg.length() > 300) ? "" : (": " + _msg);
307
		String title = PluginServices.getText(this, "connection_error");
308
		JOptionPane.showMessageDialog(apiUI.getComponent(), title + msg, title,
309
				JOptionPane.ERROR_MESSAGE);
310
	}
311
	
312
	/**
313
	 * Shows a information window
314
	 * @param _msg
315
	 */
316
	public void showConnectionInfoMessage(String _msg) {
317
		String msg = (_msg.length() > 300) ? "" : (": " + _msg);
318
		String title = PluginServices.getText(this, "warning");
319
		JOptionPane.showMessageDialog(apiUI.getComponent(), title + msg, title,
320
				JOptionPane.WARNING_MESSAGE);
321
	}
322
}
0 323

  
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
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
}
org.gvsig.raster.postgis/trunk/org.gvsig.raster.postgis/org.gvsig.raster.postgis.io/src/main/java/org/gvsig/raster/postgis/io/PostGISRasterProvider.java
100 100
		public void createProvider(PostGISRasterDataParameters p) throws NotSupportedExtensionException {
101 101
			GdalDataParameters gdalParams = new GdalDataParameters();
102 102
			gdalParams.setURI(p.getURI());
103
			this.provider = new GdalProvider(gdalParams, storeServices);
103
			try {
104
				this.provider = new GdalProvider(gdalParams, storeServices);
105
			} catch (NotSupportedExtensionException e) {
106
				System.out.println("===>" + gdalParams.getURI());
107
			}
104 108
			this.width = (int)provider.getWidth();
105 109
			this.height = (int)provider.getHeight();
106 110
			this.pxSizeOverview = provider.getExtent().width() / (double)this.width;
......
325 329
	 */
326 330
	public void getWindow(Extent ex, int bufWidth, int bufHeight, 
327 331
			BandList bandList, TileListener listener) throws ProcessInterruptedException, RasterDriverException {
328
		 super.getWindow(ex, bufWidth, bufHeight, bandList, listener);
332
//		PostGISRasterDataParameters p = (PostGISRasterDataParameters)param;
333
//		Buffer buf = RasterLocator.getManager().createBuffer(getDataType()[0], bufWidth, bufHeight, getBandCount(), true);
334
//		TileCacheManager m = TileCacheLocator.getManager();
335
//		Tile tile = m.createTile(-1, 0, 0);
336
//		
337
//		//Creamos un BandList con todas las bandas del fichero
338
//		BandList bl = new BandListImpl();
339
//		for(int i = 0; i < getBandCount(); i++) {
340
//			try {
341
//				DatasetBand band = new DatasetBandImpl(selectedProvider.getURIOfFirstProvider(), i, getDataType()[i], getBandCount());
342
//				bl.addBand(band, i);
343
//			} catch(BandNotFoundInListException e) {
344
//				//No a?adimos la banda
345
//			}
346
//		}
347
//		
348
//		if(p.getNumberOfBlocks() > 1) {
349
//			for (int i = 0; i < p.getNumberOfBlocks(); i++) {
350
//				GdalNative gdal;
351
//				try {
352
//					gdal = new GdalNative(p.getURI() + " column='rast' where='rid = " + i + "'");
353
//					gdal.readWindow(buf, bandList, 0, 0, gdal.width, gdal.height, bufWidth, bufHeight);
354
//					Extent ext = gdal.getExtentWithoutRot();
355
//					tile.setUl(new Point2D.Double(ext.getULX(), ext.getULY()));
356
//					tile.setLr(new Point2D.Double(ext.getLRX(), ext.getLRY()));
357
//					tile.setData(new Object[]{buf, null, null});
358
//					listener.tileReady(tile);
359
//				} catch (GdalException e) {
360
//					throw new RasterDriverException("", e);
361
//				} catch (IOException e) {
362
//					throw new RasterDriverException("", e);
363
//				} catch (TileGettingException e) {
364
//					throw new RasterDriverException("", e);
365
//				}
366
//			}
367
//		}
368
		super.getWindow(ex, bufWidth, bufHeight, bandList, listener);
329 369
	}
330 370

  
331 371
	/*
......
352 392
	 */
353 393
	public Buffer getWindow(Extent extent, 
354 394
			int bufWidth, int bufHeight, BandList bandList, Buffer rasterBuf, boolean adjustToExtent) throws ProcessInterruptedException, RasterDriverException {
395

  
355 396
		try {
356 397
			readOverviews();
357 398
		} catch (DataException e) {
358 399
			throw new RasterDriverException("Overviews can't be read", e);
359 400
		}
401

  
360 402
		overviewSelector(bufWidth, extent.width());
361 403
		//Creamos un BandList con todas las bandas del fichero
362 404
		BandList bl = new BandListImpl();
......
369 411
			}
370 412
		}
371 413
		bl.setDrawableBands(bandList.getDrawableBands());
372
		
414

  
373 415
		return selectedProvider.getWindow(extent, bufWidth, bufHeight, bl, rasterBuf, adjustToExtent);
374 416
	}
375 417

  
......
391 433
		return super.getWindow(x, y, w, h, bufWidth, bufHeight, bandList, rasterBuf);
392 434
	}
393 435

  
436
	/*
437
	 * (non-Javadoc)
438
	 * @see org.gvsig.raster.impl.provider.RasterProvider#isTiled()
439
	 */
440
	/*public boolean isTiled() {
441
		PostGISRasterDataParameters p = (PostGISRasterDataParameters)param;
442
		return p.getNumberOfBlocks() > 1;
443
	}*/
394 444

  
395 445
}
org.gvsig.raster.postgis/trunk/org.gvsig.raster.postgis/org.gvsig.raster.postgis.io/src/main/java/org/gvsig/raster/postgis/io/PostGISRasterServerExplorerParameters.java
69 69
			field.setDescription("Uniform Resource Identifier (File name or URL)");
70 70
			field.setType(DataTypes.STRING);
71 71
			field.setMandatory(true);
72

  
72
			
73 73
			DYNCLASS = dynClass;
74 74
		}
75 75

  
org.gvsig.raster.postgis/trunk/org.gvsig.raster.postgis/org.gvsig.raster.postgis.io/src/main/java/org/gvsig/raster/postgis/io/PostGISRasterDataParameters.java
24 24

  
25 25
import org.gvsig.fmap.dal.DataParameters;
26 26
import org.gvsig.fmap.dal.serverexplorer.db.DBServerExplorer;
27
import org.gvsig.fmap.dal.spi.AbstractDataParameters;
28 27
import org.gvsig.raster.impl.store.AbstractRasterDataParameters;
29 28
import org.gvsig.tools.ToolsLocator;
30 29
import org.gvsig.tools.dynobject.DelegatedDynObject;
......
46 45
	private static DynClass            DYNCLASS                     = null;
47 46
	public static final String         FIELD_DBPARAMS               = "DBPARAMS";
48 47
	public static final String         FIELD_DBEXPLORER             = "DBEXPLORER";
48
	protected static final String      FIELD_BLOCKS                 = "BLOCKS";
49 49
	
50 50
	public static void registerDynClass() {
51 51
		DynObjectManager dynman = ToolsLocator.getDynObjectManager();
......
68 68
			field.setClassOfValue(Object.class);
69 69
			field.setMandatory(false);
70 70
			
71
			field = dynClass.addDynFieldLong(FIELD_BLOCKS);
72
			field.setDescription("Number of blocks of the selected table.");
73
			field.setClassOfValue(Long.class);
74
			field.setMandatory(true);
75
			
71 76
			DYNCLASS = dynClass;
72 77
		}
73 78
	}
......
159 164
	public void setDBExplorer(DBServerExplorer dbStoreParameters) {
160 165
		this.setDynValue(FIELD_DBEXPLORER, dbStoreParameters);
161 166
	}
167
	
168
	/**
169
	 * Gets the number of blocks of the selected table
170
	 * @return
171
	 */
172
	public long getNumberOfBlocks() {
173
		return (Long) this.getDynValue(FIELD_BLOCKS);
174
	}
175

  
176
	/**
177
	 * Gets the number of blocks of the selected table
178
	 * @param host
179
	 */
180
	public void setNumberOfBlocks(long blocks) {
181
		this.setDynValue(FIELD_BLOCKS, blocks);
182
	}
162 183
}
org.gvsig.raster.postgis/trunk/org.gvsig.raster.postgis/org.gvsig.raster.postgis.swing/org.gvsig.raster.postgis.swing.impl/src/main/java/org/gvsig/raster/postgis/swing/impl/DefaultPostGISRasterSwingManager.java
21 21
 */
22 22
package org.gvsig.raster.postgis.swing.impl;
23 23

  
24
import org.gvsig.fmap.dal.DALLocator;
25
import org.gvsig.fmap.dal.DataManager;
26 24
import org.gvsig.raster.postgis.swing.AddLayerUI;
27 25
import org.gvsig.raster.postgis.swing.PostGISRasterSwingManager;
28 26
import org.gvsig.raster.postgis.swing.PostGISRasterWindowManager;
......
40 38

  
41 39
    private PostGISRasterWindowManager postGISRasterWindowManager;
42 40
    private I18nManager i18nmanager = null;
43
    private DataManager dataManager = null;
41
   // private DataManager dataManager = null;
44 42

  
45 43
    public DefaultPostGISRasterSwingManager() {
46 44
        this.i18nmanager = ToolsLocator.getI18nManager();       
47
        this.dataManager = DALLocator.getDataManager();
45
       // this.dataManager = DALLocator.getDataManager();
48 46
    }
49 47

  
50 48
    public String getTranslation(String key) {
org.gvsig.raster.postgis/trunk/org.gvsig.raster.postgis/org.gvsig.raster.postgis.swing/org.gvsig.raster.postgis.swing.impl/src/main/java/org/gvsig/raster/postgis/swing/impl/addlayer/AddPostGISRasterLayerDialog.java
2 2

  
3 3
import java.awt.BorderLayout;
4 4
import java.awt.event.ActionListener;
5
import java.util.ArrayList;
6 5
import java.util.Arrays;
7 6
import java.util.List;
8 7

  
......
10 9
import javax.swing.JComboBox;
11 10
import javax.swing.JComponent;
12 11
import javax.swing.JPanel;
12
import javax.swing.event.ListSelectionListener;
13 13

  
14 14
import org.gvsig.raster.postgis.swing.AddLayerUI;
15 15

  
......
47 47
	public void addListenerToBDSelectionCombo(ActionListener listener) {
48 48
		getMainPanel().getNorthPanel().getComboBox().addActionListener(listener);
49 49
	}
50
	
51
	/*
52
	 * (non-Javadoc)
53
	 * @see org.gvsig.raster.postgis.swing.AddLayerUI#addListenerToTableSelector(java.awt.event.ActionListener)
54
	 */
55
	public void addListenerToTableSelector(ListSelectionListener listener) {
56
		getMainPanel().getList().addListSelectionListener(listener);
57
	}
58
	
59
	/*
60
	 * (non-Javadoc)
61
	 * @see org.gvsig.raster.postgis.swing.AddLayerUI#isAddTableEvent(java.lang.Object)
62
	 */
63
	public boolean isAddTableEvent(Object obj) {
64
		return (obj == getMainPanel().getList());
65
	}
50 66

  
51 67
	/*
52 68
	 * (non-Javadoc)
......
69 85
	 * @see org.gvsig.raster.postgis.swing.AddLayerUI#clearList()
70 86
	 */
71 87
	public void clearList() {
72
		getMainPanel().getList().removeAll();
88
		if((getMainPanel().getList().getModel() instanceof DefaultListModel))
89
			((DefaultListModel)getMainPanel().getList().getModel()).clear();
73 90
	}
74 91

  
75 92
	/*
......
104 121
			getMainPanel().getList().setModel(new DefaultListModel());		
105 122
		((DefaultListModel)getMainPanel().getList().getModel()).addElement(obj);
106 123
	}
124
	
125
	/*
126
	 * (non-Javadoc)
127
	 * @see org.gvsig.raster.postgis.swing.AddLayerUI#getSelectedSubdatasets()
128
	 */
129
	public int[] getSelectedSubdatasets() {
130
		return getMainPanel().getSubdatasetList().getSelectedIndices();
131
	}
132
	
133
	/*
134
	 * (non-Javadoc)
135
	 * @see org.gvsig.raster.postgis.swing.AddLayerUI#addSubdatasetToTable(java.lang.Object)
136
	 */
137
	public void addSubdatasetToTable(Object obj) {
138
		if(!(getMainPanel().getSubdatasetList().getModel() instanceof DefaultListModel))
139
			getMainPanel().getSubdatasetList().setModel(new DefaultListModel());		
140
		((DefaultListModel)getMainPanel().getSubdatasetList().getModel()).addElement(obj);
141
	}
142
	
143
	/*
144
	 * (non-Javadoc)
145
	 * @see org.gvsig.raster.postgis.swing.AddLayerUI#clearSubdatasetList()
146
	 */
147
	public void clearSubdatasetList() {
148
		if((getMainPanel().getSubdatasetList().getModel() instanceof DefaultListModel))
149
			((DefaultListModel)getMainPanel().getSubdatasetList().getModel()).clear();
150
	}
107 151

  
152
	/*
153
	 * (non-Javadoc)
154
	 * @see org.gvsig.raster.postgis.swing.AddLayerUI#isLayerTiled()
155
	 */
156
	public boolean isLayerTiled() {
157
		return getMainPanel().getChkTileCache().isSelected();
158
	}
108 159
}
org.gvsig.raster.postgis/trunk/org.gvsig.raster.postgis/org.gvsig.raster.postgis.swing/org.gvsig.raster.postgis.swing.impl/src/main/java/org/gvsig/raster/postgis/swing/impl/addlayer/AddPostGISRasterLayerMainPanel.java
3 3
import java.awt.GridBagConstraints;
4 4
import java.awt.GridBagLayout;
5 5

  
6
import javax.swing.JCheckBox;
6 7
import javax.swing.JList;
7 8
import javax.swing.JPanel;
8 9
import javax.swing.JScrollPane;
9 10
import javax.swing.ListSelectionModel;
10 11

  
12
import org.gvsig.andami.PluginServices;
11 13
import org.gvsig.i18n.Messages;
12 14

  
13 15
public class AddPostGISRasterLayerMainPanel extends JPanel {
......
15 17
	private static final int       margin                      = 4;
16 18
	private ConnectionChooserPanel northPanel                  = null;
17 19
	private JList                  list                        = null;
20
	private JList                  subdatasetList              = null;
18 21
	private JScrollPane            scroll                      = null;
22
	private JScrollPane            subdatasetScroll            = null;
23
	private JCheckBox              chkTileCache                = null;
19 24
	
20 25
	public AddPostGISRasterLayerMainPanel() {
21 26
		init();
......
34 39
		gridBagConstraints.weighty = 1;
35 40
		gridBagConstraints.gridy = 1;
36 41
		this.add(getScrollPanel(), gridBagConstraints);
42
		
43
		gridBagConstraints.gridy = 2;
44
		this.add(getSubdatasetScrollPanel(), gridBagConstraints);
37 45

  
38
		gridBagConstraints.gridy = 2;
39
		this.add(new JPanel(), gridBagConstraints);
46
		gridBagConstraints.gridy = 3;
47
		gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
48
		gridBagConstraints.weighty = 0;
49
		this.add(getChkTileCache(), gridBagConstraints);
40 50
	}
41 51
	
42 52
	public ConnectionChooserPanel getNorthPanel() {
......
46 56
		return northPanel;
47 57
	}
48 58
	
59
	public JCheckBox getChkTileCache() {
60
		if (chkTileCache == null) {
61
			chkTileCache = new JCheckBox();
62
			chkTileCache.setBounds(7, 72, 249, 20);
63
			chkTileCache.setText(PluginServices.getText(this, "tile_cache"));
64
			chkTileCache.setToolTipText(PluginServices.getText(this, "tile_cache_tooltip"));
65
			chkTileCache.setSelected(true);
66
		}
67
		return chkTileCache;
68
	}
69
	
49 70
	public JList getList() {
50 71
		if(list == null) {
51 72
			list = new JList();
......
56 77
		return list;
57 78
	}
58 79
	
80
	public JList getSubdatasetList() {
81
		if(subdatasetList == null) {
82
			subdatasetList = new JList();
83
			subdatasetList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
84
			subdatasetList.setLayoutOrientation(JList.VERTICAL);
85
			subdatasetList.setVisibleRowCount(-1);
86
		}
87
		return subdatasetList;
88
	}
89
	
59 90
	public JScrollPane getScrollPanel() {
60 91
		if(scroll == null) {
61 92
			scroll = new JScrollPane(getList());
......
63 94
		}
64 95
		return scroll;
65 96
	}
97
	
98
	public JScrollPane getSubdatasetScrollPanel() {
99
		if(subdatasetScroll == null) {
100
			subdatasetScroll = new JScrollPane(getSubdatasetList());
101
			subdatasetScroll.setBorder(javax.swing.BorderFactory.createTitledBorder(null, Messages.getText("subdataset_chooser"), javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
102
		}
103
		return subdatasetScroll;
104
	}
66 105
}
org.gvsig.raster.postgis/trunk/org.gvsig.raster.postgis/org.gvsig.raster.postgis.swing/org.gvsig.raster.postgis.swing.impl/src/main/resources/org/gvsig/raster/postgis/swing/impl/i18n/text.properties
1 1
select_db=Selecci?n de conexi?n
2 2
tables_chooser=Elecci?n de tablas
3
subdataset_chooser=Elecci?n de subdataset
4
tile_cache=Uso de cach\u00e9 de teselas local
5
tile_cache_tooltip=Marque esta casilla para usar la cach\u00e9 de teselas de almacenamiento local.
org.gvsig.raster.postgis/trunk/org.gvsig.raster.postgis/org.gvsig.raster.postgis.swing/org.gvsig.raster.postgis.swing.impl/src/test/java/org/gvsig/raster/postgis/swing/impl/TestAddLayerPanel.java
1 1
package org.gvsig.raster.postgis.swing.impl;
2 2

  
3 3

  
4
import java.text.DecimalFormat;
5

  
4 6
import javax.swing.JFrame;
5 7

  
6 8
import org.gvsig.raster.postgis.swing.impl.addlayer.AddPostGISRasterLayerDialog;
......
20 22
		}
21 23

  
22 24
		public static void main(String[] args) {
25
			DecimalFormat decFormat = new DecimalFormat("#.###");
26
			//double d1 = Double.parseDouble("2.0037508E7");
27
			double d2 = Double.parseDouble("-2.003750834E7");
28
			String s = decFormat.format(d2);
29
			System.out.println(s.replace(",", "."));
23 30
			new TestAddLayerPanel();
24 31
		}
25 32
	}
org.gvsig.raster.postgis/trunk/org.gvsig.raster.postgis/org.gvsig.raster.postgis.swing/org.gvsig.raster.postgis.swing.api/src/main/java/org/gvsig/raster/postgis/swing/AddLayerUI.java
5 5

  
6 6
import javax.swing.JComboBox;
7 7
import javax.swing.JComponent;
8
import javax.swing.event.ListSelectionListener;
8 9

  
9 10
public interface AddLayerUI {
10 11
	public static final String      NOT_MAPPED      =  "***"; 
......
22 23
	 * @param listener
23 24
	 */
24 25
	public void addListenerToBDSelectionCombo(ActionListener listener);
26
	
27
	/**
28
	 * Adds a listener to the table selector
29
	 * @param listener
30
	 */
31
	public void addListenerToTableSelector(ListSelectionListener listener);
32
	
33
	/**
34
	 * Checks if the object passed is the control to select a table
35
	 * @param obj
36
	 * @return
37
	 */
38
	public boolean isAddTableEvent(Object obj);
25 39

  
26 40
	/**
27 41
	 * Checks if the object passed is the control to add a new database connection
......
50 64
	 * Clears the table list
51 65
	 */
52 66
	public void clearList();
67
	
68
	/**
69
	 * Gets the selected subdatasets by the user
70
	 * @return
71
	 */
72
	public int[] getSelectedSubdatasets();
73
	
74
	/**
75
	 * Adds a new element to the subdataset list in the selected database  
76
	 */
77
	public void addSubdatasetToTable(Object obj);
78
	
79
	/**
80
	 * Clears the table of subdatasets
81
	 */
82
	public void clearSubdatasetList();
83
	
84
	/**
85
	 * Returns true if the layer is tiled
86
	 * @return
87
	 */
88
	public boolean isLayerTiled();
53 89

  
54 90
}

Also available in: Unified diff