Revision 10578

View differences:

org.gvsig.raster.tilecache/tags/org.gvsig.raster.tilecache-2.2.87/org.gvsig.raster.tilecache.io/package.info
1
#
2
#Thu Mar 07 10:25:56 CET 2013
3
owner=gvSIG Association
4
code=org.gvsig.raster.tilecache.io
5
java-version=j1_5
6
official=true
7
type=plugin
8
version=2.0.0-0
9
state=devel
10
operating-system=all
11
dependencies=
12
sources-url=https\://devel.gvsig.org/redmine/projects/gvsig-raster/repository/show/org.gvsig.raster.tilecache/tags/2.0.0/org.gvsig.raster.tilecache.io
13
web-url=http\://www.gvsig.com
14
architecture=all
15
model-version=1.0.1
16
categories=
17
description=cache service for gvSIG
18
buildNumber=0
19
gvSIG-version=2.0.0
20
name=org.gvsig.raster.tilecache.io
org.gvsig.raster.tilecache/tags/org.gvsig.raster.tilecache-2.2.87/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.87/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.87/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.87/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.87/org.gvsig.raster.tilecache.io/src/main/java/org/gvsig/raster/tilecache/io/TileProviderFactory.java
1
/* gvSIG. Desktop Geographic Information System.
2
 *
3
 * Copyright ? 2007-2017 gvSIG Association
4
 *
5
 * This program is free software; you can redistribute it and/or
6
 * modify it under the terms of the GNU General Public License
7
 * as published by the Free Software Foundation; either version 2
8
 * of the License, or (at your option) any later version.
9
 *
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 * GNU General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU General Public License
16
 * along with this program; if not, write to the Free Software
17
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
18
 * MA  02110-1301, USA.
19
 *
20
 * For any additional information, do not hesitate to contact us
21
 * at info AT gvsig.com, or visit our website www.gvsig.com.
22
 */
23
package org.gvsig.raster.tilecache.io;
24

  
25
import org.gvsig.fmap.dal.DataParameters;
26
import org.gvsig.fmap.dal.DataStoreProvider;
27
import org.gvsig.fmap.dal.DataStoreProviderFactory;
28
import org.gvsig.fmap.dal.exception.InitializeException;
29
import org.gvsig.fmap.dal.spi.AbstractDataStoreProviderFactory;
30
import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
31
import org.gvsig.tools.dynobject.DynObject;
32

  
33

  
34
/**
35
 * @author fdiaz
36
 *
37
 */
38
public class TileProviderFactory extends AbstractDataStoreProviderFactory implements DataStoreProviderFactory {
39

  
40
    /**
41
     * @param name
42
     * @param description
43
     */
44
    protected TileProviderFactory(String name, String description) {
45
        super(name, description);
46
    }
47

  
48
    /* (non-Javadoc)
49
     * @see org.gvsig.fmap.dal.DataFactory#createParameters()
50
     */
51
    @Override
52
    public DynObject createParameters() {
53
        return new TileDataParametersImpl();
54
    }
55

  
56
    /* (non-Javadoc)
57
     * @see org.gvsig.fmap.dal.DataStoreProviderFactory#createProvider(org.gvsig.fmap.dal.DataParameters, org.gvsig.fmap.dal.spi.DataStoreProviderServices)
58
     */
59
    @Override
60
    public DataStoreProvider createProvider(DataParameters arg0, DataStoreProviderServices arg1)
61
        throws InitializeException {
62
        return new TileProvider((TileDataParametersImpl) arg0, arg1);
63
    }
64

  
65
    @Override
66
    public int isTiledSupported() {
67
        return YES;
68
    }
69

  
70
}
org.gvsig.raster.tilecache/tags/org.gvsig.raster.tilecache-2.2.87/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.87/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.apache.commons.io.FilenameUtils;
35

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

  
55
public class TileServerExplorer extends AbstractDataServerExplorer implements DataServerExplorerProvider {
56
	public static final String               NAME                     = "TileServerExplorer";
57

  
58
	public TileServerExplorer() {
59
            super(null,null);
60
	}
61

  
62
	public TileServerExplorer(
63
			TileServerExplorerParameters parameters,
64
			DataServerExplorerProviderServices services)
65
			throws InitializeException {
66
            super(parameters, services);
67
	}
68

  
69
	public void remove(DataStoreParameters parameters) throws RemoveException {
70
		throw new UnsupportedOperationException();
71
	}
72

  
73
	public DataServerExplorerParameters getParameters() {
74
		return null;
75
	}
76

  
77
	public DataServerExplorerProviderServices getServerExplorerProviderServices() {
78
		return null;
79
	}
80

  
81
	public boolean add(String provider, NewDataStoreParameters parameters,
82
			boolean overwrite) throws DataException {
83
		return false;
84
	}
85

  
86
	public boolean canAdd() {
87
		return false;
88
	}
89

  
90
	public boolean canAdd(String storeName) throws DataException {
91
		return false;
92
	}
93

  
94
	public NewDataStoreParameters getAddParameters(String storeName)
95
			throws DataException {
96
		return null;
97
	}
98

  
99
	@SuppressWarnings("unchecked")
100
	public List getDataStoreProviderNames() {
101
		return null;
102
	}
103

  
104
	public String getProviderName() {
105
		return null;
106
	}
107

  
108
	@SuppressWarnings("unchecked")
109
	public List list() throws DataException {
110
		return null;
111
	}
112

  
113
	@SuppressWarnings("unchecked")
114
	public List list(int mode) throws DataException {
115
		return null;
116
	}
117

  
118
    @Override
119
    public DataStoreParameters get(String name) throws DataException {
120
        return null;
121
    }
122

  
123
}
0 124

  
org.gvsig.raster.tilecache/tags/org.gvsig.raster.tilecache-2.2.87/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.net.URI;
13
import java.util.List;
14

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

  
83
import org.slf4j.Logger;
84
import org.slf4j.LoggerFactory;
85

  
86
/**
87
 * Provider for WMTS service
88
 *
89
 * @author Nacho Brodin (nachobrodin@gmail.com)
90
 */
91
public class TileProvider extends AbstractRasterProvider implements TiledRasterProvider {
92
	public static String                NAME                     = "Tile Store";
93
	public static String                DESCRIPTION              = "Raster Tiled Source";
94
	public static final String          METADATA_DEFINITION_NAME = "TileStore";
95
	private static final Logger         logger                   = LoggerFactory.getLogger(TileProvider.class);
96
	private RasterProvider              provider                 = null;
97
	private boolean                     open                     = false;
98
	private Extent                      viewRequest              = null;
99
	private TiledLayer                  tiledLayer               = null;
100
	private MathUtils                   math                     = RasterLocator.getManager().getMathUtils();
101
	private TileServer                  secondLevelTileServer    = null;
102

  
103
	/**
104
	 * Register in data manager
105
	 */
106
	public static void register() {
107
		DataManagerProviderServices dataman = (DataManagerProviderServices) DALLocator.getDataManager();
108
		if (dataman != null && !dataman.getStoreProviders().contains(NAME)) {
109
		    dataman.registerStoreProviderFactory(new TileProviderFactory(NAME, DESCRIPTION));
110
		}
111

  
112
		/*if(DALFileLocator.getFilesystemServerExplorerManager() != null)
113
			DALFileLocator.getFilesystemServerExplorerManager().registerProvider(
114
					NAME, DESCRIPTION,
115
					TileServerExplorer.class);*/
116

  
117
		if (!dataman.getExplorerProviders().contains(TileServerExplorer.NAME)) {
118
			dataman.registerExplorerProvider(TileServerExplorer.NAME, TileServerExplorer.class, TileServerExplorerParameters.class);
119
		}
120
		dataman.registerStoreFactory(NAME, DefaultStoreFactory.class);
121
	}
122

  
123
	/**
124
	 * Loads the specific provider to download data
125
	 * @param file
126
	 * @return
127
	 * @throws NotSupportedExtensionException
128
	 * @throws FileNotSupportedException
129
	 */
130
	@SuppressWarnings("unchecked")
131
	private RasterProvider loadProvider(TileDataParametersImpl params, DataStoreProviderServices storeServices) throws ProviderNotRegisteredException, InitializeException {
132
		Object obj = params.getDataParameters();
133
		DataManagerProviderServices dataManager = (DataManagerProviderServices)DALLocator.getDataManager();
134
		DataStoreProvider prov = null;
135

  
136
		if(obj != null && obj instanceof DataStoreParameters) //Remote
137
			prov = dataManager.createProvider(storeServices, (DataStoreParameters)obj);
138
		else { //File
139
			if(params.getFile() != null) {
140
				//We have to locate a provider's name which manages the selected file
141
				//A FilesystemServerExplorer will give a getProviderNames service
142
				FilesystemServerExplorerParameters paramsExplorer = (FilesystemServerExplorerParameters)dataManager.createServerExplorerParameters(FilesystemServerExplorer.NAME);
143
				FilesystemServerExplorer serverExplorer = null;
144
				try {
145
					paramsExplorer.setRoot(File.separator);
146
					serverExplorer = (FilesystemServerExplorer)dataManager.openServerExplorer(FilesystemServerExplorer.NAME, paramsExplorer);
147
				} catch (ValidateDataParametersException e) {
148
					throw new InitializeException(e);
149
				}
150

  
151
				//Gets the list of provider's name to manage the file
152
				List<String> provName = serverExplorer.getProviderNameList(params.getFile());
153
				if(provName.size() > 0) {
154
					for (int i = 0; i < provName.size(); i++) {
155
						//Gets the first provider what is not a TileProvider
156
						if(provName.get(i).compareTo(NAME) != 0) {
157
							DataStoreParameters newparams = dataManager.createStoreParameters(provName.get(i));
158
							((FilesystemStoreParameters)newparams).setFile(params.getFile());
159
							prov = dataManager.createProvider(storeServices, newparams);
160
						}
161
					}
162
				}
163
			}
164
		}
165

  
166
		if(prov != null && prov instanceof RasterProvider) {
167
			if(((RasterProvider)prov).isRotated())
168
				throw new InitializeException("Rotation not supported tiling files", new Throwable());
169

  
170
			return (RasterProvider)prov;
171
		}
172

  
173
		return null;
174
	}
175

  
176
	/**
177
	 * @return the internal provider used to feed the TileProvider
178
	 */
179
	public RasterProvider getInternalProvider() {
180
		return provider;
181
	}
182

  
183
	public Image getImageLegend() {
184
		return provider.getImageLegend();
185
	}
186

  
187
	public ColorInterpretation getColorInterpretation() {
188
		return provider.getColorInterpretation();
189
	}
190

  
191
	public String getFileSuffix() {
192
		try {
193
            return provider.getFileSuffix();
194
		} catch(Throwable e) {
195
			return "tif";
196
		}
197
	}
198

  
199
	public File getRMFFile() {
200
		TileCacheManager  manager = TileCacheLocator.getManager();
201
		TileCache tileCache = manager.getTileCache(RasterLibrary.pathTileCache);
202

  
203
		String metadataDir = tiledLayer.getBaseLayerDirectory().substring(0, tiledLayer.getBaseLayerDirectory().lastIndexOf(File.separator) + 1) +
204
				  			tileCache.getConfigurationDirectory();
205

  
206
		File metadaDirFile = new File(metadataDir);
207
		if(!metadaDirFile.exists())
208
			metadaDirFile.mkdir();
209

  
210
		String path = metadataDir + File.separator + tiledLayer.getID() + ".rmf";
211

  
212
		try {
213
            if (!new File(path).exists() && provider != null && provider.getRMFFile() != null
214
                && provider.getRMFFile().exists()) {
215
                RasterLocator.getManager().getFileUtils().copyFile(provider.getRMFFile().getAbsolutePath(), path);
216
            }
217

  
218
			if(provider != null && provider.getColorTable() != null) {
219
				ColorTable colorTable = provider.getColorTable();
220
				RasterLocator.getManager().getProviderServices().saveObjectToRmfFile(path, ColorTable.class, colorTable);
221
			}
222
		} catch (LocatorException e) {
223
			logger.info("No se ha podido copiar el fichero RMF a la capa tileada", e);
224
		} catch (FileNotFoundException e) {
225
			logger.info("No se ha podido copiar el fichero RMF a la capa tileada", e);
226
		} catch (IOException e) {
227
			logger.info("No se ha podido copiar el fichero RMF a la capa tileada", e);
228
		} catch (RmfSerializerException e) {
229
			logger.info("No se ha podido copiar la tabla de color a la capa tileada", e);
230
		}
231
		return new File(path);
232
	}
233

  
234
	/**
235
	 * @throws NotSupportedExtensionException
236
	 */
237
	public TileProvider() throws NotSupportedExtensionException {
238
		super();
239
	}
240

  
241
	/**
242
	 * @param c
243
	 */
244
	public void registerTileProviderFormats(Class<RasterProvider> c) {
245

  
246
	}
247

  
248
	/**
249
	 * Assigns the provider associated to this tile server
250
	 * @param prov
251
	 * @throws InitializeException
252
	 * @throws NotSupportedExtensionException
253
	 */
254
	public void setProvider(RasterProvider prov) throws InitializeException  {
255
		this.provider = prov;
256
		init(getDataStoreParameters(), getStoreServices());
257
	}
258

  
259
	/**
260
	 * @param params
261
	 * @param storeServices
262
	 * @throws InitializeException
263
	 */
264
	public TileProvider(TileDataParametersImpl params,
265
			DataStoreProviderServices storeServices) throws InitializeException {
266
		super(params, storeServices, ToolsLocator.getDynObjectManager()
267
				.createDynObject(
268
						MetadataLocator.getMetadataManager().getDefinition(
269
								DataStore.METADATA_DEFINITION_NAME)));
270
		if(!params.isSecondLevelCache()) {
271
			try {
272
				provider = loadProvider(params, storeServices);
273
			} catch (ProviderNotRegisteredException e) {
274
				throw new InitializeException("Provider not registered", e);
275
			}
276
			init(params, storeServices);
277
			if(provider.getFileSizeByProvider() != null && provider.getFileSizeByProvider().length > 0)
278
				fileSize = provider.getFileSizeByProvider()[0];
279
		}
280
	}
281

  
282
	/**
283
	 * Creates the second level cache if the client has set a <code>TileServer</code> and the
284
	 * <code>CacheStruct</code> is different that the old one.
285
	 * <UL>
286
	 * <LI>First level cache without TileServer from the client: do nothing</LI>
287
	 * <LI>First level cache with TileServer from the client and the structure is
288
	 * different to the old one: Builds a second level TileProvider</LI>
289
	 * <LI>First level cache with TileServer from the client and the structure is
290
	 * equal to the old one: do nothing</LI>
291
	 * <LI>Second level cache: sets the TileServer</LI>
292
	 * </UL>
293
	 * @param params
294
	 * @param storeServices
295
	 * @throws NotSupportedExtensionException
296
	 */
297
	/*private void createsSecondLevelCache(TileDataParametersImpl params) throws NotSupportedExtensionException {
298
		//Se obtiene el TileServer que haya pasado el cliente en los par?metros si ha pasado alguno.
299
		TileServer tileServer = params.getTileServer();
300
		//Se obtiene el CacheStruct y se compara con el del provider
301
		CacheStruct cacheStruct = null;
302
		if(tileServer != null)
303
			cacheStruct = tileServer.getStruct();
304

  
305
		if(params.isSecondLevelCache()) { //Cache de segundo nivel
306
			this.secondLevelTileServer = tileServer;
307
		} else if(cacheStruct != null && !provider.getTileServer().getStruct().compare(cacheStruct)) { //Cache de primer nivel
308
			//Si son distintos habr? que crear una cach? de segundo nivel por lo que creamos un nuevo TileProvider
309
			//que tenga como par?metro el provider viejo
310
			TileDataParametersImpl par = new TileDataParametersImpl();
311
			par.setDataParameters(provider.getDataParameters());
312
			par.setTileServer(tileServer);
313
			par.setSecondLevelCache(true);
314
			TileProvider newProvider = new TileProvider(par, null);
315
			newProvider.setProvider(this.provider);
316
			//Al TileProvider actual se le asigna como provider el TileProvider creado
317
			this.provider = newProvider;
318
		}
319
	}*/
320

  
321
	/**
322
	 * Crea las referencias al fichero y carga
323
	 * las estructuras con la informaci?n y los metadatos.
324
	 * @param params
325
	 * @param storeServices
326
	 * @throws InitializeException
327
	 * @throws NotSupportedExtensionException
328
	 */
329
	public void init (DataStoreParameters params,
330
			DataStoreProviderServices storeServices) throws InitializeException  {
331
		setParam(storeServices, params);
332
		open = true;
333
		calculateDataType();
334
		calculateBandCount();
335
		calculateColorInterpretation();
336
		calculateTransparency();
337
		setColorTable(provider.getColorTable());
338
		noData = provider.getNoDataValue();
339
		uri = provider.getURIOfFirstProvider();
340
		proj = provider.getProjection();
341
		ownTransformation = provider.getAffineTransform();
342
		externalTransformation = (AffineTransform)ownTransformation.clone();
343

  
344
		createTiledLayer();
345

  
346
		//Force to deletes the layer if the flag is to true
347
		if(tiledLayer != null) {
348
			if(param instanceof TileDataParameters) {
349
				if(((TileDataParameters)param).isDeletingCache()) {
350
					TileCacheManager  manager = TileCacheLocator.getManager();
351
					TileCache tileCache = manager.getTileCache(RasterLibrary.pathTileCache);
352
					tileCache.removeLayer(tiledLayer);
353
					((TileDataParameters)param).deleteCache(false);
354
				}
355
			}
356
		}
357

  
358
		if(provider instanceof RemoteRasterProvider)
359
			stats = new RemoteDataStoreStatistics(provider);
360
	}
361

  
362
	/**
363
	 * Calculates the data type of this provider
364
	 */
365
	public void calculateDataType() {
366
		int[] datatype = null;
367
		if(provider.getDataType()[0] == Buffer.TYPE_BYTE && provider.getBandCount() == 3)
368
			datatype = new int[provider.getBandCount() + 1];
369
		else
370
			datatype = new int[provider.getBandCount()];
371
		for (int i = 0; i < provider.getDataType().length; i++) {
372
			datatype[i] = provider.getDataType()[i];
373
		}
374
		if(provider.getDataType()[0] == Buffer.TYPE_BYTE && provider.getBandCount() == 3)
375
			datatype[datatype.length - 1] = Buffer.TYPE_BYTE;
376
		setDataType(datatype);
377
	}
378

  
379
	/**
380
	 * Calculates the number of bands
381
	 */
382
	public void calculateBandCount() {
383
		bandCount = provider.getBandCount();
384
		if(provider.getDataType()[0] == Buffer.TYPE_BYTE && provider.getBandCount() == 3)
385
			bandCount ++;
386
	}
387

  
388
	/**
389
	 * Calculates the color interpretation
390
	 */
391
	public void calculateColorInterpretation() {
392
		ColorInterpretation ci = provider.getColorInterpretation();
393
		if(ci != null) {
394
			if(ci.isRGB() || ci.isBGR()) {
395
				ci = DataStoreColorInterpretation.createRGBAInterpretation();
396
			} else
397
				ci = ci.cloneColorInterpretation();
398
		} else {
399
			if(provider.getDataType()[0] == Buffer.TYPE_BYTE) {
400
				if(provider.getBandCount() == 3)
401
					ci = DataStoreColorInterpretation.createRGBAInterpretation();
402
				else
403
					ci = DataStoreColorInterpretation.createDefaultInterpretation(getBandCount());
404
			} else {
405
				if(getBandCount() == 1)
406
					ci = DataStoreColorInterpretation.createGrayInterpretation();
407
				else
408
					ci = DataStoreColorInterpretation.createDefaultInterpretation(getBandCount());
409
			}
410
		}
411

  
412
		super.setColorInterpretation(ci);
413
	}
414

  
415

  
416
	/**
417
     * Calculates the transparency
418
	 */
419
	public void calculateTransparency() {
420
		if(provider.getTransparency() != null)
421
			transparency = provider.getTransparency().cloneTransparency();
422
		else
423
			transparency = new DataStoreTransparency(getColorInterpretation());
424
		if(getColorInterpretation() != null) {
425
			transparency.setColorInterpretation(getColorInterpretation());
426
			transparency.setTransparencyBand(getColorInterpretation().getAlphaBand());
427
			transparency.activeTransparency();
428
		}
429
	}
430

  
431
	/**
432
	 * Creates a new tiled layer if this hasn't been created yet or the ID has changed.
433
	 * An ID could changed because the file type has changed when the user uses WMTS properties.
434
	 */
435
	private void createTiledLayer() {
436
		TileCacheManager  manager = TileCacheLocator.getManager();
437
		TileCache tileCache = manager.getTileCache(RasterLibrary.pathTileCache);
438
		TiledLayer newLayer = tileCache.createLayer(provider.getTileServer(), TileCacheLibrary.DEFAULT_STRUCTURE);
439
		if(tiledLayer == null || newLayer.getID().compareTo(tiledLayer.getID()) != 0)
440
			tiledLayer = newLayer;
441
	}
442

  
443
	public void reload() {
444
		try {
445
			loadFromRmf(getRmfBlocksManager());
446
			calculateColorInterpretation();
447
			calculateTransparency();
448
		} catch (ParsingException e) {
449
			logger.debug("No se ha podido leer el RMF", e);
450
		}
451
	}
452

  
453
	public int getZoomLevels() {
454
		if(provider.getTileServer() != null)
455
			return provider.getTileServer().getStruct().getNumberOfLevels();
456
		return 0;
457
	}
458

  
459
	public int getNearestLevel(double pixelSize) {
460
		double[] pixelSizes = getPixelSizeByLevel();
461
		for (int i = 0; i < pixelSizes.length - 1; i++) {
462
			if(pixelSize <= pixelSizes[i] && pixelSize > pixelSizes[i + 1]) {
463
				return i;
464
			}
465
		}
466
		if(pixelSize < pixelSizes[getZoomLevels() - 1])
467
			return getZoomLevels() - 1;
468
		return 0;
469
	}
470

  
471
	/**
472
	 * @return a list of pixel sizes by level
473
	 */
474
	public double[] getPixelSizeByLevel() {
475
		double[] list = new double[getZoomLevels()];
476
		CacheStruct struct = provider.getTileServer().getStruct();
477
		for (int i = 0; i < struct.getNumberOfLevels(); i++) {
478
			list[i] = math.adjustDouble(struct.getPixelSizeByLevel(i));
479
		}
480
		return list;
481
	}
482

  
483
	public Extent getCoordsInTheNearestLevel(Extent extent, int w, int h) {
484
		double[] pixelSizes = getPixelSizeByLevel();
485
		double currentPixelSize = extent.width() / (double)w;
486

  
487
		int level = 0;
488
		for (int i = 0; i < (pixelSizes.length - 1); i++) {
489
			if(currentPixelSize < pixelSizes[i] && currentPixelSize >= pixelSizes[i + 1]) {
490
				level = i + 1;
491
				break;
492
			}
493
		}
494

  
495
		return getZoomLevelCoordinates(level, extent, w, h);
496
	}
497

  
498
	public Extent getCoordsInLevel(Point2D viewCenter, int level, int w, int h) {
499
		level = adjustLevel(level);
500
		double pixelSize = provider.getTileServer().getStruct().getPixelSizeByLevel(level);
501

  
502
		/*Rectangle2D worldExtent = provider.getTileServer().getStruct().getWorldExtent();
503
		int nTiles = provider.getTileServer().getStruct().getLayerWidthOfTileMatrixByLevel(level);
504
		int[] nPixelsByTile = provider.getTileServer().getStruct().getTileSizeByLevel(level);
505

  
506
		double sizeWCByTile = worldExtent.getWidth() / (double)nTiles;
507
		double pixelSize = sizeWCByTile / (double)nPixelsByTile[0];*/
508

  
509
		double ulx = viewCenter.getX() - ((w / 2) * pixelSize);
510
		double uly = viewCenter.getY() - ((h / 2) * pixelSize);
511
		double lrx = ulx + (w * pixelSize);
512
		double lry = uly + (h * pixelSize);
513
		return new ExtentImpl(ulx, uly, lrx, lry);
514
	}
515

  
516
	/**
517
	 * Adjust de level to the range
518
	 * @param level
519
	 * @return
520
	 */
521
	private int adjustLevel(int level) {
522
		if(level < 0)
523
			level = 0;
524
		if(level > getZoomLevels())
525
			level = getZoomLevels();
526
		return level;
527
	}
528

  
529
	public AffineTransform getAffineTransform() {
530
		return provider.getAffineTransform();
531
	}
532

  
533
	/**
534
	 * Gets the bounding box in world coordinates. If the layer has grid subsets (TileMatrixLimits) then
535
	 * this will have a only extent but if the layer doesn't have grid subsets then this will have a different
536
	 * extent in each level resolution. In this case we need to know the extent for each level.
537
	 * @return Extent
538
	 */
539
	public Extent getExtent() {
540
		return provider.getExtent();
541
	}
542

  
543
	public RasterProvider load() {
544
		return this;
545
	}
546

  
547
	public boolean isOpen() {
548
		return open;
549
	}
550

  
551
	public boolean isTiled() {
552
		return true;
553
	}
554

  
555
	public void close() {
556
		open = false;
557
		if(provider != null)
558
			provider.close();
559
	}
560

  
561
	public URI translateURI(URI uri) {
562
		return uri;
563
	}
564

  
565
	public void setView(Extent e) {
566
		viewRequest = e;
567
	}
568

  
569
	public Extent getView() {
570
		return viewRequest;
571
	}
572

  
573
	public double getWidth() {
574
		return provider.getWidth();
575
	}
576

  
577
	public double getHeight() {
578
		return provider.getHeight();
579
	}
580

  
581
	/**
582
	 * @param line
583
	 * @param band
584
	 * @return a complete line
585
	 * @throws InvalidSetViewException
586
	 * @throws FileNotOpenException
587
	 * @throws RasterDriverException
588
	 */
589
	public Object readCompleteLine(int line, int band)
590
		throws InvalidSetViewException, FileNotOpenException, RasterDriverException {
591
		return null;
592
	}
593

  
594
	/**
595
	 * @return the file
596
	 * @throws RasterDriverException
597
	 */
598
	public File getFileLayer() throws RasterDriverException {
599
		return null;
600
	}
601

  
602
	@SuppressWarnings("deprecation")
603
	public Object readBlock(int pos, int blockHeight, double scale)
604
	throws InvalidSetViewException, FileNotOpenException, RasterDriverException, ProcessInterruptedException {
605
		//TODO: temporal hasta que haya un generador de estad?sticas parciales para realce.
606
		//Pongo este m?todo deprecated porque el objetivo es eliminarlo de los proveedores.
607
		if(provider.getBandCount() < getBandCount()) {
608
			switch (getDataType()[0]) {
609
			case Buffer.TYPE_BYTE:
610
				byte[][][] buf1 = (byte[][][])provider.readBlock(pos, blockHeight, scale);
611
				byte[][][] b1 = new byte[buf1.length + 1][][];
612
				for (int i = 0; i < buf1.length; i++) {
613
					b1[i] = buf1[i];
614
				}
615
				b1[b1.length - 1] = new byte[buf1[0].length][buf1[0][0].length];
616
				return b1;
617
			case Buffer.TYPE_SHORT:
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff