Revision 657

View differences:

org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.fmap/src/main/java/org/gvsig/raster/fmap/layers/DefaultFLyrRaster.java
697 697
		
698 698
		try {
699 699
			if(getDataStore().isTiled()) 
700
				getRender().drawTiledService(g, vp2);
700
				getRender().drawTiledService(g, vp2, vp.getImageSize());
701 701
			else
702 702
				getRender().draw(g, vp2);
703 703
		} catch (ProcessInterruptedException e1) {
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.api/src/main/java/org/gvsig/fmap/dal/coverage/grid/render/Render.java
22 22
package org.gvsig.fmap.dal.coverage.grid.render;
23 23

  
24 24
import java.awt.Graphics2D;
25
import java.awt.geom.Dimension2D;
25 26

  
26 27
import org.gvsig.fmap.dal.coverage.dataset.Buffer;
27 28
import org.gvsig.fmap.dal.coverage.datastruct.ViewPortData;
......
202 203
	 * @throws InvalidSetViewException
203 204
	 * @throws ProcessInterruptedException
204 205
	 */
205
	public void drawTiledService(Graphics2D g, ViewPortData vp)
206
	public void drawTiledService(Graphics2D g, ViewPortData vp, Dimension2D viewDimension)
206 207
		throws RasterDriverException, InvalidSetViewException, ProcessInterruptedException;
207 208
	
208 209
	/**
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
24 24
import java.awt.Graphics2D;
25 25
import java.awt.Image;
26 26
import java.awt.geom.AffineTransform;
27
import java.awt.geom.Dimension2D;
27 28
import java.awt.geom.NoninvertibleTransformException;
28 29
import java.awt.geom.Point2D;
29 30
import java.util.ArrayList;
......
142 143
	
143 144
	private Graphics2D       lastGraphics             = null;
144 145
	private ViewPortData     lastViewPortData         = null;
146
	private Dimension2D      viewDimension            = null;
145 147
	
146 148
	/**
147 149
	 * Constructor
......
302 304
	 * (non-Javadoc)
303 305
	 * @see org.gvsig.fmap.dal.coverage.grid.render.Render#draw(java.awt.Graphics2D, org.cresques.geo.ViewPortData)
304 306
	 */
305
	public synchronized void drawTiledService(Graphics2D g, ViewPortData vp)
307
	public synchronized void drawTiledService(Graphics2D g, ViewPortData vp, Dimension2D viewDimension)
306 308
		throws RasterDriverException, InvalidSetViewException, ProcessInterruptedException {
307 309
		lastGraphics = g;
308 310
		lastViewPortData = vp;
311
		this.     viewDimension             = viewDimension;
309 312

  
310 313
		if(util.isOutside(vp.getExtent(), dataStore.getExtent())) {
311 314
			endReading();
......
490 493
			}
491 494
			buf = grid.getRasterBuf();
492 495

  
493
			//Reescalado de los tiles. El tama?o en pixels de un tile no tiene pq coincidir con el de la vista. 
494
			double viewScaleW = lastViewPortData.getExtent().width() / lastViewPortData.getWidth();
496
			//Reescalado de los tiles. El tama?o en pixels de un tile no tiene pq coincidir con el de la vista.
497
			double w = lastViewPortData.getWidth();
498
			double h = lastViewPortData.getHeight();
499
			if(viewDimension != null) {
500
				w = viewDimension.getWidth();
501
				h = viewDimension.getHeight();
502
			}
503
			double viewScaleW = lastViewPortData.getExtent().width() / w;
495 504
			double tileScaleW = e.width() / (double)buf.getWidth();
496 505
			double scaleW = viewScaleW / tileScaleW;
497
			double viewScaleH = lastViewPortData.getExtent().height() / lastViewPortData.getHeight();
506
			double viewScaleH = lastViewPortData.getExtent().height() / h;
498 507
			double tileScaleH = e.height() / (double)buf.getHeight();
499 508
			double scaleH = viewScaleH / tileScaleH;
500 509

  
org.gvsig.raster.wms/trunk/org.gvsig.raster.wms/org.gvsig.raster.wms.io/src/main/java/org/gvsig/raster/wms/io/WMSConnector.java
22 22
package org.gvsig.raster.wms.io;
23 23

  
24 24
import java.awt.geom.Rectangle2D;
25
import java.io.BufferedOutputStream;
26
import java.io.DataInputStream;
27
import java.io.DataOutputStream;
25 28
import java.io.File;
29
import java.io.FileOutputStream;
26 30
import java.io.IOException;
31
import java.io.OutputStreamWriter;
27 32
import java.net.ConnectException;
33
import java.net.HttpURLConnection;
28 34
import java.net.URL;
35
import java.security.KeyManagementException;
36
import java.security.NoSuchAlgorithmException;
29 37
import java.util.ArrayList;
30 38
import java.util.Hashtable;
31 39
import java.util.TreeMap;
32 40
import java.util.Vector;
41
import java.util.prefs.Preferences;
33 42

  
43
import javax.net.ssl.HttpsURLConnection;
44
import javax.net.ssl.SSLContext;
45
import javax.net.ssl.TrustManager;
46
import javax.net.ssl.X509TrustManager;
47

  
34 48
import org.gvsig.compat.net.ICancellable;
35 49
import org.gvsig.fmap.dal.coverage.exception.RemoteServiceException;
36 50
import org.gvsig.remoteclient.exceptions.ServerErrorException;
......
79 93
        }
80 94
    }
