📄 httpcommunicationhandler.java
字号:
/*
* Copyright 2001, 2002, 2003 Sun Microsystems, Inc. All Rights Reserved.
* Except for any files in PNG format (which are marked with the filename
* extension ".png"), GIF format (which are marked with the filename
* extension ".gif"), or JPEG format (which are marked with the filename
* extension ".jpg"), redistribution and use in source and binary forms,
* with or without modification, are permitted provided that the
* following conditions are met:
* - Redistribution of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* - Redistribution in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* You may compile, use, perform and display the following files with
* original Java Smart Ticket Sample Application code obtained from Sun
* Microsystems, Inc. only:
* - files in PNG format and having the ".png" extension
* - files in GIF format and having the ".gif" extension
* - files in JPEG format and having the ".jpg" extension
* You may not modify or redistribute .png, .gif, or .jpg files in any
* form, in whole or in part, by any means without prior written
* authorization from Sun Microsystems, Inc. and its licensors, if any.
* Neither the name of Sun Microsystems, Inc., the 'Java Smart Ticket
* Sample Application', 'Java', 'Java'-based names, or the names of
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* This software is provided "AS IS," without a warranty of any kind. ALL
* EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
* INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
* PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
* MIDROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
* ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
* DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
* ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
* DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
* DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
* ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
* SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* You acknowledge that this software is not designed, licensed or
* intended for use in the design, construction, operation or maintenance
* of any nuclear facility.
*/
/*
* $Id: HTTPCommunicationHandler.java 291 2008-10-06 09:03:15Z khanh.lnq $
* $URL: https://jvnmobilegis.googlecode.com/svn/trunk/src/org/javavietnam/gis/client/midp/model/HTTPCommunicationHandler.java $
* $Author: khanh.lnq $
* $Revision: 291 $
* $Date: 2008-10-06 16:03:15 +0700 (Mon, 06 Oct 2008) $
*
* ====================================================================
*
* Copyright (C) 2006-2007 by JVNGIS
*
* All copyright notices regarding JVNMobileGIS MUST remain
* intact in the Java codes and resource files.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* Support can be obtained from project homepage at:
* http://code.google.com/p/jvnmobilegis/
*
* Correspondence and Marketing Questions can be sent to:
* khanh.lnq AT gmail.com
*
* @version: 1.0
* @author: Khanh Le
* @Date Created: 22 Jun 2007
*/
package org.javavietnam.gis.client.midp.model;
import henson.midp.Float;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.Vector;
import javax.microedition.io.Connector;
import javax.microedition.io.HttpConnection;
import javax.microedition.lcdui.Image;
import javax.microedition.pki.CertificateException;
import org.javavietnam.gis.shared.midp.ApplicationException;
import org.javavietnam.gis.shared.midp.SimpleCache;
import org.javavietnam.gis.shared.midp.model.LayerInformation;
import org.javavietnam.gis.shared.midp.model.ModelException;
import org.javavietnam.gis.shared.midp.model.SearchFeatureParameter;
import org.javavietnam.gis.shared.midp.model.WMSRequestParameter;
import com.tinyline.util.GZIPInputStream;
/**
* @author khanhlnq
*/
public class HTTPCommunicationHandler extends RemoteModelRequestHandler {
// store the last valid credentials
/**
* @uml.property name="wwwAuthenticate"
*/
private String wwwAuthenticate = null;
private String credentials = null;
private int totalData = 0;
private SimpleCache internalCache;
public HTTPCommunicationHandler(RemoteModelRequestHandler nextHandler) {
super(nextHandler);
internalCache = new SimpleCache();
}
/**
* Get image from WMS server @
*/
public Image getMapWMS(WMSRequestParameter requestParam, Vector layerList)
throws ModelException, ApplicationException {
byte[] bytes = getMapWMSAsBytes(requestParam, layerList);
return Image.createImage(bytes, 0, bytes.length);
}
/**
* Get image as bytes from WMS server @
*/
public byte[] getMapWMSAsBytes(WMSRequestParameter requestParam,
Vector layerList) throws ModelException, ApplicationException {
HttpConnection connection = null;
InputStream inputStream = null;
// Try to free-up memory first
System.gc();
updateProgress();
if (0 == layerList.size()) {
throw new ApplicationException(MessageCodes.NO_SELECTED_LAYER);
}
LayerInformation layerInfo = (LayerInformation) layerList.elementAt(0);
String wmsUrl = layerInfo.getServerInformation().getGetMapURL();
// TODO Khanh: Will find a better way later.
// requestParam.initParam(f, wmsUrl);
StringBuffer url = new StringBuffer(wmsUrl);
url.append(wmsUrl.indexOf("?") < 0 ? "?" : "&");
url.append("request=GetMap");
url.append("&service=wms");
url.append("&styles="); // 7.2.3.4; MUST be present and
// may be a null value for default
// or must one from the list.
url.append("&layers=");
for (int i = 0; i < layerList.size(); i++) {
url.append(((LayerInformation) layerList.elementAt(i))
.getField("name"));
url.append(",");
}
// Delete the last comma
url.deleteCharAt(url.length() - 1);
url.append("&bbox=").append(
new Float(requestParam.getBoundingX1()).toString());
url.append(",").append(
new Float(requestParam.getBoundingY1()).toString());
url.append(",").append(
new Float(requestParam.getBoundingX2()).toString());
url.append(",").append(
new Float(requestParam.getBoundingY2()).toString());
url.append("&SRS=").append(requestParam.getSRS());
url.append("&width=").append(requestParam.getPixelWidth()).append(
"&height=").append(requestParam.getPixelHeight());
url.append("&format=").append(requestParam.getImageFormat());
url.append("&exceptions=").append(requestParam.getTextFormat());
url.append("&version=").append(requestParam.getVersion());
wmsUrl = url.toString();
// Check if this URL was already cached
if (internalCache.containsKey(wmsUrl)) {
System.out.println("Pull data from cache for \n" + wmsUrl);
} else {
try {
connection = openGETConnection(wmsUrl);
updateProgress();
inputStream = openConnectionInputStream(connection);
updateProgress();
// Check for content type
String contentType = connection.getHeaderField("content-type");
if (!contentType.equals(requestParam.getImageFormat())) {
StringBuffer msgBuf = new StringBuffer();
int ch;
while ((ch = inputStream.read()) != -1) {
msgBuf.append((char) ch);
totalData++;
}
throw new ApplicationException(msgBuf.toString());
}
// Read input stream into byte[]
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int ch;
while ((ch = inputStream.read()) != -1) {
baos.write(ch);
totalData++;
}
internalCache.put(wmsUrl, baos.toByteArray());
updateProgress();
} catch (IOException ioe) {
int ch;
try {
while ((ch = inputStream.read()) != -1) {
System.out.print((char) ch);
totalData++;
}
} catch (IOException e) {
e.printStackTrace();
}
System.out.println();
ioe.printStackTrace();
throw new ApplicationException(
MessageCodes.ERROR_CANNOT_CONNECT, ioe.getMessage());
} finally {
closeConnection(connection, inputStream);
}
}
return (byte[]) internalCache.get(wmsUrl);
}
/*
* public String findPathWMS(WMSRequestParameter requestParam) throws
* ModelException, ApplicationException { HttpConnection connection = null;
* InputStream inputStream = null; if (null == requestParam.getStartPoint()
* || null == requestParam.getEndPoint()) { throw new
* ApplicationException(ErrorMessageCodes.NO_SELECTED_POINT); } StringBuffer
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -