Package com.aicontest.visualizer.js.dom

Source Code of com.aicontest.visualizer.js.dom.XMLHttpRequest

package com.aicontest.visualizer.js.dom;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;
import java.net.URLConnection;
import java.util.zip.GZIPInputStream;

import org.w3c.dom.DOMException;

import com.aicontest.visualizer.WebWrapper;
import com.aicontest.visualizer.js.tasks.EventExecutionUnit;

public class XMLHttpRequest {

  public Object onreadystatechange;
  static final short UNSENT = 0;
  static final short OPENED = 1;
  static final short HEADERS_RECEIVED = 2;
  static final short LOADING = 3;
  static final short DONE = 4;
  private short readyState = 0;
  private URLConnection conn;
  private String statusText;
  String responseText;
  private Document responseXML;

  public short getReadyState() {
    return readyState;
  }

  public void open(String method, String url) {
    open(method, url, true);
  }

  public void open(String method, String url, boolean async) {
    open(method, url, async, null);
  }

  public void open(String method, String url, boolean async, String user) {
    open(method, url, async, user, null);
  }

  public void open(String method, String url, boolean async, String user, String password) {
    method = method.toUpperCase();
    if ((!"CONNECT".equals(method)) && (!"DELETE".equals(method)) && (!"GET".equals(method)) && (!"HEAD".equals(method)) && (!"OPTIONS".equals(method)) && (!"POST".equals(method)) && (!"PUT".equals(method)) && (!"TRACE".equals(method)) && (!"TRACK".equals(method))) {
      throw new DOMException(DOMException.SYNTAX_ERR, method + " is not a valid http method");
    }
    if (("CONNECT".equals(method)) || ("TRACE".equals(method)) || ("TRACK".equals(method))) {
      throw new SecurityException(method + " is not allowed.");
    }
    WebWrapper webWrapper = WebWrapper.getInstance();
    try {
      URL baseURL = webWrapper.getBaseURL();
      try {
        URL urlObject = new URL(baseURL, url);
        conn = urlObject.openConnection();
      } catch (MalformedURLException e) {
        throw new DOMException(DOMException.SYNTAX_ERR, url + " can not be resolved in the context of " + baseURL);
      }
    } catch (Exception e) {
      throw new DOMException(DOMException.INVALID_STATE_ERR, "internal error: " + e.getMessage());
    }
    abortSend();
    try {
      if ((conn instanceof HttpURLConnection))
        ((HttpURLConnection) conn).setRequestMethod(method);
    } catch (ProtocolException e) {
      throw new DOMException(DOMException.SYNTAX_ERR, e.getMessage());
    }
    readyState = 1;
  }

  private void abortSend() {}

  public void setRequestHeader(String header, String value) {
    conn.addRequestProperty(header, value);
  }

  public void send() throws IOException {
    InputStream is = conn.getInputStream();
    if ("x-gzip".equals(conn.getContentEncoding())) {
      is = new GZIPInputStream(is);
    }
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    int read;
    byte[] bytes = new byte[256 * 256];
    do {
      read = is.read(bytes);
      if (read > 0) {
        bos.write(bytes, 0, read);
      }
    } while (read > 0);
    responseText = bos.toString();
    readyState = 4;
    WebWrapper.getInstance().addTask(new EventExecutionUnit(this, "onreadystatechange", new Object[0]));
  }

  public void send(Document data) {
    throw new DOMException(DOMException.NOT_SUPPORTED_ERR, "not supported");
  }

  public void send(String data) {
    throw new DOMException(DOMException.NOT_SUPPORTED_ERR, "not supported");
  }

  public void abort() {
    if (conn != null) {
      if ((conn instanceof HttpURLConnection)) {
        ((HttpURLConnection) conn).disconnect();
      }
      conn = null;
    }
  }

  public short getStatus() throws IOException {
    if ((conn instanceof HttpURLConnection)) {
      return (short) ((HttpURLConnection) conn).getResponseCode();
    }
    return 200;
  }

  public String getStatusText() {
    return statusText;
  }

  public String getResponseHeader(String header) {
    throw new DOMException(DOMException.NOT_SUPPORTED_ERR, "not supported");
  }

  public String getAllResponseHeaders() {
    throw new DOMException(DOMException.NOT_SUPPORTED_ERR, "not supported");
  }

  public String getResponseText() {
    return responseText;
  }

  public Document getResponseXML() {
    return responseXML;
  }
}
TOP

Related Classes of com.aicontest.visualizer.js.dom.XMLHttpRequest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.