⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 httpcommunicationhandler.java

📁 实现了一个基于j2me移动gps定位系统
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
/*
 * 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 + -