Revision 2213

View differences:

org.gvsig.raster.mosaic/trunk/org.gvsig.raster.mosaic/org.gvsig.raster.mosaic.io/src/main/java/org/gvsig/raster/mosaic/io/MosaicRasterFormat.java
111 111
	}
112 112
	
113 113
	public static String saveMosaicRasterFormat(String fileName, String path, ArrayList<File> uriList) throws IOException {
114
		path = path + File.separator + fileName + ".mrf";
114
		path = path + File.separator + fileName + getSuffix();
115 115
		
116 116
		MosaicRasterFormat format = new MosaicRasterFormat();
117 117
		for (int i = 0; i < uriList.size(); i++) {
......
122 122
		format.write(path);
123 123
		return path;
124 124
	}
125
	
126
	public static String getSuffix() {
127
		return ".mrf";
128
	}
125 129
}
org.gvsig.raster.mosaic/trunk/org.gvsig.raster.mosaic/org.gvsig.raster.mosaic.io/src/main/java/org/gvsig/raster/mosaic/io/MosaicProvider.java
90 90
import org.gvsig.raster.impl.datastruct.DatasetBandImpl;
91 91
import org.gvsig.raster.impl.datastruct.ExtentImpl;
92 92
import org.gvsig.raster.impl.provider.DefaultRasterProvider;
93
import org.gvsig.raster.impl.provider.MemoryMatrixBuffer;
93
import org.gvsig.raster.impl.provider.MemoryTileMatrixBuffer;
94 94
import org.gvsig.raster.impl.provider.RasterProvider;
95
import org.gvsig.raster.impl.provider.tile.FileTileServer;
95 96
import org.gvsig.raster.impl.store.AbstractRasterDataParameters;
96 97
import org.gvsig.raster.impl.store.DefaultStoreFactory;
97 98
import org.gvsig.raster.impl.store.properties.DataStoreTransparency;
......
259 260
				extent = extent.encloseBoundinBoxes(providerList.get(i).getExtent());
260 261
			
261 262
			//Usa el primer NoData de la primera imagen que tenga un valor asignado
262
			if(noData == null && providerList.get(i).getNoDataValue().isDefined())
263
			if(noData == null && providerList.get(i).getNoDataValue().isDefined()) {
263 264
				noData = providerList.get(i).getNoDataValue();
265
				noData.setFileName(getParameters().getURI());
266
			}
264 267
		}
265 268
		width = extent.width() / pixelSize;
266 269
		height = extent.height() / pixelSize;
......
416 419
		return uris;
417 420
	}
418 421
	
422
	public int[] getBandCountByProvider() {
423
		int[] n = new int[providerList.size()];
424
		for (int i = 0; i < providerList.size(); i++) {
425
			n[i] = providerList.get(i).getBandCount();
426
		}
427
		return n;
428
	}
429
	
430
	public BandList getDefaultBandList() {
431
		BandList bandList = new BandListImpl();
432
		int[] nBandsByProvider = getBandCountByProvider();
433
		int nBands = 0;
434
		for (int i = 0; i < nBandsByProvider.length; i++) {
435
			nBands = Math.max(nBandsByProvider[i], nBands);
436
		}
437
		
438
		for (int iBand = 0; iBand < nBands; iBand++) {
439
			try {
440
				bandList.addBand(new DatasetBandImpl(getURI(), iBand, getDataType()[0], nBands));
441
			} catch (BandNotFoundInListException e1) {
442
			}	
443
		}
444

  
445
		int[] drawableBands = new int[bandList.getBandCount()];
446
		for (int i = 0; i < bandList.getBandCount(); i++) {
447
			drawableBands[i] = i;
448
		}
449
		
450
		bandList.setDrawableBands(drawableBands);
451
		return bandList;
452
	}
453
	
419 454
	public String getURIByBand(int band) {
420 455
		//No matter which band be selected. In providers with one file is always the first URI
421 456
		return getURI();
......
609 644
		} catch (TileBuildException e) {
610 645
			throw new RasterDriverException("Error building the tile list", e);
611 646
		}
612
		MemoryMatrixBuffer matrixBuffer = new MemoryMatrixBuffer(tileList);
647
		MemoryTileMatrixBuffer matrixBuffer = new MemoryTileMatrixBuffer(tileList);
613 648
		
614 649
		if(	tileList.get(0).getData().length > 1 && 
615 650
			getDataType()[0] == Buffer.TYPE_BYTE &&
......
657 692
		} catch (TileBuildException e) {
658 693
			throw new RasterDriverException("Error building the tile list", e);
659 694
		}
660
		MemoryMatrixBuffer matrixBuffer = new MemoryMatrixBuffer(tileList);
695
		MemoryTileMatrixBuffer matrixBuffer = new MemoryTileMatrixBuffer(tileList);
661 696
		
662 697
		if(	tileList.get(0).getData().length > 1 && 
663 698
			getDataType()[0] == Buffer.TYPE_BYTE &&
......
702 737
			throw new RasterDriverException("Error getting the tile list", e);
703 738
		}
704 739
		
705
		MemoryMatrixBuffer matrixBuffer = new MemoryMatrixBuffer(tileList);
740
		MemoryTileMatrixBuffer matrixBuffer = new MemoryTileMatrixBuffer(tileList);
706 741
		return matrixBuffer.getWindow(r, rasterBuf);
707 742
	}
708 743

  
......
880 915
	}
881 916
	
882 917
	public TileServer getTileServer() {
883
		return null;
918
		if(tileServer == null)
919
			tileServer = new FileTileServer(this);
920
		return tileServer;
884 921
	}
885 922
	
