Revision 3998

View differences:

org.gvsig.raster.tilecache/tags/org.gvsig.raster.tilecache-2.2.11/org.gvsig.raster.tilecache.io/src/test/resources/TemplateRasterProvider.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.fmap.dal.coverage.dataset.io.netcdf;
23

  
24
import java.awt.geom.AffineTransform;
25

  
26
import org.gvsig.fmap.dal.DALFileLocator;
27
import org.gvsig.fmap.dal.DALLocator;
28
import org.gvsig.fmap.dal.DataStore;
29
import org.gvsig.fmap.dal.coverage.dataset.Buffer;
30
import org.gvsig.fmap.dal.coverage.dataset.io.tile.downloader.FileTileServer;
31
import org.gvsig.fmap.dal.coverage.datastruct.BandList;
32
import org.gvsig.fmap.dal.coverage.datastruct.Extent;
33
import org.gvsig.fmap.dal.coverage.exception.BandAccessException;
34
import org.gvsig.fmap.dal.coverage.exception.FileNotOpenException;
35
import org.gvsig.fmap.dal.coverage.exception.InvalidSetViewException;
36
import org.gvsig.fmap.dal.coverage.exception.NotSupportedExtensionException;
37
import org.gvsig.fmap.dal.coverage.exception.ParsingException;
38
import org.gvsig.fmap.dal.coverage.exception.ProcessInterruptedException;
39
import org.gvsig.fmap.dal.coverage.exception.RasterDriverException;
40
import org.gvsig.fmap.dal.coverage.store.RasterFileStoreParameters;
41
import org.gvsig.fmap.dal.spi.DataManagerProviderServices;
42
import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
43
import org.gvsig.metadata.MetadataLocator;
44
import org.gvsig.raster.cache.tile.provider.TileListener;
45
import org.gvsig.raster.cache.tile.provider.TileServer;
46
import org.gvsig.raster.impl.datastruct.ExtentImpl;
47
import org.gvsig.raster.impl.provider.DefaultRasterProvider;
48
import org.gvsig.raster.impl.provider.RasterProvider;
49
import org.gvsig.raster.impl.store.AbstractRasterDataParameters;
50
import org.gvsig.raster.impl.store.AbstractRasterDataStore;
51
import org.gvsig.raster.impl.store.DefaultStoreFactory;
52
import org.gvsig.raster.impl.store.properties.DataStoreColorInterpretation;
53
import org.gvsig.raster.impl.store.properties.DataStoreMetadata;
54
import org.gvsig.raster.impl.store.properties.DataStoreTransparency;
55
import org.gvsig.tools.ToolsLocator;
56
import org.gvsig.tools.extensionpoint.ExtensionPoint;
57
import org.gvsig.tools.extensionpoint.ExtensionPointManager;
58
/**
59
 * Data provider for ...
60
 *
61
 * @author Nacho Brodin (nachobrodin@gmail.com)
62
 */
