Revision 237

View differences:

org.gvsig.raster.app/trunk/org.gvsig.raster.app/org.gvsig.raster.app.wmtsclient/src/main/java/org/gvsig/raster/app/extension/wmtsclient/gui/dialog/WMTSPropsDialog.java
36 36
import org.gvsig.app.gui.wizards.WizardListener;
37 37
import org.gvsig.app.gui.wizards.WizardListenerSupport;
38 38
import org.gvsig.fmap.dal.coverage.explorer.WMTSServerExplorer;
39
import org.gvsig.fmap.mapcontext.MapContext;
40
import org.gvsig.fmap.mapcontext.exceptions.LoadLayerException;
39 41
import org.gvsig.fmap.mapcontext.layers.FLayer;
42
import org.gvsig.fmap.mapcontext.layers.FLayers;
43
import org.gvsig.fmap.mapcontrol.MapControl;
40 44
import org.gvsig.gui.beans.buttonspanel.ButtonsPanel;
45
import org.gvsig.gui.beans.buttonspanel.ButtonsPanelEvent;
46
import org.gvsig.gui.beans.buttonspanel.ButtonsPanelListener;
41 47
import org.gvsig.raster.app.extension.wmtsclient.gui.panel.WMTSParamsPanel;
42 48
import org.gvsig.raster.app.extension.wmtsclient.layer.FLyrWMTS;
43 49
import org.gvsig.raster.util.CancelTaskImpl;
......
50 56
 *
51 57
 * @author Nacho Brodin (nachobrodin@gmail.com)
52 58
 */
