/*
* Copyright (c) 2013. wyouflf (wyouflf@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.lidroid.xutils.http;
import android.text.TextUtils;
import com.lidroid.xutils.http.client.HttpRequest;
import com.lidroid.xutils.cache.LruMemoryCache;
import java.util.concurrent.ConcurrentHashMap;
/**
* Author: wyouflf
* Date: 13-8-1
* Time: 下午12:04
*/
public class HttpCache {
/**
* key: url
* value: response result
*/
private final LruMemoryCache<String, String> mMemoryCache;
private final static int DEFAULT_CACHE_SIZE = 1024 * 100;// string length
private final static long DEFAULT_EXPIRY_TIME = 1000 * 60; // 60 seconds
private int cacheSize = DEFAULT_CACHE_SIZE;
private static long defaultExpiryTime = DEFAULT_EXPIRY_TIME;
/**
* HttpCache(HttpCache.DEFAULT_CACHE_SIZE, HttpCache.DEFAULT_EXPIRY_TIME);
*/
public HttpCache() {
this(HttpCache.DEFAULT_CACHE_SIZE, HttpCache.DEFAULT_EXPIRY_TIME);
}
public HttpCache(int strLength, long defaultExpiryTime) {
this.cacheSize = strLength;
HttpCache.defaultExpiryTime = defaultExpiryTime;
mMemoryCache = new LruMemoryCache<String, String>(this.cacheSize) {
@Override
protected int sizeOf(String key, String value) {
if (value == null) return 0;
return value.length();
}
};
}
public void setCacheSize(int strLength) {
mMemoryCache.setMaxSize(strLength);
}
public static void setDefaultExpiryTime(long defaultExpiryTime) {
HttpCache.defaultExpiryTime = defaultExpiryTime;
}
public static long getDefaultExpiryTime() {
return HttpCache.defaultExpiryTime;
}
public void put(String url, String result) {
put(url, result, defaultExpiryTime);
}
public void put(String url, String result, long expiry) {
if (url == null || result == null || expiry < 1) return;
mMemoryCache.put(url, result, System.currentTimeMillis() + expiry);
}
public String get(String url) {
return (url != null) ? mMemoryCache.get(url) : null;
}
public void clear() {
mMemoryCache.evictAll();
}
public boolean isEnabled(HttpRequest.HttpMethod method) {
if (method == null) return false;
Boolean enabled = httpMethod_enabled_map.get(method.toString());
return enabled == null ? false : enabled;
}
public boolean isEnabled(String method) {
if (TextUtils.isEmpty(method)) return false;
Boolean enabled = httpMethod_enabled_map.get(method.toUpperCase());
return enabled == null ? false : enabled;
}
public void setEnabled(HttpRequest.HttpMethod method, boolean enabled) {
httpMethod_enabled_map.put(method.toString(), enabled);
}
private final static ConcurrentHashMap<String, Boolean> httpMethod_enabled_map;
static {
httpMethod_enabled_map = new ConcurrentHashMap<String, Boolean>(10);
httpMethod_enabled_map.put(HttpRequest.HttpMethod.GET.toString(), true);
}
}