63
public class NetCDFProvider extends DefaultRasterProvider {
64
	public static String        NAME                     = "Template Store";
65
	public static String        DESCRIPTION              = "Template Raster file";
66
	public final String         METADATA_DEFINITION_NAME = "TemplateStore";
67
	
68
	private static String[]     formatList               = new String[]{"*"};
69

  
70
	private Extent              viewRequest              = null;
71
	private TileServer          tileServer               = null;
72
	private boolean             open                     = false;
73

  
74
	public static void register() {
75
		DataManagerProviderServices dataman = (DataManagerProviderServices) DALLocator.getDataManager();
76
		if (dataman != null && !dataman.getStoreProviders().contains(NAME)) {
77
			dataman.registerStoreProvider(NAME,
78
					NetCDFProvider.class, NetCDFDataParameters.class);
79
		}
80
		
81
		if(DALFileLocator.getFilesystemServerExplorerManager() != null)
82
			DALFileLocator.getFilesystemServerExplorerManager().registerProvider(
83
					NAME, DESCRIPTION,
84
					NetCDFFilesystemServerExplorer.class);
85
		
86
		dataman.registerStoreFactory(NAME, DefaultStoreFactory.class);
87
	}
88
	
89
	/**
90
	 * Returns true if the extension is supported and false if doesn't
91
	 * @param ext
92
	 * @return
93
	 */
94
	public static boolean isExtensionSupported(String ext) {
95
		for (int i = 0; i < formatList.length; i++) {
96
			if(formatList[i].compareTo(ext) == 0)
97
				return true;
98
		}
99
		return false;
100
	}
101
	
102
	/**
103
	 * Constructor. Abre el dataset.
104
	 * @param proj Proyecci?n
105
	 * @param fName Nombre del fichero
106
	 * @throws NotSupportedExtensionException
107
	 */
108
	public NetCDFProvider(String params) throws NotSupportedExtensionException {
109
		super(params);
110
		if(params instanceof String) {
111
			NetCDFDataParameters p = new NetCDFDataParameters();
112
			p.setURI((String)params);
113
			super.init(p, null, ToolsLocator.getDynObjectManager()
114
					.createDynObject(
115
							MetadataLocator.getMetadataManager().getDefinition(
116
									DataStore.METADATA_DEFINITION_NAME)));
117
			init(p, null);
118
		}
119
	}
120
	
121
	public NetCDFProvider (NetCDFDataParameters params,
122
			AbstractRasterDataStore storeServices) throws NotSupportedExtensionException {
123
		super(params, storeServices, ToolsLocator.getDynObjectManager()
124
				.createDynObject(
125
						MetadataLocator.getMetadataManager().getDefinition(
126
								DataStore.METADATA_DEFINITION_NAME)));
127
		init(params, storeServices);
128
	}
129

  
130
	/**
131
	 * Crea las referencias al fichero y carga
132
	 * las estructuras con la informaci?n y los metadatos.
133
	 * @param proj Proyecci?n
134
	 * @param param Parametros de carga
135
	 * @throws NotSupportedExtensionException
136
	 */
137
	public void init (AbstractRasterDataParameters params,
138
			DataStoreProviderServices storeServices) throws NotSupportedExtensionException {
139
		//TODO:
140
		
141
		if(((RasterFileStoreParameters)params).getFile().exists()) {
142
			setParam(params);
143
			colorTable = null;
144
			noData = 0;
145
			wktProjection = null;
146
			//CrsWkt crs = new CrsWkt(wktProjection);
147
			//IProjection proj = CRSFactory.getCRS("EPSG:23030");
148
			noDataEnabled = true;
149
			ownTransformation = null;
150
			externalTransformation = (AffineTransform)ownTransformation.clone();
151
			load();
152
		} else
153
			setParam(params);
154
		bandCount = 0;
155
		setDataType(null);
156
		super.init();
157

  
158
		try {
159
			loadFromRmf(getRmfBlocksManager());
160
		} catch (ParsingException e) {
161
			//No lee desde rmf
162
		}
163
	}
164
	
165
	/*
166
	 * (non-Javadoc)
167
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#load()
168
	 */
169
	public RasterProvider load() {
170
		return this;
171
	}
172
	
173
	/*
174
	 * (non-Javadoc)
175
	 * @see org.gvsig.raster.impl.provider.RasterProvider#isOpen()
176
	 */
177
	public boolean isOpen() {
178
		return open;
179
	}
180

  
181
	/*
182
	 * (non-Javadoc)
183
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#close()
184
	 */
185
	public void close() {
186
		//TODO:
187
	}
188

  
189
	/*
190
	 * (non-Javadoc)
191
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#translateFileName(java.lang.String)
192
	 */
193
	public String translateFileName(String fileName) {
194
		return fileName;
195
	}
196

  
197
	/**
198
	 * Asigna el extent de la vista actual. existe un fichero .rmf debemos hacer una transformaci?n
199
	 * de la vista asignada ya que la petici?n viene en coordenadas del fichero .rmf y la vista (v)
200
	 * ha de estar en coordenadas del fichero.
201
	 */
202
	public void setView(Extent e) {
203
		viewRequest = new ExtentImpl(e);
204
	}
205

  
206
	/*
207
	 * (non-Javadoc)
208
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getView()
209
	 */
210
	public Extent getView() {
211
		return viewRequest;
212
	}
213

  
214
	/*
215
	 * (non-Javadoc)
216
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getWidth()
217
	 */
218
	public double getWidth() {
219
		//TODO:
220
		return 0;
221
	}
222

  
223
	/*
224
	 * (non-Javadoc)
225
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getHeight()
226
	 */
227
	public double getHeight() {
228
		//TODO:
229
		return 0;
230
	}
231

  
232
	/**
233
	 * Read a line from the file
234
	 * @param line
235
	 * @param band
236
	 * @return
237
	 * @throws InvalidSetViewException
238
	 * @throws FileNotOpenException
239
	 * @throws RasterDriverException
240
	 * @Deprecated This operation is deprecated because is not useful and in the future
241
	 * it will not be maintained. The abstract operation has dissapear
242
	 */
243
	public Object readCompleteLine(int line, int band)throws InvalidSetViewException, FileNotOpenException, RasterDriverException {
244
		if(line > this.getHeight() || band > this.getBandCount())
245
			throw new InvalidSetViewException("Request out of grid");
246

  
247
		//TODO:
248
		return null;
249
	}
250

  
251
	/*
252
	 *  (non-Javadoc)
253
	 * @see org.gvsig.raster.dataset.RasterDataset#readBlock(int, int)
254
	 */
255
	public Object readBlock(int pos, int blockHeight)
256
		throws InvalidSetViewException, FileNotOpenException, RasterDriverException, ProcessInterruptedException {
257
		if(pos < 0)
258
			throw new InvalidSetViewException("Request out of grid");
259

  
260
		if((pos + blockHeight) > getHeight())
261
			blockHeight = Math.abs(((int)getHeight()) - pos);
262
		
263
		//TODO:
264
		return null;
265
	}
266

  
267
	/*
268
	 * (non-Javadoc)
269
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getData(int, int, int)
270
	 */
271
	public Object getData(int x, int y, int band)throws InvalidSetViewException, FileNotOpenException, RasterDriverException {
272
		if(x < 0 || y < 0 || x >= getWidth() || y >= getHeight())
273
			throw new InvalidSetViewException("Request out of grid");
274
		
275
		//TODO
276
		return null;
277
	}
278

  
279
	/*
280
	 * (non-Javadoc)
281
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getWindowRaster(double, double, double, double, int, int, org.gvsig.fmap.dal.coverage.datastruct.BandList, org.gvsig.raster.cache.tile.provider.TileListener)
282
	 */
283
	public void getWindow(Extent ex, int bufWidth, int bufHeight, 
284
			BandList bandList, TileListener listener) throws ProcessInterruptedException, RasterDriverException {
285
		//TODO
286
	}
287

  
288
	/*
289
	 * (non-Javadoc)
290
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getWindowRaster(org.gvsig.fmap.dal.coverage.datastruct.Extent, org.gvsig.fmap.dal.coverage.datastruct.BandList, org.gvsig.fmap.dal.coverage.dataset.Buffer)
291
	 */
292
	public Buffer getWindow(Extent ex, BandList bandList, Buffer rasterBuf) 
293
		throws ProcessInterruptedException, RasterDriverException {
294
		//TODO
295

  
296
		return rasterBuf;
297
	}
298

  
299
	/*
300
	 * (non-Javadoc)
301
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getWindowRaster(double, double, double, double, org.gvsig.fmap.dal.coverage.datastruct.BandList, org.gvsig.fmap.dal.coverage.dataset.Buffer, boolean)
302
	 */
303
	public Buffer getWindow(double ulx, double uly, double w, double h, 
304
			BandList bandList, Buffer rasterBuf, boolean adjustToExtent) throws ProcessInterruptedException, RasterDriverException {
305
		//TODO
306

  
307
		return rasterBuf;
308
	}
309

  
310
	/*
311
	 * (non-Javadoc)
312
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getWindowRaster(double, double, double, double, int, int, org.gvsig.fmap.dal.coverage.datastruct.BandList, org.gvsig.fmap.dal.coverage.dataset.Buffer, boolean)
313
	 */
314
	public Buffer getWindow(Extent extent, 
315
			int bufWidth, int bufHeight, BandList bandList, Buffer rasterBuf, boolean adjustToExtent) throws ProcessInterruptedException, RasterDriverException {
316
		//TODO
317
		
318
		return rasterBuf;
319
	}
320

  
321
	/*
322
	 * (non-Javadoc)
323
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getWindowRaster(int, int, int, int, org.gvsig.fmap.dal.coverage.datastruct.BandList, org.gvsig.fmap.dal.coverage.dataset.Buffer)
324
	 */
325
	public Buffer getWindow(int x, int y, int w, int h, 
326
			BandList bandList, Buffer rasterBuf) throws ProcessInterruptedException, RasterDriverException {
327
		//TODO
328
		
329
		return rasterBuf;
330
	}
331

  
332
	/*
333
	 * (non-Javadoc)
334
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getWindowRaster(int, int, int, int, int, int, org.gvsig.fmap.dal.coverage.datastruct.BandList, org.gvsig.fmap.dal.coverage.dataset.Buffer)
335
	 */
336
	public Buffer getWindow(int x, int y, int w, int h, 
337
			int bufWidth, int bufHeight, BandList bandList, Buffer rasterBuf) throws ProcessInterruptedException, RasterDriverException {
338
		//TODO
339
		
340
		return rasterBuf;
341
	}
342

  
343
	/*
344
	 * (non-Javadoc)
345
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getBlockSize()
346
	 */
347
	public int getBlockSize(){
348
		//TODO
349
		
350
		return 0;
351
	}
352

  
353
	/*
354
	 * (non-Javadoc)
355
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getMetadata()
356
	 */
357
	public DataStoreMetadata getMetadata() {
358
		//TODO
359
		
360
		return null;
361
	}
362

  
363
	/*
364
	 * (non-Javadoc)
365
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getColorInterpretation()
366
	 */
367
	public DataStoreColorInterpretation getColorInterpretation(){
368
		//TODO
369
		
370
		return null;
371
	}
372

  
373
	/*
374
	 * (non-Javadoc)
375
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#setColorInterpretation(org.gvsig.raster.impl.store.properties.DataStoreColorInterpretation)
376
	 */
377
	public void setColorInterpretation(DataStoreColorInterpretation colorInterpretation){
378
		//TODO
379
	}
380

  
381
	/*
382
	 * (non-Javadoc)
383
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getTransparency()
384
	 */
385
	public DataStoreTransparency getTransparency() {
386
		//TODO
387
		
388
		return null;
389
	}
390

  
391
	/*
392
	 * (non-Javadoc)
393
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#isGeoreferenced()
394
	 */
395
	public boolean isGeoreferenced() {
396
		//TODO
397
		
398
		return false;
399
	}
400

  
401
	/**
402
	 * Informa de si el driver ha supersampleado en el ?ltimo dibujado. Es el driver el que colocar?
403
	 * el valor de esta variable cada vez que dibuja.
404
	 * @return true si se ha supersampleado y false si no se ha hecho.
405
	 */
406
	public boolean isSupersampling() {
407
		//TODO
408
		
409
		return false;
410
	}
411

  
412
	/*
413
	 * (non-Javadoc)
414
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#setAffineTransform(java.awt.geom.AffineTransform)
415
	 */
416
	public void setAffineTransform(AffineTransform t){
417
		super.setAffineTransform(t);
418
	}
419

  
420
	/*
421
	 * (non-Javadoc)
422
	 * @see org.gvsig.raster.impl.provider.RasterProvider#getOverviewCount(int)
423
	 */
424
	public int getOverviewCount(int band) throws BandAccessException, RasterDriverException {
425
		if(band >= getBandCount())
426
			throw new BandAccessException("Wrong band");
427
		//TODO
428
		
429
		return 0;
430
	}
431

  
432
	/*
433
	 * (non-Javadoc)
434
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getOverviewWidth(int, int)
435
	 */
436
	public int getOverviewWidth(int band, int overview) throws BandAccessException, RasterDriverException {
437
		if (band >= getBandCount())
438
			throw new BandAccessException("Wrong band");
439
		//TODO
440
		
441
		return 0;
442
	}
443

  
444
	/*
445
	 * (non-Javadoc)
446
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getOverviewHeight(int, int)
447
	 */
448
	public int getOverviewHeight(int band, int overview) throws BandAccessException, RasterDriverException {
449
		if (band >= getBandCount())
450
			throw new BandAccessException("Wrong band");
451
		//TODO
452
		
453
		return 0;
454
	}
455

  
456
	/*
457
	 * (non-Javadoc)
458
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#overviewsSupport()
459
	 */
460
	public boolean overviewsSupport() {
461
		return true;
462
	}
463

  
464
	/*
465
	 * (non-Javadoc)
466
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#isReproyectable()
467
	 */
468
	public boolean isReproyectable() {
469
		return true;
470
	}
471

  
472
	/*
473
	 * (non-Javadoc)
474
	 * @see org.gvsig.fmap.dal.spi.DataStoreProvider#getName()
475
	 */
476
	public String getName() {
477
		return NAME;
478
	}
479
	
480
	/*
481
	 * (non-Javadoc)
482
	 * @see org.gvsig.raster.impl.provider.RasterProvider#setStatus(org.gvsig.raster.impl.provider.RasterProvider)
483
	 */
484
	public void setStatus(RasterProvider provider) {
485
		if(provider instanceof NetCDFProvider) {
486
			//Not implemented yet
487
		}
488
	}
489
	
490
	/*
491
	 * (non-Javadoc)
492
	 * @see org.gvsig.raster.impl.provider.RasterProvider#getTileServer()
493
	 */
494
	public TileServer getTileServer() {
495
		if(tileServer == null)
496
			tileServer = new FileTileServer(this);
497
		return tileServer;
498
	}
499
}
0 500

  
org.gvsig.raster.tilecache/tags/org.gvsig.raster.tilecache-2.2.11/org.gvsig.raster.tilecache.io/src/test/resources/README.txt
1
Put into this folder the resources needed by your test classes.
2

  
3
This folder is added to the Tests classpath, so you can load any resources 
4
through the ClassLoader.
5

  
6
By default, in this folder you can find an example of log4j configuration,
7
prepared to log messages through the console, so logging works when you
8
run your tests classes.
0 9

  
org.gvsig.raster.tilecache/tags/org.gvsig.raster.tilecache-2.2.11/org.gvsig.raster.tilecache.io/src/test/resources/log4j.xml
1
<?xml version="1.0" encoding="ISO-8859-1" ?>
2
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
3

  
4
<!-- 
5
Log4J configuration file for unit tests execution.
6
 -->
