Revision 127

View differences:

org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.fmap/src/main/java/org/gvsig/raster/fmap/layers/IStatusRaster.java
26 26
import org.gvsig.fmap.dal.coverage.exception.FilterTypeException;
27 27
import org.gvsig.fmap.dal.coverage.exception.NotSupportedExtensionException;
28 28
import org.gvsig.fmap.dal.coverage.exception.RasterDriverException;
29
import org.gvsig.fmap.dal.coverage.grid.GridTransparency;
29 30
import org.gvsig.fmap.dal.coverage.grid.RasterFilterList;
30 31
import org.gvsig.fmap.dal.coverage.store.props.ColorTable;
31
import org.gvsig.raster.impl.grid.GridTransparency;
32 32
import org.gvsig.tools.persistence.Persistent;
33 33
import org.gvsig.tools.persistence.exception.PersistenceException;
34 34
import org.gvsig.utils.XMLException;
......
41 41
	 * @param xml
42 42
	 * @throws XMLException
43 43
	 */
44
	//public void loadFromState(PersistentState state, IRasterProperties layer)throws PersistenceException;
44
	//public void loadFromState(PersistentState state, FLyrRasterSE layer)throws PersistenceException;
45 45
	
46 46
	/**
47 47
	 * Salva en fichero XML algunas propiedades y filtros de raster
48 48
	 * @param xml
49 49
	 * @throws XMLException
50 50
	 */
51
	public void setStateProperties(boolean loadClass, IRasterProperties layer)throws PersistenceException;
51
	public void setStateProperties(boolean loadClass, FLyrRasterSE layer)throws PersistenceException;
52 52
	
53 53
	/**
54 54
	 * Aplica el estado almacenado al FLyrRaster pasado por par?metro
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.fmap/src/main/java/org/gvsig/raster/fmap/layers/FLyrRasterSE.java
38 38
import java.util.Set;
39 39

  
40 40
import org.cresques.cts.IProjection;
41
import org.geotools.referencing.CRS;
42 41
import org.gvsig.compat.print.PrintAttributes;
43 42
import org.gvsig.fmap.crs.CRSFactory;
44 43
import org.gvsig.fmap.dal.DataStore;
......
46 45
import org.gvsig.fmap.dal.coverage.RasterLocator;
47 46
import org.gvsig.fmap.dal.coverage.RasterManager;
48 47
import org.gvsig.fmap.dal.coverage.dataset.Buffer;
48
import org.gvsig.fmap.dal.coverage.datastruct.ColorItem;
49
import org.gvsig.fmap.dal.coverage.datastruct.ColorTableLibrary;
49 50
import org.gvsig.fmap.dal.coverage.datastruct.Extent;
50 51
import org.gvsig.fmap.dal.coverage.datastruct.Params;
51 52
import org.gvsig.fmap.dal.coverage.datastruct.ViewPortData;
52 53
import org.gvsig.fmap.dal.coverage.exception.FileNotFoundInListException;
53 54
import org.gvsig.fmap.dal.coverage.exception.FileNotOpenException;
55
import org.gvsig.fmap.dal.coverage.exception.FilterManagerException;
54 56
import org.gvsig.fmap.dal.coverage.exception.FilterTypeException;
55 57
import org.gvsig.fmap.dal.coverage.exception.GridException;
56 58
import org.gvsig.fmap.dal.coverage.exception.InvalidSetViewException;
......
76 78
import org.gvsig.fmap.dal.coverage.store.props.ColorTable;
77 79
import org.gvsig.fmap.dal.coverage.store.props.Metadata;
78 80
import org.gvsig.fmap.dal.coverage.store.props.Statistics;
81
import org.gvsig.fmap.dal.coverage.util.CRS;
79 82
import org.gvsig.fmap.dal.coverage.util.ColorConversion;
80 83
import org.gvsig.fmap.dal.coverage.util.Historical;
81 84
import org.gvsig.fmap.dal.coverage.util.MathUtils;
......
102 105
import org.gvsig.fmap.mapcontext.rendering.legend.ILegend;
103 106
import org.gvsig.fmap.mapcontext.rendering.legend.events.listeners.LegendListener;
104 107
import org.gvsig.raster.fmap.legend.ColorTableLegend;
105
import org.gvsig.raster.impl.store.properties.DatasetColorTable;
106 108
import org.gvsig.raster.util.RasterToolsUtil;
107 109
import org.gvsig.tools.ToolsLocator;
108 110
import org.gvsig.tools.dynobject.DynStruct;
......
116 118
import org.slf4j.Logger;
117 119
import org.slf4j.LoggerFactory;
118 120

  
119

  
120

  
121

  
122 121
/**
123 122
 * Capa raster
124 123
 * @author Nacho Brodin (nachobrodin@gmail.com)
125 124
 */
126
public class FLyrRasterSE extends FLyrDefault implements IRasterProperties,
127
		InfoByPoint, Classifiable,
125
public class FLyrRasterSE extends FLyrDefault implements InfoByPoint, Classifiable,
128 126
		IRasterLayerActions, ILayerState, VisualPropertyListener, SingleLayer {
129 127
	public static final String      PERSISTENT_NAME        = "FLyrRasterSE_Persistent";
130 128
    public static final String      PERSISTENT_DESCRIPTION = "FLyrRasterSE Persistent";
......
342 340
		
343 341
		dataStore.resetNoDataValue();
344 342
		applyNoData();
345
		GridTransparency gridTransparency = new GridTransparency(dataStore.getTransparencyFilesStatus());
343
		GridTransparency gridTransparency = dataStore.getTransparencyFilesStatus().getGridTransparency();
346 344

  
347 345
		filterList.setInitDataType(getDataType()[0]);
348 346

  
......
368 366
					colorTableManager.addFilter(params);
369 367
				} else //sino hace lo que dice en las preferencias
370 368
					if (getDataType()[0] != Buffer.TYPE_BYTE)
371
						loadEnhancedOrColorTable(filterManager);
369
						loadEnhancedOrColorTable(filterList);
372 370
			loadedFromProject = null;
373 371

  
374 372
			getRender().setFilterList(filterList);
......
377 375
		} catch (FilterTypeException e) {
378 376
			//Ha habido un error en la asignaci?n de filtros por los que no se a?ade ninguno.
379 377
			RasterToolsUtil.debug("Error a?adiendo filtros en la inicializaci?n de capa " + this.getName() + " Datatype=" + this.getDataType(), null, e);
378
		} catch (FilterManagerException e) {
379
			//Ha habido un error en la asignaci?n de filtros por los que no se a?ade ninguno.
380
			RasterToolsUtil.debug("Error a?adiendo filtros en la inicializaci?n de capa " + this.getName() + " Datatype=" + this.getDataType(), null, e);
380 381
		}
381 382
	}
382 383

  
......
386 387
	 * @param filterManager
387 388
	 * @throws FilterTypeException
388 389
	 */
389
	private void loadEnhancedOrColorTable(RasterFilterListManager filterManager) throws FilterTypeException {
390
	private void loadEnhancedOrColorTable(RasterFilterList filterList) throws FilterTypeException, FilterManagerException {
390 391
		String colorTableName = configuration.getValueString("loadlayer_usecolortable", (String) null);
391 392

  
392 393
		String palettesPath = System.getProperty("user.home") +
393
			File.separator +
394
			"gvSIG" + // PluginServices.getArguments()[0] +
395
			File.separator + "colortable";
394
		File.separator +
395
		"gvSIG" + // PluginServices.getArguments()[0] +
396
		File.separator + "colortable";
396 397

  
397 398
		Statistics stats = dataStore.getStatistics();
399
		ColorTableLibrary colorTableLibrary = rManager.getColorTableLibrary();
398 400

  
399 401
		if (colorTableName != null)
400 402
			try {
401 403
				stats.calculate();
402 404
				if (getBandCount() == 1) {
403
					ArrayList fileList = ColorTableLibraryPersistence.getPaletteFileList(palettesPath);
405
					ArrayList<String> fileList = colorTableLibrary.getPaletteFileList(palettesPath);
404 406
					for (int i = 0; i < fileList.size(); i++) {
405
						ArrayList paletteItems = new ArrayList();
406
						String paletteName = ColorTableLibraryPersistence.loadPalette(palettesPath, (String) fileList.get(i), paletteItems);
407
						ArrayList<ColorItem> paletteItems = new ArrayList<ColorItem>();
408
						String paletteName = colorTableLibrary.loadPalette(palettesPath, (String) fileList.get(i), paletteItems);
407 409
						if (paletteName.equals(colorTableName)) {
408 410
							if (paletteItems.size() <= 0)
409 411
								continue;
410 412

  
411
							ColorTable colorTable = rManager.createColorTable();
413
							ColorTable colorTable = colorTableLibrary.createColorTable();
412 414
							colorTable.setName(paletteName);
413 415
							colorTable.createPaletteFromColorItems(paletteItems, true);
414 416
							colorTable.setInterpolated(true);
415 417

  
416 418
							colorTable.createColorTableInRange(stats.getMinimun(), stats.getMaximun(), true);
417 419

  
418
							GridPalette p = new GridPalette(colorTable);
419
							setLastLegend(p);
420
							setLastLegend(colorTable);
420 421

  
421
							ColorTableListManager ctm = new ColorTableListManager(filterManager);
422
							ctm.addColorTableFilter(p);
422
							RasterFilterListManager colorTableManager = filterList.getManagerByID("ColorTable");
423
							Params params = filterList.getEmptyFilterParams();
424
							params.setParam("colorTable", colorTable);
425
							colorTableManager.addFilter(params);
423 426
							return;
424 427
						}
425 428
					}
......
428 431
				// No podemos aplicar el filtro
429 432
			} catch (RasterDriverException e) {
430 433
				// No podemos aplicar el filtro
431
			} catch (InterruptedException e) {
434
			} catch (ProcessInterruptedException e) {
432 435
				// El usuario ha cancelado el proceso
433 436
			}
434 437

  
435
		/*EnhancementListManager elm = new EnhancementListManager(filterManager);
436
		elm.addEnhancedFilter(false, stats, 0.0, getRender().getRenderBands());*/
437

  
438
		EnhancementStretchListManager elm = new EnhancementStretchListManager(filterManager);
439
		try {
440
			elm.addEnhancedStretchFilter(LinearStretchParams.createStandardParam(getRenderBands(), 0.0, stats, false),
441
										stats,
442
										getRender().getRenderBands(),
443
										false);
444
		} catch (FileNotOpenException e) {
445
			//No podemos aplicar el filtro
446
		} catch (RasterDriverException e) {
447
			//No podemos aplicar el filtro
448
		}
438
			RasterFilterListManager enhancementManager = filterList.getManagerByID("EnhancementStretch");
439
			Params params = filterList.getEmptyFilterParams();
440
			params.setParam("stats", stats);
441
			params.setParam("remove", new Boolean(false));
442
			params.setParam("renderBands", getRender().getRenderBands());
443
			params.setParam("stretchs", null);//coge el LinearStretchParams por defecto
444
			enhancementManager.addFilter(params);
449 445
	}
450 446

  
451 447
	/**
......
1310 1306

  
1311 1307
	/*
1312 1308
	 * (non-Javadoc)
1313
	 * @see org.gvsig.fmap.raster.IRasterRendering#getRenderFilterList()
1314
	 */
1315
	public RasterFilterList getRenderFilterList() {
1316
		return getRender().getFilterList();
1317
	}
1318

  
1319
	/*
1320
	 * (non-Javadoc)
1321
	 * @see org.gvsig.raster.hierarchy.IRasterRendering#getRenderBands()
1322
	 */
1323
	public int[] getRenderBands() {
1324
		return getRender().getRenderBands();
1325
	}
1326

  
1327
	/*
1328
	 * (non-Javadoc)
1329
	 * @see org.gvsig.raster.hierarchy.IRasterRendering#setRenderBands(int[])
1330
	 */
1331
	public void setRenderBands(int[] renderBands) {
1332
		getRender().setRenderBands(renderBands);
1333
	}
1334

  
1335
	/*
1336
	 * (non-Javadoc)
1337 1309
	 * @see org.gvsig.raster.hierarchy.IRasterRendering#setRenderFilterList(org.gvsig.raster.grid.filter.RasterFilterList)
1338 1310
	 */
1339 1311
	public void setRenderFilterList(RasterFilterList filterList) {
......
1820 1792
	 * devolver? null.
1821 1793
	 * @return TreeMap con la lista de capas a dibujar
1822 1794
	 */
1823
	public HashMap getRasterStrategy() {
1795
	public HashMap<FLyrRasterSE, Boolean> getRasterStrategy() {
1824 1796
		if(strategy != null)
1825 1797
			return strategy.getStrategy();
1826 1798
		return null;
......
1897 1869
	 * @return
1898 1870
	 */
1899 1871
	public boolean isRenderingAsGray() {
1900
		int[] renderBands = getRenderBands();
1872
		int[] renderBands = getRender().getRenderBands();
1901 1873
		if ((renderBands != null) && (renderBands.length == 3) && (renderBands[0] >= 0) &&
1902 1874
				(renderBands[0] == renderBands[1]) && (renderBands[1] == renderBands[2]))
1903 1875
			return true;
......
1942 1914
		ArrayList<RasterFilter> filters = getRender().getFilterList().getStatusCloned();
1943 1915

  
1944 1916
		//Hacemos una copia de las bandas a renderizar
1945
		if(getRenderBands() != null) {
1946
			int[] rb = new int[getRenderBands().length];
1917
		if(getRender().getRenderBands() != null) {
1918
			int[] rb = new int[getRender().getRenderBands().length];
1947 1919
			for (int i = 0; i < rb.length; i++)
1948
				rb[i] = getRenderBands()[i];
1949
			newLayer.setRenderBands(rb);
1920
				rb[i] = getRender().getRenderBands()[i];
1921
			newLayer.getRender().setRenderBands(rb);
1950 1922
		}
1951 1923

  
1952 1924
		//Asignamos el entorno
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.fmap/src/main/java/org/gvsig/raster/fmap/layers/RasterDrawStrategy.java
25 25
import java.util.HashMap;
26 26

  
27 27
import org.gvsig.fmap.dal.coverage.datastruct.Extent;
28
import org.gvsig.fmap.dal.coverage.grid.RasterFilter;
28
import org.gvsig.fmap.dal.coverage.grid.render.Render;
29 29
import org.gvsig.fmap.dal.coverage.util.RasterUtilities;
30 30
import org.gvsig.fmap.mapcontext.MapContext;
31 31
import org.gvsig.fmap.mapcontext.layers.FLayer;
......
44 44
	/**
45 45
	 * Cada mapContext existente lleva asociadad una estrategia de dibujado
46 46
	 */
47
	public static HashMap        mapContextStrategy    = new HashMap();
47
	public static HashMap<MapContext, HashMap<FLyrRasterSE, Boolean>>        
48
	                             mapContextStrategy    = new HashMap<MapContext, HashMap<FLyrRasterSE, Boolean>> ();
48 49
	
49 50
	private MapContext           mapContext            = null;
50 51
	private FLyrRasterSE         lyrRaster             = null;
......
112 113
		if(mapContext == null || lyrRaster == null)
113 114
			return;
114 115
		
115
		ArrayList listLayers = new ArrayList();
116
		ArrayList<FLayer> listLayers = new ArrayList<FLayer>();
116 117
		FLayers lyrs = mapContext.getLayers();
117 118
		listLayers = getLayerList(lyrs, listLayers);
118 119
		
119
		ArrayList extentList = new ArrayList();
120
		ArrayList<LayerIntersection> extentList = new ArrayList<LayerIntersection>();
120 121
				
121 122
		//Solo la primera capa calcula la estrategia. Las dem?s se la preguntan a esta.
122 123
		
......
148 149
			return;
149 150
		}
150 151
		
151
		HashMap layersToPaint = new HashMap();
152
		HashMap<FLyrRasterSE, Boolean> layersToPaint = new HashMap<FLyrRasterSE, Boolean>();
152 153
		
153 154
		//Calculo de estrategia. Solo llega aqu? la primera capa.
154 155
		//La lista de capas en FLayers est? en orden inverso a lo que aparece en el TOC, es decir, la ?ltima capa
......
161 162
			
162 163
			FLyrRasterSE rLyr = ((FLyrRasterSE)lyr);
163 164
			
164
			if(rLyr.getRenderFilterList() == null || rLyr.getFullEnvelope() == null)
165
			if(rLyr.getRender().getFilterList() == null || rLyr.getFullEnvelope() == null)
165 166
				continue;
166 167
			
167 168
			//Si no est? activa y/o visible no se dibuja nunca 
......
184 185
			LayerIntersection li = areIntersecting(extentList, rLyr);
185 186
			if((i == (listLayers.size() - 1)) || li == null) {
186 187
				boolean colorTableAlpha = false;
187
				if(rLyr.getRenderFilterList() != null) { 
188
					RasterFilter rf = rLyr.getRenderFilterList().get("colortable");
189
					if(rf != null && rf instanceof ColorTableFilter) 
190
						colorTableAlpha = ((ColorTableFilter)rf).getColorTable().hasAlpha();
188
				if(rLyr.getRender().getFilterList() != null) { 
189
					Render render = rLyr.getRender();
190
					if(render != null) {
191
						if(render.getColorTable() != null)
192
							colorTableAlpha = render.getColorTable().hasAlpha();
193
					}
191 194
				}
192 195
				extentList.add(new LayerIntersection(rLyr.getFullRasterExtent(), (rLyr.existsAlphaBand() || rLyr.isTransparent() || colorTableAlpha)));
193 196
				layersToPaint.put(rLyr, new Boolean(true));
......
233 236
	 * @param lyr Capa raster
234 237
	 * @return 
235 238
	 */
236
	private LayerIntersection areIntersecting(ArrayList extentList, FLyrRasterSE lyr) {
239
	private LayerIntersection areIntersecting(ArrayList<LayerIntersection> extentList, FLyrRasterSE lyr) {
237 240
		for (int i = 0; i < extentList.size(); i++) {
238 241
			Extent ex = lyr.getFullRasterExtent();
239 242
			Extent ex1 = ((LayerIntersection)extentList.get(i)).extent;
......
249 252
	 *  
250 253
	 * @return TreeMap con la lista de capas a dibujar.
251 254
	 */
252
	public HashMap getStrategy() {
253
		return (HashMap)mapContextStrategy.get(mapContext);
255
	public HashMap<FLyrRasterSE, Boolean> getStrategy() {
256
		return (HashMap<FLyrRasterSE, Boolean>)mapContextStrategy.get(mapContext);
254 257
	}
255 258
}
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.fmap/src/main/java/org/gvsig/raster/fmap/layers/StatusLayerRaster.java
76 76
	
77 77
	//Filtros para poder montar una nueva pila
78 78
	public List<String>		        filters         = new ArrayList<String>();
79
	private IRasterProperties       layer           = null;
79
	private FLyrRasterSE            layer           = null;
80 80
	private int                     alphaBandNumber = -1;
81 81
	
82 82
	//Utilizado para la persistencia
......
85 85
	/* (non-Javadoc)
86 86
	 * @see com.iver.cit.gvsig.fmap.layers.StatusRasterInterface#setXMLEntity(com.iver.utiles.XMLEntity)
87 87
	 */
88
	public void loadFromState(PersistentState state, IRasterProperties layer)throws PersistenceException {
88
	public void loadFromState(PersistentState state, FLyrRasterSE layer)throws PersistenceException {
89 89
//		this.layer = layer;
90 90
//		//RECUPERAR PROPIEDADES
91 91
//		
......
163 163
		this.alphaBandNumber = state.getInt("alphaBandNumber");
164 164
		this.loadClass = state.getBoolean("loadClass");
165 165
		
166
		this.layer = (IRasterProperties) state.get("layer");
166
		this.layer = (FLyrRasterSE)state.get("layer");
167 167
		
168 168
		this.ranges = new ArrayList(state.getList("ranges"));
169 169
		this.files = new ArrayList(state.getList("files"));
......
186 186
	/* (non-Javadoc)
187 187
	 * @see com.iver.cit.gvsig.fmap.layers.StatusRasterInterface#getXMLEntity(com.iver.utiles.XMLEntity)
188 188
	 */
189
	public void setStateProperties(boolean loadClass, IRasterProperties layer) throws PersistenceException {
189
	public void setStateProperties(boolean loadClass, FLyrRasterSE layer) throws PersistenceException {
190 190
		this.layer = layer;
191 191
		this.loadClass = loadClass;
192 192
	}
......
289 289
	 */
290 290
	public static void enhancedCompV10(ArrayList<String> filterArguments, FLyrRasterSE layer, RasterFilterListManager filterListManager) throws FilterTypeException {
291 291
		boolean removed = false;
292
		RasterFilterList list = layer.getRenderFilterList();
292
		RasterFilterList list = layer.getRender().getFilterList();
293 293
		for (int i = 0; i < list.lenght(); i++) {
294 294
			RasterFilter f = list.get(i); 
295 295
			if(f instanceof TailTrimFilter || f instanceof LinearEnhancementFilter) { 
......
334 334
		RasterManager rManager = RasterLocator.getManager();
335 335
		try {
336 336
			RasterFilterListManager filterListManager = null;
337
			if(layer.getRenderFilterList() != null)
338
				filterListManager = new RasterFilterListManager(layer.getRenderFilterList());
337
			if(layer.getRender().getFilterList() != null)
338
				filterListManager = new RasterFilterListManager(layer.getRender().getFilterList());
339 339
			else {
340 340
				RasterFilterList fl = new RasterFilterList();
341 341
				fl.setInitDataType(Buffer.TYPE_BYTE);
......
353 353
	 * @see org.gvsig.fmap.raster.layers.IStatusRaster#getColorTable()
354 354
	 */
355 355
	public ColorTable getColorTable() throws FilterTypeException {
356
		RasterFilterList fl = getFilterList();
357
		for (int i = 0; i < fl.lenght(); i++) {
358
			if(fl.get(i) instanceof ColorTableFilter) 
359
				return (ColorTable) fl.get(i).getParam("colorTable");
360
		}
361
		return null;
356
		return layer.getRender().getColorTable();
362 357
	}
363 358
	
364 359
	/*
365 360
	 * (non-Javadoc)
366 361
	 * @see org.gvsig.fmap.raster.layers.IStatusRaster#getTransparency()
367 362
	 */
368
	public GridTransparency getTransparency() {		
363
	/*public GridTransparency getTransparency() {		
369 364
		//Asigna la transparencia
370 365
		GridTransparency transp = new GridTransparency();
371 366
		if(transparency != 255) { 
......
386 381
		}
387 382
		
388 383
		return (transp.isTransparencyActive()) ? transp : null;
389
	}
384
	}*/
390 385
	
391 386
	/*
392 387
	 * (non-Javadoc)
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.fmap/src/main/java/org/gvsig/raster/util/LayerVisualStatusList.java
125 125
				rendering.getFilterList().setStatus(status.filterStatus);
126 126
			lyr.getRender().setLastTransparency(status.transparency);
127 127
			if(lyr.isActionEnabled(IRasterLayerActions.REMOTE_ACTIONS))
128
				lyr.getRenderFilterList().setStatus(status.filterStatus);
128
				lyr.getRender().getFilterList().setStatus(status.filterStatus);
129 129
		}
130 130
	}
131 131
	
......
136 136
	public void getVisualStatus(FLyrRasterSE lyr) {
137 137
		LayerVisualStatus status = new LayerVisualStatus();
138 138
		status.transparency = lyr.getRenderTransparency();
139
		status.filterStatus = lyr.getRenderFilterList().getStatusCloned();
139
		status.filterStatus = lyr.getRender().getFilterList().getStatusCloned();
140 140
		add(status);
141 141
	}
142 142
}
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
39 39
import org.gvsig.fmap.dal.coverage.grid.FilterListChangeListener;
40 40
import org.gvsig.fmap.dal.coverage.grid.Grid;
41 41
import org.gvsig.fmap.dal.coverage.grid.GridTransparency;
42
import org.gvsig.fmap.dal.coverage.grid.RasterFilter;
42 43
import org.gvsig.fmap.dal.coverage.grid.RasterFilterList;
43 44
import org.gvsig.fmap.dal.coverage.grid.render.Render;
44 45
import org.gvsig.fmap.dal.coverage.grid.render.VisualPropertyEvent;
......
46 47
import org.gvsig.fmap.dal.coverage.store.RasterDataStore;
47 48
import org.gvsig.fmap.dal.coverage.store.RasterQuery;
48 49
import org.gvsig.fmap.dal.coverage.store.props.ColorInterpretation;
50
import org.gvsig.fmap.dal.coverage.store.props.ColorTable;
49 51
import org.gvsig.fmap.dal.coverage.util.PropertyEvent;
50 52
import org.gvsig.fmap.dal.coverage.util.PropertyListener;
51 53
import org.gvsig.fmap.dal.coverage.util.RasterUtilities;
......
544 546
	public boolean existColorTable() {
545 547
			return (filterList.getFilterByBaseClass(ColorTableFilter.class) != null);
546 548
	}
549
	
550
	/*
551
	 * (non-Javadoc)
552
	 * @see org.gvsig.fmap.dal.coverage.grid.render.Render#getColorTable()
553
	 */
554
	public ColorTable getColorTable() {
555
		if(existColorTable()) {
556
			RasterFilter f = filterList.getFilterByBaseClass(ColorTableFilter.class);
557
			return ((ColorTableFilter)f).getColorTable();
558
		}
559
		return null;
560
	}
547 561

  
548 562
	/**
549 563
	 * Obtiene el grid asociado al render
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
123 123
	 * @see org.gvsig.fmap.dal.coverage.grid.RasterFilterListManager#addFilter(org.gvsig.fmap.dal.coverage.datastruct.Params)
124 124
	 */
125 125
	public void addFilter(Params params) throws FilterTypeException {
126
		//Si stretch vale null se usan los par?metros por defecto de LinearStretchParams
127
		if(params.getParamById("stretchs").getDefaultValue() == null) {
128
			int[] rb = (int[])params.getParamById("renderBands").getDefaultValue();
129
			Statistics stats = (Statistics)params.getParamById("stats").getDefaultValue();
130
			boolean b = ((Boolean)params.getParamById("remove").getDefaultValue()).booleanValue();
131
			LinearStretchParams p = null;
132
			try {
133
				p = LinearStretchParams.createStandardParam(rb, 0.0, stats, b);
134
			} catch (FileNotOpenException e) {
135
				throw new FilterTypeException("", e);
136
			} catch (RasterDriverException e) {
137
				throw new FilterTypeException("", e);
138
			}
139
			params.setParam("stretchs", p);
140
			
141
		}
126 142
		addFilter(LinearStretchEnhancementFilter.class, params);
127 143
	}
128 144

  
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/store/properties/DatasetColorTable.java
118 118
		this.interpolated = palette.isInterpolated();
119 119
	}
120 120

  
121
	/**
122
	 * Asigna el nombre de la paleta
123
	 * @param Nombre de la paleta
121
	/*
122
	 * (non-Javadoc)
123
	 * @see org.gvsig.fmap.dal.coverage.store.props.ColorTable#setName(java.lang.String)
124 124
	 */
125 125
	public void setName(String name) {
126 126
		this.name = name;
127 127
	}
128 128

  
129
	/**
130
	 * Obtiene el nombre de la paleta
131
	 * @return Nombre de la paleta
129
	/*
130
	 * (non-Javadoc)
131
	 * @see org.gvsig.fmap.dal.coverage.store.props.ColorTable#getName()
132 132
	 */
133 133
	public String getName() {
134 134
		return name;
135 135
	}
136 136

  
137
	/**
138
	 * Crea una paleta a traves de una lista de colores y se le puede especificar
139
	 * si queremos que la comprima o no.
140
	 * @param colorItems
141
	 * @param compress
137
	/*
138
	 * (non-Javadoc)
139
	 * @see org.gvsig.fmap.dal.coverage.store.props.ColorTable#createPaletteFromColorItems(java.util.ArrayList, boolean)
142 140
	 */
143 141
	public void createPaletteFromColorItems(ArrayList<ColorItem> colorItems, boolean compress) {
144 142
		this.colorItems = colorItems;
......
260 258
		}
261 259
	}
262 260

  
261
	/*
262
	 * (non-Javadoc)
263
	 * @see org.gvsig.fmap.dal.coverage.store.props.ColorTable#hasAlpha()
264
	 */
263 265
	public boolean hasAlpha() {
264 266
		for (int i = 0; i<colorItems.size(); i++) {
265 267
			ColorItem colorItem = (ColorItem) colorItems.get(i);
......
350 352
		applyPalette(colorItems);
351 353
	}
352 354

  
353
	/**
354
	 * Obtiene la tabla de color por banda
355
	 * @return Paleta
355
	/*
356
	 * (non-Javadoc)
357
	 * @see org.gvsig.fmap.dal.coverage.store.props.ColorTable#getColorTableByBand()
356 358
	 */
357 359
	public byte[][] getColorTableByBand() {
358 360
		return paletteByBand;
......
511 513
	 * abajo. Esto hace que se reduzca la tabla a la mitad de valores haciendo
512 514
	 * solo una comparaci?n.
513 515
	 */
514
	/**
515
	 * Obtiene el valor RGB para un clave entera pasada por par?metro
516
	 * @param value clave de la cual se quiere obtener el valor RGB de la paleta
517
	 * @return valor RGB
516
	/*
517
	 * (non-Javadoc)
518
	 * @see org.gvsig.fmap.dal.coverage.store.props.ColorTable#getRGBAByBand(double)
518 519
	 */
519 520
	public byte[] getRGBAByBand(double value) {
520 521
		for (int i = 1; i <= range.length; i++) {
......
638 639
		this.range = range;
639 640
	}
640 641

  
641
	/**
642
	 * Devuelve un ArrayList con cada ColorItem de la tabla de color
643
	 * @return
642
	/*
643
	 * (non-Javadoc)
644
	 * @see org.gvsig.fmap.dal.coverage.store.props.ColorTable#getColorItems()
644 645
	 */
645 646
	public ArrayList<ColorItem> getColorItems() {
646 647
		return colorItems;
647 648
	}
648 649

  
649
	/**
650
	 * Nos indica si la paleta la ha generado con valores interpolados o no.
651
	 * @return
650
	/*
651
	 * (non-Javadoc)
652
	 * @see org.gvsig.fmap.dal.coverage.store.props.ColorTable#isInterpolated()
652 653
	 */
653 654
	public boolean isInterpolated() {
654 655
		return interpolated;
655 656
	}
656 657

  
657
	/**
658
	 * Definir si la paleta tendra los valores interpolados o no
659
	 * @param interpolated
658
	/*
659
	 * (non-Javadoc)
660
	 * @see org.gvsig.fmap.dal.coverage.store.props.ColorTable#setInterpolated(boolean)
660 661
	 */
661 662
	public void setInterpolated(boolean interpolated) {
662 663
		this.interpolated = interpolated;
......
842 843
		createPaletteFromColorItems(arrayList, compress);
843 844
	}
844 845
	
845
	/**
846
	 * Obtiene el flag de paleta activa o desactivada.
847
	 * @return true la paleta est? activa y false desactiva
846
	/*
847
	 * (non-Javadoc)
848
	 * @see org.gvsig.fmap.dal.coverage.store.props.ColorTable#isPaletteActive()
848 849
	 */
849 850
	public boolean isPaletteActive() {
850 851
		return paletteActive;
851 852
	}
852 853

  
853
	/**
854
	 * Asigna el flag de paleta activa o desactivada.
855
	 * @param paletteActive true activa la paleta false la desactiva
854
	/*
855
	 * (non-Javadoc)
856
	 * @see org.gvsig.fmap.dal.coverage.store.props.ColorTable#setPaletteActive(boolean)
856 857
	 */
857 858
	public void setPaletteActive(boolean paletteActive) {
858 859
		this.paletteActive = paletteActive;
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/store/properties/DatasetTransparency.java
26 26
import org.gvsig.fmap.dal.coverage.RasterLibrary;
27 27
import org.gvsig.fmap.dal.coverage.dataset.Buffer;
28 28
import org.gvsig.fmap.dal.coverage.datastruct.TransparencyRange;
29
import org.gvsig.fmap.dal.coverage.grid.GridTransparency;
29 30
import org.gvsig.fmap.dal.coverage.store.props.Transparency;
30 31
import org.gvsig.fmap.dal.coverage.util.PropertyEvent;
31 32
import org.gvsig.fmap.dal.coverage.util.PropertyListener;
32 33
import org.gvsig.raster.impl.DefaultRasterManager;
34
import org.gvsig.raster.impl.grid.GridTransparencyImpl;
33 35
import org.gvsig.tools.ToolsLocator;
34 36
import org.gvsig.tools.dynobject.DynStruct;
35 37
import org.gvsig.tools.persistence.PersistenceManager;
......
498 500
	public void activeTransparency() {
499 501
		
500 502
	}
503
	
504
	/*
505
	 * (non-Javadoc)
506
	 * @see org.gvsig.fmap.dal.coverage.store.props.Transparency#getGridTransparency()
507
	 */
508
	public GridTransparency getGridTransparency() {
509
		return new GridTransparencyImpl(this);
510
	}	
501 511

  
502 512
	public static void registerPersistent() {
503 513
		PersistenceManager manager = ToolsLocator.getPersistenceManager();
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/datastruct/persistence/DefaultColorTableLibrary.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.impl.datastruct.persistence;
23

  
24
import java.awt.Color;
25
import java.io.File;
26
import java.io.FileInputStream;
27
import java.io.FileNotFoundException;
28
import java.io.FileOutputStream;
29
import java.io.FileWriter;
30
import java.io.IOException;
31
import java.io.InputStream;
32
import java.io.InputStreamReader;
33
import java.io.OutputStreamWriter;
34
import java.io.StringReader;
35
import java.net.URL;
36
import java.util.ArrayList;
37

  
38
import org.gvsig.fmap.dal.coverage.datastruct.ColorItem;
39
import org.gvsig.fmap.dal.coverage.datastruct.ColorTableLibrary;
40
import org.gvsig.fmap.dal.coverage.store.props.ColorTable;
41
import org.gvsig.raster.impl.datastruct.ColorItemImpl;
42
import org.gvsig.raster.impl.store.properties.DatasetColorTable;
43
import org.kxml2.io.KXmlParser;
44
import org.kxml2.io.KXmlSerializer;
45
import org.xmlpull.v1.XmlPullParserException;
46
/**
47
 * La clase ColorTableLibraryPersistence sirve para controlar las tablas de color
48
 * genericas, como si fuera una libreria de tablas de color. Aqu? se comprueban
49
 * los cambios de versi?n.
50
 *
51
 * @version 02/07/2007
52
 * @author BorSanZa - Borja S?nchez Zamorano (borja.sanchez@iver.es)
53
 */
54
public class DefaultColorTableLibrary implements ColorTableLibrary {
55
	private static DefaultColorTableLibrary  instance = null;
56
	
57
	/**
58
	 * Gets the ColorTableLibrary
59
	 * @return
60
	 */
61
	public static ColorTableLibrary getInstance() {
62
		if(instance == null)
63
			instance = new DefaultColorTableLibrary();
64
		return instance;
65
	}
66
	
67
    /*
68
     * (non-Javadoc)
69
     * @see org.gvsig.fmap.dal.coverage.datastruct.ColorTableLibrary#createColorTable()
70
     */
71
    public ColorTable createColorTable() {
72
    	return new DatasetColorTable();
73
    }
74
    
75
	/**
76
	 * Devuelve la lista de ficheros de paletas, si no existe el fichero devolvera
77
	 * una lista vacia
78
	 * @param palettesBasePath
79
	 * @return
80
	 */
81
	private ArrayList<String> getPaletteFileListDisc(String palettesBasePath) {
82
		updateVersion(palettesBasePath);
83

  
84
		File paletteFiles = new File(palettesBasePath);
85

  
86
		ArrayList<String> fileList = new ArrayList<String>();
87

  
88
		if (paletteFiles.exists()) {
89
			File[] list = paletteFiles.listFiles();
90
			for (int i = 0; i < list.length; i++)
91
				fileList.add(list[i].getName());
92
		}
93

  
94
		return fileList;
95
	}
96

  
97
	/*
98
	 * (non-Javadoc)
99
	 * @see org.gvsig.fmap.dal.coverage.datastruct.ColorTableLibrary#getPaletteFileList(java.lang.String)
100
	 */
101
	public ArrayList<String> getPaletteFileList(String palettesBasePath) {
102
		return getPaletteFileList(palettesBasePath, true);
103
	}
104

  
105
	/**
106
	 * Devuelve la lista de ficheros de paletas, en caso de que no exista la
107
	 * paleta y se especifique forceCreate a true, se creara la paleta por defecto.
108
	 * @param palettesBasePath
109
	 * @param forceCreate
110
	 * @return
111
	 */
112
	public ArrayList<String> getPaletteFileList(String palettesBasePath, boolean forceCreate) {
113
		ArrayList <String>fileList = getPaletteFileListDisc(palettesBasePath);
114

  
115
		if (forceCreate && (fileList.size() == 0)) {
116
			DefaultColorTableLibrary persistence = new DefaultColorTableLibrary();
117
			createVersionFromXML(palettesBasePath, persistence.getDefaultPaletteXML());
118
			fileList = getPaletteFileListDisc(palettesBasePath);
119
		}
120

  
121
		return fileList;
122
	}
123

  
124
	/**
125
	 * Devuelve el XML de una paleta por defecto
126
	 * @return
127
	 */
128
	public String getDefaultPaletteXML() {
129
		URL url = getClass().getResource("xml/palettes.xml");
130
		StringBuffer contents = new StringBuffer();
131
		try {
132
			InputStream inputStream = url.openStream();
133

  
134
			int i;
135
			while (true) {
136
				i = inputStream.read();
137
				if (i == -1) break;
138
				char c = (char) i;
139
				contents.append(c);
140
			}
141
			inputStream.close();
142
		} catch (IOException e) {
143
			e.printStackTrace();
144
		}
145

  
146
		return contents.toString();
147
	}
148

  
149
	/**
150
	 * Crea los ficheros que forman la paleta de color de la version 1.1 a traves
151
	 * de un XML que se le pasa por parametro
152
	 * @param palettesPath
153
	 */
154
	private void createVersionFromXML(String palettesBasePath, String xml) {
155
		new File(palettesBasePath).mkdir();
156
		KXmlParser parser = new KXmlParser();
157
		StringReader reader = new StringReader(xml);
158
		try {
159
			parser.setInput(reader);
160
			int tag = parser.nextTag();
161

  
162
			parser.require(KXmlParser.START_TAG, null, "palettes");
163
			tag = parser.nextTag();
164
			parser.require(KXmlParser.START_TAG, null, "palette_list");
165
			parser.skipSubTree();
166
			parser.require(KXmlParser.END_TAG, null, "palette_list");
167
			tag = parser.nextTag();
168

  
169
			while (tag == KXmlParser.START_TAG) {
170
				parser.require(KXmlParser.START_TAG, null, "palette");
171
				if (parser.getAttributeCount() == 2) {
172
					// Generar nuevo fichero
173
					KXmlSerializer parserOutput = new KXmlSerializer();
174
					FileOutputStream fileOutputStream = new FileOutputStream(palettesBasePath + File.separator + parser.getAttributeValue(0) + ".xml");
175

  
176
					parserOutput.setOutput(fileOutputStream, null);
177
					parserOutput.startDocument("UTF-8", null);
178
					parserOutput.startTag(null, "ColorTable");
179
					parserOutput.attribute(null, "name", parser.getAttributeValue(0));
180
					parserOutput.attribute(null, "version", "1.1");
181

  
182
					tag = parser.nextTag();
183
					parser.require(KXmlParser.START_TAG, null, "table");
184
					tag = parser.nextTag();
185

  
186
					parserOutput.text("\n");
187
					ArrayList<ColorItem> items = new ArrayList<ColorItem>();
188
					while (tag == KXmlParser.START_TAG) {
189
						parser.require(KXmlParser.START_TAG, null, "entry");
190
						if (parser.getAttributeCount() == 3) {
191
							String rgb = parser.getAttributeValue(1).substring(parser.getAttributeValue(1).indexOf(",") + 1, parser.getAttributeValue(1).length());
192

  
193
							int a = Integer.valueOf(parser.getAttributeValue(1).substring(0, parser.getAttributeValue(1).indexOf(","))).intValue();
194
							int r = Integer.valueOf(rgb.substring(0, rgb.indexOf(","))).intValue();
195
							int g = Integer.valueOf(rgb.substring(rgb.indexOf(",") + 1, rgb.lastIndexOf(","))).intValue();
196
							int b = Integer.valueOf(rgb.substring(rgb.lastIndexOf(",") + 1, rgb.length())).intValue();
197

  
198
							ColorItem colorItem = new ColorItemImpl();
199
							colorItem.setColor(new Color(r, g, b, a));
200
							colorItem.setInterpolated(50);
201
							colorItem.setNameClass(parser.getAttributeValue(0));
202
							colorItem.setValue(Double.parseDouble(parser.getAttributeValue(2)));
203
							items.add(colorItem);
204
						}
205
						tag = parser.nextTag();
206
						parser.require(KXmlParser.END_TAG, null, "entry");
207
						tag = parser.nextTag();
208
					}
209
					parser.require(KXmlParser.END_TAG, null, "table");
210
					tag = parser.nextTag();
211

  
212
					ColorTable colorTable = new DatasetColorTable();
213
					colorTable.createPaletteFromColorItems(items, true);
214
					items = colorTable.getColorItems();
215
					for (int i = 0; i < items.size(); i++) {
216
						ColorItem colorItem = (ColorItem) items.get(i);
217
						parserOutput.startTag(null, "Color");
218
						parserOutput.attribute(null, "value", String.valueOf(colorItem.getValue()));
219
						parserOutput.attribute(null, "name", String.valueOf(colorItem.getNameClass()));
220
						Color color = colorItem.getColor();
221
						parserOutput.attribute(null, "rgb", String.valueOf(color.getRed() + "," + color.getGreen() + "," + color.getBlue()));
222
						parserOutput.attribute(null, "interpolated", String.valueOf(colorItem.getInterpolated()));
223
						parserOutput.endTag(null, "Color");
224
						parserOutput.text("\n");
225
					}
226

  
227
					for (int i = 0; i < items.size(); i++) {
228
						ColorItem colorItem = (ColorItem) items.get(i);
229
						parserOutput.startTag(null, "Alpha");
230
						parserOutput.attribute(null, "value", String.valueOf(colorItem.getValue()));
231
						parserOutput.attribute(null, "alpha", String.valueOf(colorItem.getColor().getAlpha()));
232
						parserOutput.attribute(null, "interpolated", String.valueOf(colorItem.getInterpolated()));
233
						parserOutput.endTag(null, "Alpha");
234
						parserOutput.text("\n");
235
					}
236

  
237
					parserOutput.endTag(null, "ColorTable");
238
					parserOutput.text("\n");
239
					parserOutput.endDocument();
240
					// Cerrar nuevo fichero
241
					fileOutputStream.close();
242
				}
243
				parser.require(KXmlParser.END_TAG, null, "palette");
244
				tag = parser.nextTag();
245
			}
246
			parser.require(KXmlParser.END_TAG, null, "palettes");
247
		} catch (XmlPullParserException xmlEx) {
248
			System.out.println("El fichero de paletas predeterminadas no tiene la estructura correcta:\n	" + xmlEx.getMessage());
249
		} catch (IOException e) {
250
		}
251
	}
252

  
253
	/**
254
	 * Si existe la version de paleta 1.1, no lo actualizar?, en caso contrario,
255
	 * buscara la version 1.0 y si lo encuentra lo subir? a la 1.1
256
	 * @param palettesPath
257
	 */
258
	public void updateVersion_1_0_to_1_1(String palettesBasePath) {
259
		// Si no existe la paleta antigua, pero si que existe la copia de seguridad,
260
		// la restauramos
261
		File palettesFile = new File(new File(palettesBasePath).getParent().toString() + File.separator + "palettes.xml");
262
		if (!palettesFile.exists()) {
263
			// Cambiar nombre a antiguo fichero
264
			File oldFile = new File(new File(palettesBasePath).getParent().toString() + File.separator + "palettes.xml~");
265
			if (oldFile.exists()) {
266
				oldFile.renameTo(new File(new File(palettesBasePath).getParent().toString() + File.separator + "palettes.xml"));
267
			} else {
268
				DefaultColorTableLibrary ctlp = new DefaultColorTableLibrary();
269
				String text = ctlp.getDefaultPaletteXML();
270
				palettesFile = new File(new File(palettesBasePath).getParent().toString() + File.separator + "palettes.xml");
271
				try {
272
					FileWriter writer = new FileWriter(palettesFile);
273
					writer.write(text);
274
					writer.close();
275
				} catch (IOException e) {
276
				}
277
			}
278
		}
279

  
280
		// Si existe el directorio de la version 1.1 no hacemos la migraci?n
281
		File directoryFile = new File(palettesBasePath);
282
		if (directoryFile.exists())
283
			return;
284

  
285
		// Si no encontramos la paleta antigua, nos olvidamos de continuar
286
		palettesFile = new File(new File(palettesBasePath).getParent().toString() + File.separator + "palettes.xml");
287
		if (!palettesFile.exists())
288
			return;
289

  
290
		// Paleta antigua encontrada, podemos migrar a la versi?n nueva
291
		try {
292
			FileInputStream inputStream = new FileInputStream(palettesFile);
293

  
294
			StringBuffer contents = new StringBuffer();
295
			try {
296

  
297
				int i;
298
				while (true) {
299
					i = inputStream.read();
300
					if (i == -1) break;
301
					char c = (char) i;
302
					contents.append(c);
303
				}
304
			} catch (IOException e) {
305
				e.printStackTrace();
306
			}
307

  
308
			createVersionFromXML(palettesBasePath, contents.toString());
309

  
310
			inputStream.close();
311

  
312
		} catch (FileNotFoundException fnfEx) {
313
			fnfEx.printStackTrace();
314
		} catch (IOException e) {
315
			e.printStackTrace();
316
		}
317
	}
318

  
319
	/**
320
	 * Si existe la version de paleta 1.0, la actualizara a la 1.1 y renombrar? la
321
	 * antigua version.
322
	 * @param palettesBasePath
323
	 * @param colorTable
324
	 */
325
	public void save_to_1_1(String palettesBasePath, ColorTable colorTable) {
326
		try {
327
			// Generar nuevo fichero
328
			KXmlSerializer parserOutput = new KXmlSerializer();
329
			FileOutputStream out = new FileOutputStream(palettesBasePath + File.separator + colorTable.getName() + ".xml");
330
			OutputStreamWriter writer = new OutputStreamWriter(out, "UTF8");
331
			parserOutput.setOutput(writer);
332
			parserOutput.startDocument("UTF-8", null);
333
			parserOutput.startTag(null, "ColorTable");
334
			parserOutput.attribute(null, "name", colorTable.getName());
335
			parserOutput.attribute(null, "version", "1.1");
336
			parserOutput.text("\n");
337

  
338
			ArrayList<ColorItem> items = colorTable.getColorItems();
339
			for (int i = 0; i < items.size(); i++) {
340
				ColorItem colorItem = (ColorItem) items.get(i);
341
				parserOutput.startTag(null, "Color");
342
				parserOutput.attribute(null, "value", String.valueOf(colorItem.getValue()));
343
				if (colorItem.getNameClass() != null)
344
					parserOutput.attribute(null, "name", String.valueOf(colorItem.getNameClass()));
345
				else
346
					parserOutput.attribute(null, "name", "");
347
				Color color = colorItem.getColor();
348
				parserOutput.attribute(null, "rgb", String.valueOf(color.getRed() + "," + color.getGreen() + "," + color.getBlue()));
349
				parserOutput.attribute(null, "interpolated", String.valueOf(colorItem.getInterpolated()));
350
				parserOutput.endTag(null, "Color");
351
				parserOutput.text("\n");
352
			}
353

  
354
			for (int i = 0; i < items.size(); i++) {
355
				ColorItem colorItem = (ColorItem) items.get(i);
356
				parserOutput.startTag(null, "Alpha");
357
				parserOutput.attribute(null, "value", String.valueOf(colorItem.getValue()));
358
				parserOutput.attribute(null, "alpha", String.valueOf(colorItem.getColor().getAlpha()));
359
				parserOutput.attribute(null, "interpolated", String.valueOf(colorItem.getInterpolated()));
360
				parserOutput.endTag(null, "Alpha");
361
				parserOutput.text("\n");
362
			}
363

  
364
			parserOutput.endTag(null, "ColorTable");
365
			parserOutput.text("\n");
366
			parserOutput.endDocument();
367
			// Cerrar nuevo fichero
368
			writer.close();
369
		} catch (FileNotFoundException e) {
370
			e.printStackTrace();
371
		} catch (IOException e) {
372
			e.printStackTrace();
373
		}
374
	}
375

  
376
	/**
377
	 * Invocar? todos los metodos de actualizaciones de version
378
	 * @param palettesBasePath
379
	 */
380
	public void updateVersion(String palettesBasePath) {
381
		updateVersion_1_0_to_1_1(palettesBasePath);
382
		//updateVersion_1_1_to_1_2(palettesBasePath);
383
	}
384

  
385
	/**
386
	 * Devuelve el color si lo encuentra en el arraylist y lo elimina, en caso
387
	 * contrario devuelve null
388
	 * @param list
389
	 * @param value
390
	 * @return
391
	 */
392
	public ColorItem getColorItem(ArrayList<ColorItem> list, double value) {
393
		for (int i = 0; i < list.size(); i++) {
394
			if (((ColorItem) list.get(i)).getValue() == value) {
395
				return (ColorItem) list.remove(i);
396
			}
397
		}
398
		return null;
399
	}
400

  
401
	/*
402
	 * (non-Javadoc)
403
	 * @see org.gvsig.fmap.dal.coverage.datastruct.ColorTableLibrary#loadPalette(java.lang.String, java.lang.String, java.util.ArrayList)
404
	 */
405
	public String loadPalette(String palettesBasePath, String paletteFileName, ArrayList<ColorItem> items) {
406
		updateVersion(palettesBasePath);
407

  
408
		items.clear();
409

  
410
		File palettesFile = new File(palettesBasePath + File.separator + paletteFileName);
411
		if (!palettesFile.exists())
412
			return null;
413

  
414
		try {
415
			String paletteName = "";
416
			ArrayList<ColorItem> rows = new ArrayList<ColorItem>();
417

  
418
			KXmlParser parser = new KXmlParser();
419
			FileInputStream in = new FileInputStream(palettesBasePath + File.separator + paletteFileName);
420

  
421
			InputStreamReader reader = new InputStreamReader(in, "UTF8");
422
			parser.setInput(reader);
423
			int tag = parser.nextTag();
424

  
425
			parser.require(KXmlParser.START_TAG, null, "ColorTable");
426
			for (int i = 0; i < parser.getAttributeCount(); i++) {
427
				if (parser.getAttributeName(i).equals("name")) {
428
					paletteName = parser.getAttributeValue(i);
429
				}
430
			}
431
			tag = parser.nextTag();
432

  
433
			while (!((tag == KXmlParser.END_TAG) && (parser.getName().equals("ColorTable")))) {
434
				try {
435
					if (tag == KXmlParser.START_TAG) {
436
						if (parser.getName().equals("Color")) {
437
							ColorItem colorItem = new ColorItemImpl();
438
							int a = 255;
439
							for (int i = 0; i < parser.getAttributeCount(); i++) {
440
								if (parser.getAttributeName(i).equals("value")) {
441
									colorItem.setValue(Double.parseDouble((String) parser.getAttributeValue(i)));
442
									ColorItem aux = getColorItem(rows, Double.parseDouble((String) parser.getAttributeValue(i)));
443
									if (aux != null)
444
										a = aux.getColor().getAlpha();
445
								}
446
								if (parser.getAttributeName(i).equals("name")) {
447
									colorItem.setNameClass((String) parser.getAttributeValue(i));
448
								}
449
								if (parser.getAttributeName(i).equals("rgb")) {
450
									String rgb = parser.getAttributeValue(i);
451
									int r = Integer.valueOf(rgb.substring(0, rgb.indexOf(","))).intValue();
452
									int g = Integer.valueOf(rgb.substring(rgb.indexOf(",") + 1, rgb.lastIndexOf(","))).intValue();
453
									int b = Integer.valueOf(rgb.substring(rgb.lastIndexOf(",") + 1, rgb.length())).intValue();
454

  
455
									colorItem.setColor(new Color(r, g, b, a));
456
								}
457
								if (parser.getAttributeName(i).equals("interpolated")) {
458
									colorItem.setInterpolated(Double.parseDouble((String) parser.getAttributeValue(i)));
459
								}
460
							}
461

  
462
							rows.add(colorItem);
463
							continue;
464
						}
465
						if (parser.getName().equals("Alpha")) {
466
							ColorItem colorItem = new ColorItemImpl();
467
							for (int i = 0; i < parser.getAttributeCount(); i++) {
468
								if (parser.getAttributeName(i).equals("value")) {
469
									colorItem.setValue(Double.parseDouble((String) parser.getAttributeValue(i)));
470
									ColorItem aux = getColorItem(rows, Double.parseDouble((String) parser.getAttributeValue(i)));
471
									if (aux != null) {
472
										colorItem.setNameClass(aux.getNameClass());
473
										colorItem.setInterpolated(aux.getInterpolated());
474
										colorItem.setColor(new Color(aux.getColor().getRed(), aux.getColor().getGreen(), aux.getColor().getBlue(), colorItem.getColor().getAlpha()));
475
									}
476
								}
477
								if (parser.getAttributeName(i).equals("alpha")) {
478
									int a = Integer.parseInt(parser.getAttributeValue(i));
479

  
480
									colorItem.setColor(new Color(colorItem.getColor().getRed(), colorItem.getColor().getGreen(), colorItem.getColor().getBlue(), a));
481
								}
482
								if (parser.getAttributeName(i).equals("interpolated")) {
483
									colorItem.setInterpolated(Double.parseDouble((String) parser.getAttributeValue(i)));
484
								}
485
							}
486

  
487
							rows.add(colorItem);
488
							continue;
489
						}
490
					}
491
				} finally {
492
					tag = parser.nextTag();
493
				}
494
			}
495

  
496
			for (int i = 0; i < rows.size(); i++)
497
				items.add(rows.get(i));
498

  
499
			reader.close();
500
			return paletteName;
501
		} catch (FileNotFoundException fnfEx) {
502
			fnfEx.printStackTrace();
503
		} catch (XmlPullParserException xmlEx) {
504
			System.out.println("El fichero de paletas predeterminadas no tiene la estructura correcta:\n	" + xmlEx.getMessage());
505
		} catch (IOException e) {
506
		}
507
		return null;
508
	}
509
}
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/datastruct/persistence/xml/palettes.xml
1
<?xml version="1.0" encoding="ISO-8859-1"?>
2
<palettes>
3
	<palette_list>
4
		<name>Ninguna</name>
5
		<name>Default</name>
6
		<name>purple-red+stripes</name>
7
		<name>blue-white</name>
8
		<name>ocean</name>
9
		<name>red-temperature</name>
10
		<name>16level</name>
11
		<name>blue-green-red-yellow</name>
12
		<name>blue-pastel-red</name>
13
		<name>blue-red</name>
14
		<name>blue-waves</name>
15
		<name>green-red-blue</name>
16
		<name>green-white-exponential</name>
17
		<name>hardcandy</name>
18
		<name>haze</name>
19
		<name>mac-style</name>
20
		<name>nature</name>
21
		<name>pastels</name>
22
		<name>plasma</name>
23
		<name>prism</name>
24
		<name>rainbow</name>
25
		<name>red-purple</name>
26
		<name>std-gamma-II</name>
27
		<name>steps</name>
28
		<name>stern-special</name>
29
		<name>MDT1</name>
30
		<name>MDT2</name>
31
		<name>CLASIFICACION</name>
32
	</palette_list>
33

  
34
	<palette name="Default" interpolate="false">
35
		<table>
36
			<entry class="" argb="255,0,0,0" value="0" />
37
			<entry class="" argb="255,255,255,255" value="255" />
38
		</table>
39
	</palette>
40

  
41
	<palette name="purple-red+stripes" interpolate="false">
42
		<table>
43
			<entry class="" argb="255,0,0,0" value="0" />
44
			<entry class="" argb="255,0,0,0" value="1" />
45
			<entry class="" argb="255,127,127,127" value="2" />
46
			<entry class="" argb="255,191,0,191" value="3" />
47
			<entry class="" argb="255,188,0,192" value="4" />
48
			<entry class="" argb="255,186,0,192" value="5" />
49
			<entry class="" argb="255,184,0,193" value="6" />
50
			<entry class="" argb="255,182,0,194" value="7" />
51
			<entry class="" argb="255,179,0,195" value="8" />
52
			<entry class="" argb="255,177,0,195" value="9" />
53
			<entry class="" argb="255,140,0,157" value="10" />
54
			<entry class="" argb="255,138,0,157" value="11" />
55
			<entry class="" argb="255,170,0,198" value="12" />
56
			<entry class="" argb="255,168,0,198" value="13" />
57
			<entry class="" argb="255,165,0,199" value="14" />
58
			<entry class="" argb="255,163,0,200" value="15" />
59
			<entry class="" argb="255,161,0,201" value="16" />
60
			<entry class="" argb="255,158,0,202" value="17" />
61
			<entry class="" argb="255,156,0,202" value="18" />
62
			<entry class="" argb="255,154,0,203" value="19" />
63
			<entry class="" argb="255,121,0,163" value="20" />
64
			<entry class="" argb="255,119,0,164" value="21" />
65
			<entry class="" argb="255,147,0,205" value="22" />
66
			<entry class="" argb="255,145,0,206" value="23" />
67
			<entry class="" argb="255,142,0,207" value="24" />
68
			<entry class="" argb="255,140,0,208" value="25" />
69
			<entry class="" argb="255,138,0,208" value="26" />
70
			<entry class="" argb="255,135,0,209" value="27" />
71
			<entry class="" argb="255,133,0,210" value="28" />
72
			<entry class="" argb="255,131,0,211" value="29" />
73
			<entry class="" argb="255,103,0,169" value="30" />
74
			<entry class="" argb="255,101,0,170" value="31" />
75
			<entry class="" argb="255,124,0,213" value="32" />
76
			<entry class="" argb="255,122,0,214" value="33" />
77
			<entry class="" argb="255,119,0,215" value="34" />
78
			<entry class="" argb="255,117,0,215" value="35" />
79
			<entry class="" argb="255,115,0,216" value="36" />
80
			<entry class="" argb="255,112,0,217" value="37" />
81
			<entry class="" argb="255,110,0,218" value="38" />
82
			<entry class="" argb="255,108,0,218" value="39" />
83
			<entry class="" argb="255,84,0,175" value="40" />
84
			<entry class="" argb="255,82,0,176" value="41" />
85
			<entry class="" argb="255,101,0,221" value="42" />
86
			<entry class="" argb="255,99,0,221" value="43" />
87
			<entry class="" argb="255,96,0,222" value="44" />
88
			<entry class="" argb="255,94,0,223" value="45" />
89
			<entry class="" argb="255,92,0,224" value="46" />
90
			<entry class="" argb="255,89,0,225" value="47" />
91
			<entry class="" argb="255,87,0,225" value="48" />
92
			<entry class="" argb="255,85,0,226" value="49" />
93
			<entry class="" argb="255,66,0,181" value="50" />
94
			<entry class="" argb="255,64,0,182" value="51" />
95
			<entry class="" argb="255,78,0,228" value="52" />
96
			<entry class="" argb="255,76,0,229" value="53" />
97
			<entry class="" argb="255,73,0,230" value="54" />
98
			<entry class="" argb="255,71,0,231" value="55" />
99
			<entry class="" argb="255,69,0,231" value="56" />
100
			<entry class="" argb="255,66,0,232" value="57" />
101
			<entry class="" argb="255,64,0,233" value="58" />
102
			<entry class="" argb="255,62,0,234" value="59" />
103
			<entry class="" argb="255,47,0,188" value="60" />
104
			<entry class="" argb="255,46,0,188" value="61" />
105
			<entry class="" argb="255,55,0,236" value="62" />
106
			<entry class="" argb="255,52,0,237" value="63" />
107
			<entry class="" argb="255,50,0,238" value="64" />
108
			<entry class="" argb="255,48,0,238" value="65" />
109
			<entry class="" argb="255,46,0,239" value="66" />
110
			<entry class="" argb="255,43,0,240" value="67" />
111
			<entry class="" argb="255,41,0,241" value="68" />
112
			<entry class="" argb="255,39,0,241" value="69" />
113
			<entry class="" argb="255,29,0,194" value="70" />
114
			<entry class="" argb="255,27,0,194" value="71" />
115
			<entry class="" argb="255,32,0,244" value="72" />
116
			<entry class="" argb="255,29,0,245" value="73" />
117
			<entry class="" argb="255,27,0,245" value="74" />
118
			<entry class="" argb="255,25,0,246" value="75" />
119
			<entry class="" argb="255,23,0,247" value="76" />
120
			<entry class="" argb="255,20,0,248" value="77" />
121
			<entry class="" argb="255,18,0,248" value="78" />
122
			<entry class="" argb="255,16,0,249" value="79" />
123
			<entry class="" argb="255,11,0,200" value="80" />
124
			<entry class="" argb="255,9,0,200" value="81" />
125
			<entry class="" argb="255,9,0,251" value="82" />
126
			<entry class="" argb="255,6,0,252" value="83" />
127
			<entry class="" argb="255,4,0,253" value="84" />
128
			<entry class="" argb="255,2,0,254" value="85" />
129
			<entry class="" argb="255,0,0,255" value="86" />
130
			<entry class="" argb="255,0,6,255" value="87" />
131
			<entry class="" argb="255,0,12,255" value="88" />
132
			<entry class="" argb="255,0,18,255" value="89" />
133
			<entry class="" argb="255,0,19,204" value="90" />
134
			<entry class="" argb="255,0,24,204" value="91" />
135
			<entry class="" argb="255,0,36,255" value="92" />
136
			<entry class="" argb="255,0,42,255" value="93" />
137
			<entry class="" argb="255,0,48,255" value="94" />
138
			<entry class="" argb="255,0,54,255" value="95" />
139
			<entry class="" argb="255,0,60,255" value="96" />
140
			<entry class="" argb="255,0,66,255" value="97" />
141
			<entry class="" argb="255,0,72,255" value="98" />
142
			<entry class="" argb="255,0,78,255" value="99" />
143
			<entry class="" argb="255,0,68,204" value="100" />
144
			<entry class="" argb="255,0,72,204" value="101" />
145
			<entry class="" argb="255,0,97,255" value="102" />
146
			<entry class="" argb="255,0,103,255" value="103" />
147
			<entry class="" argb="255,0,109,255" value="104" />
148
			<entry class="" argb="255,0,115,255" value="105" />
149
			<entry class="" argb="255,0,121,255" value="106" />
150
			<entry class="" argb="255,0,127,255" value="107" />
151
			<entry class="" argb="255,0,133,255" value="108" />
152
			<entry class="" argb="255,0,139,255" value="109" />
153
			<entry class="" argb="255,0,116,204" value="110" />
154
			<entry class="" argb="255,0,121,204" value="111" />
155
			<entry class="" argb="255,0,157,255" value="112" />
156
			<entry class="" argb="255,0,163,255" value="113" />
157
			<entry class="" argb="255,0,170,255" value="114" />
158
			<entry class="" argb="255,0,176,255" value="115" />
159
			<entry class="" argb="255,0,182,255" value="116" />
160
			<entry class="" argb="255,0,188,255" value="117" />
161
			<entry class="" argb="255,0,194,255" value="118" />
162
			<entry class="" argb="255,0,200,255" value="119" />
163
			<entry class="" argb="255,0,165,204" value="120" />
164
			<entry class="" argb="255,0,170,204" value="121" />
165
			<entry class="" argb="255,0,218,255" value="122" />
166
			<entry class="" argb="255,0,224,255" value="123" />
167
			<entry class="" argb="255,0,230,255" value="124" />
168
			<entry class="" argb="255,0,236,255" value="125" />
169
			<entry class="" argb="255,0,242,255" value="126" />
170
			<entry class="" argb="255,0,248,255" value="127" />
171
			<entry class="" argb="255,0,255,255" value="128" />
172
			<entry class="" argb="255,0,255,248" value="129" />
173
			<entry class="" argb="255,0,204,194" value="130" />
174
			<entry class="" argb="255,0,204,189" value="131" />
175
			<entry class="" argb="255,0,255,230" value="132" />
176
			<entry class="" argb="255,0,255,224" value="133" />
177
			<entry class="" argb="255,0,255,218" value="134" />
178
			<entry class="" argb="255,0,255,212" value="135" />
179
			<entry class="" argb="255,0,255,206" value="136" />
180
			<entry class="" argb="255,0,255,200" value="137" />
181
			<entry class="" argb="255,0,255,194" value="138" />
182
			<entry class="" argb="255,0,255,188" value="139" />
183
			<entry class="" argb="255,0,204,145" value="140" />
184
			<entry class="" argb="255,0,204,140" value="141" />
185
			<entry class="" argb="255,0,255,169" value="142" />
186
			<entry class="" argb="255,0,255,163" value="143" />
187
			<entry class="" argb="255,0,255,157" value="144" />
188
			<entry class="" argb="255,0,255,151" value="145" />
189
			<entry class="" argb="255,0,255,145" value="146" />
190
			<entry class="" argb="255,0,255,139" value="147" />
191
			<entry class="" argb="255,0,255,133" value="148" />
192
			<entry class="" argb="255,0,255,127" value="149" />
193
			<entry class="" argb="255,0,204,97" value="150" />
194
			<entry class="" argb="255,0,204,92" value="151" />
195
			<entry class="" argb="255,0,255,109" value="152" />
196
			<entry class="" argb="255,0,255,103" value="153" />
197
			<entry class="" argb="255,0,255,97" value="154" />
198
			<entry class="" argb="255,0,255,91" value="155" />
199
			<entry class="" argb="255,0,255,84" value="156" />
200
			<entry class="" argb="255,0,255,78" value="157" />
201
			<entry class="" argb="255,0,255,72" value="158" />
202
			<entry class="" argb="255,0,255,66" value="159" />
203
			<entry class="" argb="255,0,204,48" value="160" />
204
			<entry class="" argb="255,0,204,43" value="161" />
205
			<entry class="" argb="255,0,255,48" value="162" />
206
			<entry class="" argb="255,0,255,42" value="163" />
207
			<entry class="" argb="255,0,255,36" value="164" />
208
			<entry class="" argb="255,0,255,30" value="165" />
209
			<entry class="" argb="255,0,255,24" value="166" />
210
			<entry class="" argb="255,0,255,18" value="167" />
211
			<entry class="" argb="255,0,255,12" value="168" />
212
			<entry class="" argb="255,0,255,6" value="169" />
213
			<entry class="" argb="255,0,204,0" value="170" />
214
			<entry class="" argb="255,4,204,0" value="171" />
215
			<entry class="" argb="255,12,255,0" value="172" />
216
			<entry class="" argb="255,18,255,0" value="173" />
217
			<entry class="" argb="255,24,255,0" value="174" />
218
			<entry class="" argb="255,30,255,0" value="175" />
219
			<entry class="" argb="255,36,255,0" value="176" />
220
			<entry class="" argb="255,42,255,0" value="177" />
221
			<entry class="" argb="255,48,255,0" value="178" />
222
			<entry class="" argb="255,54,255,0" value="179" />
223
			<entry class="" argb="255,48,204,0" value="180" />
224
			<entry class="" argb="255,53,204,0" value="181" />
225
			<entry class="" argb="255,72,255,0" value="182" />
226
			<entry class="" argb="255,78,255,0" value="183" />
227
			<entry class="" argb="255,85,255,0" value="184" />
228
			<entry class="" argb="255,91,255,0" value="185" />
229
			<entry class="" argb="255,97,255,0" value="186" />
230
			<entry class="" argb="255,103,255,0" value="187" />
231
			<entry class="" argb="255,109,255,0" value="188" />
232
			<entry class="" argb="255,115,255,0" value="189" />
233
			<entry class="" argb="255,97,204,0" value="190" />
234
			<entry class="" argb="255,102,204,0" value="191" />
235
			<entry class="" argb="255,133,255,0" value="192" />
236
			<entry class="" argb="255,139,255,0" value="193" />
237
			<entry class="" argb="255,145,255,0" value="194" />
238
			<entry class="" argb="255,151,255,0" value="195" />
239
			<entry class="" argb="255,157,255,0" value="196" />
240
			<entry class="" argb="255,163,255,0" value="197" />
241
			<entry class="" argb="255,170,255,0" value="198" />
242
			<entry class="" argb="255,176,255,0" value="199" />
243
			<entry class="" argb="255,145,204,0" value="200" />
244
			<entry class="" argb="255,150,204,0" value="201" />
245
			<entry class="" argb="255,194,255,0" value="202" />
246
			<entry class="" argb="255,200,255,0" value="203" />
247
			<entry class="" argb="255,206,255,0" value="204" />
248
			<entry class="" argb="255,212,255,0" value="205" />
249
			<entry class="" argb="255,218,255,0" value="206" />
250
			<entry class="" argb="255,224,255,0" value="207" />
251
			<entry class="" argb="255,230,255,0" value="208" />
252
			<entry class="" argb="255,236,255,0" value="209" />
253
			<entry class="" argb="255,194,204,0" value="210" />
254
			<entry class="" argb="255,199,204,0" value="211" />
255
			<entry class="" argb="255,255,255,0" value="212" />
256
			<entry class="" argb="255,255,248,2" value="213" />
257
			<entry class="" argb="255,255,242,5" value="214" />
258
			<entry class="" argb="255,255,235,7" value="215" />
259
			<entry class="" argb="255,255,229,10" value="216" />
260
			<entry class="" argb="255,255,223,12" value="217" />
261
			<entry class="" argb="255,255,216,15" value="218" />
262
			<entry class="" argb="255,255,210,17" value="219" />
263
			<entry class="" argb="255,204,163,16" value="220" />
264
			<entry class="" argb="255,204,158,18" value="221" />
265
			<entry class="" argb="255,255,191,25" value="222" />
266
			<entry class="" argb="255,255,184,28" value="223" />
267
			<entry class="" argb="255,255,178,30" value="224" />
268
			<entry class="" argb="255,255,172,33" value="225" />
269
			<entry class="" argb="255,255,165,35" value="226" />
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff