Revision 210

View differences:

org.gvsig.raster.app/trunk/org.gvsig.raster.app/org.gvsig.raster.app.wmsclient/src/main/java/org/gvsig/raster/app/extension/wmsclient/layer/FLyrWMS.java
412 412
					throw new ReadException(e.getMessage(), e);
413 413
				}
414 414
			}
415

  
416 415
		}
417 416
		disableStopped();
418 417
	}
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.fmap/src/main/java/org/gvsig/raster/fmap/layers/DefaultFLyrRaster.java
145 145
	public static final String      PERSISTENT_NAME        = "FLyrRasterSE_Persistent";
146 146
    public static final String      PERSISTENT_DESCRIPTION = "FLyrRasterSE Persistent";
147 147
    private RasterManager           rManager               = RasterLocator.getManager();
148
	private boolean                 mustTileDraw        = false;
149
	private boolean                 mustTilePrint       = true;
150
	private int                     maxTileDrawWidth    = 200;
151
	private int                     maxTileDrawHeight   = 200;
152
	private int                     maxTilePrintWidth   = 1500;
153
	private int                     maxTilePrintHeight  = 1500;
154
	protected IStatusRaster         status              = null;
155
	private boolean                 firstLoad           = false;
156
	private boolean                 removeRasterFlag    = true;
157
	protected RasterDataStore       dataStore           = null;
158
	protected Render                render              = null;
159
	private int                     posX                = 0;
160
	private int                     posY                = 0;
161
	private double                  posXWC              = 0;
162
	private int                     posYWC              = 0;
163
	private int                     r                   = 0;
164
	private int                     g                   = 0;
165
	private int                     b                   = 0;
166
	private LayerChangeSupport      layerChangeSupport  = new LayerChangeSupport();
167
	private FLyrState               state               = new FLyrState();
168
	protected ILegend               lastLegend          = null;
169
	protected ColorTable            loadedFromProject   = null;
170
	private ArrayList<ROI>          rois                = null;
171
	private RasterDrawStrategy      strategy            = null;
172
	static private IConfiguration   configuration       = new DefaultLayerConfiguration();
148
	private boolean                 mustTileDraw           = false;
149
	private boolean                 mustTilePrint          = true;
150
	private int                     maxTileDrawWidth       = 200;
151
	private int                     maxTileDrawHeight      = 200;
152
	private int                     maxTilePrintWidth      = 1500;
153
	private int                     maxTilePrintHeight     = 1500;
154
	protected IStatusRaster         status                 = null;
155
	private boolean                 firstLoad              = false;
156
	private boolean                 removeRasterFlag       = true;
157
	protected RasterDataStore       dataStore              = null;
158
	protected Render                render                 = null;
159
	private int                     posX                   = 0;
160
	private int                     posY                   = 0;
161
	private double                  posXWC                 = 0;
162
	private int                     posYWC                 = 0;
163
	private int                     r                      = 0;
164
	private int                     g                      = 0;
165
	private int                     b                      = 0;
166
	private LayerChangeSupport      layerChangeSupport     = new LayerChangeSupport();
167
	private FLyrState               state                  = new FLyrState();
168
	protected ILegend               lastLegend             = null;
169
	protected ColorTable            loadedFromProject      = null;
170
	private ArrayList<ROI>          rois                   = null;
171
	private RasterDrawStrategy      strategy               = null;
172
	static private IConfiguration   configuration          = new DefaultLayerConfiguration();
173 173

  
174
	private BufferedImage           image               = null;
175
	private static GeometryManager  geomManager   	    = GeometryLocator.getGeometryManager();
176
	private static final Logger     logger              = LoggerFactory.getLogger(DefaultFLyrRaster.class);
177
	protected FileUtils             fileUtil            = RasterLocator.getManager().getFileUtils();
178
	protected RasterUtils           rasterUtil          = RasterLocator.getManager().getRasterUtils();
179
	protected CRSUtils              crsUtil             = RasterLocator.getManager().getCRSUtils();
180
	protected MathUtils             mathUtil            = RasterLocator.getManager().getMathUtils();
174
	private BufferedImage           image                  = null;
175
	private static GeometryManager  geomManager   	       = GeometryLocator.getGeometryManager();
176
	private static final Logger     logger                 = LoggerFactory.getLogger(DefaultFLyrRaster.class);
177
	protected FileUtils             fileUtil               = RasterLocator.getManager().getFileUtils();
178
	protected RasterUtils           rasterUtil             = RasterLocator.getManager().getRasterUtils();
179
	protected CRSUtils              crsUtil                = RasterLocator.getManager().getCRSUtils();
180
	protected MathUtils             mathUtil               = RasterLocator.getManager().getMathUtils();
181 181
	
182 182
	/**
183 183
	 * Tipo de valor no data asociado a la capa.
184 184
	 * Sirve para diferenciar los estados seleccionados por el usuario. Siendo
185 185
	 * estos 'Sin Valor NoData', 'NoData de Capa'(Por defecto) y 'Personalizado'
186 186
	 */
187
	private int                     noDataType          = RasterLibrary.NODATATYPE_LAYER;
187
	private int                     noDataType             = RasterLibrary.NODATATYPE_LAYER;
188 188

  
189 189
	/**
190 190
	 * Lista de transformaciones afines que son aplicadas. Esta lista es
191 191
	 * simplemente un historico que no se utiliza. Es posible utilizarlo para
192 192
	 * recuperar transformaciones anteriores.
193 193
	 */
194
	private Historical              affineTransformList = null;
195
	protected String                readingData         = null;
194
	private Historical              affineTransformList    = null;
195
	protected String                readingData            = null;
196 196

  
197 197
	public DefaultFLyrRaster() {
198 198
		affineTransformList = rManager.createHistoricalService();
......
496 496
			params.setParam("remove", new Boolean(false));
497 497
			params.setParam("renderBands", getRender().getRenderBands());
498 498
			params.setParam("stretchs", null);//coge el LinearStretchParams por defecto
499
			params.setParam("rgb", new Boolean(true));
499 500
			enhancementManager.addFilter(params);
500 501
	}