7
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
8

  
9
	<!-- Appender configuration to show logging messages through the console -->
10
	<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
11
		<layout class="org.apache.log4j.PatternLayout">
12
			<param name="ConversionPattern" value="%d{HH:mm:ss,SSS} %-5p [%c{2}.%M()]\n  %m%n" />
13
		</layout>
14
	</appender>
15

  
16
	<!-- 
17
	Activate logging messages of DEBUG level of higher only for the
18
	org.gvsig.tools packages.
19
	You can put full classes names or packages instead, to configure
20
	logging for all the classes and subpackages of the package.
21
	-->
22
	<category name="org.gvsig.tools">
23
		<priority value="DEBUG" />
24
	</category>
25
	<category name="org.gvsig.raster">
26
		<priority value="DEBUG" />
27
	</category>
28

  
29
	<!-- 
30
	By default, show only logging messages of INFO level or higher, 
31
	through the previously configured CONSOLE appender. 
32
	-->
33
	<root>
34
		<priority value="INFO" />
35
		<appender-ref ref="CONSOLE" />
36
	</root>
37
</log4j:configuration>
0 38

  
org.gvsig.raster.tilecache/tags/org.gvsig.raster.tilecache-2.2.11/org.gvsig.raster.tilecache.io/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
1
org.gvsig.raster.tilecache.io.DefaultCacheIOLibrary
org.gvsig.raster.tilecache/tags/org.gvsig.raster.tilecache-2.2.11/org.gvsig.raster.tilecache.io/src/main/java/org/gvsig/raster/tilecache/io/DefaultCacheIOLibrary.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.tilecache.io;
23

  
24
import org.gvsig.raster.cache.tile.impl.TileCacheDefaultImplLibrary;
25
import org.gvsig.tools.library.AbstractLibrary;
26
import org.gvsig.tools.library.LibraryException;
27

  
28
/**
29
 *
30
 * @author Nacho Brodin (nachobrodin@gmail.com)
31
 */
32
public class DefaultCacheIOLibrary extends AbstractLibrary {	
33

  
34
	public DefaultCacheIOLibrary() {
35
		registerAsServiceOf(TileCacheDefaultImplLibrary.class);
36
	}
37
	
38
	@Override
39
	protected void doInitialize() throws LibraryException {
40
		//RasterLibrary.wakeUp();
41
	}
42

  
43
	@Override
44
	protected void doPostInitialize() throws LibraryException {
45
		TileDataParametersImpl.registerDynClass();
46
		TileProvider.register();
47
	}
48
}
0 49

  
org.gvsig.raster.tilecache/tags/org.gvsig.raster.tilecache-2.2.11/org.gvsig.raster.tilecache.io/src/main/java/org/gvsig/raster/tilecache/io/TileServerExplorer.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

  
23
/*
24
* AUTHORS (In addition to CIT):
25
* 2009 IVER T.I   {{Task}}
26
*/
27

  
28
package org.gvsig.raster.tilecache.io;
29

  
30
import java.io.File;
31
import java.io.FileInputStream;
32
import java.util.List;
33

  
34
import org.gvsig.fmap.dal.DALLocator;
35
import org.gvsig.fmap.dal.DataManager;
36
import org.gvsig.fmap.dal.DataServerExplorer;
37
import org.gvsig.fmap.dal.DataServerExplorerParameters;
38
import org.gvsig.fmap.dal.DataStoreParameters;
39
import org.gvsig.fmap.dal.NewDataStoreParameters;
40
import org.gvsig.fmap.dal.coverage.RasterLocator;
41
import org.gvsig.fmap.dal.exception.CreateException;
42
import org.gvsig.fmap.dal.exception.DataException;
43
import org.gvsig.fmap.dal.exception.InitializeException;
44
import org.gvsig.fmap.dal.exception.RemoveException;
45
import org.gvsig.fmap.dal.serverexplorer.filesystem.impl.AbstractFilesystemServerExplorerProvider;
46
import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerProviderServices;
47
import org.gvsig.fmap.dal.spi.DataServerExplorerProvider;
48
import org.gvsig.fmap.dal.spi.DataServerExplorerProviderServices;
49
import org.gvsig.raster.impl.store.AbstractRasterFileDataParameters;
50

  
51
public class TileServerExplorer extends AbstractFilesystemServerExplorerProvider implements DataServerExplorerProvider {
52
	public static final String               NAME                     = "TileServerExplorer";
53
	
54
	public TileServerExplorer() {
55
		
56
	}
57
	
58
	public TileServerExplorer(
59
			TileServerExplorerParameters parameters,
60
			DataServerExplorerProviderServices services)
61
			throws InitializeException {
62
	}
63
	
64
	public boolean canCreate() {
65
		return false;
66
	}
67

  
68
	public boolean canCreate(NewDataStoreParameters parameters) {
69
		return false;
70
	}
71

  
72
	public void create(NewDataStoreParameters parameters, boolean overwrite)
73
			throws CreateException {
74
		throw new UnsupportedOperationException();
75
	}
76

  
77
	public NewDataStoreParameters getCreateParameters() throws DataException {
78
		return null;
79
	}
80

  
81
	public void initialize(
82
			FilesystemServerExplorerProviderServices serverExplorer) {
83
	}
84
	
85
	public void remove(DataStoreParameters parameters) throws RemoveException {
86
		throw new UnsupportedOperationException();
87
	}
88

  
89
	public String getDataStoreProviderName() {
90
		return TileProvider.NAME;
91
	}
92

  
93
	/**
94
	 * When the source is a file then this method will check if exists a 
95
	 * provider that can manage it
96
	 */
97
	public boolean accept(File pathname) {
98
		if (pathname.getParentFile() != null && 
99
				pathname.getParentFile().getName().equals("cellhd")) {
100
			if (pathname.getName().endsWith(".rmf")
101
					|| pathname.getName().endsWith(".rmf~")) {
102
				return false;
103
			}
104
			return true;
105
		}
106

  
107
		// Comprobamos que no sea un rmf propio, osea, que contenga xml
108
		if (pathname.getName().toLowerCase().endsWith(".rmf")) {
109
			FileInputStream reader = null;
110
			try {
111
				reader = new FileInputStream(pathname);
112
				String xml = "";
113
				for (int i = 0; i < 6; i++) {
114
					xml += (char) reader.read();
115
				}
116
				if (xml.equals("<?xml ")) {
117
					return false;
118
				}
119
			} catch (Exception e) {
120
			} finally {
121
				try {
122
					reader.close();
123
				} catch (Exception e) {
124
				}
125
			}
126
		}
127

  
128
		//The formats will be registered if it hasn't been done yet
129
		RasterLocator.getManager().getProviderServices().registerTileProviderFormats(TileProvider.class);
130
		
131
		return RasterLocator.getManager().getProviderServices().isExtensionSupported(
132
				pathname.getName(), 
133
				TileProvider.class);
134
	}
135

  
136
	public String getDescription() {
137
		return TileProvider.DESCRIPTION;
138
	}
139

  
140
	public DataStoreParameters getParameters(File file) throws DataException {
141
		DataManager manager = DALLocator.getDataManager();
142
		AbstractRasterFileDataParameters params = (AbstractRasterFileDataParameters) manager
143
				.createStoreParameters(this.getDataStoreProviderName());
144
		params.setFile(file);
145
		return params;
146
	}
147
	
148
	public DataServerExplorerParameters getParameters() {
149
		return null;
150
	}
151
	
152
	public int getMode() {
153
		return DataServerExplorer.MODE_RASTER;
154
	}
155

  
156
	public DataServerExplorerProviderServices getServerExplorerProviderServices() {
157
		return null;
158
	}
159

  
160
	public boolean add(String provider, NewDataStoreParameters parameters,
161
			boolean overwrite) throws DataException {
162
		return false;
163
	}
164

  
165
	public boolean canAdd() {
166
		return false;
167
	}
168

  
169
	public boolean canAdd(String storeName) throws DataException {
170
		return false;
171
	}
172

  
173
	public NewDataStoreParameters getAddParameters(String storeName)
174
			throws DataException {
175
		return null;
176
	}
177

  
178
	@SuppressWarnings("unchecked")
179
	public List getDataStoreProviderNames() {
180
		return null;
181
	}
182

  
183
	public String getProviderName() {
184
		return null;
185
	}
186

  
187
	@SuppressWarnings("unchecked")
188
	public List list() throws DataException {
189
		return null;
190
	}
191

  
192
	@SuppressWarnings("unchecked")
193
	public List list(int mode) throws DataException {
194
		return null;
195
	}
196

  
197
	public void dispose() {
198
		
199
	}
200

  
201
}
0 202

  
org.gvsig.raster.tilecache/tags/org.gvsig.raster.tilecache-2.2.11/org.gvsig.raster.tilecache.io/src/main/java/org/gvsig/raster/tilecache/io/TileProvider.java
1
package org.gvsig.raster.tilecache.io;
2

  
3
import java.awt.Image;
4
import java.awt.geom.AffineTransform;
5
import java.awt.geom.NoninvertibleTransformException;
6
import java.awt.geom.Point2D;
7
import java.io.File;
8
import java.io.FileNotFoundException;
9
import java.io.IOException;
10
import java.lang.reflect.Constructor;
11
import java.lang.reflect.InvocationTargetException;
12
import java.util.List;
13

  
14
import org.gvsig.compat.net.ICancellable;
15
import org.gvsig.fmap.dal.DALLocator;
16
import org.gvsig.fmap.dal.DataStore;
17
import org.gvsig.fmap.dal.DataStoreParameters;
18
import org.gvsig.fmap.dal.coverage.RasterLibrary;
19
import org.gvsig.fmap.dal.coverage.RasterLocator;
20
import org.gvsig.fmap.dal.coverage.dataset.Buffer;
21
import org.gvsig.fmap.dal.coverage.datastruct.BandList;
22
import org.gvsig.fmap.dal.coverage.datastruct.DatasetBand;
23
import org.gvsig.fmap.dal.coverage.datastruct.Extent;
24
import org.gvsig.fmap.dal.coverage.exception.BandAccessException;
25
import org.gvsig.fmap.dal.coverage.exception.BandNotFoundInListException;
26
import org.gvsig.fmap.dal.coverage.exception.FileNotOpenException;
27
import org.gvsig.fmap.dal.coverage.exception.FileNotSupportedException;
28
import org.gvsig.fmap.dal.coverage.exception.InfoByPointException;
29
import org.gvsig.fmap.dal.coverage.exception.InvalidSetViewException;
30
import org.gvsig.fmap.dal.coverage.exception.NotSupportedExtensionException;
31
import org.gvsig.fmap.dal.coverage.exception.ParsingException;
32
import org.gvsig.fmap.dal.coverage.exception.ProcessInterruptedException;
33
import org.gvsig.fmap.dal.coverage.exception.QueryException;
34
import org.gvsig.fmap.dal.coverage.exception.RasterDriverException;
35
import org.gvsig.fmap.dal.coverage.exception.RmfSerializerException;
36
import org.gvsig.fmap.dal.coverage.store.RasterQuery;
37
import org.gvsig.fmap.dal.coverage.store.parameter.MultiDimensionalStoreParameters;
38
import org.gvsig.fmap.dal.coverage.store.parameter.RasterDataParameters;
39
import org.gvsig.fmap.dal.coverage.store.parameter.RemoteStoreParameters;
40
import org.gvsig.fmap.dal.coverage.store.parameter.TileDataParameters;
41
import org.gvsig.fmap.dal.coverage.store.props.ColorInterpretation;
42
import org.gvsig.fmap.dal.coverage.store.props.ColorTable;
43
import org.gvsig.fmap.dal.coverage.util.MathUtils;
44
import org.gvsig.fmap.dal.exception.InitializeException;
45
import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
46
import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
47
import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemServerExplorer;
48
import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemServerExplorerParameters;
49
import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemStoreParameters;
50
import org.gvsig.fmap.dal.spi.DataManagerProviderServices;
51
import org.gvsig.fmap.dal.spi.DataStoreProvider;
52
import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
53
import org.gvsig.metadata.MetadataLocator;
54
import org.gvsig.raster.cache.tile.Tile;
55
import org.gvsig.raster.cache.tile.TileCache;
56
import org.gvsig.raster.cache.tile.TileCacheLibrary;
57
import org.gvsig.raster.cache.tile.TileCacheLocator;
58
import org.gvsig.raster.cache.tile.TileCacheManager;
59
import org.gvsig.raster.cache.tile.exception.TileBuildException;
60
import org.gvsig.raster.cache.tile.exception.TileGettingException;
61
import org.gvsig.raster.cache.tile.layer.TiledLayer;
62
import org.gvsig.raster.cache.tile.provider.CacheStruct;
63
import org.gvsig.raster.cache.tile.provider.TileServer;
64
import org.gvsig.raster.impl.buffer.SpiRasterQuery;
65
import org.gvsig.raster.impl.datastruct.BandListImpl;
66
import org.gvsig.raster.impl.datastruct.DatasetBandImpl;
67
import org.gvsig.raster.impl.datastruct.ExtentImpl;
68
import org.gvsig.raster.impl.provider.AbstractRasterProvider;
69
import org.gvsig.raster.impl.provider.MemoryTileMatrixBuffer;
70
import org.gvsig.raster.impl.provider.RasterProvider;
71
import org.gvsig.raster.impl.provider.RemoteRasterProvider;
72
import org.gvsig.raster.impl.provider.TiledRasterProvider;
73
import org.gvsig.raster.impl.store.DefaultRasterStore;
74
import org.gvsig.raster.impl.store.DefaultStoreFactory;
75
import org.gvsig.raster.impl.store.properties.DataStoreColorInterpretation;
76
import org.gvsig.raster.impl.store.properties.DataStoreTransparency;
77
import org.gvsig.raster.impl.store.properties.RemoteDataStoreStatistics;
78
import org.gvsig.tools.ToolsLocator;
79
import org.gvsig.tools.locator.LocatorException;
80
import org.slf4j.Logger;
81
import org.slf4j.LoggerFactory;
82

  
83
/**
84
 * Provider for WMTS service
85
 *
86
 * @author Nacho Brodin (nachobrodin@gmail.com)
87
 */