53
public class WMTSPropsDialog extends JPanel implements IWindow {
59
public class WMTSPropsDialog extends JPanel implements IWindow, ButtonsPanelListener {
54 60
	private static final long         serialVersionUID      = 1L;
55 61
	private FLyrWMTS                  fLayer                = null;
56 62
	private WindowInfo                m_ViewInfo            = null;
......
97 103
	public ButtonsPanel getButtonsPanel() {
98 104
		if(buttonsPanel == null) {
99 105
			buttonsPanel = new ButtonsPanel(ButtonsPanel.BUTTONS_ACCEPTCANCELAPPLY);
106
			buttonsPanel.addButtonPressedListener(this);
100 107
		}
101 108
		return buttonsPanel;
102 109
	}
......
129 136
	 *
130 137
	 * @return WMSParamsPanel
131 138
	 */
132
	@SuppressWarnings({ "unchecked", "deprecation" })
139
	@SuppressWarnings({ "unchecked"})
133 140
	public WMTSParamsPanel getParamsPanel(HashMap info) {
134 141
		if (info == null) {
135 142
			WMTSParamsPanel toc = new WMTSParamsPanel();
......
162 169
			toc.setListenerSupport(new WizardListenerSupport());
163 170

  
164 171
			String selectedLayer = (String) info.get("selectedLayer");
165
			toc.setLayerName(selectedLayer);
172
			toc.setSelectedLayer(selectedLayer);
166 173

  
167 174
			// srs
168 175
			String srs = (String) info.get("srs");
......
185 192
				toc.getInfoFormats().setSelectedIndex(index);
186 193
			}
187 194

  
188
			// styles
189
			/* Vector v = (Vector) info.get("styles");
190
                if (v != null) {
191
					toc.setStyleSelections(v);
192
				}*/
193

  
194 195
			toc.refreshInfo();
195 196
			toc.refreshData();
196 197
			return toc;
......
201 202
		return null;
202 203
	}
203 204

  
204
    private class CommandListener implements ActionListener {
205
    @SuppressWarnings("unused")
206
	private class CommandListener implements ActionListener {
205 207

  
206 208
        /**
207 209
         * Creates a new ComandosListener object.
......
209 211
         * @param lg DOCUMENT ME!
210 212
         */
211 213
        public CommandListener(WMTSPropsDialog tp) {
212
            //m_tp = tp;
213 214
        }
214 215

  
215 216
		/* (non-Javadoc)
216 217
		 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
217 218
		 */
218
        @SuppressWarnings({ "unchecked" })
219 219
        public void actionPerformed(ActionEvent e) {
220
        	/*if (e.getActionCommand() == "CANCEL") {
220
        	if (e.getActionCommand() == "CANCEL") {
221 221
        		close();
222 222
        	} else {
223
        		try {
224
        			((FLyrWMTS) fLayer).setFullExtent(wmtsParamsTabbedPane.getLayersRectangle());
225
        		} catch (ProjectionLayerException ex) {
226
        			ex.printStackTrace();
227
        			JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(), ex.getMessage());
228
        			return;
229
        		}
230
        		((FLyrWMTS) fLayer).getParameters().setImageFormat((String)wmtsParamsTabbedPane.getImageFormats().getSelectedValue());
231
        		((FLyrWMTS) fLayer).getParameters().setInfoFormat((String)wmtsParamsTabbedPane.getInfoFormats().getSelectedValue());
232
        		try {
233
        			((FLyrWMTS) fLayer).getParameters().setSRS((String)wmtsParamsTabbedPane.getLstSRSs().getSelectedValue());
234
        			((FLyrWMTS) fLayer).getParameters().setTitle(wmtsParamsTabbedPane.getLayerName());
235
        			//((FLyrWMTS) fLayer).getParameters().setStyles(wmtsParamsTabbedPane.getStyles());
223
   				MapControl mapCtrl = null;
236 224

  
237
        			//fLayer = wmsParamsTabbedPane.getLayer();
238
        			FLayers parent = ((FLayer)fLayer).getParentLayer();
239

  
240
        			if (e.getActionCommand() == "APPLY") {
241
        				MapControl mapCtrl = null;
242

  
243
        				IWindow[] w = PluginServices.getMDIManager().getAllWindows();
244
        				for (int i = 0; i < w.length; i++) {
245
        					if (w[i] instanceof org.gvsig.app.project.documents.view.gui.DefaultViewPanel) {
246
        						MapContext mapContext = ((org.gvsig.app.project.documents.view.gui.DefaultViewPanel)w[i]).getMapControl().getMapContext();
247
        						if(mapContext == fLayer.getMapContext())
248
        							mapCtrl = ((org.gvsig.app.project.documents.view.gui.DefaultViewPanel)w[i]).getMapControl();
249
        					}
250
        				} 
251

  
252
        				mapCtrl.getMapContext().getLayers().replaceLayer(
253
    							fLayer.getName(), 
254
    							wmtsParamsTabbedPane.getLayer());
255
        				mapCtrl.getMapContext().invalidate();
256
        				applied = true;
257
        				getButtonsPanel().getButton(ButtonsPanel.BUTTON_APPLY).setEnabled(!applied);
225
				IWindow[] w = PluginServices.getMDIManager().getAllWindows();
226
				for (int i = 0; i < w.length; i++) {
227
					if (w[i] instanceof org.gvsig.app.project.documents.view.gui.DefaultViewPanel) {
228
						MapContext mapContext = ((org.gvsig.app.project.documents.view.gui.DefaultViewPanel)w[i]).getMapControl().getMapContext();
229
						if(mapContext == fLayer.getMapContext())
230
							mapCtrl = ((org.gvsig.app.project.documents.view.gui.DefaultViewPanel)w[i]).getMapControl();
231
					}
232
				}
233
				
234
        		try {
235
        			FLayer[] layerList = wmtsParamsTabbedPane.getLayers();
236
        			removeDuplicate(layerList, mapCtrl);
237
        			for (int i = 0; i < layerList.length; i++) {
238
        				mapCtrl.getMapContext().getLayers().addLayer(layerList[i]);
258 239
        			}
259
        			
260
        			if (e.getActionCommand() == "OK") {
261
        				if (!applied) {
262
        					org.gvsig.app.project.documents.view.gui.DefaultViewPanel vista = (org.gvsig.app.project.documents.view.gui.DefaultViewPanel) PluginServices.getMDIManager().getActiveWindow();
263
        					MapControl mapCtrl = vista.getMapControl();
264

  
265
        					mapCtrl.getMapContext().getLayers().replaceLayer(
266
    								fLayer.getName(), 
267
    								wmtsParamsTabbedPane.getLayer());                      
268
        					mapCtrl.getMapContext().invalidate();
269
        				}
270
        				close();
271
        			}
272
        		} catch (ConnectionErrorLayerException e1) {
273
        			e1.printStackTrace();
274
        		} catch (DriverLayerException e1) {
275
        			e1.printStackTrace();
276
        		} catch (LegendLayerException e1) {
277
        			e1.printStackTrace();
278
        		} catch (NameLayerException e1) {
279
        			e1.printStackTrace();
280
        		} catch (ProjectionLayerException e1) {
281
        			e1.printStackTrace();
282
        		} catch (TypeLayerException e1) {
283
        			e1.printStackTrace();
284
        		} catch (UnsupportedVersionLayerException e1) {
285
        			e1.printStackTrace();
286
        		} catch (URLLayerException e1) {
287
        			e1.printStackTrace();
288
        		} catch (LoadLayerException e1) {
289
        			e1.printStackTrace();
240
        			mapCtrl.getMapContext().invalidate();
241
        		} catch (LoadLayerException exc) {
242
        			exc.printStackTrace();
290 243
        		}
291
        	}*/
244
        	}
292 245
		}
293 246
    }
294 247
    
295

  
248
    private void removeDuplicate(FLayer[] layerList, MapControl mapCtrl) {
249
    	FLayers lyrs = mapCtrl.getMapContext().getLayers();
250
    	for (int i = 0; i < lyrs.getLayersCount(); i++) {
251
			FLayer lyr = lyrs.getLayer(i);
252
			for (int j = 0; j < layerList.length; j++) {
253
				if(lyr.getName().compareTo(layerList[j].getName()) == 0) {
254
					lyrs.removeLayer(lyr);
255
				}
256
			}
257
		}
258
    }
259
    
260
    
296 261
	public WindowInfo getWindowInfo() {
297 262
		if (m_ViewInfo == null) {
298 263
			m_ViewInfo = new WindowInfo(WindowInfo.MODALDIALOG | WindowInfo.RESIZABLE);
......
311 276
		return WindowInfo.DIALOG_PROFILE;
312 277
	}
313 278

  
279
	public void actionButtonPressed(ButtonsPanelEvent e) {
280
		if(	e.getButton() == ButtonsPanel.BUTTON_APPLY || 
281
			e.getButton() == ButtonsPanel.BUTTON_ACCEPT) {
282
			MapControl mapCtrl = null;
283

  
284
			IWindow[] w = PluginServices.getMDIManager().getAllWindows();
285
			for (int i = 0; i < w.length; i++) {
286
				if (w[i] instanceof org.gvsig.app.project.documents.view.gui.DefaultViewPanel) {
287
					MapContext mapContext = ((org.gvsig.app.project.documents.view.gui.DefaultViewPanel)w[i]).getMapControl().getMapContext();
288
					if(mapContext == fLayer.getMapContext())
289
						mapCtrl = ((org.gvsig.app.project.documents.view.gui.DefaultViewPanel)w[i]).getMapControl();
290
				}
291
			}
292
			
293
    		try {
294
    			FLayer[] layerList = wmtsParamsTabbedPane.getLayers();
295
    			removeDuplicate(layerList, mapCtrl);
296
    			for (int i = 0; i < layerList.length; i++) {
297
    				mapCtrl.getMapContext().getLayers().addLayer(layerList[i]);
298
    			}
299
    			mapCtrl.getMapContext().invalidate();
300
    		} catch (LoadLayerException exc) {
301
    			exc.printStackTrace();
302
    		}
303
		}
304
		
305
		if(	e.getButton() == ButtonsPanel.BUTTON_CANCEL ||
306
			e.getButton() == ButtonsPanel.BUTTON_ACCEPT) {
307
			close();
308
		}
309
	}
310

  
314 311
}  //  @jve:decl-index=0:visual-constraint="10,10"
org.gvsig.raster.app/trunk/org.gvsig.raster.app/org.gvsig.raster.app.wmtsclient/src/main/java/org/gvsig/raster/app/extension/wmtsclient/gui/panel/WMTSParamsPanel.java
438 438
		getLayerPanel().getJTxtNomCapa().setText(name);
439 439
	}
440 440

  
441
	public void setSelectedLayer(String name) {
442
		LayerTreeModel treeModel = (LayerTreeModel)getLayerPanel().getTreeLayers().getModel();
443
		WMTSTheme theme = (WMTSTheme)treeModel.getNodeByName(name);
444
		
445
		JDnDListModel modelo = (JDnDListModel) getLayerPanel().getLstSelectedLayers().getModel();
446
		modelo.addElement(0, new LayerUI(theme));
447
		getLayerPanel().getLstSelectedLayers().setSelectedIndex(0);
448
	}
449

  
441 450
	/**
442 451
	 * Returns the index of the CRS within the CRS list.
443 452
	 *
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.main/src/test/java/org/gvsig/fmap/dal/coverage/dataset/TestBandList.java
46 46
		bandList = new BandListImpl();
47 47
		for (int i = 0; i < 5; i++) {
48 48
			try {
49
				DatasetBand band = new DatasetBandImpl("fileName", i, Buffer.TYPE_BYTE);
49
				DatasetBand band = new DatasetBandImpl("fileName", i, Buffer.TYPE_BYTE, 5);
50 50
				bandList.addBand(band, i);
51 51
			} catch (BandNotFoundInListException ex) {
52 52
				// No a?adimos la banda
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.api/src/main/java/org/gvsig/fmap/dal/coverage/datastruct/DatasetBand.java
46 46
	 * @return bandas del RasterBuf
47 47
	 */
48 48
	public int[] getBufferBandListToDraw();
49
	
50
	/**
51
	 * Obtiene las banda del RasterBuf sobre la que se pinta
52
	 * este objeto banda
53
	 * @return bandas del RasterBuf
54
	 */
55
	public int[] getLocalBufferBandListToDraw();
49 56

  
50 57
	
51
	
52 58
	/**
53 59
	 * Dice si la banda se est? dibujando en el buffers de salida.
54 60
	 * @return true si la banda se est? dibujando y false si no se est? haciendo
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.api/src/main/java/org/gvsig/fmap/dal/coverage/datastruct/BandList.java
159 159
	public int[] getBufferBandToDraw(String fileName, int band);
160 160
	
161 161
	/**
162
	 * A partir de un nombre de fichero y un n?mero de banda obtiene la banda o bandas del buffer de salida 
163
	 * donde se pinta. Esta llamada es igual a getBufferBandToDraw pero esta considera un buffer por cada
164
	 * provider. Por ejemplo, si tenemos 3 providers de una banda cada uno el buffer de cada provider tendr? como
165
	 * mucho una banda. En el caso anterior consideraria un buffer de 3 bandas
166
	 * @param fileName Nombre de fichero
167
	 * @param band N?mero de banda de la imagen
168
	 * @return banda o bandas del buffer de salida donde se dibuja.
169
	 */
170
	public int[] getLocalBufferBandToDraw(String fileName, int band);
171
	
172
	/**
162 173
	 * Obtiene en un array de String la lista de nombres de ficheros
163 174
	 * @return lista de nombres de los ficheros del GeoRasterMultiFile
164 175
	 */
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/buffer/cache/CacheDataFromDriverServer.java
74 74
		BandList bandList = new BandListImpl();
75 75
		for(int i = 0; i < dataset.getBandCount();i++) {
76 76
			try {
77
				DatasetBand band = new DatasetBandImpl(dataset.getFName(), i, dataset.getDataType()[i]);
77
				DatasetBand band = new DatasetBandImpl(dataset.getFName(), i, dataset.getDataType()[i], dataset.getBandCount());
78 78
				bandList.addBand(band, i);
79 79
			} catch(BandNotFoundInListException ex) {
80 80
				//No a?adimos la banda
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/buffer/cache/CacheDataServer.java
177 177
		BandListImpl bandList = new BandListImpl();
178 178
		for (int i = 0; i < grf.getBandCount(); i++) {
179 179
			try {
180
				DatasetBandImpl band = new DatasetBandImpl(grf.getFName(), i, grf.getDataType()[i]);
180
				DatasetBandImpl band = new DatasetBandImpl(grf.getFName(), i, grf.getDataType()[i], grf.getBandCount());
181 181
				bandList.addBand(band, i);
182 182
				bandList.addDrawableBand(i, i);
183 183
			} catch (BandNotFoundInListException ex) {
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
229 229
		for(int i = 0; i < prov.getBandCount(); i++)
230 230
			try {
231 231
				int dataType = prov.getDataType()[i];
232
				DatasetBand band = new DatasetBandImpl(prov.getFName(), i, dataType);
232
				DatasetBand band = new DatasetBandImpl(prov.getFName(), i, dataType, prov.getBandCount());
233 233
				bandList.addBand(band, i);
234 234
			} catch(BandNotFoundInListException ex) {
235 235
				//No a?adimos la banda
......
325 325
	 * @param raster Buffer a inicializar
326 326
	 * @param bandList Lista de bandas
327 327
	 */
328
	@SuppressWarnings("unused")
328 329
	private void initBufferToNoData(Buffer raster, BandList bandList) {
329 330
		for(int i = 0; i < bandList.getDrawableBandsCount(); i++)
330 331
			switch(getDataType()[0]) {
......
345 346
	 * @param height Alto
346 347
	 * @return Lista de buffers en el que cada uno corresponde a un dataset.
347 348
	 */
349
	@SuppressWarnings("unused")
348 350
	private Buffer[] mallocBuffersDatasets(BandList bl, int width, int height) {
349 351
		Buffer[] buffers = new Buffer[getDataStoreCount()];
350 352
		for(int i = 0; i < getDataStoreCount(); i++) {
......
373 375
	 * @param bandList Objeto que contiene la informaci?n de que bandas de los dataset se escriben sobre
374 376
	 * que banda del buffer.
375 377
	 */
378
	@SuppressWarnings("unused")
376 379
	private void mergeBuffers(Buffer b, Buffer[] bDataset, BandList bandList) {
377 380
		for(int iDataset = 0; iDataset < getDataStoreCount(); iDataset++){ //Ojo! Los datasets est?n en la misma posici?n que se han metido en mallocBuffersDatasets
378 381
			String name = getProvider(iDataset).getFName();
......
455 458
		}
456 459

  
457 460
		//Buffer RW
458

  
459 461
		Buffer raster = null;
462
		
463
		//Si hemos redondeado los pixeles de la petici?n (p1 y p2) por arriba y por abajo deberemos calcular un extent mayor
464
		//equivalente a los pixeles redondeados.
465
		Point2D wc1 = providers.get(0).rasterToWorld(new Point2D.Double(p1X, p1Y));
466
		Point2D wc2 = providers.get(0).rasterToWorld(new Point2D.Double(p2X, p2Y));
467
		
460 468
		if(forceToMemory) //Fuerza siempre buffer en memoria
469
			raster = DefaultRasterManager.getInstance().createMemoryBuffer(getDataType()[0], width, height, mallocNBands, true);
470
		else
471
			raster = DefaultRasterManager.getInstance().createBuffer(getDataType()[0], width, height, mallocNBands, true);
472
		
473
		for(int i = 0; i < getDataStoreCount(); i++)
474
			((DefaultRasterProvider)providers.get(i)).getWindowRaster(wc1.getX(), wc1.getY(), wc2.getX(), wc2.getY(), bandList, raster);
475

  
476
		
477
		//CASO 1: Solo un provider
478
		/*if(providers.size() == 1) {
479
			if(forceToMemory) //Fuerza siempre buffer en memoria
480
				raster = DefaultRasterManager.getInstance().createMemoryBuffer(getDataType()[0], width, height, mallocNBands, true);
481
			else
482
				raster = DefaultRasterManager.getInstance().createBuffer(getDataType()[0], width, height, mallocNBands, true);
483

  
484
			return ((DefaultRasterProvider)providers.get(0)).getWindowRaster(wc1.getX(), wc1.getY(), wc2.getX(), wc2.getY(), bandList, raster);
485
		}
486
		
487
		//CASO 2: Multiples providers
488
		
489
		if(forceToMemory) //Fuerza siempre buffer en memoria
461 490
			raster = DefaultRasterManager.getInstance().createMemoryBuffer(getDataType()[0], width, height, mallocNBands, false);
462 491
		else
463 492
			raster = DefaultRasterManager.getInstance().createBuffer(getDataType()[0], width, height, mallocNBands, false);
......
468 497
		//Reservamos memoria para los buffers por dataset
469 498
		Buffer[] bufferDatasets = mallocBuffersDatasets(bandList, width, height);
470 499

  
471
		//Si hemos redondeado los pixeles de la petici?n (p1 y p2) por arriba y por abajo deberemos calcular un extent mayor
472
		//equivalente a los pixeles redondeados.
473
		Point2D wc1 = providers.get(0).rasterToWorld(new Point2D.Double(p1X, p1Y));
474
		Point2D wc2 = providers.get(0).rasterToWorld(new Point2D.Double(p2X, p2Y));
475 500
		for(int i = 0; i < getDataStoreCount(); i++)
476 501
			bufferDatasets[i] = ((DefaultRasterProvider)providers.get(i)).getWindowRaster(wc1.getX(), wc1.getY(), wc2.getX(), wc2.getY(), bandList, bufferDatasets[i]);
477 502

  
......
479 504
		mergeBuffers(raster, bufferDatasets, bandList);
480 505

  
481 506
		for (int i = 0; i < bufferDatasets.length; i++)
482
			bufferDatasets[i].free();
507
			bufferDatasets[i].free();*/
483 508

  
484 509
		return raster;
485 510
	}
......
548 573
				return rb;
549 574
			}
550 575
		}
576
		
577
		//Si hemos redondeado los pixeles de la petici?n (p1 y p2) por arriba y por abajo deberemos calcular un extent mayor
578
		//equivalente a los pixeles redondeados.
579
		Point2D wc1 = providers.get(0).rasterToWorld(new Point2D.Double(Math.floor(p1.getX()), Math.floor(p1.getY())));
580
		Point2D wc2 = providers.get(0).rasterToWorld(new Point2D.Double(Math.ceil(p2.getX()), Math.ceil(p2.getY())));
551 581

  
552 582
		//Buffer RW
553

  
554 583
		Buffer raster = null;
584
		
555 585
		if(forceToMemory) //Fuerza siempre buffer en memoria
586
			raster = DefaultRasterManager.getInstance().createMemoryBuffer(getDataType()[0], width, height, mallocNBands, true);
587
		else
588
			raster = DefaultRasterManager.getInstance().createBuffer(getDataType()[0], width, height, mallocNBands, true);
589

  
590
		if(!adjustToExtent)
591
			 initBufferToNoData(raster, bandList);
592
		
593
		for(int i = 0; i < getDataStoreCount(); i++)
594
			((DefaultRasterProvider)providers.get(i)).getWindowRaster(wc1.getX(), wc1.getY(), Math.abs(wc2.getX() - wc1.getX()), Math.abs(wc2.getY() - wc1.getY()), bandList, raster, adjustToExtent);
595
		
596
		
597
		//CASO 1: Solo un provider
598
		/*if(providers.size() == 1) {
599
			if(forceToMemory) //Fuerza siempre buffer en memoria
600
				raster = DefaultRasterManager.getInstance().createMemoryBuffer(getDataType()[0], width, height, mallocNBands, true);
601
			else
602
				raster = DefaultRasterManager.getInstance().createBuffer(getDataType()[0], width, height, mallocNBands, true);
603
			return ((DefaultRasterProvider)providers.get(0)).getWindowRaster(wc1.getX(), wc1.getY(), Math.abs(wc2.getX() - wc1.getX()), Math.abs(wc2.getY() - wc1.getY()), bandList, raster, adjustToExtent);
604
		}
605
		
606
		//CASO 2: Multiples providers
607
		if(forceToMemory) //Fuerza siempre buffer en memoria
556 608
			raster = DefaultRasterManager.getInstance().createMemoryBuffer(getDataType()[0], width, height, mallocNBands, false);
557 609
		else
558 610
			raster = DefaultRasterManager.getInstance().createBuffer(getDataType()[0], width, height, mallocNBands, false);
......
568 620
		//Reservamos memoria para los buffers por dataset
569 621
		Buffer[] bufferDatasets = mallocBuffersDatasets(bandList, width, height);
570 622

  
571
		//Si hemos redondeado los pixeles de la petici?n (p1 y p2) por arriba y por abajo deberemos calcular un extent mayor
572
		//equivalente a los pixeles redondeados.
573
		Point2D wc1 = providers.get(0).rasterToWorld(new Point2D.Double(Math.floor(p1.getX()), Math.floor(p1.getY())));
574
		Point2D wc2 = providers.get(0).rasterToWorld(new Point2D.Double(Math.ceil(p2.getX()), Math.ceil(p2.getY())));
575 623
		for(int i = 0; i < getDataStoreCount(); i++)
576 624
			bufferDatasets[i] = ((DefaultRasterProvider)providers.get(i)).getWindowRaster(wc1.getX(), wc1.getY(), Math.abs(wc2.getX() - wc1.getX()), Math.abs(wc2.getY() - wc1.getY()), bandList, bufferDatasets[i], adjustToExtent);
577 625
			//bufferDatasets[i] = ((RasterDataStore)files.get(i)).getWindowRaster(x, y, w, h, bandList, bufferDatasets[i], adjustToExtent);
......
580 628
		mergeBuffers(raster, bufferDatasets, bandList);
581 629

  
582 630
		for (int i = 0; i < bufferDatasets.length; i++)
583
			bufferDatasets[i].free();
631
			bufferDatasets[i].free();*/
584 632

  
585 633
		return raster;
586 634
	}
......
678 726
		}
679 727

  
680 728
		//Buffer RW
681

  
682 729
		Buffer raster = null;
730
		
683 731
		if(forceToMemory) //Fuerza siempre buffer en memoria
732
			raster = DefaultRasterManager.getInstance().createMemoryBuffer(getDataType()[0], bufWidth, bufHeight, mallocNBands, true);
733
		else
734
			raster = DefaultRasterManager.getInstance().createBuffer(getDataType()[0], bufWidth, bufHeight, mallocNBands, true);
735
		
736
		for(int i = 0; i < getDataStoreCount(); i++)
737
			((DefaultRasterProvider)providers.get(i)).getWindowRaster(ulx, uly, lrx, lry, bufWidth, bufHeight, bandList, raster, adjustToExtent);
738

  
739
		
740
		//CASO 1: Solo un provider
741
		/*if(providers.size() == 1) {
742
			if(forceToMemory) //Fuerza siempre buffer en memoria
743
				raster = DefaultRasterManager.getInstance().createMemoryBuffer(getDataType()[0], bufWidth, bufHeight, mallocNBands, true);
744
			else
745
				raster = DefaultRasterManager.getInstance().createBuffer(getDataType()[0], bufWidth, bufHeight, mallocNBands, true);
746
			return ((DefaultRasterProvider)providers.get(0)).getWindowRaster(ulx, uly, lrx, lry, bufWidth, bufHeight, bandList, raster, adjustToExtent);
747
		}
748
		
749
		//CASO 2: Multiples providers
750
		if(forceToMemory) //Fuerza siempre buffer en memoria
684 751
			raster = DefaultRasterManager.getInstance().createMemoryBuffer(getDataType()[0], bufWidth, bufHeight, mallocNBands, false);
685 752
		else
686 753
			raster = DefaultRasterManager.getInstance().createBuffer(getDataType()[0], bufWidth, bufHeight, mallocNBands, false);
......
702 769
		mergeBuffers(raster, bufferDatasets, bandList);
703 770

  
704 771
		for (int i = 0; i < bufferDatasets.length; i++)
705
			bufferDatasets[i].free();
772
			bufferDatasets[i].free();*/
706 773

  
707 774
		return raster;
708 775
	}
......
735 802
		}
736 803

  
737 804
		//Buffer RW
738

  
739 805
		Buffer raster = null;
806
		
740 807
		if(forceToMemory) //Fuerza siempre buffer en memoria
808
			raster = DefaultRasterManager.getInstance().createMemoryBuffer(getDataType()[0], w, h, bandList.getDrawableBandsCount(), true);
809
		else
810
			raster = DefaultRasterManager.getInstance().createBuffer(getDataType()[0], w, h, bandList.getDrawableBandsCount(), true);
811
		
812
		for(int i = 0; i < getDataStoreCount(); i++)
813
			((DefaultRasterProvider)providers.get(i)).getWindowRaster(x, y, w, h, bandList, raster);
814
		
815
		//CASO 1: Solo un provider
816
		/*if(providers.size() == 1) {
817
			if(forceToMemory) //Fuerza siempre buffer en memoria
818
				raster = DefaultRasterManager.getInstance().createMemoryBuffer(getDataType()[0], w, h, bandList.getDrawableBandsCount(), true);
819
			else
820
				raster = DefaultRasterManager.getInstance().createBuffer(getDataType()[0], w, h, bandList.getDrawableBandsCount(), true);
821
			return ((DefaultRasterProvider)providers.get(0)).getWindowRaster(x, y, w, h, bandList, raster);
822
		}
823
		
824
		//CASO 2: Multiples providers
825
		if(forceToMemory) //Fuerza siempre buffer en memoria
741 826
			raster = DefaultRasterManager.getInstance().createMemoryBuffer(getDataType()[0], w, h, bandList.getDrawableBandsCount(), false);
742 827
		else
743 828
			raster = DefaultRasterManager.getInstance().createBuffer(getDataType()[0], w, h, bandList.getDrawableBandsCount(), false);
......
754 839
		mergeBuffers(raster, bufferDatasets, bandList);
755 840

  
756 841
		for (int i = 0; i < bufferDatasets.length; i++)
757
			bufferDatasets[i].free();
842
			bufferDatasets[i].free();*/
758 843

  
759 844
		return raster;
760 845
	}
......
786 871
			}
787 872
		}
788 873

  
874
		//Buffer RW
789 875
		Buffer raster = null;
876
		
790 877
		if(forceToMemory) //Fuerza siempre buffer en memoria
878
			raster = DefaultRasterManager.getInstance().createMemoryBuffer(getDataType()[0], bufWidth, bufHeight, bandList.getDrawableBandsCount(), true);
879
		else
880
			raster = DefaultRasterManager.getInstance().createBuffer(getDataType()[0], bufWidth, bufHeight, bandList.getDrawableBandsCount(), true);
881
		
882
		for(int i = 0; i < getDataStoreCount(); i++)
883
			((DefaultRasterProvider)providers.get(i)).getWindowRaster(x, y, w, h, bufWidth, bufHeight, bandList, raster);
884

  
885
		
886
		//CASO 1: Solo un provider
887
		/*if(providers.size() == 1) {
888
			if(forceToMemory) //Fuerza siempre buffer en memoria
889
				raster = DefaultRasterManager.getInstance().createMemoryBuffer(getDataType()[0], bufWidth, bufHeight, bandList.getDrawableBandsCount(), true);
890
			else
891
				raster = DefaultRasterManager.getInstance().createBuffer(getDataType()[0], bufWidth, bufHeight, bandList.getDrawableBandsCount(), true);
892
			return ((DefaultRasterProvider)providers.get(0)).getWindowRaster(x, y, w, h, bufWidth, bufHeight, bandList, raster);
893
		}
894
		
895
		//CASO 2: Multiples providers
896
		if(forceToMemory) //Fuerza siempre buffer en memoria
791 897
			raster = DefaultRasterManager.getInstance().createMemoryBuffer(getDataType()[0], bufWidth, bufHeight, bandList.getDrawableBandsCount(), false);
792 898
		else
793 899
			raster = DefaultRasterManager.getInstance().createBuffer(getDataType()[0], bufWidth, bufHeight, bandList.getDrawableBandsCount(), false);
......
805 911
		mergeBuffers(raster, bufferDatasets, bandList);
806 912

  
807 913
		for (int i = 0; i < bufferDatasets.length; i++)
808
			bufferDatasets[i].free();
914
			bufferDatasets[i].free();*/
809 915

  
810 916
		return raster;
811 917
	}
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/datastruct/DatasetBandImpl.java
33 33
 */
34 34
public class DatasetBandImpl implements DatasetBand {
35 35
	//Nombre del fichero al que pertenece la banda
36
	private String 		fileName = "";
36
	private String 		fileName                = "";
37 37
	//Lista de nombre de otros ficheros que forman la banda. Esto es util para CompositeDataset que est? compuesto por un mosaico de ficheros.
38 38
	@SuppressWarnings("unchecked")
39
	private ArrayList	additionalName = new ArrayList();
39
	private ArrayList	additionalName          = new ArrayList();
40 40
	//Posici?n en el fichero de la  banda
41
	private int 		position = -1;
41
	private int 		position                = -1;
42 42
	//Tipo de dato de la banda
43
	private int 		dataType = Buffer.TYPE_BYTE;
43
	private int 		dataType                = Buffer.TYPE_BYTE;
44 44
	//lista de bandas del buffer donde se dibuja esta banda de imagen. Cada elemento
45 45
	//del vector es un n?mero que corresponde con el n?mero de banda del buffer donde se escribe esta
46 46
	private int[]		rasterBufBandToDrawList = null;
47
	//
48
	private int         nBandsInThisProvider    = 0;
47 49
	
48
	public DatasetBandImpl(String f, int p, int dt){
50
	public DatasetBandImpl(String f, int p, int dt, int nBands){
49 51
		setFileName(f);
50 52
		setPosition(p);
51 53
		setDataType(dt);
54
		nBandsInThisProvider = nBands;
52 55
	}
53 56
	
54 57
	/*
......
56 59
	 * @see java.lang.Object#clone()
57 60
	 */
58 61
	public Object clone() {
59
		DatasetBandImpl result = new DatasetBandImpl(fileName, position, dataType);
62
		DatasetBandImpl result = new DatasetBandImpl(fileName, position, dataType, nBandsInThisProvider);
60 63
		if(rasterBufBandToDrawList != null) {
61 64
			int[] drawBands = new int[rasterBufBandToDrawList.length];
62 65
			for (int i = 0; i < rasterBufBandToDrawList.length; i++) 
......
86 89
	public int[] getBufferBandListToDraw() {
87 90
		return rasterBufBandToDrawList;
88 91
	}
89

  
90 92
	
93
	/**
94
	 * Obtiene las banda del RasterBuf sobre la que se pinta
95
	 * este objeto banda
96
	 * @return bandas del RasterBuf
97
	 */
98
	public int[] getLocalBufferBandListToDraw() {
99
		return rasterBufBandToDrawList;
100
	}
91 101
	
92 102
	/**
93 103
	 * Dice si la banda se est? dibujando en el buffers de salida.
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/datastruct/BandListImpl.java
129 129
	 * en la 3 la 0 y en la 4 la 2 de este GeoRasterFile.
130 130
	 * @return lista de bandas a dibujar o un array de un elemento con valor -1.
131 131
	 */
132
	public int[] bandsToDrawList(int nBandsDataImage){
132
	public int[] bandsToDrawList(int nBandsDataImage) {
133 133
		
134 134
		int[] bandsToRead = new int[nBandsDataImage];
135 135
		for(int dataImageBand = 0;dataImageBand < nBandsDataImage;dataImageBand++) {
......
137 137
			for(int band = 0;band < bands.size();band++) {
138 138
				if(	((DatasetBand)bands.get(band)) != null &&
139 139
					((DatasetBand)bands.get(band)).getBufferBandListToDraw() != null) {
140
					for(int dest=0;dest<((DatasetBand)bands.get(band)).getBufferBandListToDraw().length;dest++){
140
					for(int dest=0;dest<((DatasetBand)bands.get(band)).getBufferBandListToDraw().length;dest++) {
141 141
						if(dataImageBand == ((DatasetBand)bands.get(band)).getBufferBandListToDraw()[dest])
142 142
							bandsToRead[dataImageBand] = band;
143 143
					}
......
152 152
	 * Checkea si alguna banda de la lista se est?a dibujando en el buffer de salida.
153 153
	 * @return	true si alguna banda se est? dibujando y false si no
154 154
	 */
155
	public boolean isDrawingAnyBand(){
156
		for(int band = 0;band < bands.size();band++){
155
	public boolean isDrawingAnyBand() {
156
		for(int band = 0;band < bands.size();band++) {
157 157
			if(((DatasetBand)bands.get(band)).isDrawing())
158 158
				return true;
159 159
		}
......
168 168
	 * A?ade una banda a la lista.
169 169
	 * @param b banda a a?adir.
170 170
	 */
171
	public void addBand(DatasetBand b, int pos)throws BandNotFoundInListException{
171
	public void addBand(DatasetBand b, int pos)throws BandNotFoundInListException {
172 172
		bands.add(b);
173 173
	}
174 174
	
......
177 177
	 * actual. Si alguna banda ya existe no la a?ade y continua.
178 178
	 * @param bl Lista de bandas
179 179
	 */
180
	public void addBandList(BandList bl){
181
		for(int i = 0; i < bl.getBandCount(); i++){
180
	public void addBandList(BandList bl) {
181
		for(int i = 0; i < bl.getBandCount(); i++) {
182 182
			if(!findBand(bl.getBand(i)))
183 183
				bands.add(bl.getBand(i));
184 184
		}
......
188 188
	 * ELimina todas las bandas que tienen un nombre determinado.
189 189
	 * @param name Nombre de las bandas a eliminar
190 190
	 */
191
	public void removeBands(String name){
192
		for(int i = 0; i < getBandCount(); i++){
191
	public void removeBands(String name) {
192
		for(int i = 0; i < getBandCount(); i++) {
193 193
			DatasetBand band = getBand(i);
194 194
			if(band.getFileName().equals(name))
195 195
				bands.remove(i);
......
200 200
	 * Resetea la asignaci?n de dibujado de las bandas de la imagen
201 201
	 * sobre el DataImage cuando se hace un update para esta banda.
202 202
	 */
203
	public void clearDrawableBands(){
203
	public void clearDrawableBands() {
204 204
		drawableBands = null;
205 205
		for(int i = 0; i < getBandCount(); i++)
206 206
			((DatasetBand)bands.get(i)).clearDrawableBands();
......
214 214
	 * @param posRasterBuf	Posici?n del RasterBuf que queremos pintar.
215 215
	 * @param imageBand	Banda de la imagen que se pintar?
216 216
	 */
217
	public void addDrawableBand(int posRasterBuf, int imageBand){
218
		try{
217
	public void addDrawableBand(int posRasterBuf, int imageBand) {
218
		try {
219 219
			((DatasetBand)bands.get(imageBand)).setPositionToDrawInBuffer(posRasterBuf);
220
		}catch(IndexOutOfBoundsException exc){
220
		} catch(IndexOutOfBoundsException exc) {
221 221
			//No hacemos nada simplemente no inserta la banda.
222 222
		}
223 223
	}
......
227 227
	 * alguna banda de este fichero cuando se llama a un updateBuffer. 
228 228
	 * @return N?mero de bandas. Cero en caso de no tener ninguna asignada. 
229 229
	 */
230
	public int getDrawableBandsCount(){
230
	public int getDrawableBandsCount() {
231 231
		int nbands = 0;
232 232
		for(int i = 0;i < bands.size();i++) {
233 233
			DatasetBand b = (DatasetBand)bands.get(i);
......
242 242
	 * @param i Posici?n de la banda a obtener.
243 243
	 * @return Banda.
244 244
	 */
245
	public DatasetBand getBand(int i){
245
	public DatasetBand getBand(int i) {
246 246
		if(i < 0 || i >= bands.size())
247 247
			return null;
248 248
		return (DatasetBand)bands.get(i);
......
252 252
	 * Obtiene el n?mero de bandas.
253 253
	 * @return entero con el n?mero de bandas.
254 254
	 */
255
	public int getBandCount(){
255
	public int getBandCount() {
256 256
		return bands.size();
257 257
	}
258 258
	
259
	/**
260
	 * A partir de un nombre de fichero y un n?mero de banda obtiene la banda o bandas del buffer de salida 
261
	 * donde se pinta.
262
	 * @param fileName Nombre de fichero
263
	 * @param band N?mero de banda de la imagen
264
	 * @return banda o bandas del buffer de salida donde se dibuja.
259
	/*
260
	 * (non-Javadoc)
261
	 * @see org.gvsig.fmap.dal.coverage.datastruct.BandList#getBufferBandToDraw(java.lang.String, int)
265 262
	 */
266
	public int[] getBufferBandToDraw(String fileName, int band){
267
		for(int i = 0; i < bands.size(); i++){
263
	public int[] getBufferBandToDraw(String fileName, int band) {
264
		for(int i = 0; i < bands.size(); i++) {
268 265
			if(((DatasetBand)bands.get(i)).getFileName().equals(fileName))
269 266
				if(((DatasetBand)bands.get(i)).getPosition() == band)
270 267
					return ((DatasetBand)bands.get(i)).getBufferBandListToDraw();
......
272 269
		int[] r = {-1};
273 270
		return r;
274 271
	}
272
	
273
	/*
274
	 * (non-Javadoc)
275
	 * @see org.gvsig.fmap.dal.coverage.datastruct.BandList#getLocalBufferBandToDraw(java.lang.String, int)
276
	 */
277
	public int[] getLocalBufferBandToDraw(String fileName, int band) {
278
		for(int i = 0; i < bands.size(); i++) {
279
			if(((DatasetBand)bands.get(i)).getFileName().equals(fileName))
280
				if(((DatasetBand)bands.get(i)).getPosition() == band)
281
					return ((DatasetBand)bands.get(i)).getLocalBufferBandListToDraw();
282
		}
283
		int[] r = {-1};
284
		return r;
285
	}
286
	
275 287
	/**
276 288
	 * Obtiene en un array de String la lista de nombres de ficheros
277 289
	 * @return lista de nombres de los ficheros del GeoRasterMultiFile
278 290
	 */
279
	public String[] getBandStringList(){
291
	public String[] getBandStringList() {
280 292
		String[] list = new String[bands.size()];
281 293
		for(int i = 0; i < bands.size(); i++)
282 294
			list[i] = ((DatasetBand)bands.get(i)).getFileName();
......
287 299
	 * Obtiene en un array de enteros con la lista de la posici?n de bandas
288 300
	 * @return lista de la posici?n de bandas
289 301
	 */
290
	public int[] getBandPositionList(){
302
	public int[] getBandPositionList() {
291 303
		int[] list = new int[bands.size()];
292 304
		for(int i = 0; i < bands.size(); i++)
293 305
			list[i] = ((DatasetBand)bands.get(i)).getPosition();
......
299 311
	 * de las bandas son igual por lo que devolver? el primero. 
300 312
	 * @return Entero que representa el tipo de datos de las bandas
301 313
	 */
302
	public int getBandsDataType(){
314
	public int getBandsDataType() {
303 315
		if(bands.size() <= 0)
304 316
			return Buffer.TYPE_UNDEFINED;
305 317
		return ((DatasetBand)bands.get(0)).getDataType();
......
310 322
	 * @param fileName Nombre del fichero
311 323
	 * @return Posici?n del fichero o -1 si no existe. 
312 324
	 */
313
	public int getFileNumber(String fileName){
325
	public int getFileNumber(String fileName) {
314 326
		String aux = "";
315 327
		int count = -1;
316
		for(int i = 0; i < bands.size(); i++){
317
			if(((DatasetBand)bands.get(i)).getFileName().indexOf(aux) != 0){
328
		for(int i = 0; i < bands.size(); i++) {
329
			if(((DatasetBand)bands.get(i)).getFileName().indexOf(aux) != 0) {
318 330
				count ++;
319 331
				aux = ((DatasetBand)bands.get(i)).getFileName();
320 332
			}
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
105 105
	 * por el usuario de la renderizaci?n.
106 106
	 */
107 107
	private int[]            renderBands              = { 0, 1, 2 };
108
	/**
109
	 * Tiene el comportamiento cuando se tiene un raster con una. Dice si en las
110
	 * otras bandas a renderizar se replica la banda existente o se ponen a 0.
111
	 */
112
	private boolean          replicateBand            = false;
113 108

  
114 109
	private ImageDrawer      drawer                   = null;
115 110
	/**
......
373 368
		query.setAreaOfInterest(adjustedRotedRequest.getULX(), adjustedRotedRequest.getULY(), adjustedRotedRequest.getLRX(), adjustedRotedRequest.getLRY(), (int)Math.round(widthImage), (int)Math.round(heightImage));
374 369
		
375 370
		if (dataStore.getTransparency().getAlphaBandNumber() != -1) {
376
			query.setDrawableBands(new int[] { lastTransparency.getAlphaBandNumber(), -1, -1 });
371
			query.setDrawableBands(new int[] { lastTransparency.getAlphaBandNumber()});
377 372
			lastTransparency.setAlphaBand(dataStore.query(query));
378 373
		}
379 374
		//query.setAreaOfInterest(adjustedRotedRequest.getULX(), adjustedRotedRequest.getULY(), adjustedRotedRequest.getLRX(), adjustedRotedRequest.getLRY(), (int)Math.round(widthImage), (int)Math.round(heightImage), this, 0);
......
403 398
		drawer.setBuffer(lastRenderBuffer); // Buffer de datos a renderizar
404 399
		drawer.setStep(step); // Desplazamiento para supersampleo
405 400
		drawer.setBufferSize((int)Math.round(widthImage), (int)Math.round(heightImage)); // Ancho y alto del buffer
406
		Image geoImage = drawer.drawBufferOverImageObject(replicateBand, getRenderBands()); // Acci?n de renderizado
401
		Image geoImage = drawer.drawBufferOverImageObject(); // Acci?n de renderizado
407 402

  
408 403
		// Borramos el buffer de transparencia para que siempre se tenga que regenerar.
409 404
		lastTransparency.setAlphaBand(null);
......
487 482
			d.setBuffer(buf);
488 483
			d.setStep(null);
489 484
			d.setBufferSize(buf.getWidth(), buf.getHeight());
490
			Image geoImage = d.drawBufferOverImageObject(replicateBand, getRenderBands());
485
			Image geoImage = d.drawBufferOverImageObject();
491 486

  
492 487
			AffineTransform at = new AffineTransform();
493 488
			at.scale(1/scaleW, 1/scaleH);
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/ImageDrawer.java
73 73
	 * @return java.awt.Image con el buffer dibujado.
74 74
	 * @throws ProcessInterruptedException
75 75
	 */
76
	public Image drawBufferOverImageObject(boolean replicateBand, int[] renderBands) throws ProcessInterruptedException {
76
	public Image drawBufferOverImageObject() throws ProcessInterruptedException {
77 77
		if (rasterBuf == null || width == 0 || height == 0)
78 78
			return null;
79 79

  
......
108 108
		} catch (OutOfMemoryError error) { // Temporal para la traza de un error
109 109
											// aleatorio
110 110
			LoggerFactory.getLogger(this.getClass()).debug(
111
					"Buffer: " + width + " " + height + " RenderBands: "
112
							+ renderBands, error);
111
					"Buffer: " + width + " " + height , error);
113 112
		}
114 113
		return null;
115 114
	}
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.io/org.gvsig.raster.io.base/src/main/java/org/gvsig/fmap/dal/coverage/dataset/io/wmts/WMTSProvider.java
375 375
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getTransparency()
376 376
	 */
377 377
	public Transparency getTransparency() {
378
		if(lastFileTransparency == null)
378
		if(lastFileTransparency == null) {
379 379
			lastFileTransparency = new DataStoreTransparency();
380
			lastFileTransparency.setTransparencyBand(3);
381
		}
380 382
		return lastFileTransparency;
381 383
	}
382 384

  
......
661 663
				buf.setDataExtent(new Rectangle2D.Double(Math.min(tile.ulx, tile.lrx), Math.min(tile.uly, tile.lry), Math.abs(tile.ulx - tile.lrx), Math.abs(tile.uly - tile.lry)));
662 664
				
663 665
				Buffer alphaBand = null;
664
				if(p.getAlphaBand() != -1 && listener != null) {
666
				if(p.getAlphaBand() != -1 && listener != null && p.getAlphaBand() < bandCount) {
665 667
					alphaBand = DefaultRasterManager.getInstance().createBuffer(getDataType()[0], tile.wPx, tile.hPx, 1, true);
666 668
					int[] oldDB = bandList.getDrawableBands();
667 669
					bandList.setDrawableBands(new int[]{p.getAlphaBand()});
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.io/org.gvsig.raster.io.base/src/main/java/org/gvsig/fmap/dal/coverage/dataset/io/GdalNative.java
747 747
		if(gdalBands.length == 0)
748 748
			return;
749 749

  
750
		selectGdalBands(buf.getBandCount());
750
		selectGdalBands(/*buf.getBandCount()*/getRasterCount());
751 751

  
752 752
		int x = (int) Math.round(Math.min(tl.getX(), br.getX()));
753 753
		int y = (int) Math.round(Math.min(tl.getY(), br.getY()));
......
817 817
		if(gdalBands.length == 0)
818 818
			return;
819 819
		
820
		selectGdalBands(buf.getBandCount());
820
		selectGdalBands(/*buf.getBandCount()*/getRasterCount());
821 821
				
822 822
		int x = (int) Math.min(tl.getX(), br.getX());
823 823
		int y = (int) Math.min(tl.getY(), br.getY());
......
999 999
				for (int line = stepBuffer[1]; line < stepBuffer[3]/*buf.getHeight()*/; line++) {
1000 1000
					pos = (int)((bufWidth * (line - stepBuffer[0])) + init);
1001 1001
					for (int col = stepBuffer[0]; col < stepBuffer[2]/*buf.getWidth()*/; col ++) {
1002
						//for (int i = 0; i < drawableBands.length; i++) 
1003
							buf.setElem(line, col, iBand/*drawableBands[i]*/, gdalBuf.buffByte[pos]);
1002
						for (int i = 0; i < drawableBands.length; i++) 
1003
							buf.setElem(line, col, drawableBands[i], gdalBuf.buffByte[pos]);
1004 1004
						pos ++;
1005 1005
					}
1006 1006
					if(task.getEvent() != null)
......
1010 1010
				for (int line = stepBuffer[1]; line < stepBuffer[3]; line++) {
1011 1011
					pos = (int)((bufWidth * (line - stepBuffer[0])) + init);
1012 1012
					for (int col = stepBuffer[0]; col < stepBuffer[2]; col ++) {
1013
						//for (int i = 0; i < drawableBands.length; i++)
1014
							buf.setElem(line, col, iBand/*drawableBands[i]*/, gdalBuf.buffShort[pos]);
1013
						for (int i = 0; i < drawableBands.length; i++)
1014
							buf.setElem(line, col, drawableBands[i], gdalBuf.buffShort[pos]);
1015 1015
						pos ++;
1016 1016
					}
1017 1017
					if(task.getEvent() != null)
......
1021 1021
				for (int line = stepBuffer[1]; line < stepBuffer[3]; line++) {
1022 1022
					pos = (int)((bufWidth * (line - stepBuffer[0])) + init);
1023 1023
					for (int col = stepBuffer[0]; col < stepBuffer[2]; col ++) {
1024
						//for (int i = 0; i < drawableBands.length; i++)
1025
							buf.setElem(line, col, iBand/*drawableBands[i]*/, gdalBuf.buffInt[pos]);
1024
						for (int i = 0; i < drawableBands.length; i++)
1025
							buf.setElem(line, col, drawableBands[i], gdalBuf.buffInt[pos]);
1026 1026
						pos ++;
1027 1027
					}
1028 1028
					if(task.getEvent() != null)
......
1032 1032
				for (int line = stepBuffer[1]; line < stepBuffer[3]; line++) {
1033 1033
					pos = (int)((bufWidth * (line - stepBuffer[0])) + init);
1034 1034
					for (int col = stepBuffer[0]; col < stepBuffer[2]; col ++) {
1035
						//for (int i = 0; i < drawableBands.length; i++)
1036
							buf.setElem(line, col, iBand/*drawableBands[i]*/, gdalBuf.buffFloat[pos]);
1035
						for (int i = 0; i < drawableBands.length; i++)
1036
							buf.setElem(line, col, drawableBands[i], gdalBuf.buffFloat[pos]);
1037 1037
						pos ++;
1038 1038
					}
1039 1039
					if(task.getEvent() != null)
......
1043 1043
				for (int line = stepBuffer[1]; line < stepBuffer[3]; line++) {
1044 1044
					pos = (int)((bufWidth * (line - stepBuffer[0])) + init);
1045 1045
					for (int col = stepBuffer[0]; col < stepBuffer[2]; col ++) {
1046
						//for (int i = 0; i < drawableBands.length; i++)
1047
							buf.setElem(line, col, iBand/*drawableBands[i]*/, gdalBuf.buffDouble[pos]);
1046
						for (int i = 0; i < drawableBands.length; i++)
1047
							buf.setElem(line, col, drawableBands[i], gdalBuf.buffDouble[pos]);
1048 1048
						pos ++;
1049 1049
					}
1050 1050
					if(task.getEvent() != null)
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.io/org.gvsig.raster.io.base/src/main/java/org/gvsig/fmap/dal/coverage/dataset/io/ErmapperProvider.java
456 456
	private void loadBuffer(Extent selectedExtent, int bufWidth, int bufHeight, Buffer rasterBuf, BandList bandList, int[] stpBuffer) throws ProcessInterruptedException, RasterDriverException {
457 457
		try{
458 458
			RasterTask task = RasterTaskQueue.get(Thread.currentThread().toString());
459

  
460
			//Leemos el raster desde la librer?a
461

  
462
			//Extent ext = getExtent();//new Extent(file.originX, file.originY, file.originX + (file.width * file.cellIncrementX), file.originY + (file.height * file.cellIncrementY));
463
			//selectedExtent = RasterUtilities.calculateAdjustedView(selectedExtent, ext);
464
			//selectedExtent = RasterUtilities.calculateAdjustedView(selectedExtent, this.getAffineTransform(), new Dimension(file.width, file.height));
459
			
465 460
			int[] readBandsFromECW = new int[Math.max(file.numBands, 3)];
466
			int[] readBands = new int[Math.max(file.numBands, 3)];
467

  
468

  
469
			for(int i = 0; i < readBandsFromECW.length; i ++)
470
				readBands[i] = -1;
471
			int cont = 0;
472
			for(int i = 0; i < file.numBands; i++) {
473
				int[] bandsToDraw = bandList.getBand(i).getBufferBandListToDraw();
474
				if(bandsToDraw != null) {
475
					for(int j = 0; j < bandsToDraw.length; j++){
476
						readBandsFromECW[cont] = i;
477
						readBands[cont] = i;
478
						cont ++;
479
					}
480
				}
481

  
461
			
462
			for(int i = 0; i < readBandsFromECW.length; i ++) {
463
				readBandsFromECW[i] = i;
482 464
			}
483 465

  
484 466
			if(task.getEvent() != null)
485 467
				task.manageEvent(task.getEvent());
486 468

  
487
			//Si el ancho y alto pedido no coincide con el estimado es que se intenta resamplear.
488
			//Otros drivers soportan el resampleo pero no es el caso. Hay que hacer la petici?n y luego remuestrear.
489

  
490
			/*if((selectedExtent.width()/file.cellIncrementX) || (selectedExtent.height()/file.cellIncrementY)) {
491

  
492
			}*/
493

  
494
			if(bufWidth > Math.round(Math.abs(selectedExtent.width()/file.cellIncrementX)))
495
				bufWidth = (int)Math.round(Math.abs(selectedExtent.width()/file.cellIncrementX));
496
			if(bufHeight > Math.round(Math.abs(selectedExtent.height()/file.cellIncrementY)))
497
				bufHeight = (int)Math.round(Math.abs(selectedExtent.height()/file.cellIncrementY));
469
			if(bufWidth > Math.round(Math.abs(selectedExtent.width() / file.cellIncrementX)))
470
				bufWidth = (int)Math.round(Math.abs(selectedExtent.width() / file.cellIncrementX));
471
			if(bufHeight > Math.round(Math.abs(selectedExtent.height() / file.cellIncrementY)))
472
				bufHeight = (int)Math.round(Math.abs(selectedExtent.height() / file.cellIncrementY));
498 473
			file.setView(file.numBands, readBandsFromECW, selectedExtent.minX(), selectedExtent.maxY(), selectedExtent.maxX(), selectedExtent.minY(), bufWidth, bufHeight);
499 474
			
500 475
			//Escribimos el raster sobre un Buffer
501 476
			int[] pRGBArray = new int[bufWidth];
502
			drawRGB(rasterBuf, pRGBArray, readBandsFromECW, bandList, task);
477
			drawRGB2(rasterBuf, pRGBArray, bandList, task);
503 478

  
504 479
		}catch(JNCSInvalidSetViewException exc){
505 480
			throw new RasterDriverException("Error setting coords");
......
510 485
		}
511 486

  
512 487
	}
488
	
489
	private void drawRGB2(Buffer rasterBuf, int[] pRGBArray, BandList bandList, RasterTask task) throws JNCSException, ProcessInterruptedException {
490
		int[] drawableBands = null;
491
		
492
		for (int line = 0; line < rasterBuf.getHeight(); line++) {
493
			try {
494
				file.readLineRGBA(pRGBArray);
495
				for(int col = 0; col < pRGBArray.length; col ++) {
496
					drawableBands = bandList.getBufferBandToDraw(getFName(), 0);
497
					if(drawableBands != null) {
498
						for (int i = 0; i < drawableBands.length; i++) {
499
							rasterBuf.setElem(line, col, drawableBands[i], (byte)((pRGBArray[col] & 0x00ff0000) >> 16));							
500
						}
501
					}
502
					drawableBands = bandList.getBufferBandToDraw(getFName(), 1);
503
					if(drawableBands != null) {
504
						for (int i = 0; i < drawableBands.length; i++) {
505
							rasterBuf.setElem(line, col, drawableBands[i], (byte)((pRGBArray[col] & 0x0000ff00) >> 8));
506
						}
507
					}
508
					drawableBands = bandList.getBufferBandToDraw(getFName(), 2);
509
					if(drawableBands != null) {
510
						for (int i = 0; i < drawableBands.length; i++) {
511
							rasterBuf.setElem(line, col, drawableBands[i], (byte)(pRGBArray[col] & 0x000000ff));
512
						}
513
					}
514
				}
515
			} catch (JNCSException exc) {
516
			}
517
			if(task.getEvent() != null)
518
				task.manageEvent(task.getEvent());
519
		}
520
		return;
521
	}
513 522

  
514

  
523
	@SuppressWarnings("unused")
515 524
	private void drawRGB(Buffer rasterBuf, int[] pRGBArray, int[] readBands, BandList bandList, RasterTask task) throws JNCSException, ProcessInterruptedException {
516 525
		int bandR = readBands[0];
517 526
		int bandG = (readBands.length > 1) ? readBands[1] : -1;
......
534 543
						for (int line = 0; line < rasterBuf.getHeight(); line++) {
535 544
							try {
536 545
								file.readLineRGBA(pRGBArray);
537
								for(int col = 0; col < pRGBArray.length; col ++){
546
								for(int col = 0; col < pRGBArray.length; col ++) {
538 547
									rasterBuf.setElem(line, col, bandR, (byte)((pRGBArray[col] & 0x00ff0000) >> 16));
539 548
									rasterBuf.setElem(line, col, bandG, (byte)((pRGBArray[col] & 0x00ff0000) >> 16));
540 549
									rasterBuf.setElem(line, col, bandB, (byte)((pRGBArray[col] & 0x00ff0000) >> 16));
......
548 557
						for (int line = 0; line < rasterBuf.getHeight(); line++) {
549 558
							try {
550 559
								file.readLineRGBA(pRGBArray);
551
								for(int col = 0; col < pRGBArray.length; col ++){
560
								for(int col = 0; col < pRGBArray.length; col ++) {
552 561
									rasterBuf.setElem(line, col, bandR, (byte)((pRGBArray[col] & 0x0000ff00) >> 8));
553 562
									rasterBuf.setElem(line, col, bandG, (byte)((pRGBArray[col] & 0x0000ff00) >> 8));
554 563
									rasterBuf.setElem(line, col, bandB, (byte)((pRGBArray[col] & 0x0000ff00) >> 8));
......
562 571
						for (int line = 0; line < rasterBuf.getHeight(); line++) {
563 572
							try {
564 573
								file.readLineRGBA(pRGBArray);
565
								for(int col = 0; col < pRGBArray.length; col ++){
574
								for(int col = 0; col < pRGBArray.length; col ++) {
566 575
									rasterBuf.setElem(line, col, bandR, (byte)(pRGBArray[col] & 0x000000ff));
567 576
									rasterBuf.setElem(line, col, bandG, (byte)(pRGBArray[col] & 0x000000ff));
568 577
									rasterBuf.setElem(line, col, bandB, (byte)(pRGBArray[col] & 0x000000ff));
......
584 593
			for (int line = 0; line < rasterBuf.getHeight(); line++) {
585 594
				try {
586 595
					file.readLineRGBA(pRGBArray);
587
					for(int col = 0; col < pRGBArray.length; col ++){
596
					for(int col = 0; col < pRGBArray.length; col ++) {
588 597
						rasterBuf.setElem(line, col, bandR, (byte)((pRGBArray[col] & 0x00ff0000) >> 16));
589 598
						rasterBuf.setElem(line, col, bandG, (byte)((pRGBArray[col] & 0x0000ff00) >> 8));
590 599
						rasterBuf.setElem(line, col, bandB, (byte)(pRGBArray[col] & 0x000000ff));
......
602 611
			for (int line = 0; line < rasterBuf.getHeight(); line++) {
603 612
				try {
604 613
					file.readLineRGBA(pRGBArray);
605
					for(int col = 0; col < pRGBArray.length; col ++){
614
					for(int col = 0; col < pRGBArray.length; col ++) {
606 615
						rasterBuf.setElem(line, col, bandR, (byte)((pRGBArray[col] & 0x00ff0000) >> 16));
607 616
						rasterBuf.setElem(line, col, bandG, (byte)((pRGBArray[col] & 0x0000ff00) >> 8));
608 617
					}
......
657 666
		if(file.numBands <= 3) {
658 667
			for(int i = 0; i < file.numBands; i++)
659 668
				readBandsFromECW[i] = i;
660
		}else {
669
		} else {
661 670
			readBandsFromECW[0] = band;
662 671
		}
663 672

  
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.io/org.gvsig.raster.io.base/src/main/java/org/gvsig/fmap/dal/coverage/dataset/io/wms/WMSProvider.java
428 428
		BandList bandList = new BandListImpl();
429 429
		for (int i = 0; i < 3; i++) {
430 430
			try {
431
				bandList.addBand(new DatasetBandImpl(lastFile.getPath(), pos, Buffer.TYPE_BYTE), pos);
431
				bandList.addBand(new DatasetBandImpl(lastFile.getPath(), pos, Buffer.TYPE_BYTE, 3), pos);
432 432
			} catch (BandNotFoundInListException e1) {
433 433
			}
434 434
		}
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.io/org.gvsig.raster.io.base/src/main/java/org/gvsig/fmap/dal/coverage/dataset/io/MrSidProvider.java
293 293

  
294 294
		try {
295 295
			file.readScene(pRGBArray, task);
296
			int wBuf = rasterBuf.getWidth();
297
			for (int row = 0; row < rasterBuf.getHeight(); row++) {
298
				for (int col = 0; col < wBuf; col++) {
299
					rasterBuf.setElem(row, col, 0, (byte) ((pRGBArray[(row * wBuf) + col] & 0x00ff0000) >> 16));
300
					rasterBuf.setElem(row, col, 1, (byte) ((pRGBArray[(row * wBuf) + col] & 0x0000ff00) >> 8));
301
					rasterBuf.setElem(row, col, 2, (byte) (pRGBArray[(row * wBuf) + col] & 0x000000ff));
302
				}
303
				if (task.getEvent() != null)
304
					task.manageEvent(task.getEvent());
305
			}
296
			loadBuffer(rasterBuf.getHeight(), rasterBuf.getWidth(), bandList, rasterBuf, pRGBArray);
306 297
		} catch (MrSIDException e) {
307 298
			throw new RasterDriverException("Error reading data");
308 299
		}
......
347 338

  
348 339
		try {
349 340
			file.readScene(pRGBArray, task);
350
			int wBuf = rasterBuf.getWidth();
351
			for (int row = 0; row < rasterBuf.getHeight(); row++) {
352
				for (int col = 0; col < wBuf; col++) {
353
					rasterBuf.setElem(row, col, 0, (byte) ((pRGBArray[(row * wBuf) + col] & 0x00ff0000) >> 16));
354
					rasterBuf.setElem(row, col, 1, (byte) ((pRGBArray[(row * wBuf) + col] & 0x0000ff00) >> 8));
355
					rasterBuf.setElem(row, col, 2, (byte) (pRGBArray[(row * wBuf) + col] & 0x000000ff));
356
				}
357
				if (task.getEvent() != null)
358
					task.manageEvent(task.getEvent());
359
			}
341
			loadBuffer(rasterBuf.getHeight(), rasterBuf.getWidth(), bandList, rasterBuf, pRGBArray);
360 342
		} catch (MrSIDException e) {
361 343
			throw new RasterDriverException("Error reading data");
362 344
		}
......
385 367

  
386 368
		try {
387 369
			file.readScene(pRGBArray, task);
388
			int w = rasterBuf.getWidth();
389
			if(getBandCount() >= 3) {
390
				for (int row = 0; row < rasterBuf.getHeight(); row++) {
391
					for (int col = 0; col < w; col++) {
392
						rasterBuf.setElem(row, col, 0, (byte) ((pRGBArray[(row * w) + col] & 0x00ff0000) >> 16));
393
						rasterBuf.setElem(row, col, 1, (byte) ((pRGBArray[(row * w) + col] & 0x0000ff00) >> 8));
394
						rasterBuf.setElem(row, col, 2, (byte) (pRGBArray[(row * w) + col] & 0x000000ff));
395
					}
396
					if (task.getEvent() != null)
397
						task.manageEvent(task.getEvent());
398
				}
399
			}
400
			if(getBandCount() == 1) {
401
				for (int row = 0; row < rasterBuf.getHeight(); row++) {
402
					for (int col = 0; col < w; col++)
403
						rasterBuf.setElem(row, col, 0, (byte) (pRGBArray[(row * w) + col] & 0x000000ff));
404
					if (task.getEvent() != null)
405
						task.manageEvent(task.getEvent());
406
				}
407
			}
370
			loadBuffer(rasterBuf.getHeight(), rasterBuf.getWidth(), bandList, rasterBuf, pRGBArray);
408 371
		} catch (MrSIDException e) {
409 372
			throw new RasterDriverException("Error reading data");
410 373
		}
411 374
		return rasterBuf;
412 375
	}
376
	
377
	private void loadBuffer(int h, int w, BandList bandList, Buffer rasterBuf, int[] pRGBArray) throws ProcessInterruptedException {
378
		RasterTask task = RasterTaskQueue.get(Thread.currentThread().toString());
379
		int[] drawableBands = null;
380
		for (int row = 0; row < h; row++) {
381
			for (int col = 0; col < w; col++) {
382
				drawableBands = bandList.getBufferBandToDraw(getFName(), 0);
383
				if(drawableBands != null) {
384
					for (int i = 0; i < drawableBands.length; i++) {
385
						rasterBuf.setElem(row, col, drawableBands[i], (byte) ((pRGBArray[(row * w) + col] & 0x00ff0000) >> 16));
386
					}
387
				}
388
				drawableBands = bandList.getBufferBandToDraw(getFName(), 1);
389
				if(drawableBands != null) {
390
					for (int i = 0; i < drawableBands.length; i++) {
391
						rasterBuf.setElem(row, col, drawableBands[i], (byte) ((pRGBArray[(row * w) + col] & 0x0000ff00) >> 8));
392
					}
393
				}
394
				drawableBands = bandList.getBufferBandToDraw(getFName(), 2);
395
				if(drawableBands != null) {
396
					for (int i = 0; i < drawableBands.length; i++) {
397
						rasterBuf.setElem(row, col, drawableBands[i], (byte) (pRGBArray[(row * w) + col] & 0x000000ff));
398
					}
399
				}
400
			}
401
			if (task.getEvent() != null)
402
				task.manageEvent(task.getEvent());
403
		}	
404
	}
413 405

  
414 406
	/*
415 407
	 * (non-Javadoc)
......
435 427
		int[] pRGBArray = new int[bufWidth * bufHeight];
436 428
		try {
437 429
			file.readScene(pRGBArray, task);
438
			for (int row = 0; row < bufHeight; row++) {
439
				for (int col = 0; col < bufWidth; col++) {
440
					rasterBuf.setElem(row, col, 0, (byte) ((pRGBArray[(row * bufWidth) + col] & 0x00ff0000) >> 16));
441
					rasterBuf.setElem(row, col, 1, (byte) ((pRGBArray[(row * bufWidth) + col] & 0x0000ff00) >> 8));
442
					rasterBuf.setElem(row, col, 2, (byte) (pRGBArray[(row * bufWidth) + col] & 0x000000ff));
443
				}
444
				if (task.getEvent() != null)
445
					task.manageEvent(task.getEvent());
446
			}
430
			loadBuffer(bufHeight, bufWidth, bandList, rasterBuf, pRGBArray);
447 431
		} catch (MrSIDException e) {
448 432
			throw new RasterDriverException("Error reading data");
449 433
		}

Also available in: Unified diff