81 95
    
96
    /**
97
     * 
98
     * @param status
99
     * @param cancel
100
     * @param file
101
     * @throws RemoteServiceException
102
     */
82 103
    public void getMap(WMSStatus status, ICancellable cancel, File file) throws RemoteServiceException {
83 104
        try {
84
			client.getMap(status, cancel, file);
85
        } catch (org.gvsig.remoteclient.exceptions.WMSException e) {
105
			URL url = client.getGetMapURL(status, cancel);
106
			downloadFile(url, file, cancel);
107
			String exceptionMessage = client.getExceptionMessage(file);
108
			if(exceptionMessage != null)
109
				throw new RemoteServiceException(exceptionMessage);
110
		} catch(IOException e) {
111
			throw new RemoteServiceException("WMS: error downloading the file. File:" + file.getAbsolutePath() + "...." + e.getMessage());
112
		} catch (ServerErrorException e) {
113
            throw new RemoteServiceException("WMS Unexpected server error."+e.getMessage());
114
        }  catch (org.gvsig.remoteclient.exceptions.WMSException e) {
86 115
            throw new RemoteServiceException(e.getMessage());
87
        } catch (ServerErrorException e) {
88
            throw new RemoteServiceException("WMS Unexpected server error."+e.getMessage());
89 116
        }
90 117
    }
91 118

  
119
    
120
    public void downloadFile(URL url, File dstFile, ICancellable cancel) throws IOException {
121
		Preferences prefs = Preferences.userRoot().node( "gvsig.downloader" );
122
		// by default 1 minute (60000 milliseconds.
123
		int timeout = prefs.getInt("timeout", 60000);
124

  
125
		DataOutputStream dos;
126
		DataInputStream is;
127
		OutputStreamWriter os = null;
128
		HttpURLConnection connection = null;
129
		//If the used protocol is HTTPS
130
		if (url.getProtocol().equals("https")) {
131
			try {
132
				disableHttsValidation();
133
			} catch (KeyManagementException e) {
134
				e.printStackTrace();
135
			} catch (NoSuchAlgorithmException e) {
136
				e.printStackTrace();
137
			}
138
		}
139
		connection = (HttpURLConnection)url.openConnection();
140
		connection.setConnectTimeout(timeout);
141
		is = new DataInputStream(url.openStream());
142

  
143
		dos = new DataOutputStream( new BufferedOutputStream(new FileOutputStream(dstFile)));
144
		byte[] buffer = new byte[1024 * 4];
145

  
146

  
147
		long readed = 0;
148
		for (int i = is.read(buffer); i > 0; i = is.read(buffer)){
149
			dos.write(buffer, 0, i);
150
			readed += i;
151
			if(cancel != null && cancel.isCanceled())
152
				return;
153
		}
154
		if(os != null) {
155
			os.close();
156
		}
157
		dos.close();
158
		is.close();
159
		is = null;
160
		dos = null;
161
	}
162

  
163
	/**
164
	 * This method disables the Https certificate validation.
165
	 * @throws KeyManagementException
166
	 * @throws NoSuchAlgorithmException
167
	 */