501 502

  
......
627 628
					}
628 629

  
629 630
			}
631
			
630 632
			//callLegendChanged(null);
631 633
		} finally {
632 634
			disableStopped();
......
647 649
		Dimension imgSz = vp.getImageSize();
648 650
		ViewPortData vp2 = rManager.createViewPortData(vp.getProjection(), e, imgSz );
649 651
		vp2.setMat(vp.getAffineTransform());
650
		try {
651
			getRender().draw(g, vp2);
652
		} catch (ProcessInterruptedException e1) {
653
			new InterruptedException();
654
		}
652
		
653
		getRender().drawThread(g, vp2);
655 654
	}
656 655

  
657 656
	/**
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/store/DefaultMultiRasterStore.java
23 23

  
24 24
import java.awt.geom.AffineTransform;
25 25
import java.awt.geom.Point2D;
26
import java.awt.geom.Rectangle2D;
26 27
import java.io.File;
27 28
import java.util.ArrayList;
28 29

  
......
45 46
import org.gvsig.fmap.dal.coverage.exception.ProcessInterruptedException;
46 47
import org.gvsig.fmap.dal.coverage.exception.RasterDriverException;
47 48
import org.gvsig.fmap.dal.coverage.exception.RmfSerializerException;
49
import org.gvsig.fmap.dal.coverage.grid.render.TileListener;
48 50
import org.gvsig.fmap.dal.coverage.store.MultiRasterStore;
49 51
import org.gvsig.fmap.dal.coverage.store.RasterDataStore;
50 52
import org.gvsig.fmap.dal.coverage.store.props.ColorInterpretation;
......
60 62
import org.gvsig.raster.impl.buffer.cache.RasterReadOnlyBuffer;
61 63
import org.gvsig.raster.impl.datastruct.BandListImpl;
62 64
import org.gvsig.raster.impl.datastruct.DatasetBandImpl;
65
import org.gvsig.raster.impl.datastruct.ExtentImpl;
63 66
import org.gvsig.raster.impl.provider.DefaultRasterProvider;
64 67
import org.gvsig.raster.impl.provider.RasterProvider;
65 68
import org.gvsig.raster.impl.store.properties.DataStoreColorInterpretation;
......
581 584

  
582 585
		return raster;
583 586
	}
587
	
588
	/*
589
	 * (non-Javadoc)
590
	 * @see org.gvsig.raster.impl.store.QueryableRaster#getWindowRaster(double, double, double, double, int, int, org.gvsig.fmap.dal.coverage.grid.render.TileListener, int)
591
	 */
592
	public void getWindowRaster(double ulx, double uly, double lrx, double lry, int bufWidth, int bufHeight, TileListener listener, int frameInPx)
593
		throws InvalidSetViewException, ProcessInterruptedException, RasterDriverException {
594
		double[] step = null;
595
		Buffer buf = null;
596
		
597
		//Esta secci?n es para que no supersamplee el driver y pueda hacerse en el cliente
598
		if(!currentQuery.isSupersamplingLoadingBuffer()) {
599
			//nWidth = ((adjustedDataExtent.width() * mDataset.getDataset(0).getWidth()) / mDataset.getExtentForRequest().width());
600
			//nHeight = ((adjustedDataExtent.height() * mDataset.getDataset(0).getHeight()) / mDataset.getExtentForRequest().height());
601
			Point2D p1 = worldToRaster(new Point2D.Double(ulx, uly));
602
			Point2D p2 = worldToRaster(new Point2D.Double(lrx, lry));
603
			nWidth = Math.abs(p1.getX() - p2.getX());
604
			nHeight = Math.abs(p1.getY() - p2.getY());
584 605

  
606
			if(bufWidth > Math.ceil(nWidth) && bufHeight > Math.ceil(nHeight)) {
607
				step = calcSteps(ulx, uly, lrx, lry, nWidth, nHeight, bufWidth, bufHeight);
608
				buf = getWindowRaster(ulx, uly, lrx, lry);
609
			}
610
		} 
611
		
612
		if(buf == null)
613
			buf = getWindowRaster(ulx, uly, lrx, lry, bufWidth, bufHeight, true);
614
		
615
		buf.setDataExtent(new Rectangle2D.Double(ulx, uly, Math.abs(ulx - lrx), Math.abs(uly - lry)));
616
		listener.nextBuffer(buf, new ExtentImpl(ulx, uly, lrx, lry), this.getAffineTransform(), step);
617
		listener.endReading();
618
	}
619

  
585 620
	/*
586 621
	 * (non-Javadoc)
587 622
	 * @see org.gvsig.raster.impl.store.QueryableRaster#getWindowRaster(double, double, double, double, int, int, boolean)
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/store/DefaultRemoteRasterStore.java
22 22
package org.gvsig.raster.impl.store;
23 23

  
24 24
import java.awt.geom.Point2D;
25
import java.awt.geom.Rectangle2D;
25 26

  
26 27
import org.gvsig.fmap.dal.DALLocator;
27 28
import org.gvsig.fmap.dal.coverage.dataset.Buffer;
......
33 34
import org.gvsig.fmap.dal.coverage.exception.OperationNotSupportedException;
34 35
import org.gvsig.fmap.dal.coverage.exception.ProcessInterruptedException;
35 36
import org.gvsig.fmap.dal.coverage.exception.RasterDriverException;
37
import org.gvsig.fmap.dal.coverage.grid.render.TileListener;
36 38
import org.gvsig.fmap.dal.coverage.store.RasterDataStore;
37 39
import org.gvsig.fmap.dal.coverage.store.parameter.RemoteStoreParameters;
38 40
import org.gvsig.fmap.dal.coverage.store.props.ColorTable;
......
44 46
import org.gvsig.fmap.dal.spi.DataManagerProviderServices;
45 47
import org.gvsig.raster.impl.DefaultRasterManager;
46 48
import org.gvsig.raster.impl.datastruct.BandListImpl;
49
import org.gvsig.raster.impl.datastruct.ExtentImpl;
47 50
import org.gvsig.raster.impl.provider.DefaultRasterProvider;
48 51
import org.gvsig.raster.impl.provider.RasterProvider;
49 52
import org.gvsig.raster.impl.provider.RemoteRasterProvider;
......
325 328
		Buffer buffer =  DefaultRasterManager.getInstance().createMemoryBuffer(getProvider(0).getDataType()[0], width, height, getProvider(0).getBandCount(), true);
326 329
		return ((DefaultRasterProvider)providers.get(0)).getWindowRaster(wc1.getX(), wc1.getY(), Math.abs(wc2.getX() - wc1.getX()), Math.abs(wc2.getY() - wc1.getY()), bandList, buffer, adjustToExtent);
327 330
	}
331
	
332
	/*
333
	 * (non-Javadoc)
334
	 * @see org.gvsig.raster.impl.store.QueryableRaster#getWindowRaster(double, double, double, double, int, int, org.gvsig.fmap.dal.coverage.grid.render.TileListener, int)
335
	 */