886 923
	/**
org.gvsig.raster.mosaic/trunk/org.gvsig.raster.mosaic/org.gvsig.raster.mosaic.io/src/main/java/org/gvsig/raster/mosaic/io/MosaicProvider2.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.mosaic.io;
23

  
24
import java.awt.geom.AffineTransform;
25
import java.awt.geom.Point2D;
26
import java.awt.geom.Rectangle2D;
27
import java.io.File;
28
import java.io.IOException;
29
import java.security.MessageDigest;
30
import java.security.NoSuchAlgorithmException;
31
import java.util.ArrayList;
32
import java.util.Date;
33
import java.util.HashMap;
34
import java.util.List;
35

  
36
import org.cresques.cts.IProjection;
37
import org.gvsig.compat.net.ICancellable;
38
import org.gvsig.fmap.dal.DALFileLocator;
39
import org.gvsig.fmap.dal.DALLocator;
40
import org.gvsig.fmap.dal.DataStore;
41
import org.gvsig.fmap.dal.DataStoreParameters;
42
import org.gvsig.fmap.dal.coverage.RasterLibrary;
43
import org.gvsig.fmap.dal.coverage.RasterLocator;
44
import org.gvsig.fmap.dal.coverage.dataset.Buffer;
45
import org.gvsig.fmap.dal.coverage.datastruct.BandList;
46
import org.gvsig.fmap.dal.coverage.datastruct.DatasetBand;
47
import org.gvsig.fmap.dal.coverage.datastruct.Extent;
48
import org.gvsig.fmap.dal.coverage.datastruct.NoData;
49
import org.gvsig.fmap.dal.coverage.exception.BandAccessException;
50
import org.gvsig.fmap.dal.coverage.exception.BandNotFoundInListException;
51
import org.gvsig.fmap.dal.coverage.exception.FileNotOpenException;
52
import org.gvsig.fmap.dal.coverage.exception.FileNotSupportedException;
53
import org.gvsig.fmap.dal.coverage.exception.HistogramException;
54
import org.gvsig.fmap.dal.coverage.exception.InvalidSetViewException;
55
import org.gvsig.fmap.dal.coverage.exception.NotSupportedExtensionException;
56
import org.gvsig.fmap.dal.coverage.exception.ParsingException;
57
import org.gvsig.fmap.dal.coverage.exception.ProcessInterruptedException;
58
import org.gvsig.fmap.dal.coverage.exception.RasterDriverException;
59
import org.gvsig.fmap.dal.coverage.exception.RmfSerializerException;
60
import org.gvsig.fmap.dal.coverage.store.RasterDataStore;
61
import org.gvsig.fmap.dal.coverage.store.parameter.RasterDataParameters;
62
import org.gvsig.fmap.dal.coverage.store.props.HistogramComputer;
63
import org.gvsig.fmap.dal.coverage.store.props.Statistics;
64
import org.gvsig.fmap.dal.coverage.store.props.TimeSeries;
65
import org.gvsig.fmap.dal.coverage.util.MathUtils;
66
import org.gvsig.fmap.dal.coverage.util.RasterUtils;
67
import org.gvsig.fmap.dal.exception.InitializeException;
68
import org.gvsig.fmap.dal.exception.OpenException;
69
import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
70
import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
71
import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemServerExplorer;
72
import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemServerExplorerParameters;
73
import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemStoreParameters;
74
import org.gvsig.fmap.dal.spi.DataManagerProviderServices;
75
import org.gvsig.fmap.dal.spi.DataStoreProvider;
76
import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
77
import org.gvsig.metadata.MetadataLocator;
78
import org.gvsig.raster.cache.tile.Tile;
79
import org.gvsig.raster.cache.tile.TileCache;
80
import org.gvsig.raster.cache.tile.TileCacheLibrary;
81
import org.gvsig.raster.cache.tile.TileCacheLocator;
82
import org.gvsig.raster.cache.tile.TileCacheManager;
83
import org.gvsig.raster.cache.tile.exception.TileBuildException;
84
import org.gvsig.raster.cache.tile.exception.TileGettingException;
85
import org.gvsig.raster.cache.tile.layer.TiledLayer;
86
import org.gvsig.raster.cache.tile.provider.CacheStruct;
87
import org.gvsig.raster.cache.tile.provider.TileListener;
88
import org.gvsig.raster.cache.tile.provider.TileServer;
89
import org.gvsig.raster.impl.datastruct.BandListImpl;
90
import org.gvsig.raster.impl.datastruct.DatasetBandImpl;
91
import org.gvsig.raster.impl.datastruct.ExtentImpl;
92
import org.gvsig.raster.impl.provider.DefaultRasterProvider;
93
import org.gvsig.raster.impl.provider.MemoryTileMatrixBuffer;
94
import org.gvsig.raster.impl.provider.RasterProvider;
95
import org.gvsig.raster.impl.provider.tile.FileTileServer;
96
import org.gvsig.raster.impl.store.AbstractRasterDataParameters;
97
import org.gvsig.raster.impl.store.DefaultStoreFactory;
98
import org.gvsig.raster.impl.store.properties.DataStoreTransparency;
99
import org.gvsig.raster.impl.store.properties.SimpleProviderHistogramComputer;
100
import org.gvsig.raster.impl.store.properties.SimpleProviderStatistics;
101
import org.gvsig.raster.mosaic.io.downloader.MosaicTileServer;
102
import org.gvsig.timesupport.RelativeInstant;
103
import org.gvsig.timesupport.Time;
104
import org.gvsig.timesupport.TimeSupportLocator;
105
import org.gvsig.tools.ToolsLocator;
106
import org.gvsig.tools.task.TaskStatus;
107
import org.slf4j.Logger;
108
import org.slf4j.LoggerFactory;
109
/**
110
 * Data provider for raster mosaics
111
 *
112
 * @author Nacho Brodin (nachobrodin@gmail.com)
113
 */
114
public class MosaicProvider2 extends DefaultRasterProvider {
115
	public static String                     NAME                     = "Mosaic Raster";
116
	public static String                     DESCRIPTION              = "Mosaic Raster Support";
117
	public final String                      METADATA_DEFINITION_NAME = NAME;
118
	private static final Logger              logger                   = LoggerFactory.getLogger(MosaicProvider2.class);
119
	private boolean                          open                     = false;
120
	private RasterUtils                      util                     = RasterLocator.getManager().getRasterUtils();
121
	private MathUtils                        math                     = RasterLocator.getManager().getMathUtils();
122
    protected static String[]                formatList               = null;
123
    //private MosaicRasterFormat               mosaicRasterFormat       = null;
124
    private List<RasterProvider>             providerList             = null;
125
    private double                           pixelSize                = 0D;
126
    private Extent                           extent                   = null;
127
	private double                           width                    = 0;
128
	private double                           height                   = 0;
129
	private Extent                           viewRequest              = null;
130
	private TiledLayer                       tiledLayer               = null;
131
	//This provider needs a MosaicTileServer by set of layers
132
	private HashMap<String, MosaicTileServer>
133
	                                         tileServerMap            = new HashMap<String, MosaicTileServer>();
134
	private ArrayList<RasterProvider>        selectedProviders        = new ArrayList<RasterProvider>();
135
    
136
	public static void register() {
137
		DataManagerProviderServices dataman = (DataManagerProviderServices) DALLocator.getDataManager();
138
		registerFormats();
139
		
140
		if (dataman != null && !dataman.getStoreProviders().contains(NAME)) {
141
			dataman.registerStoreProvider(NAME,
142
					MosaicProvider2.class, MosaicDataParametersImpl.class);
143
		}
144
		
145
		if(DALFileLocator.getFilesystemServerExplorerManager() != null)
146
			DALFileLocator.getFilesystemServerExplorerManager().registerProvider(
147
					NAME, DESCRIPTION,
148
					MosaicServerExplorer.class);
149
		
150
		if (!dataman.getExplorerProviders().contains(NAME)) {
151
			dataman.registerExplorerProvider(NAME, MosaicServerExplorer.class, MosaicServerExplorerParameters.class);
152
		}
153
		
154
		dataman.registerStoreFactory(NAME, DefaultStoreFactory.class);
155
	}
156
	
157
	@SuppressWarnings("deprecation")
158
	private static void registerFormats() {
159
		formatList      = new String[] {"mrf"};
160
		for (int i = 0; i < formatList.length; i++) 
161
			RasterLocator.getManager().addFormat(formatList[i], MosaicProvider2.class);
162
	}
163
	
164
	public String[] getFormatList() {
165
		return formatList;
166
	}
167
	
168
	/**
169
	 * Returns true if the extension is supported and false if doesn't
170
	 * @param ext
171
	 * @return
172
	 */
173
	public boolean isExtensionSupported(String ext) {
174
		if(ext.indexOf(".") != -1)
175
			ext = ext.substring(ext.lastIndexOf(".") + 1, ext.length());
176
		for (int i = 0; i < formatList.length; i++) {
177
			if(formatList[i].compareTo(ext) == 0)
178
				return true;
179
		}
180
		return false;
181
	}
182
	
183
	public MosaicProvider2() {
184
	}
185
	
186
	/**
187
	 * Opens the dataset.
188
	 * @param proj Projection
189
	 * @param fName File name
190
	 * @throws NotSupportedExtensionException
191
	 */
192
	public MosaicProvider2(String params) throws NotSupportedExtensionException, OpenException {
193
		super(params);
194
		if(params instanceof String) {
195
			MosaicDataParametersImpl p = new MosaicDataParametersImpl();
196
			p.setURI((String)params);
197
			super.init(p, null, ToolsLocator.getDynObjectManager()
198
					.createDynObject(
199
							MetadataLocator.getMetadataManager().getDefinition(
200
									DataStore.METADATA_DEFINITION_NAME)));
201
			init(p, null);
202
		}
203
	}
204
	
205
	public MosaicProvider2 (MosaicDataParametersImpl params,
206
			DataStoreProviderServices storeServices) throws NotSupportedExtensionException, OpenException {
207
		super(params, storeServices, ToolsLocator.getDynObjectManager()
208
				.createDynObject(
209
						MetadataLocator.getMetadataManager().getDefinition(
210
								DataStore.METADATA_DEFINITION_NAME)));
211
		init(params, storeServices);
212
	}
213

  
214
	/**
215
	 * Build file references
216
	 * @param proj Projection
217
	 * @param param Load parameters
218
	 * @throws NotSupportedExtensionException
219
	 */
220
	public void init (AbstractRasterDataParameters params,
221
			DataStoreProviderServices storeServices) throws NotSupportedExtensionException, OpenException {
222
		setParam(storeServices, params);
223
		
224
		openFromMrf();
225
		
226
		calcMetadataFromParams();
227
		
228
		super.init();
229
		
230
		try {
231
			loadFromRmf(getRmfBlocksManager());
232
		} catch (ParsingException e) {
233
			//No lee desde rmf
234
		}
235

  
236
		open = true;
237
	}
238
	
239
	/**
240
	 * Calculates metadata using the parameters
241
	 */
242
	private void calcMetadataFromParams() {
243
		uri = getParameters().getURI();
244
		providerList = getParameters().getProviders();
245
		pixelSize = getParameters().getPixelSize();
246
		setColorInterpretation(providerList.get(0).getColorInterpretation().cloneColorInterpretation());
247
		
248
		//Se le pone banda de transparencia siempre
249
		if(providerList.get(0).getDataType()[0] == Buffer.TYPE_BYTE) {
250
			transparency = new DataStoreTransparency();
251
			transparency.setTransparencyBand(getBandCount() - 1);
252
		} else 
253
			transparency = providerList.get(0).getTransparency();
254
		
255
		extent = null;
256
		for (int i = 0; i < providerList.size(); i++) {
257
			if(extent == null)
258
				extent = providerList.get(i).getExtent();
259
			else
260
				extent = extent.encloseBoundinBoxes(providerList.get(i).getExtent());
261
			
262
			//Usa el primer NoData de la primera imagen que tenga un valor asignado
263
			if(noData == null && providerList.get(i).getNoDataValue().isDefined()) {
264
				noData = providerList.get(i).getNoDataValue();
265
				noData.setFileName(getParameters().getURI());
266
			}
267
		}
268
		width = extent.width() / pixelSize;
269
		height = extent.height() / pixelSize;
270
		
271
		ownTransformation = new AffineTransform(pixelSize, 0, 
272
							0, -pixelSize, 
273
							extent.getULX(), extent.getULY());
274
		externalTransformation = (AffineTransform) ownTransformation.clone();
275
		
276
		((MosaicDataParametersImpl)getParameters()).resetParamsChanged();
277
	}
278
	
279
	/**
280
	 * Loads the specific provider
281
	 * @param file
282
	 * @return
283
	 * @throws NotSupportedExtensionException
284
	 * @throws FileNotSupportedException 
285
	 */
286
	@SuppressWarnings("unchecked")
287
	private RasterProvider loadProvider(String file, DataStoreProviderServices storeServices) throws ProviderNotRegisteredException, InitializeException {
288
		DataManagerProviderServices dataManager = (DataManagerProviderServices)DALLocator.getDataManager();
289
		DataStoreProvider prov = null;
290

  
291
		if(file != null) {
292
			//We have to locate a provider's name which manages the selected file
293
			//A FilesystemServerExplorer will give a getProviderNames service
294
			FilesystemServerExplorerParameters paramsExplorer = (FilesystemServerExplorerParameters)dataManager.createServerExplorerParameters(FilesystemServerExplorer.NAME);
295
			FilesystemServerExplorer serverExplorer = null;
296
			try {
297
				paramsExplorer.setRoot(File.separator);
298
				serverExplorer = (FilesystemServerExplorer)dataManager.openServerExplorer(FilesystemServerExplorer.NAME, paramsExplorer);
299
			} catch (ValidateDataParametersException e) {
300
				throw new InitializeException(e);
301
			}
302
			File f = new File(file);
303
			//Gets the list of provider's name to manage the file
304
			List<String> provName = serverExplorer.getProviderNameList(f);
305
			if(provName.size() > 0) {
306
				for (int i = 0; i < provName.size(); i++) {
307
					//Gets the first provider what is not a TileProvider
308
					if(provName.get(i).compareTo("Tile Store") != 0) {
309
						DataStoreParameters newparams = dataManager.createStoreParameters(provName.get(i));
310
						((FilesystemStoreParameters)newparams).setFile(f); 
311
						prov = dataManager.createProvider(storeServices, newparams);
312
					}
313
				}
314
			}
315
		}
316

  
317
		if(prov != null && prov instanceof RasterProvider) {
318
			if(((RasterProvider)prov).isRotated())
319
				throw new InitializeException("Rotation not supported tiling files", new Throwable());
320

  
321
			return (RasterProvider)prov;
322
		}
323
		
324
		return null;
325
	}
326
	
327
	/**
328
	 * Open from a .mrf file. 
329
	 * This method loads all providers and adds these to the parameters
330
	 * @throws OpenException
331
	 */
332
	private void openFromMrf() throws OpenException {
333
		if(getParameters().getURI() != null && new File(getParameters().getURI()).exists()) {
334
			try {
335
				if(getParameters().getProviders() != null)
336
					getParameters().getProviders().clear();
337
				MosaicRasterFormat multiFileFormat = new MosaicRasterFormat();
338
				multiFileFormat = MosaicRasterFormatSerializer.read(multiFileFormat, getParameters().getURI());
339
				for (int i = 0; i < multiFileFormat.getNumberOfFiles(); i++) {
340
					try {
341
						File file = new File(multiFileFormat.getPathToFile(i));
342
						if(file.exists()) {
343
							RasterProvider prov = loadProvider(multiFileFormat.getPathToFile(i), storeServices);
344
							if(i == 0)
345
								getParameters().setPixelSize(prov.getCellSize());
346
							getParameters().addProvider(prov);
347
						}
348
					} catch (ProviderNotRegisteredException e) {
349
						throw new OpenException("A provider can't be loaded", e);
350
					} catch (InitializeException e) {
351
						throw new OpenException("A provider can't be initialized", e);
352
					}
353
				}
354
			} catch (IOException e1) {
355
				throw new OpenException("File .mrf can't be read", e1);
356
			} catch (ParsingException e1) {
357
				throw new OpenException("File .mrf can't be parsed", e1);
358
			}
359
		} 
360
	}
361
	
362
	public RasterProvider load() {
363
		return this;
364
	}
365
	
366
	/**
367
	 * Gets the MosaicDataParameters
368
	 * @return
369
	 */
370
	public MosaicDataParameters getParameters() {
371
		try {
372
			return (MosaicDataParameters)parameters;
373
		} catch (ClassCastException e) {
374
			return null;
375
		}
376
	}
377
	
378
	public boolean isOpen() {
379
		return open;
380
	}
381

  
382
	public void close() {
383
		for (int i = 0; i < providerList.size(); i++) {
384
			providerList.get(i).close();
385
		}
386
	}
387
	
388
	/**
389
	 * @return Returns the dataType.
390
	 */
391
	public int[] getDataType() {
392
		if(providerList.get(0).getDataType()[0] == Buffer.TYPE_BYTE) {
393
			int[] dt = new int[getBandCount()];
394
			for (int i = 0; i < providerList.get(0).getDataType().length; i++) {
395
				dt[i] = providerList.get(0).getDataType()[i];
396
			}
397
			dt[getBandCount() - 1] = Buffer.TYPE_BYTE;
398
			return dt;
399
		}
400
		return providerList.get(0).getDataType();
401
	}
402
	
403
	/**
404
	 * Gets the number of bands
405
	 * @return 
406
	 */
407
	public int getBandCount() {
408
		if(providerList.get(0).getDataType()[0] == Buffer.TYPE_BYTE)
409
			return providerList.get(0).getBandCount() + 1;
410
		return providerList.get(0).getBandCount();
411
	}
412
	
413
	public String[] getURIByProvider() {
414
		providerList = getParameters().getProviders();
415
		String[] uris = new String[providerList.size()];
416
		for (int i = 0; i < uris.length; i++) {
417
			uris[i] = providerList.get(i).getURI();
418
		}
419
		return uris;
420
	}
421
	
422
	public int[] getBandCountByProvider() {
423
		int[] n = new int[providerList.size()];
424
		for (int i = 0; i < providerList.size(); i++) {
425
			n[i] = providerList.get(i).getBandCount();
426
		}
427
		return n;
428
	}
429
	
430
	public BandList getDefaultBandList() {
431
		BandList bandList = new BandListImpl();
432
		int[] nBandsByProvider = getBandCountByProvider();
433
		int nBands = 0;
434
		for (int i = 0; i < nBandsByProvider.length; i++) {
435
			nBands = Math.max(nBandsByProvider[i], nBands);
436
		}
437
		
438
		for (int iBand = 0; iBand < nBands; iBand++) {
439
			try {
440
				bandList.addBand(new DatasetBandImpl(getURI(), iBand, getDataType()[0], nBands));
441
			} catch (BandNotFoundInListException e1) {
442
			}	
443
		}
444

  
445
		int[] drawableBands = new int[bandList.getBandCount()];
446
		for (int i = 0; i < bandList.getBandCount(); i++) {
447
			drawableBands[i] = i;
448
		}
449
		
450
		bandList.setDrawableBands(drawableBands);
451
		return bandList;
452
	}
453
	
454
	public String getURIByBand(int band) {
455
		return getURI();
456
	}
457
	
458
	public double getPixelSizeX() {
459
		if(getParameters().hasParamsChanged())
460
			calcMetadataFromParams();
461
		return pixelSize;
462
	}
463

  
464
	public double getPixelSizeY() {
465
		if(getParameters().hasParamsChanged())
466
			calcMetadataFromParams();
467
		return pixelSize;
468
	}
469

  
470
	public NoData getNoDataValue() {
471
		if(getParameters().hasParamsChanged())
472
			calcMetadataFromParams();
473
		return noData;
474
	}
475
	
476
	public Extent getExtent() {
477
		if(getParameters().hasParamsChanged())
478
			calcMetadataFromParams();
479
		return extent;
480
	}
481
	
482
	public double getCellSize() {
483
		return pixelSize;
484
	}
485
	
486
	public Statistics getStatistics() {
487
		if(stats == null || getParameters().hasParamsChanged()) {
488
			//First of all read the statistics in the rmf. If these have not been calculated then
489
			//we'll read the statistics from simple files
490
			stats = super.getStatistics();
491
			try {
492
				loadObjectFromRmf(SimpleProviderStatistics.class, stats);
493
			} catch (RmfSerializerException e) {
494
				// Si no se puede cargar del RMF, recalcularemos las estadisticas.
495
			}
496
			if(!stats.isCalculated()) {
497
				calcMetadataFromParams();
498
				providerList = getParameters().getProviders();
499
				stats = SimpleProviderStatistics.union(this, providerList);
500
			}
501
		}
502
		return stats;
503
	}
504

  
505
	public HistogramComputer getHistogramComputer() {
506
		if(histogram == null || getParameters().hasParamsChanged()) {
507
			calcMetadataFromParams();
508
			providerList = getParameters().getProviders();
509
			try {
510
				histogram = SimpleProviderHistogramComputer.union(this, providerList);
511
			} catch (HistogramException e) {
512
				return null;
513
			} catch (InterruptedException e) {
514
				return null;
515
			}
516
		}
517
		return histogram;
518
	}
519

  
520
	public String getURIOfFirstProvider() {
521
		return providerList.get(0).getURIOfFirstProvider();
522
	}
523

  
524
	public long getFileSize() {
525
		if(getParameters().hasParamsChanged())
526
			calcMetadataFromParams();
527
		long sizeMosaic = 0;
528
		for (int i = 0; i < providerList.size(); i++) {
529
			long[] fs = providerList.get(i).getFileSizeByProvider();
530
			for (int j = 0; j < fs.length; j++) {
531
				sizeMosaic += fs[j];
532
			}
533
		}
534
		return sizeMosaic;
535
	}
536

  
537
	public IProjection getProjection() {
538
		return proj;
539
	}
540

  
541
	public void setProjection(IProjection p) {
542
	}
543

  
544
	public String getInfoByPoint(double x, double y, ICancellable cancellable) {
545
		return null;
546
	}
547
	
548
	public int[] getTileSize(int level) {
549
		return null;
550
	}
551
	
552
	public int getSourceType() {
553
		return RasterDataStore.MOSAIC;
554
	}
555
	
556
	public String translateFileName(String fileName) {
557
		return fileName;
558
	}
559

  
560
	public void setView(Extent e) {
561
		viewRequest = new ExtentImpl(e);
562
	}
563

  
564
	public Extent getView() {
565
		return viewRequest;
566
	}
567

  
568
	public double getWidth() {
569
		if(getParameters().hasParamsChanged())
570
			calcMetadataFromParams();
571
		return width;
572
	}
573

  
574
	public double getHeight() {
575
		if(getParameters().hasParamsChanged())
576
			calcMetadataFromParams();
577
		return height;
578
	}
579

  
580
	@SuppressWarnings("deprecation")
581
	public Object readBlock(int pos, int blockHeight, double scale)
582
		throws InvalidSetViewException, FileNotOpenException, RasterDriverException, ProcessInterruptedException {
583
		if(getParameters().hasParamsChanged())
584
			calcMetadataFromParams();
585
		blockHeight = pos + blockHeight > getHeight() ? (int)(getHeight() - pos) : blockHeight;
586
		Buffer buf = RasterLocator.getManager().createBuffer(getDataType()[0], (int)getWidth(), blockHeight, getBandCount(), true);
587
		BandList bandList = new BandListImpl();
588
		bandList.clear();
589
		int[] drawableBands = new int[getBandCount()];
590
		for(int i = 0; i < getBandCount(); i++) {
591
			try {
592
				int dataType = getDataType()[i];
593
				DatasetBand band = new DatasetBandImpl(getURIByBand(i), 
594
													getBandPositionByProvider(i), 
595
													dataType, 
596
													getBandCount());
597
				bandList.addBand(band, i);
598
				drawableBands[i] = i;
599
			} catch(BandNotFoundInListException ex) {
600
				//No a๏ฟฝadimos la banda
601
			}
602
		}
603
		bandList.setDrawableBands(drawableBands);
604
		return getWindow(0, pos, bandList, buf);
605
	}
606

  
607
	public Object getData(int x, int y, int band) throws InvalidSetViewException, FileNotOpenException, RasterDriverException {
608
		if(getParameters().hasParamsChanged())
609
			calcMetadataFromParams();
610
		return null;
611
	}
612

  
613
	public void getWindow(Extent ex, int bufWidth, int bufHeight, 
614
			BandList bandList, TileListener listener, TaskStatus status) throws ProcessInterruptedException, RasterDriverException {
615
	}
616

  
617
	public Buffer getWindow(Extent extent, BandList bandList, Buffer rasterBuf, TaskStatus status) 
618
		throws ProcessInterruptedException, RasterDriverException {
619
		if(getParameters().hasParamsChanged())
620
			calcMetadataFromParams();
621
		setView(extent);
622
		
623
		for (int i = 0; i < providerList.size(); i++) {
624
			RasterProvider provider = providerList.get(i);
625
			Buffer buf = ((DefaultRasterProvider)provider).getWindow(extent, bandList, rasterBuf, status);
626
		}
627

  
628
	}
629

  
630
	public Buffer getWindow(double ulx, double uly, double w, double h, 
631
			BandList bandList, Buffer rasterBuf, boolean adjustToExtent, TaskStatus status) throws ProcessInterruptedException, RasterDriverException {
632
		//cut image
633
		if(getParameters().hasParamsChanged())
634
			calcMetadataFromParams();
635
		Extent ext = getExtent();
636
		Point2D pInit = rasterToWorld(new Point2D.Double(0, 0));
637
		Point2D pEnd = rasterToWorld(new Point2D.Double(getWidth(), getHeight()));
638
		double wRaster = Math.abs(pEnd.getX() - pInit.getX());
639
		double hRaster = Math.abs(pEnd.getY() - pInit.getY());
640
		double lrx = (((ext.getULX() - wRaster) > ext.maxX()) || ((ext.getULX() - wRaster) < ext.minX())) ? (ulx + w) : (ulx - w);
641
		double lry = (((ext.getULY() - hRaster) > ext.maxY()) || ((ext.getULY() - hRaster) < ext.minY())) ? (uly + h) : (uly - h);
642

  
643
		Extent selectedExtent = new ExtentImpl(ulx, uly, lrx, lry);
644
		setView(selectedExtent);
645
		return getWindow(selectedExtent, 
646
				rasterBuf.getWidth(), rasterBuf.getHeight(), bandList, rasterBuf, false, status);
647
	}
648

  
649
	public Buffer getWindow(Extent extent, int bufWidth, int bufHeight, 
650
			BandList bandList, Buffer rasterBuf, boolean adjustToExtent, TaskStatus status) throws ProcessInterruptedException, RasterDriverException {
651
		//draw method
652
		if(getParameters().hasParamsChanged())
653
			calcMetadataFromParams();
654
		setView(extent);
655
		String layerName = getLayerNameFromSelection(getParameters().getTimeSelection());
656
		List<Tile> tileList = null;
657
		try {
658
			tileList = getTileList(extent, bandList, bufWidth, bufHeight, layerName);
659
			for (int i = 0; i < tileList.size(); i++) {
660
				tiledLayer.getTile(tileList.get(i));
661
			}
662
		} catch (TileGettingException e) {
663
			throw new RasterDriverException("Error getting the tile list", e);
664
		} catch (TileBuildException e) {
665
			throw new RasterDriverException("Error building the tile list", e);
666
		}
667
		MemoryTileMatrixBuffer matrixBuffer = new MemoryTileMatrixBuffer(tileList);
668
		
669
		if(	tileList.get(0).getData().length > 1 && 
670
			getDataType()[0] == Buffer.TYPE_BYTE &&
671
			rasterBuf.getBandCount() == 1 &&
672
			bandList.getDrawableBands()[0] == getBandCount())
673
			return matrixBuffer.getWindow(extent, rasterBuf, true);
674
		else
675
			return matrixBuffer.getWindow(extent, rasterBuf, false);
676
	}
677

  
678
	public Buffer getWindow(int x, int y, 
679
			BandList bandList, Buffer rasterBuf) throws ProcessInterruptedException, RasterDriverException {
680
		//Layer with real resolution
681
		if(getParameters().hasParamsChanged())
682
			calcMetadataFromParams();
683
		int w = rasterBuf.getWidth();
684
		int h = rasterBuf.getHeight();
685
		Rectangle2D r = new Rectangle2D.Double(x, y, w, h);
686
		setView(
687
		new ExtentImpl( rasterUtil.getMapRectFromPxRect(getExtent().toRectangle2D(),
688
					getWidth(),
689
					getHeight(),
690
					r))
691
		);
692
		String layerName = getLayerNameFromSelection(getParameters().getTimeSelection());
693
		
694
		CacheStruct struct = getTileServer(layerName).getStruct();
695
		
696
		createTiledLayer(layerName); //Creates a new layer when the file type changes
697
		
698
		List<Tile> tileList = struct.getTileList(r);
699
		
700
		for (int i = 0; i < tileList.size(); i++) {
701
			tileList.get(i).setDownloaderParams("BandList", bandList.clone());
702
		}
703
		
704
		try {
705
			for (int i = 0; i < tileList.size(); i++) {
706
				tiledLayer.getTile(tileList.get(i));
707
			}
708
		} catch (TileGettingException e) {
709
			throw new RasterDriverException("Error getting the tile list", e);
710
		}
711
		
712
		MemoryTileMatrixBuffer matrixBuffer = new MemoryTileMatrixBuffer(tileList);
713
		return matrixBuffer.getWindow(r, rasterBuf);
714
	}
715

  
716
	public Buffer getWindow(int x, int y, int w, int h, 
717
			BandList bandList, Buffer rasterBuf, TaskStatus status) throws ProcessInterruptedException, RasterDriverException {
718
		if(rasterBuf.getWidth() == w && rasterBuf.getHeight() == h)
719
			return getWindow(x, y, bandList, rasterBuf);
720
		
721
		if(getParameters().hasParamsChanged())
722
			calcMetadataFromParams();
723
		setView(
724
				new ExtentImpl( rasterUtil.getMapRectFromPxRect(getExtent().toRectangle2D(),
725
						getWidth(),
726
						getHeight(),
727
						new Rectangle2D.Double(x, y, w, h)))
728
		);
729
		return null;
730
	}
731

  
732
	public int getBlockSize() {
733
		return 0;
734
	}
735
	
736
	public boolean isTiled() {
737
		return false;
738
	}
739

  
740
	public int getOverviewCount(int band) throws BandAccessException, RasterDriverException {
741
		return 0;
742
	}
743

  
744
	public int getOverviewWidth(int band, int overview) throws BandAccessException, RasterDriverException {
745
		return 0;
746
	}
747

  
748
	public int getOverviewHeight(int band, int overview) throws BandAccessException, RasterDriverException {
749
		return 0;
750
	}
751

  
752
	public boolean isOverviewsSupported() {
753
		return false;
754
	}
755

  
756
	public boolean isReproyectable() {
757
		return false;
758
	}
759

  
760
	public String getName() {
761
		return NAME;
762
	}
763
	
764
	public void setStatus(RasterProvider provider) {
765
		if(provider instanceof MosaicProvider2) {
766
		}
767
	}
768
	
769
	public boolean isTimeSupported() {
770
		return true;
771
	}
772
	
773
	public boolean isMosaic() {
774
		return true;
775
	}
776
	
777
	public void deleteLayerFromCache() {
778
		String layerName = getLayerNameFromSelection(null);
779
		TileCacheManager  manager = TileCacheLocator.getManager();
780
		TileCache tileCache = manager.getTileCache(RasterLibrary.pathTileCache);
781
		TiledLayer newLayer = tileCache.createLayer(getTileServer(layerName), TileCacheLibrary.DEFAULT_STRUCTURE);
782
		tileCache.removeLayer(newLayer);
783
	}
784
	
785
	/**
786
	 * Gets the layer name using the time selection and visibility
787
	 * @param t
788
	 * @return
789
	 */
790
	private String getLayerNameFromSelection(Time t) {
791
		String name = "";
792
		
793
		MessageDigest md = null;
794
		try {
795
			md = java.security.MessageDigest.getInstance("MD5");
796
		} catch (NoSuchAlgorithmException e) {
797
		}
798

  
799
		//Without time selected
800
		if(t == null || selectedProviders.size() != providerList.size()) {
801
			selectedProviders.clear();
802
			for (int i = 0; i < providerList.size(); i++) {
803
				RasterProvider prov = providerList.get(i);
804
				selectedProviders.add(prov);
805
				if(!((RasterDataParameters)prov.getDataParameters()).isVisible())
806
					name += prov.getURI().substring(prov.getURI().lastIndexOf(File.separator) + 1, prov.getURI().length());
807
			}
808
		} else {
809
			selectedProviders.clear();
810
			for (int i = 0; i < providerList.size(); i++) {
811
				try {
812
					TimeSeries tSeries = providerList.get(i).getTimeSerials();
813
					ArrayList<?> tList = tSeries.getTimeList();
814
					for (int j = 0; j < tList.size(); j++) {
815
						Object obj = tList.get(i);
816
						RelativeInstant instant = null;
817
						if(obj instanceof Date) {
818
							Date s = (Date)obj;
819
							instant = TimeSupportLocator.getManager().createRelativeInstant(s);
820
						}
821
						if(obj instanceof Double) {
822
							long s = ((Double)obj).longValue();
823
							instant = TimeSupportLocator.getManager().createRelativeInstant(s);
824
						}
825
						if( instant != null && 
826
							t.intersects(instant) &&
827
							!selectedProviders.contains(providerList.get(i))) {
828
							RasterProvider prov = providerList.get(i);
829
							selectedProviders.add(prov);
830
							if(!((RasterDataParameters)prov.getDataParameters()).isVisible())
831
								name += prov.getURI().substring(prov.getURI().lastIndexOf(File.separator) + 1, prov.getURI().length());
832
						}
833
					}
834
				} catch (RmfSerializerException e) {
835
					logger.debug("Error reading rmf time serials", e);
836
				}
837
			}
838
		}
839
		
840
		if(md != null) {
841
			md.update(name.getBytes());
842
			return math.convertToHex(md.digest());
843
		} else {
844
			return name;
845
		}
846
	}
847
	
848
	/**
849
	 * Creates a new tiled layer if this hasn't been created yet or the ID has changed. 
850
	 * An ID could changed because the file type has changed when the user uses WMTS properties.
851
	 */
852
	private TileCache createTiledLayer(String layerName) {
853
		TileCacheManager  manager = TileCacheLocator.getManager();
854
		TileCache tileCache = manager.getTileCache(RasterLibrary.pathTileCache);
855
		TiledLayer newLayer = tileCache.createLayer(getTileServer(layerName), TileCacheLibrary.DEFAULT_STRUCTURE);
856
		if(tiledLayer == null || newLayer.getID().compareTo(tiledLayer.getID()) != 0)
857
			tiledLayer = newLayer;
858
		return tileCache;
859
	}
860
	
861
	/**
862
	 * Gets the tile list in a selected extent
863
	 * @param ex
864
	 * @param bandList
865
	 * @param bufWidth
866
	 * @param bufHeight
867
	 * @return
868
	 * @throws TileBuildException 
869
	 */
870
	/*private List<Tile> getTileList(Extent ex, BandList bandList, int bufWidth, int bufHeight, String layerName) throws TileBuildException {
871
		CacheStruct struct = getTileServer(layerName).getStruct();
872
		
873
		createTiledLayer(layerName); //Creates a new layer when the file type changes
874
		
875
		Extent adjustedExtent = util.intersection(getExtent(), ex);
876
		double newBufWidth = (adjustedExtent.width() * bufWidth) / ex.width();
877
		double pixelSizeRequest = adjustedExtent.width() / newBufWidth; 
878
		
879
		List<Tile> tileList = struct.getTileList(new Point2D.Double(adjustedExtent.getULX(), adjustedExtent.getULY()), 
880
				new Point2D.Double(adjustedExtent.getLRX(), adjustedExtent.getLRY()), 
881
				pixelSizeRequest);
882
		
883
		for (int i = 0; i < tileList.size(); i++) {
884
			tileList.get(i).setDownloaderParams("BandList", bandList.clone());
885
		}
886
		return tileList;
887
	}*/
888
	
889
	public TileServer getTileServer() {
890
		if(tileServer == null)
891
			tileServer = new FileTileServer(this);
892
		return tileServer;
893
	}
894
	
895
	/**
896
	 * Gets the tile server from the Hashmap
897
	 * @param layerName
898
	 * @return
899
	 */
900
	public TileServer getTileServer(String layerName) {
901
		MosaicTileServer tileServer = tileServerMap.get(layerName);
902
		if(tileServer == null) {
903
			tileServer = new MosaicTileServer(this, 
904
					providerList,
905
					layerName,
906
					getParameters().getOverlapMethod(),
907
					getParameters().getColorCorrectionMethod(),
908
					getNoDataValue());
909
			tileServerMap.put(layerName, tileServer);
910
		}
911
		return tileServer;
912
	}
913
}
0 914

  
org.gvsig.raster.mosaic/trunk/org.gvsig.raster.mosaic/org.gvsig.raster.mosaic.swing/org.gvsig.raster.mosaic.swing.api/src/main/java/org/gvsig/raster/mosaic/swing/main/AddFilesPanel.java
8 8
	