168
	private void disableHttsValidation() throws KeyManagementException, NoSuchAlgorithmException{
169
		// Create a trust manager that does not validate certificate chains
170
		TrustManager[] trustAllCerts = new TrustManager[] {
171
				new X509TrustManager() {
172
					public java.security.cert.X509Certificate[] getAcceptedIssuers() {
173
						return null;
174
					}
175
					public void checkClientTrusted(
176
							java.security.cert.X509Certificate[] certs, String authType) {
177
					}
178
					public void checkServerTrusted(
179
							java.security.cert.X509Certificate[] certs, String authType) {
180
					}
181
				}
182
		};
183

  
184
		// Install the all-trusting trust manager
185
		SSLContext sc = SSLContext.getInstance("SSL");
186
		sc.init(null, trustAllCerts, new java.security.SecureRandom());
187
		HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
188
	}
189

  
92 190
    /**
93 191
     * Gets the legend graphic of one layer
94 192
     */
org.gvsig.raster.wms/trunk/org.gvsig.raster.wms/org.gvsig.raster.wms.app/org.gvsig.raster.wms.app.wmsclient/src/main/java/org/gvsig/raster/wms/app/wmsclient/layer/FLyrWMS.java
412 412
		callCount = 0;  
413 413
		
414 414
		enableStopped();
415
		
416
		if(recalcLevel) {
417
			double pixelSize = viewPort.getEnvelope().getLength(0) / (double)viewPort.getImageWidth();
418
			zoomLevel = dataStore.getNearestLevel(pixelSize);
419
		}
420
		recalcLevel = true;
415 421

  
416 422
		if (isWithinScale(scale)) {
417 423

  
......
506 512
				if(params instanceof WMSDataParameters)
507 513
					getRender().draw(g, vpData);
508 514
				else
509
					getRender().drawTiledService(g, vpData);
515
					getRender().drawTiledService(g, vpData, vp.getImageSize());
510 516
				//this.updateDrawVersion();
511 517
			} catch (RasterDriverException e) {
512 518
				throw new RemoteServiceException("Problems drawing this layer: " + e.getMessage(), e);
org.gvsig.raster.wmts/trunk/org.gvsig.raster.wmts/org.gvsig.raster.wmts.app/org.gvsig.raster.wmts.app.wmtsclient/src/main/java/org/gvsig/raster/wmts/app/wmtsclient/layer/FLyrWMTS.java
252 252
				par.setWidth((int)viewPort.getImageSize().getWidth());
253 253
				par.setHeight((int)viewPort.getImageSize().getHeight());
254 254
				
255
				getRender().drawTiledService(g, vp2);
255
				getRender().drawTiledService(g, vp2, viewPort.getImageSize());
256 256
			} catch (RasterDriverException e) {
257 257
				throw new ReadException("Problems drawing this layer: " + e.getMessage(), e);
258 258
			} catch (InvalidSetViewException e) {
org.gvsig.raster.wcs/trunk/org.gvsig.raster.wcs/org.gvsig.raster.wcs.app/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/layer/FLyrWCS.java
80 80
import org.gvsig.fmap.dal.exception.ReadException;
81 81
import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
82 82
import org.gvsig.fmap.dal.spi.DataManagerProviderServices;
83
import org.gvsig.fmap.geom.Geometry.SUBTYPES;
84 83
import org.gvsig.fmap.geom.GeometryLocator;
85 84
import org.gvsig.fmap.geom.GeometryManager;
85
import org.gvsig.fmap.geom.Geometry.SUBTYPES;
86 86
import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
87 87
import org.gvsig.fmap.geom.primitive.Envelope;
88 88
import org.gvsig.fmap.mapcontext.ViewPort;
......
250 250
        callCount = 0;  
251 251

  
252 252
        enableStopped();
253
        
254
        if(recalcLevel) {
255
			double pixelSize = viewPort.getEnvelope().getLength(0) / (double)viewPort.getImageWidth();
256
			zoomLevel = dataStore.getNearestLevel(pixelSize);
257
		}
258
		recalcLevel = true;
253 259

  
254 260
        if (isWithinScale(scale)) {
255 261

  

Also available in: Unified diff