336
	public void getWindowRaster(double ulx, double uly, double lrx, double lry, int bufWidth, int bufHeight, TileListener listener, int frameInPx)
337
		throws InvalidSetViewException, ProcessInterruptedException, RasterDriverException {
338
		Buffer buf = getWindowRaster(ulx, uly, lrx, lry, bufWidth, bufHeight, true);
339
		buf.setDataExtent(new Rectangle2D.Double(ulx, uly, Math.abs(ulx - lrx), Math.abs(uly - lry)));
340
		listener.nextBuffer(buf, new ExtentImpl(ulx, uly, lrx, lry), this.getAffineTransform(), null);
341
		listener.endReading();
342
	}
328 343

  
329 344
	/*
330 345
	 * (non-Javadoc)
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/store/DefaultTRasterStore.java
38 38
import org.gvsig.fmap.dal.coverage.exception.RasterDriverException;
39 39
import org.gvsig.fmap.dal.coverage.exception.RmfSerializerException;
40 40
import org.gvsig.fmap.dal.coverage.exception.TimeException;
41
import org.gvsig.fmap.dal.coverage.grid.render.TileListener;
41 42
import org.gvsig.fmap.dal.coverage.store.RasterDataStore;
42 43
import org.gvsig.fmap.dal.coverage.store.TRasterStore;
43 44
import org.gvsig.fmap.dal.coverage.store.props.ColorInterpretation;
......
382 383
		throws InvalidSetViewException, RasterDriverException, ProcessInterruptedException {
383 384
		return ((QueryableRaster)list.get(selectedStore)).getWindowRaster(ulx, uly, w, h, adjustToExtent);
384 385
	}
386
	
387
	/*
388
	 * (non-Javadoc)
389
	 * @see org.gvsig.raster.impl.store.QueryableRaster#getWindowRaster(double, double, double, double, int, int, org.gvsig.fmap.dal.coverage.grid.render.TileListener, int)
390
	 */
391
	public void getWindowRaster(double ulx, double uly, double lrx, double lry, int bufWidth, int bufHeight, TileListener listener, int frameInPx)
392
		throws InvalidSetViewException, ProcessInterruptedException, RasterDriverException {
393
		((QueryableRaster)list.get(selectedStore)).getWindowRaster(ulx, uly, lrx, lry, bufWidth, bufHeight, listener, frameInPx);
394
	}
385 395

  
386 396
	/*
387 397
	 * (non-Javadoc)
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/store/QueryableRaster.java
31 31
import org.gvsig.fmap.dal.coverage.exception.InvalidSetViewException;
32 32
import org.gvsig.fmap.dal.coverage.exception.ProcessInterruptedException;
33 33
import org.gvsig.fmap.dal.coverage.exception.RasterDriverException;
34
import org.gvsig.fmap.dal.coverage.grid.render.TileListener;
34 35
import org.gvsig.fmap.dal.coverage.store.RasterDataStore;
35 36
import org.gvsig.fmap.dal.coverage.store.props.ColorTable;
36 37
import org.gvsig.raster.impl.provider.RasterProvider;
......
185 186
	
186 187
	/**
187 188
	 * Obtiene una ventana de datos de la imagen a partir de coordenadas reales. 
189
	 * Aplica supersampleo o subsampleo en funci?n del tama?o del buffer. Esta operaci?n la gestiona
190
	 * el driver.
191
	 * @param minX Valor m?nimo de la X en coordenadas reales
192
	 * @param minY Valor m?nimo de la Y en coordenadas reales
193
	 * @param maxX Valor m?ximo de la X en coordenadas reales
194
	 * @param maxY Valor m?ximo de la Y en coordenadas reales
195
	 * @param bufWidth ancho del buffer lde datos
196
	 * @param bufHeight alto del buffer de datos
197
	 * @param listener 
198
	 * @param frameInPx
199
	 * @return Buffer de datos
200
	 */
201
	public void getWindowRaster(double ulx, double uly, double lrx, double lry, int bufWidth, int bufHeight, TileListener listener, int frameInPx)
202
		throws InvalidSetViewException, ProcessInterruptedException, RasterDriverException;
203
	
204
	/**
205
	 * Obtiene una ventana de datos de la imagen a partir de coordenadas reales. 
188 206
	 * No aplica supersampleo ni subsampleo sino que devuelve una matriz de igual tama?o a los
189 207
	 * pixeles de disco. 
190 208
	 * @param x Posici?n X superior izquierda
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/store/DefaultListRasterStore.java
24 24
import java.awt.geom.AffineTransform;
25 25
import java.awt.geom.NoninvertibleTransformException;
26 26
import java.awt.geom.Point2D;
27
import java.awt.geom.Rectangle2D;
27 28
import java.io.IOException;
28 29
import java.util.ArrayList;
29 30

  
......
41 42
import org.gvsig.fmap.dal.coverage.exception.ProcessInterruptedException;
42 43
import org.gvsig.fmap.dal.coverage.exception.RasterDriverException;
43 44
import org.gvsig.fmap.dal.coverage.exception.RmfSerializerException;
45
import org.gvsig.fmap.dal.coverage.grid.render.TileListener;
44 46
import org.gvsig.fmap.dal.coverage.store.ListRasterStore;
45 47
import org.gvsig.fmap.dal.coverage.store.RasterDataStore;
46 48
import org.gvsig.fmap.dal.coverage.store.RasterStoreParameters;
......
582 584
			}
583 585
		}
584 586
	}
587
	
588
	/*
589
	 * (non-Javadoc)
590
	 * @see org.gvsig.raster.impl.store.QueryableRaster#getWindowRaster(double, double, double, double, int, int, org.gvsig.fmap.dal.coverage.grid.render.TileListener, int)
591
	 */
592
	public void getWindowRaster(double ulx, double uly, double lrx, double lry, int bufWidth, int bufHeight, TileListener listener, int frameInPx)
593
		throws InvalidSetViewException, ProcessInterruptedException, RasterDriverException {
594
		Buffer buf = getWindowRaster(ulx, uly, lrx, lry, bufWidth, bufHeight, true);
595
		buf.setDataExtent(new Rectangle2D.Double(ulx, uly, Math.abs(ulx - lrx), Math.abs(uly - lry)));
596
		listener.nextBuffer(buf, new ExtentImpl(ulx, uly, lrx, lry), this.getAffineTransform(), null);
597
		listener.endReading();
598
	}
585 599

  
586 600
	/*
587 601
	 * (non-Javadoc)
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/store/DefaultMosaicRasterStore.java
24 24
import java.awt.geom.AffineTransform;
25 25
import java.awt.geom.NoninvertibleTransformException;
26 26
import java.awt.geom.Point2D;
27
import java.awt.geom.Rectangle2D;
27 28
import java.io.IOException;
28 29
import java.util.ArrayList;
29 30

  
......
41 42
import org.gvsig.fmap.dal.coverage.exception.ProcessInterruptedException;
42 43
import org.gvsig.fmap.dal.coverage.exception.RasterDriverException;
43 44
import org.gvsig.fmap.dal.coverage.exception.RmfSerializerException;
45
import org.gvsig.fmap.dal.coverage.grid.render.TileListener;
44 46
import org.gvsig.fmap.dal.coverage.store.MosaicRasterStore;
45 47
import org.gvsig.fmap.dal.coverage.store.RasterDataStore;
46 48
import org.gvsig.fmap.dal.coverage.store.RasterStoreParameters;
......
928 930

  
929 931
	/*
930 932
	 * (non-Javadoc)
933
	 * @see org.gvsig.raster.impl.store.QueryableRaster#getWindowRaster(double, double, double, double, int, int, org.gvsig.fmap.dal.coverage.grid.render.TileListener, int)
934
	 */
935
	public void getWindowRaster(double ulx, double uly, double lrx, double lry, int bufWidth, int bufHeight, TileListener listener, int frameInPx)
936
		throws InvalidSetViewException, ProcessInterruptedException, RasterDriverException {
937
		Buffer buf = getWindowRaster(ulx, uly, lrx, lry, bufWidth, bufHeight, true);
938
		buf.setDataExtent(new Rectangle2D.Double(ulx, uly, Math.abs(ulx - lrx), Math.abs(uly - lry)));
939
		listener.nextBuffer(buf, new ExtentImpl(ulx, uly, lrx, lry), this.getAffineTransform(), null);
940
		listener.endReading();
941
	}
942
	
943
	/*
944
	 * (non-Javadoc)
931 945
	 * @see org.gvsig.raster.dataset.IRasterDataSource#getWindowRaster(double, double, double, double, int, int, boolean)
932 946
	 */
933 947
	public Buffer getWindowRaster(double ulx, double uly, double lrx, double lry, int bufWidth, int bufHeight, boolean adjustToExtent)
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/store/AbstractRasterDataStore.java
40 40
import org.gvsig.fmap.dal.coverage.exception.RasterDriverException;
41 41
import org.gvsig.fmap.dal.coverage.exception.RmfSerializerException;
42 42
import org.gvsig.fmap.dal.coverage.grid.render.Render;
43
import org.gvsig.fmap.dal.coverage.grid.render.TileListener;
43 44
import org.gvsig.fmap.dal.coverage.process.vector.Vectorization;
44 45
import org.gvsig.fmap.dal.coverage.store.RasterDataStore;
45 46
import org.gvsig.fmap.dal.coverage.store.RasterFileStoreParameters;
......
108 109
	/**
109 110
	 * Ancho y alto en pixeles del ?ltimo buffer asignado
110 111
	 */
111
	private double 					   nWidth            = 0;
112
	private double 					   nHeight           = 0;
112
	protected double 		    	   nWidth            = 0;
113
	protected double 			       nHeight           = 0;
113 114
	private double[]                   step              = null;
114 115
	private Buffer                     lastBuffer        = null;
115 116
	
......
159 160
			buf.setDataExtent(new Rectangle2D.Double(currentQuery.getUlx(), currentQuery.getUly(), currentQuery.getLrx() - currentQuery.getUlx(), currentQuery.getLry() - currentQuery.getUly()));
160 161
		}
161 162
		
163
		if(currentQuery.getType() == DefaultRasterQuery.TYPE_COORDS_SIZE_TILED) {
164
			setAreaOfInterest(currentQuery.getUlx(), currentQuery.getUly(), currentQuery.getLrx(), currentQuery.getLry(), currentQuery.getBufWidth(), currentQuery.getBufHeight(), currentQuery.getTileListener(), currentQuery.getFrameWidthPx());
165
		}
166
		
162 167
		if(currentQuery.getType() == DefaultRasterQuery.TYPE_PX)
163 168
			buf = setAreaOfInterest(currentQuery.getPixelX(), currentQuery.getPixelY(), currentQuery.getPixelW(), currentQuery.getPixelH());
164 169
		
......
244 249
		return getWindowRaster(adjustedDataExtent.getMin().getX(), adjustedDataExtent.getMax().getY(), adjustedDataExtent.width(), adjustedDataExtent.height(), currentQuery.isAdjustToExtent());