88
public class TileProvider extends AbstractRasterProvider implements TiledRasterProvider {
89
	public static String                NAME                     = "Tile Store";
90
	public static String                DESCRIPTION              = "Raster Tiled Source";
91
	public static final String          METADATA_DEFINITION_NAME = "TileStore";
92
	private static final Logger         logger                   = LoggerFactory.getLogger(TileProvider.class);
93
	private RasterProvider              provider                 = null;
94
	private boolean                     open                     = false;
95
	private Extent                      viewRequest              = null;
96
	private TiledLayer                  tiledLayer               = null;
97
	private MathUtils                   math                     = RasterLocator.getManager().getMathUtils();
98
	private TileServer                  secondLevelTileServer    = null;
99
	 
100
	public static void register() {		
101
		DataManagerProviderServices dataman = (DataManagerProviderServices) DALLocator.getDataManager();
102
		if (dataman != null && !dataman.getStoreProviders().contains(NAME)) {
103
			dataman.registerStoreProvider(NAME,
104
					TileProvider.class, TileDataParametersImpl.class);
105
		}
106

  
107
		/*if(DALFileLocator.getFilesystemServerExplorerManager() != null)
108
			DALFileLocator.getFilesystemServerExplorerManager().registerProvider(
109
					NAME, DESCRIPTION,
110
					TileServerExplorer.class);*/
111
		
112
		if (!dataman.getExplorerProviders().contains(TileServerExplorer.NAME)) {
113
			dataman.registerExplorerProvider(TileServerExplorer.NAME, TileServerExplorer.class, TileServerExplorerParameters.class);
114
		}
115
		dataman.registerStoreFactory(NAME, DefaultStoreFactory.class);
116
	}
117
	
118
	/**
119
	 * Loads the specific provider to download data
120
	 * @param file
121
	 * @return
122
	 * @throws NotSupportedExtensionException
123
	 * @throws FileNotSupportedException 
124
	 */
125
	@SuppressWarnings("unchecked")
126
	private RasterProvider loadProvider(TileDataParametersImpl params, DataStoreProviderServices storeServices) throws ProviderNotRegisteredException, InitializeException {
127
		Object obj = params.getDataParameters();
128
		DataManagerProviderServices dataManager = (DataManagerProviderServices)DALLocator.getDataManager();
129
		DataStoreProvider prov = null;
130
		
131
		if(obj != null && obj instanceof DataStoreParameters) //Remote 
132
			prov = dataManager.createProvider(storeServices, (DataStoreParameters)obj);
133
		else { //File
134
			if(params.getFile() != null) {
135
				//We have to locate a provider's name which manages the selected file
136
				//A FilesystemServerExplorer will give a getProviderNames service
137
				FilesystemServerExplorerParameters paramsExplorer = (FilesystemServerExplorerParameters)dataManager.createServerExplorerParameters(FilesystemServerExplorer.NAME);
138
				FilesystemServerExplorer serverExplorer = null;
139
				try {
140
					paramsExplorer.setRoot(File.separator);
141
					serverExplorer = (FilesystemServerExplorer)dataManager.openServerExplorer(FilesystemServerExplorer.NAME, paramsExplorer);
142
				} catch (ValidateDataParametersException e) {
143
					throw new InitializeException(e);
144
				}
145
				
146
				//Gets the list of provider's name to manage the file
147
				List<String> provName = serverExplorer.getProviderNameList(params.getFile());
148
				if(provName.size() > 0) {
149
					for (int i = 0; i < provName.size(); i++) {
150
						//Gets the first provider what is not a TileProvider
151
						if(provName.get(i).compareTo(NAME) != 0) {
152
							DataStoreParameters newparams = dataManager.createStoreParameters(provName.get(i));
153
							((FilesystemStoreParameters)newparams).setFile(params.getFile()); 
154
							prov = dataManager.createProvider(storeServices, newparams);
155
						}
156
					}
157
				}
158
			}
159
		}
160
		
161
		if(prov != null && prov instanceof RasterProvider) {
162
			if(((RasterProvider)prov).isRotated())
163
				throw new InitializeException("Rotation not supported tiling files", new Throwable());
164

  
165
			return (RasterProvider)prov;
166
		}
167
		
168
		return null;
169
	}
170
	
171
	/**
172
	 * Gets the internal provider used to feed the TileProvider
173
	 * @return
174
	 */
175
	public RasterProvider getInternalProvider() {
176
		return provider;
177
	}
178
	
179
	public Image getImageLegend() {
180
		return provider.getImageLegend();
181
	}
182
	
183
	public ColorInterpretation getColorInterpretation() {
184
		return provider.getColorInterpretation();
185
	}
186
	
187
	public String getFileSuffix() {
188
		try {
189
			return provider instanceof RemoteRasterProvider ? provider.getFileSuffix() : "tif";
190
		} catch(Throwable e) {
191
			//if wmts doesn't exists in the classpath
192
			return "tif";
193
		}
194
	}
195
	
196
	public String getRMFFile() {
197
		TileCacheManager  manager = TileCacheLocator.getManager();
198
		TileCache tileCache = manager.getTileCache(RasterLibrary.pathTileCache);
199
		
200
		String metadataDir = tiledLayer.getBaseLayerDirectory().substring(0, tiledLayer.getBaseLayerDirectory().lastIndexOf(File.separator) + 1) + 
201
				  			tileCache.getConfigurationDirectory();
202
		
203
		File metadaDirFile = new File(metadataDir);
204
		if(!metadaDirFile.exists())
205
			metadaDirFile.mkdir();
206
		
207
		String path = metadataDir + File.separator + tiledLayer.getID() + ".rmf";
208
		
209
		try {
210
			if(!new File(path).exists() && 
211
				provider != null && 
212
				provider.getRMFFile() != null &&
213
				new File(provider.getRMFFile()).exists()) 
214
				RasterLocator.getManager().getFileUtils().copyFile(provider.getRMFFile(), path);
215
			
216
			if(provider != null && provider.getColorTable() != null) {	
217
				ColorTable colorTable = provider.getColorTable();
218
				RasterLocator.getManager().getProviderServices().saveObjectToRmfFile(path, ColorTable.class, colorTable);
219
			}
220
		} catch (LocatorException e) {
221
			logger.info("No se ha podido copiar el fichero RMF a la capa tileada", e);
222
		} catch (FileNotFoundException e) {
223
			logger.info("No se ha podido copiar el fichero RMF a la capa tileada", e);
224
		} catch (IOException e) {
225
			logger.info("No se ha podido copiar el fichero RMF a la capa tileada", e);
226
		} catch (RmfSerializerException e) {
227
			logger.info("No se ha podido copiar la tabla de color a la capa tileada", e);
228
		}
229
		return path;
230
	}
231
	
232
	public TileProvider() throws NotSupportedExtensionException {
233
		super();
234
	}
235
	
236
	public void registerTileProviderFormats(Class<RasterProvider> c) {
237
		
238
	}
239
	
240
	/**
241
	 * Assigns the provider associated to this tile server
242
	 * @param prov
243
	 * @throws NotSupportedExtensionException 
244
	 */
245
	public void setProvider(RasterProvider prov) throws InitializeException  {
246
		this.provider = prov;
247
		init(getDataStoreParameters(), getStoreServices());
248
	}
249
	
250
	public TileProvider(TileDataParametersImpl params,
251
			DataStoreProviderServices storeServices) throws InitializeException {
252
		super(params, storeServices, ToolsLocator.getDynObjectManager()
253
				.createDynObject(
254
						MetadataLocator.getMetadataManager().getDefinition(
255
								DataStore.METADATA_DEFINITION_NAME)));
256
		if(!params.isSecondLevelCache()) {
257
			try {
258
				provider = loadProvider(params, storeServices);
259
			} catch (ProviderNotRegisteredException e) {
260
				throw new InitializeException("Provider not registered", e);
261
			}
262
			init(params, storeServices);
263
			if(provider.getFileSizeByProvider() != null && provider.getFileSizeByProvider().length > 0)
264
				fileSize = provider.getFileSizeByProvider()[0];
265
		}
266
	}
267
	
268
	/**
269
	 * Creates the second level cache if the client has set a <code>TileServer</code> and the
270
	 * <code>CacheStruct</code> is different that the old one. 
271
	 * <UL>
272
	 * <LI>First level cache without TileServer from the client: do nothing</LI>
273
	 * <LI>First level cache with TileServer from the client and the structure is 
274
	 * different to the old one: Builds a second level TileProvider</LI>
275
	 * <LI>First level cache with TileServer from the client and the structure is 
276
	 * equal to the old one: do nothing</LI>
277
	 * <LI>Second level cache: sets the TileServer</LI>
278
	 * </UL>
279
	 * @param params
280
	 * @param storeServices
281
	 * @throws NotSupportedExtensionException
282
	 */
283
	/*private void createsSecondLevelCache(TileDataParametersImpl params) throws NotSupportedExtensionException {
284
		//Se obtiene el TileServer que haya pasado el cliente en los par?metros si ha pasado alguno.
285
		TileServer tileServer = params.getTileServer();
286
		//Se obtiene el CacheStruct y se compara con el del provider
287
		CacheStruct cacheStruct = null;
288
		if(tileServer != null)
289
			cacheStruct = tileServer.getStruct();
290
		
291
		if(params.isSecondLevelCache()) { //Cache de segundo nivel
292
			this.secondLevelTileServer = tileServer;
293
		} else if(cacheStruct != null && !provider.getTileServer().getStruct().compare(cacheStruct)) { //Cache de primer nivel
294
			//Si son distintos habr? que crear una cach? de segundo nivel por lo que creamos un nuevo TileProvider
295
			//que tenga como par?metro el provider viejo
296
			TileDataParametersImpl par = new TileDataParametersImpl();
297
			par.setDataParameters(provider.getDataParameters());
298
			par.setTileServer(tileServer);
299
			par.setSecondLevelCache(true);
300
			TileProvider newProvider = new TileProvider(par, null);
301
			newProvider.setProvider(this.provider);
302
			//Al TileProvider actual se le asigna como provider el TileProvider creado
303
			this.provider = newProvider;
304
		}
305
	}*/
306
	
307
	/**
308
	 * Crea las referencias al fichero y carga
309
	 * las estructuras con la informaci?n y los metadatos.
310
	 * @param proj Proyecci?n
311
	 * @param param Parametros de carga
312
	 * @throws NotSupportedExtensionException
313
	 */
314
	public void init (DataStoreParameters params,
315
			DataStoreProviderServices storeServices) throws InitializeException  {
316
		setParam(storeServices, params);
317
		open = true;
318
		calculateDataType();
319
		calculateBandCount();
320
		calculateColorInterpretation();
321
		calculateTransparency();
322
		setColorTable(provider.getColorTable());
323
		noData = provider.getNoDataValue();
324
		setFName(provider.getURIOfFirstProvider());
325
		proj = provider.getProjection();
326
		ownTransformation = provider.getAffineTransform();
327
		externalTransformation = (AffineTransform)ownTransformation.clone();
328
		
329
		createTiledLayer();
330
		
331
		//Force to deletes the layer if the flag is to true
332
		if(tiledLayer != null) {
333
			if(param instanceof TileDataParameters) {
334
				if(((TileDataParameters)param).isDeletingCache()) {
335
					TileCacheManager  manager = TileCacheLocator.getManager();
336
					TileCache tileCache = manager.getTileCache(RasterLibrary.pathTileCache);
337
					tileCache.removeLayer(tiledLayer);
338
					((TileDataParameters)param).deleteCache(false);
339
				}
340
			}
341
		}
342
		
343
		if(provider instanceof RemoteRasterProvider)
344
			stats = new RemoteDataStoreStatistics(provider);
345
	}
346

  
347
	/**
348
	 * Calculates the data type of this provider
349
	 * @return 
350
	 */
351
	public void calculateDataType() {
352
		int[] datatype = null;
353
		if(provider.getDataType()[0] == Buffer.TYPE_BYTE && provider.getBandCount() == 3)
354
			datatype = new int[provider.getBandCount() + 1];
355
		else
356
			datatype = new int[provider.getBandCount()];
357
		for (int i = 0; i < provider.getDataType().length; i++) {
358
			datatype[i] = provider.getDataType()[i];
359
		}
360
		if(provider.getDataType()[0] == Buffer.TYPE_BYTE && provider.getBandCount() == 3)
361
			datatype[datatype.length - 1] = Buffer.TYPE_BYTE;
362
		setDataType(datatype);
363
	}
364
	
365
	/**
366
	 * Calculates the number of bands
367
	 */
368
	public void calculateBandCount() {
369
		bandCount = provider.getBandCount();
370
		if(provider.getDataType()[0] == Buffer.TYPE_BYTE && provider.getBandCount() == 3)
371
			bandCount ++;
372
	}
373

  
374
	/**
375
	 * Calculates the color interpretation
376
	 */
377
	public void calculateColorInterpretation() {
378
		ColorInterpretation ci = provider.getColorInterpretation();
379
		if(ci != null) {
380
			if(ci.isRGB() || ci.isBGR()) {
381
				ci = DataStoreColorInterpretation.createRGBAInterpretation();
382
			} else
383
				ci = ci.cloneColorInterpretation();
384
		} else {
385
			if(provider.getDataType()[0] == Buffer.TYPE_BYTE) {
386
				if(provider.getBandCount() == 3)
387
					ci = DataStoreColorInterpretation.createRGBAInterpretation();
388
				else
389
					ci = DataStoreColorInterpretation.createDefaultInterpretation(getBandCount());
390
			} else {
391
				if(getBandCount() == 1)
392
					ci = DataStoreColorInterpretation.createGrayInterpretation();
393
				else 
394
					ci = DataStoreColorInterpretation.createDefaultInterpretation(getBandCount());
395
			}
396
		}
397

  
398
		super.setColorInterpretation(ci);
399
	}
400
	
401
	
402
	public void calculateTransparency() {
403
		if(provider.getTransparency() != null)
404
			transparency = provider.getTransparency().cloneTransparency();
405
		else 
406
			transparency = new DataStoreTransparency(getColorInterpretation());
407
		if(getColorInterpretation() != null) {
408
			transparency.setColorInterpretation(getColorInterpretation());
409
			transparency.setTransparencyBand(getColorInterpretation().getAlphaBand());
410
			transparency.activeTransparency();
411
		}
412
	}
413
	
414
	/**
415
	 * Creates a new tiled layer if this hasn't been created yet or the ID has changed. 
416
	 * An ID could changed because the file type has changed when the user uses WMTS properties.
417
	 */
418
	private void createTiledLayer() {
419
		TileCacheManager  manager = TileCacheLocator.getManager();
420
		TileCache tileCache = manager.getTileCache(RasterLibrary.pathTileCache);
421
		TiledLayer newLayer = tileCache.createLayer(provider.getTileServer(), TileCacheLibrary.DEFAULT_STRUCTURE);
422
		if(tiledLayer == null || newLayer.getID().compareTo(tiledLayer.getID()) != 0)
423
			tiledLayer = newLayer;
424
	}
425
	
426
	public void reload() {
427
		try {
428
			loadFromRmf(getRmfBlocksManager());
429
			calculateColorInterpretation();
430
			calculateTransparency();
431
		} catch (ParsingException e) {
432
			logger.debug("No se ha podido leer el RMF", e);
433
		}
434
	}
435
	
436
	public int getZoomLevels() {
437
		if(provider.getTileServer() != null)
438
			return provider.getTileServer().getStruct().getNumberOfLevels();
439
		return 0;
440
	}
441
	
442
	public int getNearestLevel(double pixelSize) {
443
		double[] pixelSizes = getPixelSizeByLevel();
444
		for (int i = 0; i < pixelSizes.length - 1; i++) {
445
			if(pixelSize <= pixelSizes[i] && pixelSize > pixelSizes[i + 1]) {
446
				return i;
447
			}
448
		}
449
		if(pixelSize < pixelSizes[getZoomLevels() - 1])
450
			return getZoomLevels() - 1;
451
		return 0;
452
	}
453
	
454
	/**
455
	 * Returns a list of pixel sizes by level
456
	 * @return
457
	 */
458
	public double[] getPixelSizeByLevel() {
459
		double[] list = new double[getZoomLevels()];
460
		CacheStruct struct = provider.getTileServer().getStruct();
461
		for (int i = 0; i < struct.getNumberOfLevels(); i++) {
462
			list[i] = math.adjustDouble(struct.getPixelSizeByLevel(i));
463
		}
464
		return list;
465
	}
466
	
467
	public Extent getCoordsInTheNearestLevel(Extent extent, int w, int h) {
468
		double[] pixelSizes = getPixelSizeByLevel();
469
		double currentPixelSize = extent.width() / (double)w;
470
		
471
		int level = 0;
472
		for (int i = 0; i < (pixelSizes.length - 1); i++) {
473
			if(currentPixelSize < pixelSizes[i] && currentPixelSize >= pixelSizes[i + 1]) {
474
				level = i + 1;
475
				break;
476
			}
477
		}
478
		
479
		return getZoomLevelCoordinates(level, extent, w, h);
480
	}
481
	
482
	public Extent getCoordsInLevel(Point2D viewCenter, int level, int w, int h) {
483
		level = adjustLevel(level);
484
		double pixelSize = provider.getTileServer().getStruct().getPixelSizeByLevel(level);
485
		
486
		/*Rectangle2D worldExtent = provider.getTileServer().getStruct().getWorldExtent();
487
		int nTiles = provider.getTileServer().getStruct().getLayerWidthOfTileMatrixByLevel(level);
488
		int[] nPixelsByTile = provider.getTileServer().getStruct().getTileSizeByLevel(level);
489
		
490
		double sizeWCByTile = worldExtent.getWidth() / (double)nTiles;
491
		double pixelSize = sizeWCByTile / (double)nPixelsByTile[0];*/
492
		
493
		double ulx = viewCenter.getX() - ((w / 2) * pixelSize);
494
		double uly = viewCenter.getY() - ((h / 2) * pixelSize);
495
		double lrx = ulx + (w * pixelSize);
496
		double lry = uly + (h * pixelSize);
497
		return new ExtentImpl(ulx, uly, lrx, lry);
498
	}
499
	
500
	/**
501
	 * Adjust de level to the range
502
	 * @param level
503
	 * @return
504
	 */
505
	private int adjustLevel(int level) {
506
		if(level < 0)
507
			level = 0;
508
		if(level > getZoomLevels())
509
			level = getZoomLevels();
510
		return level;
511
	}
512
	
513
	public AffineTransform getAffineTransform() {
514
		return provider.getAffineTransform();
515
	}
516
	
517
	/**
518
	 * Gets the bounding box in world coordinates. If the layer has grid subsets (TileMatrixLimits) then
519
	 * this will have a only extent but if the layer doesn't have grid subsets then this will have a different
520
	 * extent in each level resolution. In this case we need to know the extent for each level.
521
	 * @return Extent
522
	 */
523
	public Extent getExtent() {
524
		return provider.getExtent();
525
	}
526

  
527
	public RasterProvider load() {
528
		return this;
529
	}
530
	
531
	public boolean isOpen() {
532
		return open;
533
	}
534

  
535
	public boolean isTiled() {
536
		return true;
537
	}
538
	
539
	public void close() {
540
		open = false;
541
		if(provider != null)
542
			provider.close();
543
	}
544
	
545
	public String translateFileName(String fileName) {
546
		return fileName;
547
	}
548

  
549
	public void setView(Extent e) {
550
		viewRequest = e;
551
	}
552

  
553
	public Extent getView() {
554
		return viewRequest;
555
	}
556

  
557
	public double getWidth() {
558
		return provider.getWidth();
559
	}
560

  
561
	public double getHeight() {
562
		return provider.getHeight();
563
	}
564

  
565
	public Object readCompleteLine(int line, int band)
566
		throws InvalidSetViewException, FileNotOpenException, RasterDriverException {
567
		return null;
568
	}
569
	
570
	public File getFileLayer() throws RasterDriverException {
571
		return null;
572
	}
573

  
574
	@SuppressWarnings("deprecation")
575
	public Object readBlock(int pos, int blockHeight, double scale) 
576
	throws InvalidSetViewException, FileNotOpenException, RasterDriverException, ProcessInterruptedException {
577
		//TODO: temporal hasta que haya un generador de estad?sticas parciales para realce.
578
		//Pongo este m?todo deprecated porque el objetivo es eliminarlo de los proveedores.
579
		if(provider.getBandCount() < getBandCount()) {
580
			switch (getDataType()[0]) {
581
			case Buffer.TYPE_BYTE:
582
				byte[][][] buf1 = (byte[][][])provider.readBlock(pos, blockHeight, scale);
583
				byte[][][] b1 = new byte[buf1.length + 1][][];
584
				for (int i = 0; i < buf1.length; i++) {
585
					b1[i] = buf1[i];
586
				}
587
				b1[b1.length - 1] = new byte[buf1[0].length][buf1[0][0].length];
588
				return b1;
589
			case Buffer.TYPE_SHORT:
590
				short[][][] buf2 = (short[][][])provider.readBlock(pos, blockHeight, scale);
591
				short[][][] b2 = new short[buf2.length + 1][][];
592
				for (int i = 0; i < buf2.length; i++) {
593
					b2[i] = buf2[i];
594
				}
595
				b2[b2.length - 1] = new short[buf2[0].length][buf2[0][0].length];
596
				return b2;
597
			case Buffer.TYPE_FLOAT:
598
				float[][][] buf3 = (float[][][])provider.readBlock(pos, blockHeight, scale);
599
				float[][][] b3 = new float[buf3.length + 1][][];
600
				for (int i = 0; i < buf3.length; i++) {
601
					b3[i] = buf3[i];
602
				}
603
				b3[b3.length - 1] = new float[buf3[0].length][buf3[0][0].length];
604
				return b3;
605
			case Buffer.TYPE_DOUBLE: 
606
				double[][][] buf4 = (double[][][])provider.readBlock(pos, blockHeight, scale);
607
				double[][][] b4 = new double[buf4.length + 1][][];
608
				for (int i = 0; i < buf4.length; i++) {
609
					b4[i] = buf4[i];
610
				}
611
				b4[b4.length - 1] = new double[buf4[0].length][buf4[0][0].length];
612
				return b4;
613
			case Buffer.TYPE_INT:
614
				int[][][] buf5 = (int[][][])provider.readBlock(pos, blockHeight, scale);
615
				int[][][] b5 = new int[buf5.length + 1][][];
616
				for (int i = 0; i < buf5.length; i++) {
617
					b5[i] = buf5[i];
618
				}
619
				b5[b5.length - 1] = new int[buf5[0].length][buf5[0][0].length];
620
				return b5;
621
			}
622
			
623
		}
624
		return provider.readBlock(pos, blockHeight, scale);
625
	}
626

  
627
	public Object getData(int x, int y, int band)
628
		throws InvalidSetViewException, FileNotOpenException, RasterDriverException {
629
		return provider.getData(x, y, band);
630
	}
631
	
632
	/**
633
	 * Assigns the list of bands RGB and read a window of data
634
	 * @param rasterBuf
635
	 * @param bandList
636
	 * @param lastFile
637
	 * @param ulx
638
	 * @param uly
639
	 * @param lrx
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff