Java tutorial
/* * Copyright 2011 - AndroidQuery.com (tinyeeliu@gmail.com) * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package com.benefit.buy.library.http.query.callback; import java.io.Closeable; import java.io.File; import java.util.Arrays; import java.util.Collections; import java.util.Date; import java.util.List; import org.apache.http.Header; import org.apache.http.client.CookieStore; import org.apache.http.client.protocol.ClientContext; import org.apache.http.cookie.Cookie; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.protocol.HttpContext; import com.benefit.buy.library.http.query.util.AQUtility; /** * AjaxStatus contains meta information of an AjaxCallback callback. */ public class AjaxStatus { /** Source NETWORK. */ public static final int NETWORK = 1; /** Source DATASTORE. */ public static final int DATASTORE = 2; /** Source FILE. */ public static final int FILE = 3; /** Source MEMORY. */ public static final int MEMORY = 4; /** Source DEVICE. */ public static final int DEVICE = 5; public static final int NETWORK_ERROR = -101; public static final int AUTH_ERROR = -102; public static final int TRANSFORM_ERROR = -103; private int code = 200; private String message = "OK"; private String redirect; private byte[] data; private File file; private Date time = new Date(); private boolean refresh; private DefaultHttpClient client; private long duration; private int source = NETWORK; private long start = System.currentTimeMillis(); private boolean done; private boolean invalid; private boolean reauth; private String error; private HttpContext context; private Header[] headers; private Closeable close; public AjaxStatus() { } public AjaxStatus(int code, String message) { this.code = code; this.message = message; } protected AjaxStatus source(int source) { this.source = source; return this; } public AjaxStatus code(int code) { this.code = code; return this; } protected AjaxStatus error(String error) { this.error = error; return this; } public AjaxStatus message(String message) { this.message = message; return this; } protected AjaxStatus redirect(String redirect) { this.redirect = redirect; return this; } protected AjaxStatus context(HttpContext context) { this.context = context; return this; } protected AjaxStatus time(Date time) { this.time = time; return this; } protected AjaxStatus refresh(boolean refresh) { this.refresh = refresh; return this; } protected AjaxStatus reauth(boolean reauth) { this.reauth = reauth; return this; } protected AjaxStatus client(DefaultHttpClient client) { this.client = client; return this; } protected AjaxStatus headers(Header[] headers) { this.headers = headers; return this; } public AjaxStatus done() { duration = System.currentTimeMillis() - start; done = true; reauth = false; return this; } protected AjaxStatus reset() { duration = System.currentTimeMillis() - start; done = false; close(); return this; } protected void closeLater(Closeable c) { close = c; } /** * Close any opened inputstream associated with the response. Call this method when finish parsing the response of a * synchronous call. */ public void close() { AQUtility.close(close); close = null; } protected AjaxStatus data(byte[] data) { this.data = data; return this; } protected AjaxStatus file(File file) { this.file = file; return this; } public AjaxStatus invalidate() { invalid = true; return this; } protected boolean getDone() { return done; } protected boolean getReauth() { return reauth; } protected boolean getInvalid() { return invalid; } /** * Gets the http response code. Can be also be NETWORK_ERROR, AUTH_ERROR, or TRANSFORM_ERROR. * @return code */ public int getCode() { return code; } /** * Gets the http response message. * @return message */ public String getMessage() { return message; } /** * Gets the redirected url. Returns original url if no redirection. * @return redirect url */ public String getRedirect() { return redirect; } public byte[] getData() { return data; } protected File getFile() { return file; } /** * Gets the object fetched time. Returns original fetch time when url is file cached. * @return original fetch time */ public Date getTime() { return time; } /** * Gets the refresh param. * @return refresh */ public boolean getRefresh() { return refresh; } /** * Gets the http client used to fetch the url. User can access other resources like response headers and cookies. * Returns null if object is cached (source is not AjaxStatus.NETWORK). * @return http client */ public DefaultHttpClient getClient() { return client; } /** * Gets the duration of the ajax request in millseconds. * @return duration */ public long getDuration() { return duration; } /** * Gets the source type. Can be AjaxStatus.NETWORK, AjaxStatus.DATASTORE, AjaxStatus.FILE, or AjaxStatus.MEMORY. * @return source */ public int getSource() { return source; } /** * Gets the error response as a string. For http response code that's not 200-299. * @return source */ public String getError() { return error; } /** * Test if the response is expired against current time, given the expire duration in milliseconds. If the ajax * source is NETWORK, it's never considered expired. * @return expire Expire duration in milliseconds. */ public boolean expired(long expire) { long mod = time.getTime(); long now = System.currentTimeMillis(); long diff = now - mod; if ((diff > expire) && (getSource() != NETWORK)) { return true; } return false; } /** * Return the cookies set by the server. Return values only when source is not from cache (source == NETWORK), * returns empty list otherwise. * @return cookies */ public List<Cookie> getCookies() { if (context == null) { return Collections.emptyList(); } CookieStore store = (CookieStore) context.getAttribute(ClientContext.COOKIE_STORE); if (store == null) { return Collections.emptyList(); } return store.getCookies(); } /** * Return the http response headers. Return values only when source is not from cache (source == NETWORK), returns * empty list otherwise. * @return cookies */ public List<Header> getHeaders() { if (headers == null) { return Collections.emptyList(); } return Arrays.asList(headers); } public String getHeader(String name) { if (headers == null) { return null; } for (Header header : headers) { if (name.equalsIgnoreCase(header.getName())) { return header.getValue(); } } return null; } }