245 250
	}
246 251
	
252
	public void setAreaOfInterest(double ulx, double uly, double lrx, double lry, 
253
			int bufWidth, int bufHeight, TileListener listener, int frameWidthPx) throws RasterDriverException, InvalidSetViewException, ProcessInterruptedException { 
254
		dataExtent = new ExtentImpl(ulx, uly, lrx, lry);
255
		Extent adjustedDataExtent = util.calculateAdjustedView(dataExtent, getAffineTransform(), new Dimension((int)getWidth(), (int)getHeight()));	
256
		getWindowRaster(adjustedDataExtent.getULX(), adjustedDataExtent.getULY(), adjustedDataExtent.getLRX(), adjustedDataExtent.getLRY(), bufWidth, bufHeight, listener, frameWidthPx);
257
	}
258
	
247 259
	/**
248 260
	 * Asigna el ?rea de interes en coordenadas del mundo real. Si las coordenadas exceden del tama?o de la imagen
249 261
	 * estas coordenadas son ajustadas el extent.
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/grid/filter/enhancement/EnhancementStretchListManager.java
159 159
			} else {
160 160
				//Si stretch vale null se usan los par?metros por defecto de LinearStretchParams
161 161
				if(params.getParamById("stretchs").getDefaultValue() == null) {
162
					p = DefaultLinearStretchParams.createStandardParam(renderBands, 0.0, stats, removeEnds);
162
					boolean rgb = false;
163
					if(params.getParamById("rgb").getDefaultValue() != null)
164
						rgb = ((Boolean)params.getParamById("rgb").getDefaultValue()).booleanValue();
165
					p = DefaultLinearStretchParams.createStandardParam(renderBands, 0.0, stats, rgb);
163 166
				}
164 167
			}
165 168
		} catch (FileNotOpenException e) {
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/grid/render/DefaultRender.java
43 43
import org.gvsig.fmap.dal.coverage.grid.RasterFilter;
44 44
import org.gvsig.fmap.dal.coverage.grid.RasterFilterList;
45 45
import org.gvsig.fmap.dal.coverage.grid.render.Render;
46
import org.gvsig.fmap.dal.coverage.grid.render.TileListener;
46 47
import org.gvsig.fmap.dal.coverage.grid.render.VisualPropertyEvent;
47 48
import org.gvsig.fmap.dal.coverage.grid.render.VisualPropertyListener;
48 49
import org.gvsig.fmap.dal.coverage.store.RasterDataStore;
......
67 68
import org.gvsig.tools.persistence.Persistent;
68 69
import org.gvsig.tools.persistence.PersistentState;
69 70
import org.gvsig.tools.persistence.exception.PersistenceException;
71
import org.slf4j.LoggerFactory;
70 72
/**
71 73
 * Esta clase se encarga de la gesti?n del dibujado de datos le?dos desde la capa
72 74
 * "dataaccess" sobre objetos java. Para ello necesita una fuente de datos que tipicamente
......
88 90
 *
89 91
 * @author Nacho Brodin (nachobrodin@gmail.com)
90 92
 */
91
public class DefaultRender implements Render, PropertyListener, FilterListChangeListener, Persistent {
93
public class DefaultRender implements Render, PropertyListener, FilterListChangeListener, Persistent, TileListener {
92 94

  
93 95
	/**
94 96
	 * Grid para la gesti?n del buffer
......
136 138
	private ArrayList<VisualPropertyListener>        
137 139
	                         visualPropertyListener   = new ArrayList<VisualPropertyListener>();
138 140
	private RasterUtils      util                     = RasterLocator.getManager().getRasterUtils();
141
	private boolean          isDrawing                = false;
139 142
	
143
	private Graphics2D       lastGraphics             = null;
144
	private ViewPortData     lastViewPortData         = null;
145
	
140 146
	/**
141 147
	 * Constructor
142 148
	 */
......
250 256
			((VisualPropertyListener)visualPropertyListener.get(i)).visualPropertyValueChanged(ev);
251 257
		}
252 258
	}
259
	
260
	/**
261
	 * Thread de dibujado
262
	 */
263
	public void run() {
264
		try {
265
			draw(lastGraphics, lastViewPortData);
266
		} catch (RasterDriverException e) {
267
			LoggerFactory.getLogger(getClass()).debug("Error reading data", e);
268
		} catch (InvalidSetViewException e) {
269
			LoggerFactory.getLogger(getClass()).debug("Invalid view", e);
270
		} catch (ProcessInterruptedException e) {
271
		}
272
	}
273
	
274
	/*
275
	 * (non-Javadoc)
276
	 * @see org.gvsig.fmap.dal.coverage.grid.render.Render#setGraphicInfo(java.awt.Graphics2D, org.gvsig.fmap.dal.coverage.datastruct.ViewPortData)
277
	 */
278
	public void setGraphicInfo(Graphics2D g, ViewPortData vp) {
279
		this.lastGraphics = g;
280
		this.lastViewPortData = vp;
281
	}
253 282

  
254 283
	/*
255 284
	 * (non-Javadoc)
285
	 * @see org.gvsig.fmap.dal.coverage.grid.render.Render#drawThread(java.awt.Graphics2D, org.gvsig.fmap.dal.coverage.datastruct.ViewPortData)
286
	 */
287
	public void drawThread(Graphics2D g, ViewPortData vp) {
288
		//Se dibuja si cae dentro de la vista
289
		if(util.isOutside(vp.getExtent(), dataStore.getExtent())) 
290
			return;
291
		
292
		setReading(true);
293
		setGraphicInfo(g, vp);
294
		new Thread(this).start();
295

  
296
		while(isReading()) {
297
			try {
298
				Thread.sleep(50);
299
			} catch (InterruptedException e) {
300
				break;
301
			}
302
		}
303
	}
304
	
305
	/*
306
	 * (non-Javadoc)
256 307
	 * @see org.gvsig.fmap.dal.coverage.grid.render.Render#draw(java.awt.Graphics2D, org.cresques.geo.ViewPortData)
257 308
	 */
258
	public synchronized Image draw(Graphics2D g, ViewPortData vp)
309
	public synchronized void draw(Graphics2D g, ViewPortData vp)
259 310
		throws RasterDriverException, InvalidSetViewException, ProcessInterruptedException {
260
		Image geoImage = null;
261
		//RasterDataSet dataset = dataStore.getDataset();
262
		AffineTransform transf = dataStore.getAffineTransform();
311
		lastGraphics = g;
312
		lastViewPortData = vp;
263 313

  
264
		if(util.isOutside(vp.getExtent(), dataStore.getExtent()))
265
			return null;
314
		if(util.isOutside(vp.getExtent(), dataStore.getExtent())) {
315
			endReading();
316
			return;
317
		}
266 318

  
267 319
		Extent adjustedRotedRequest = request(vp, dataStore);
268 320

  
269
		if ((widthImage <= 0) || (heightImage <= 0))
270
			return null;
271

  
272
		double[] step = null;
273
		Buffer buf = null;
321
		if ((widthImage <= 0) || (heightImage <= 0)) {
322
			endReading();
323
			return;
324
		}
274 325
		
275 326
		if (dataStore != null) {
276 327
			if (lastTransparency == null) {
......
282 333
			if (dataStore.getTransparency().getAlphaBandNumber() != -1) {
283 334
				query.setSupersamplingLoadingBuffer(false); // Desactivamos el supersampleo en la carga del buffer.
284 335
				query.setDrawableBands(new int[] { lastTransparency.getAlphaBandNumber(), -1, -1 });
285
				query.setAreaOfInterest(adjustedRotedRequest.getULX(), adjustedRotedRequest.getULY(), adjustedRotedRequest.getLRX(), adjustedRotedRequest.getLRY(), (int)Math.round(widthImage), (int)Math.round(heightImage));
336
				query.setAreaOfInterest(adjustedRotedRequest.getULX(), adjustedRotedRequest.getULY(), adjustedRotedRequest.getLRX(), adjustedRotedRequest.getLRY(), (int)Math.round(widthImage), (int)Math.round(heightImage), this, 0);
286 337
				query.setSupersamplingLoadingBuffer(true);
287 338
				lastTransparency.setAlphaBand(dataStore.query(query));
288 339
			}
289 340
			query.setSupersamplingLoadingBuffer(false); // Desactivamos el supersampleo en la carga del buffer.
290 341
			// En el renderizado ser? ImageDrawer el que se encargue de esta funci?n
291 342
			query.setDrawableBands(getRenderBands());
292
			query.setAreaOfInterest(adjustedRotedRequest.getULX(), adjustedRotedRequest.getULY(), adjustedRotedRequest.getLRX(), adjustedRotedRequest.getLRY(), (int)Math.round(widthImage), (int)Math.round(heightImage));
293
			buf = dataStore.query(query);
294
			step = dataStore.getStep();
343
			query.setAreaOfInterest(adjustedRotedRequest.getULX(), adjustedRotedRequest.getULY(), adjustedRotedRequest.getLRX(), adjustedRotedRequest.getLRY(), (int)Math.round(widthImage), (int)Math.round(heightImage), this, 0);
344
			dataStore.query(query);
295 345
			query.setSupersamplingLoadingBuffer(true);
296

  
346
		} else
347
			return;
348
	}
349
	
350
	/*
351
	 * (non-Javadoc)
352
	 * @see org.gvsig.fmap.dal.coverage.grid.render.Render#draw(java.awt.Graphics2D, org.cresques.geo.ViewPortData)
353
	 */
354
	public synchronized void drawBufferOnImage(Graphics2D g, ViewPortData vp, Buffer buf, double[] step, AffineTransform transf, Extent adjustedRotedRequest)
355
		throws RasterDriverException, InvalidSetViewException, ProcessInterruptedException {
356
		
357
		if (dataStore != null) {
297 358
			//Asignamos los datos al objeto transparencia antes de aplicar la pila de filtros para que el valor NoData sea efectivo
298 359
			if (dataStore.getTransparency().isNoDataActive())
299 360
				lastTransparency.setDataBuffer(buf);
300 361
			else
301 362
				lastTransparency.setDataBuffer(null);
302 363
			lastTransparency.activeTransparency();
303

  
304 364
		} else
305
			return null;
365
			return;
306 366

  
307 367
		//Aplicamos los filtros
308 368
		grid = new GridImpl(buf, dataStore, true);
......
326 386
		drawer.setBuffer(lastRenderBuffer); // Buffer de datos a renderizar
327 387
		drawer.setStep(step); // Desplazamiento para supersampleo
328 388
		drawer.setBufferSize((int)Math.round(widthImage), (int)Math.round(heightImage)); // Ancho y alto del buffer
329
		geoImage = drawer.drawBufferOverImageObject(replicateBand, getRenderBands()); // Acci?n de renderizado
389
		Image geoImage = drawer.drawBufferOverImageObject(replicateBand, getRenderBands()); // Acci?n de renderizado
330 390

  
331 391
		// Borramos el buffer de transparencia para que siempre se tenga que regenerar.
332 392
		lastTransparency.setAlphaBand(null);
......
339 399
			Point2D lastGraphicOffset = new Point2D.Double(adjustedRotedRequest.getULX(), adjustedRotedRequest.getULY());
340 400
			((DefaultViewPortData)vp).mat.transform(lastGraphicOffset, lastGraphicOffset);
341 401
			g.drawImage(geoImage, (int) Math.round(lastGraphicOffset.getX()), (int) Math.round(lastGraphicOffset.getY()), null);
342
			return geoImage;
402
			return;
343 403
		}
344 404

  
345 405
		/*
......
373 433
			g.drawImage(geoImage, (int) Math.round(pt.getX()), (int) Math.round(pt.getY()), null);
374 434
			g.transform(at.createInverse());
375 435
		} catch (NoninvertibleTransformException e) {
376
			e.printStackTrace();
436
			LoggerFactory.getLogger(getClass()).debug("Transformation error", e);
377 437
		}
378
		return geoImage;
438
		return;
379 439
		// long t2 = new Date().getTime();
380 440
		// System.out.println("Renderizando Raster: " + ((t2 - t1) / 1000D) + ", secs.");
381 441
	}
382

  
442
	
443
	/*
444
	 * (non-Javadoc)
445
	 * @see org.gvsig.raster.impl.grid.render.TileListener#nextBuffer(org.gvsig.fmap.dal.coverage.dataset.Buffer, org.gvsig.fmap.dal.coverage.datastruct.Extent, java.awt.geom.AffineTransform)
446
	 */
447
	public void nextBuffer(Buffer buf, Extent e, AffineTransform transf, double[] step) throws ProcessInterruptedException {
448
		try {
449
			drawBufferOnImage(lastGraphics, lastViewPortData, buf, step, transf, e);
450
		} catch (RasterDriverException e1) {
451
			LoggerFactory.getLogger(getClass()).debug("Error loading data", e);
452
		} catch (InvalidSetViewException e1) {
453
			LoggerFactory.getLogger(getClass()).debug("Invalid view", e);
454
		}
455
	}
456
	
457
	/*
458
	 * (non-Javadoc)
459
	 * @see org.gvsig.raster.impl.grid.render.TileListener#endReading()
460
	 */
461
	public void endReading() {
462
		isDrawing = false;
463
	}
464
	
465
	/*
466
	 * (non-Javadoc)
467
	 * @see org.gvsig.raster.impl.grid.render.TileListener#isReading()
468
	 */
469
	public boolean isReading() {
470
		return isDrawing;
471
	}
472
	
473
	/*
474
	 * (non-Javadoc)
475
	 * @see org.gvsig.fmap.dal.coverage.grid.render.Render#setReading(boolean)
476
	 */
477
	public void setReading(boolean reading) {
478
		isDrawing = reading;
479
	}
480
	
383 481
	/**
384 482
	 * Calculamos la petici?n en coordenadas del mundo real con la transformaci?n del raster. Esto
385 483
	 * permite obtener las coordenadas de la petici?n con la rotaci?n, si la tiene.
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/buffer/DefaultRasterQuery.java
21 21
 */
22 22
package org.gvsig.raster.impl.buffer;
23 23

  
24
import org.gvsig.fmap.dal.coverage.grid.render.TileListener;
24 25
import org.gvsig.fmap.dal.coverage.store.RasterQuery;
25 26
import org.gvsig.tools.persistence.PersistentState;
26 27
import org.gvsig.tools.persistence.exception.PersistenceException;
......
36 37
	public static final int  TYPE_COORDS_SIZE           = 2;
37 38
	public static final int  TYPE_PX                    = 3;
38 39
	public static final int  TYPE_PX_SIZE               = 4;
40
	public static final int  TYPE_COORDS_SIZE_TILED     = 5;
39 41
	
40 42
	private int              type                       = 0;
41 43
	
......
72 74
	 */
73 75
	private double           noDataValueToFill          = -99999;
74 76
	
77
	private int              frameWidthPx               = 0;
78
	private TileListener     listener                   = null;
79
	
75 80
	/*
76 81
	 * (non-Javadoc)
77 82
	 * @see org.gvsig.fmap.dal.coverage.buffer.RasterQuery#setAreaOfInterest(double, double, double, double)
......
101 106
	
102 107
	/*
103 108
	 * (non-Javadoc)
109
	 * @see org.gvsig.fmap.dal.coverage.store.RasterQuery#setAreaOfInterest(double, double, double, double, int, int, org.gvsig.fmap.dal.coverage.grid.render.TileListener, int)
110
	 */
111
	public void setAreaOfInterest(double ulx, double uly, double lrx, double lry, 
112
			int bufWidth, int bufHeight, TileListener listener, int frameWidthPx) {
113
		this.ulx = ulx;
114
		this.uly = uly;
115
		this.lrx = lrx;
116
		this.lry = lry;
117
		this.bufWidth = bufWidth;
118
		this.bufHeight = bufHeight;
119
		this.type = TYPE_COORDS_SIZE_TILED;
120
		this.frameWidthPx = frameWidthPx;
121
		this.listener = listener;
122
	}
123
	
124
	/*
125
	 * (non-Javadoc)
104 126
	 * @see org.gvsig.fmap.dal.coverage.buffer.RasterQuery#setAreaOfInterest(int, int, int, int)
105 127
	 */
106 128
	public void setAreaOfInterest(int x, int y, int w, int h) {
......
306 328
	public boolean isReadOnly() {
307 329
		return readOnly;
308 330
	}
331
	
332
	public int getFrameWidthPx() {
333
		return frameWidthPx;
334
	}
309 335

  
336
	public TileListener getTileListener() {
337
		return listener;
338
	}
339

  
310 340
	//****************************************************
311 341
	//*********Implementing DataQuery methods*************
312 342
	//****************************************************
......
369 399
		// TODO Auto-generated method stub
370 400
		
371 401
	}
372
	
373 402
}
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.api/src/main/java/org/gvsig/fmap/dal/coverage/grid/render/Render.java
22 22
package org.gvsig.fmap.dal.coverage.grid.render;
23 23

  
24 24
import java.awt.Graphics2D;
25
import java.awt.Image;
26 25

  
27 26
import org.gvsig.fmap.dal.coverage.dataset.Buffer;
28 27
import org.gvsig.fmap.dal.coverage.datastruct.ViewPortData;
......
40 39
 * Renders a Grid object 