9 9
	public void addListener(AddFilesListener addFilesListener);
10 10
	
11
	public void addSrcFile(Object data, String text, int nBands, int datatype, double cellsize);
11
	public void addSrcFile(Object data, String text, int nBands, int datatype, double cellsize, double nodata);
12 12
	
13
	public void addDstFile(Object data, String text, int nBands, int datatype, double cellsize);
13
	public void addDstFile(Object data, String text, int nBands, int datatype, double cellsize, double nodata);
14 14
	
15 15
	public Object getResult();
16 16
}
org.gvsig.raster.mosaic/trunk/org.gvsig.raster.mosaic/org.gvsig.raster.mosaic.swing/org.gvsig.raster.mosaic.swing.impl/src/main/java/org/gvsig/raster/mosaic/swing/impl/options/CellSizePanel.java
1
package org.gvsig.raster.mosaic.swing.impl.options;
2

  
3
import java.awt.GridBagConstraints;
4
import java.awt.GridBagLayout;
5
import java.awt.Insets;
6

  
7
import javax.swing.BorderFactory;
8
import javax.swing.JPanel;
9

  
10
import org.gvsig.i18n.Messages;
11

  
12
public class CellSizePanel extends JPanel {
13
	private static final long serialVersionUID = 1L;
14
	
15
	public CellSizePanel() {
16
		init();
17
	}
18

  
19
	private void init() {
20
		setLayout(new GridBagLayout());
21
		setBorder(BorderFactory.createTitledBorder(Messages.getText("cellsize")));
22
		
23
		GridBagConstraints gbc = new GridBagConstraints();
24
		gbc.insets = new Insets(2, 2, 2, 2);
25
		gbc.fill = GridBagConstraints.HORIZONTAL;
26
		gbc.weightx = 1.0;
27
		gbc.weighty = 0;
28
		//add(getScrollTableSrc(), gbc);
29
	}
30
	
31
	
32

  
33
}
0 34

  
org.gvsig.raster.mosaic/trunk/org.gvsig.raster.mosaic/org.gvsig.raster.mosaic.swing/org.gvsig.raster.mosaic.swing.impl/src/main/java/org/gvsig/raster/mosaic/swing/impl/main/AddFilesPanelImpl.java
27 27

  
28 28
import org.gvsig.andami.IconThemeHelper;
29 29
import org.gvsig.fmap.dal.DALLocator;
30
import org.gvsig.fmap.dal.DataManager;
30 31
import org.gvsig.fmap.dal.DataServerExplorer;
31 32
import org.gvsig.fmap.dal.DataServerExplorerParameters;
33
import org.gvsig.fmap.dal.DataStoreProvider;
32 34
import org.gvsig.fmap.dal.coverage.RasterLocator;
33 35
import org.gvsig.fmap.dal.coverage.dataset.Buffer;
34 36
import org.gvsig.fmap.dal.coverage.exception.NotSupportedExtensionException;
35 37
import org.gvsig.fmap.dal.coverage.exception.RasterDriverException;
36 38
import org.gvsig.fmap.dal.coverage.store.RasterDataStore;
39
import org.gvsig.fmap.dal.coverage.store.parameter.TileDataParameters;
37 40
import org.gvsig.fmap.dal.exception.InitializeException;
38 41
import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
39 42
import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
43
import org.gvsig.fmap.dal.raster.spi.CoverageStoreProvider;
40 44
import org.gvsig.fmap.dal.spi.DataManagerProviderServices;
41 45
import org.gvsig.gui.beans.swing.JFileChooser;
42 46
import org.gvsig.i18n.Messages;
43 47
import org.gvsig.raster.impl.provider.RasterProvider;
44 48
import org.gvsig.raster.mosaic.io.MosaicDataParameters;
45 49
import org.gvsig.raster.mosaic.io.MosaicProvider;
50
import org.gvsig.raster.mosaic.io.MosaicRasterFormat;
46 51
import org.gvsig.raster.mosaic.swing.main.AddFilesEvent;
47 52
import org.gvsig.raster.mosaic.swing.main.AddFilesListener;
48 53
import org.gvsig.raster.mosaic.swing.main.AddFilesPanel;
......
127 132
		int bandCount = 0;
128 133
		int dataType = 0;
129 134
		double cellsize = 0;
135
		double nodata = 0;
130 136
		
131
		public TableEntry(String text, Object obj, int bandCount, int dataType, double cellsize) {
137
		public TableEntry(String text, Object obj, int bandCount, int dataType, double cellsize, double nodata) {
132 138
			this.obj = obj;
133 139
			this.text = text;
134 140
			this.bandCount = bandCount;
135 141
			this.dataType = dataType;
136 142
			this.cellsize = cellsize;
143
			this.nodata = nodata;
137 144
		}
138 145
		
139 146
		public String toString() {
......
144 151
	//*******************************************************
145 152
	//***************API Implementation**********************
146 153
	
147
	public void addSrcFile(Object data, String text, int nBands, int datatype, double cellsize) {
148
		TableEntry entry = new TableEntry(text, data, nBands, datatype, cellsize);
154
	public void addSrcFile(Object data, String text, int nBands, int datatype, double cellsize, double nodata) {
155
		TableEntry entry = new TableEntry(text, data, nBands, datatype, cellsize, nodata);
149 156
		entriesSrc.add(entry);
150 157
		updateUISrcTable();
151 158
	}
152 159
	
153
	public void addDstFile(Object data, String text, int nBands, int datatype, double cellsize) {
154
		TableEntry entry = new TableEntry(text, data, nBands, datatype, cellsize);
160
	public void addDstFile(Object data, String text, int nBands, int datatype, double cellsize, double nodata) {
161
		TableEntry entry = new TableEntry(text, data, nBands, datatype, cellsize, nodata);
155 162
		entriesDst.add(entry);
156 163
		updateUIDstTable();
157 164
	}
......
711 718
		return fileChooser;
712 719
	}
713 720
	
721
	private boolean cache = true;
714 722
	public Object getResult() {
715 723
		try {
716 724
			DataManagerProviderServices dataManager = (DataManagerProviderServices)DALLocator.getDataManager();
......
718 726
			DataServerExplorer explorer = dataManager.openServerExplorer(MosaicProvider.NAME, explParams);
719 727
			MosaicDataParameters newParamsMosaic = (MosaicDataParameters)dataManager.createStoreParameters(explorer.getProviderName());
720 728
			
721
			newParamsMosaic.setURI(folder + File.separator + file);
729
			newParamsMosaic.setURI(folder + File.separator + file + MosaicRasterFormat.getSuffix());
722 730
			newParamsMosaic.setPixelSize(getMinPixelSize());
723 731
			
724 732
			for (int i = 0; i < entriesDst.size(); i++) {
......
728 736
					newParamsMosaic.addProvider(prov);
729 737
			}
730 738
			
731
			MosaicProvider provider = (MosaicProvider)dataManager.createProvider(null, newParamsMosaic);
732
			return RasterLocator.getManager().getProviderServices().open(provider, provider.getDataStoreParameters());
739
			if(cache) {
740
				DataManager manager = DALLocator.getDataManager();
741
				TileDataParameters tileParams = null;
742
				try {
743
					tileParams = (TileDataParameters) manager.createStoreParameters("Tile Store");
744
				} catch (ProviderNotRegisteredException e) {
745
					throw new InitializeException(e.getMessage(), e);
746
				}
747
				tileParams.setDataParameters(newParamsMosaic);
748
				
749
				CoverageStoreProvider provider = (CoverageStoreProvider)dataManager.createProvider(null, tileParams);
750
				RasterDataStore store = RasterLocator.getManager().getProviderServices().open(provider, tileParams);
751
				return store;
752
				
753
			} else {
754
				MosaicProvider provider = (MosaicProvider)dataManager.createProvider(null, newParamsMosaic);
755
				RasterDataStore store = RasterLocator.getManager().getProviderServices().open(provider, newParamsMosaic);
756
				return store;
757
			}
758
			
733 759
		} catch(ValidateDataParametersException e) {
734 760
			log.debug("Error validating parameters", e);
735 761
		} catch (InitializeException e) {
......
755 781
		}
756 782
		return cellsize;
757 783
	}
784
	
758 785
}
org.gvsig.raster.mosaic/trunk/org.gvsig.raster.mosaic/org.gvsig.raster.mosaic.swing/org.gvsig.raster.mosaic.swing.impl/src/test/java/org/gvsig/raster/mosaic/TestAddFilesPanel.java
24 24
		list.add("ecw");
25 25
		desc = new AddFilesPanelImpl("file", "/tmp", list);
26 26
		desc.addListener(this);
27
		desc.addSrcFile(null, "capa 1", 3, Buffer.TYPE_BYTE, 0.5);
28
		desc.addSrcFile(null, "capa 2", 4, Buffer.TYPE_BYTE, 0.5);
29
		desc.addSrcFile(null, "capa 3", 5, Buffer.TYPE_BYTE, 0.5);
30
		desc.addSrcFile(null, "capa 4", 6, Buffer.TYPE_BYTE, 30);
31
		desc.addSrcFile(null, "capa 5", 3, Buffer.TYPE_BYTE, 15);
32
		desc.addSrcFile(null, "capa 6", 6, Buffer.TYPE_BYTE, 15);
33
		desc.addSrcFile(null, "capa 7", 12, Buffer.TYPE_SHORT, 0.5);
34
		desc.addSrcFile(null, "capa 8", 4, Buffer.TYPE_INT, 0.5);
35
		desc.addSrcFile(null, "capa 9", 6, Buffer.TYPE_SHORT, 0.5);
36
		desc.addSrcFile(null, "capa 10", 0, Buffer.TYPE_FLOAT, 0.5);
27
		double nodata = -99999.0;
28
		desc.addSrcFile(null, "capa 1", 3, Buffer.TYPE_BYTE, 0.5, nodata);
29
		desc.addSrcFile(null, "capa 2", 4, Buffer.TYPE_BYTE, 0.5, nodata);
30
		desc.addSrcFile(null, "capa 3", 5, Buffer.TYPE_BYTE, 0.5, nodata);
31
		desc.addSrcFile(null, "capa 4", 6, Buffer.TYPE_BYTE, 30, nodata);
32
		desc.addSrcFile(null, "capa 5", 3, Buffer.TYPE_BYTE, 15, nodata);
33
		desc.addSrcFile(null, "capa 6", 6, Buffer.TYPE_BYTE, 15, nodata);
34
		desc.addSrcFile(null, "capa 7", 12, Buffer.TYPE_SHORT, 0.5, nodata);
35
		desc.addSrcFile(null, "capa 8", 4, Buffer.TYPE_INT, 0.5, nodata);
36
		desc.addSrcFile(null, "capa 9", 6, Buffer.TYPE_SHORT, 0.5, nodata);
37
		desc.addSrcFile(null, "capa 10", 0, Buffer.TYPE_FLOAT, 0.5, nodata);
37 38
		frame.getContentPane().add(desc);
38 39
		frame.setSize(w, h);
39 40
		frame.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
......
46 47

  
47 48
	public void actionAddFiles(AddFilesEvent e) {
48 49
		File[] fList = e.getFileList();
50
		double nodata = -99999.0;
49 51
		for (int i = 0; i < fList.length; i++) {
50
			desc.addDstFile(null, fList[i].toString(), 3, Buffer.TYPE_BYTE, 0.5);
52
			desc.addDstFile(null, fList[i].toString(), 3, Buffer.TYPE_BYTE, 0.5, nodata);
51 53
		}
52 54
	}
53 55

  
54 56
	public void actionAddFolder(AddFilesEvent e) {
55 57
		File[] folderList = e.getFileList();
58
		double nodata = -99999.0;
56 59
		for (int i = 0; i < folderList.length; i++) {
57
			desc.addDstFile(null, folderList[i].toString(), 3, Buffer.TYPE_BYTE, 0.5);
60
			desc.addDstFile(null, folderList[i].toString(), 3, Buffer.TYPE_BYTE, 0.5, nodata);
58 61
		}
59 62
	}
60 63

  
org.gvsig.raster.mosaic/trunk/org.gvsig.raster.mosaic/org.gvsig.raster.mosaic.app/src/main/resources-plugin/text.properties
1
Open_timeserie=Abrir serie temporal raster (.tsf)
2
error_creating_provider=Error creando el proveedor de datos
3
add_directory=A?adir directorio
4
add_files=A?adir ficheros
5
see_path=Ver rutas
6
modify_options=Opciones
7
modify_options_tip=Modificar opciones para la generaci?n del mosaico
8
create=Crear
9
add=A?adir
10
create_mosaic=Crear mosaico
11
options=Opciones
12
select_directory=Seleccionar directorio
13
select_file=Seleccionar fichero
14
mosaic_panel=Mosaico
15
delete_cache=?Atenci?n! A?adir o borrar ficheros a la capa borrar? la cach? de esta. \n ?Desea continuar?
16
delete_cache_button=Borrar cach?
17
delete_cache_button_tip=Borrar cach? de las capas visibles
18
table_cant_be_empty=La lista de ficheros no puede estar vacia
19
removefile_mosaic_error=Se ha producido un error eliminando la ficheros del mosaico
20
addfile_mosaic_error=Se ha producido un error a?adiendo la ficheros del mosaico
21
deleting_cache=Se va a borrar la cach? de teselas de la capa y los ficheros visibles. \n ?Desea continuar?
org.gvsig.raster.mosaic/trunk/org.gvsig.raster.mosaic/org.gvsig.raster.mosaic.app/src/main/resources-plugin/org/gvsig/raster/mosaic/app/i18n/text.properties
1
Open_timeserie=Abrir serie temporal raster (.tsf)
2
error_creating_provider=Error creando el proveedor de datos
3
add_directory=A?adir directorio
4
add_files=A?adir ficheros
5
see_path=Ver rutas
6
modify_options=Opciones
7
modify_options_tip=Modificar opciones para la generaci?n del mosaico
8
create=Crear
9
add=A?adir
10
create_mosaic=Crear mosaico
11
options=Opciones
12
select_directory=Seleccionar directorio
13
select_file=Seleccionar fichero
14
select_output_file=Fichero de salida para el Mosaico
15
mosaic_panel=Mosaico
16
delete_cache=?Atenci?n! A?adir o borrar ficheros a la capa borrar? la cach? de esta. \n ?Desea continuar?
17
delete_cache_button=Borrar cach?
18
delete_cache_button_tip=Borrar cach? de las capas visibles
19
table_cant_be_empty=La lista de ficheros no puede estar vacia
20
removefile_mosaic_error=Se ha producido un error eliminando la ficheros del mosaico
21
addfile_mosaic_error=Se ha producido un error a?adiendo la ficheros del mosaico
22
deleting_cache=Se va a borrar la cach? de teselas de la capa y los ficheros visibles. \n ?Desea continuar?
0 23

  
org.gvsig.raster.mosaic/trunk/org.gvsig.raster.mosaic/org.gvsig.raster.mosaic.app/src/main/java/org/gvsig/raster/mosaic/app/MainDialogActions.java
12 12
import org.gvsig.fmap.dal.coverage.exception.NotSupportedExtensionException;
13 13
import org.gvsig.fmap.dal.coverage.exception.RasterDriverException;
14 14
import org.gvsig.fmap.dal.coverage.store.RasterDataStore;
15
import org.gvsig.fmap.dal.coverage.store.parameter.TileDataParameters;
15 16
import org.gvsig.fmap.dal.exception.InitializeException;
16 17
import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
17 18
import org.gvsig.fmap.mapcontext.MapContextLocator;
......
70 71
	 * @throws IOException
71 72
	 */
72 73
	private String saveMosaicFileLayer(RasterDataStore mainRasterStore) throws IOException {
73
		MosaicDataParameters params = (MosaicDataParameters)mainRasterStore.getParameters();
74
		MosaicDataParameters params = null; 
75
		if(mainRasterStore.getParameters() instanceof MosaicDataParameters)	{	
76
				params = (MosaicDataParameters)mainRasterStore.getParameters();
77
		}
78
		if(mainRasterStore.getParameters() instanceof TileDataParameters) {
79
			TileDataParameters tileparams = (TileDataParameters)mainRasterStore.getParameters();
80
			params = (MosaicDataParameters)tileparams.getDataParameters();
81
		}
82
			
74 83
		ArrayList<File> uriList = new ArrayList<File>();
75 84
		List<RasterProvider> providers = params.getProviders();
76 85
		
......
119 128
							getLayerNameFromFileName(store.getFullName()), 
120 129
							store.getBandCount(), 
121 130
							store.getDataType()[0],
122
							store.getCellSize());
131
							store.getCellSize(),
132
							store.getNoDataValue().getValue().doubleValue());
123 133
			} catch (RasterDriverException e1) {
124 134
				log.debug("Error loading a RasterDataStore from the list", e1);
125 135
			} catch (InitializeException e1) {
......
145 155
							getLayerNameFromFileName(store.getFullName()), 
146 156
							store.getBandCount(), 
147 157
							store.getDataType()[0],
148
							store.getCellSize());
158
							store.getCellSize(),
159
							store.getNoDataValue().getValue().doubleValue());
149 160
			} catch (RasterDriverException e1) {
150 161
				log.debug("Error loading a RasterDataStore from the list", e1);
151 162
			} catch (InitializeException e1) {
org.gvsig.raster.mosaic/trunk/org.gvsig.raster.mosaic/org.gvsig.raster.mosaic.app/src/main/java/org/gvsig/raster/mosaic/app/MosaicSupportExtension.java
86 86
			Messages.addLocale(Locale.getDefault());
87 87
		}
88 88

  
89
		Messages.addResourceFamily("org.gvsig.raster.multifile.app.i18n.text",
89
		Messages.addResourceFamily("org.gvsig.raster.mosaic.app.i18n.text",
90 90
				MosaicSupportExtension.class.getClassLoader(),
91 91
				MosaicSupportExtension.class.getClass().getName());
92 92
		
......
140 140
						lyrRaster.getName(), 
141 141
						lyrRaster.getDataStore().getBandCount(), 
142 142
						lyrRaster.getDataStore().getDataType()[0],
143
						lyrRaster.getDataStore().getCellSize());
143
						lyrRaster.getDataStore().getCellSize(),
144
						lyrRaster.getNoDataValue().getValue().doubleValue());
144 145
			}
145 146
		}
146 147
	}

Also available in: Unified diff