41 40
 * @author Nacho Brodin (nachobrodin@gmail.com)
42 41
 */
43
public interface Render {
42
public interface Render extends Runnable {
43
	
44 44
	/**
45 45
	 * Obtiene las lista de filtros aplicados en la renderizaci?n
46 46
	 * @return RasterFilterList
......
189 189
	 * @throws InvalidSetViewException
190 190
	 * @throws ArrayIndexOutOfBoundsException
191 191
	 */
192
	public Image draw(Graphics2D g, ViewPortData vp)
192
	public void draw(Graphics2D g, ViewPortData vp)
193 193
		throws RasterDriverException, InvalidSetViewException, ProcessInterruptedException;
194
	
195
	/**
196
	 * <p>
197
	 * This method throws the draw call in a Thread. This is useful to draw tiles.
198
	 * </p>
199
	 * <p>
200
	 * Strategy:
201
	 * <ul>
202
	 * <li>If the image is out of the view the thread won't be thrown</li>
203
	 * <li>Throw the thread to draw</li>
204
	 * <li>The main thread waits until the secondary thread ends</li>
205
	 * <li>When the buffer of a new tile has been received then nextBuffer is called from the store</li>
206
	 * <li>When the last tile has been received then endReading is called from the store. This method unlocks the main
207
	 * thread and will finish the process</li>
208
	 * <li></li>
209
	 * </ul> 
210
	 * </p>
211
	 * 
212
	 * @see draw
213
	 */
214
	public void drawThread(Graphics2D g, ViewPortData vp);
215
	
216
	/**
217
	 * Sets the view structures to draw
218
	 * @param g
219
	 * @param vp
220
	 */
221
	public void setGraphicInfo(Graphics2D g, ViewPortData vp);
222
	
223
	public void setReading(boolean reading);
194 224
}
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.api/src/main/java/org/gvsig/fmap/dal/coverage/grid/render/TileListener.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.grid.render;
23

  
24
import java.awt.geom.AffineTransform;
25

  
26
import org.gvsig.fmap.dal.coverage.dataset.Buffer;
27
import org.gvsig.fmap.dal.coverage.datastruct.Extent;
28
import org.gvsig.fmap.dal.coverage.exception.ProcessInterruptedException;
29

  
30
/**
31
 * This interface will receive events when a new tile arrives. When the last tile is
32
 * received then endReading will be called.
33
 * 
34
 * @author Nacho Brodin (nachobrodin@gmail.com)
35
 */
36
public interface TileListener {
37
	
38
	/**
39
	 * A new tile is received
40
	 * @param b 
41
	 * @param e
42
	 * @param t
43
	 */
44
	public void nextBuffer(Buffer b, Extent e, AffineTransform t, double[] step) throws ProcessInterruptedException ;
45
	
46
	/**
47
	 * The last tile is received
48
	 */
49
	public void endReading();
50
	
51
	/**
52
	 * Returns true if the endReading wasn't be called yet
53
	 */
54
	public boolean isReading();
55

  
56
}
0 57

  
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.api/src/main/java/org/gvsig/fmap/dal/coverage/grid/RasterFilter.java
33 33
 *
34 34
 * @author Nacho Brodin (nachobrodin@gmail.com)
35 35
 */
36
@SuppressWarnings("unchecked")
36 37
public interface RasterFilter {
37 38
		/**
38 39
		 * Acciones a realizar antes de la ejecuci?n del filtro
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.api/src/main/java/org/gvsig/fmap/dal/coverage/store/RasterQuery.java
23 23

  
24 24
import org.gvsig.fmap.dal.DataQuery;
25 25
import org.gvsig.fmap.dal.coverage.exception.InvalidSetViewException;
26
import org.gvsig.fmap.dal.coverage.grid.render.TileListener;
26 27

  
27 28
/**
28 29
 * Interfaz que contiene las operaciones que debe soportar la carga de datos
......
163 164
	
164 165
	/**
165 166
	 * Asigna el ?rea de interes en coordenadas del mundo real. Si las coordenadas exceden del tama?o de la imagen
167
	 * estas coordenadas son ajustadas el extent. Si la petici?n es tileada se har? una llamada al listener cada vez
168
	 * que se reciba un tile.
169
	 * @param x Coordenada X, esquina superior izquierda
170
	 * @param y Coordenada Y, esquina superior izquierda
171
	 * @param w Ancho del ?rea
172
	 * @param h Alto del ?rea
173
	 * @param bufWidth Ancho del buffer
174
	 * @param bufHeight Alto del buffer
175
	 * @param listener Este listener es usado para recibir tiles. Cada vez que se recibe uno se har? una llamada.
176
	 * @param frameWidthPx N?mero de tiles de exceso a pedir cuando la petici?n es tileada
177
	 * @return En caso de que el buffer sea mayor que el tama?o seleccionado de raster se produce supersampleo. La funci?n devuelve
178
	 * un array de dos elementos que representan el desplazamiento en pixels de X e Y de la esquina superior izquierda.
179
	 * @throws ArrayIndexOutOfBoundsException
180
	 * @throws InvalidSetViewException 
181
	 */
182
	public void setAreaOfInterest(double ulx, double uly, double lrx, double lry, int bufWidth, int bufHeight, TileListener listener, int frameWidthPx);
183
	
184
	/**
185
	 * Asigna el ?rea de interes en coordenadas del mundo real. Si las coordenadas exceden del tama?o de la imagen
166 186
	 * estas coordenadas son ajustadas el extent.
167 187
	 * @param x Coordenada X, esquina superior izquierda
168 188
	 * @param y Coordenada Y, esquina superior izquierda
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.api/src/main/java/org/gvsig/fmap/dal/coverage/exception/TileReadingException.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.exception;
23

  
24
import org.gvsig.tools.exception.BaseException;
25

  
26
/**
27
 * This exception is thrown when a tile download or reading fails.
28
 * 
29
 * @author Nacho Brodin (nachobrodin@gmail.com)
30
 *
31
 */
32
public class TileReadingException extends BaseException {
33
	private static final long serialVersionUID = 337663732071639106L;
34
	private static final String MESSAGE_KEY = "tile_access__exception";
35

  
36
	public TileReadingException(String msg) {
37
		super(msg, null, MESSAGE_KEY, serialVersionUID);
38
	}
39
	
40
	public TileReadingException(String msg, Throwable e) {
41
		super(msg, e, MESSAGE_KEY, serialVersionUID);
42
	}
43
}
0 44

  

Also available in: Unified diff