package com.banking.xc.utils.staticinfo;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import android.text.TextUtils;
import com.banking.xc.database.table.CityTable;
import com.banking.xc.entity.CityInfoEntity;
import com.banking.xc.entity.CityInfosResponse;
import com.banking.xc.utils.HttpGroup;
import com.banking.xc.utils.HttpGroup.HttpError;
import com.banking.xc.utils.HttpGroup.HttpResponse;
import com.banking.xc.utils.HttpGroup.HttpSetting;
import com.banking.xc.utils.HttpGroup.HttpSettingParams;
import com.banking.xc.utils.HttpGroupUtils;
import com.banking.xc.utils.Log;
import com.banking.xc.utils.webService.request.flight.flightproduct.FltGetCityInfoRequest;
import com.banking.xc.utils.xml.flight.FlightCityInfoResponseXmlParseHandler;
import com.banking.xc.utils.xml.frame.XmlParseListener;
/**
* 这个util对象依赖于flight页面
* @author zhangyinhang
*
*/
public class FlightCityUtil {
private final static String TAG = "FlightCityUtil";
public static ArrayList<CityInfoEntity> cityList;
public ArrayList<String> cityNames;
public Map<String,String> cityNameCodeMap;
/*public static ArrayList<CityInfoEntity> getCityList(){
return cityList;
}*/
public void initializeFlightCity(){
productCityMapByCode();
productCityNameListByCode();
/*cityList = FlightCityTable.getCities();
if(cityList.size()<1){
getFlightCityByHttp();
}else{
}*/
}
/**
* 方法可能返回为空
* @return
*/
public ArrayList<String> getCityNameList(){
return cityNames;
}
/**
* 可能返回为空
* @return
*/
public Map<String,String> getCityNameCodeMap(){
return cityNameCodeMap;
}
/**
* 如果使用全部获取,会引起内存溢出。一个技术问题
* @param cityName
* @return
*/
@Deprecated
public static void getFlightCityByHttp(){
FltGetCityInfoRequest request = new FltGetCityInfoRequest();
//request.set
//request.setCityId("105");
//request.set
final HttpSetting httpSetting = new HttpSetting(request);
httpSetting.setEffect(HttpSetting.EFFECT_NO);
httpSetting.setNotifyUser(true);
httpSetting.setListener(new HttpGroup.OnCommonListener() {
@Override
public void onEnd(HttpResponse httpResponse) {
String result = httpResponse.getString();
System.out.println("getFlightCityList()-->on End");
if (Log.D) {
Log.dAll(TAG, "getFlightCityList()-->", result);
}
InputStream inputStream = new ByteArrayInputStream(result.getBytes());
final FlightCityInfoResponseXmlParseHandler parseHandler = new FlightCityInfoResponseXmlParseHandler(new XmlParseListener() {
@Override
public void onParseStart() {
}
@Override
public void onParseError(String reason) {
if (Log.D) {
Log.d(TAG, "getFlightList() Parse error");
}
}
@Override
public void onParseSuccess(Object o) {
cityList = ((CityInfosResponse)o).getCityInfoEntiyList();
CityTable.insertManyCity(cityList);
if(Log.D&&cityList!=null){
Log.d(TAG, "cityList.size()"+cityList.size());
}
}
}, inputStream);
parseHandler.parse();
}
@Override
public void onError(HttpError error) {
System.out.println("getFlightList()-->on End");
}
@Override
public void onReady(HttpSettingParams httpSettingParams) {
}
});
HttpGroupUtils.getHttpGroupaAsynPool().add(httpSetting);
}
public String getCityCodeByCityName(String cityName){
for(Entry<String,String>set:cityNameCodeMap.entrySet()){
if(TextUtils.equals(cityName,set.getKey())){
return set.getValue();
}
}
return CityTable.getCityCodeByName(cityName);
/*for(CityInfoEntity c :cityList){
if(TextUtils.equals(c.getCityName(), cityName)){
return c.getCityCode();
}
}
return "";*/
}
public String getCityNameByCityCode(String cityCode){
for(Entry<String,String>set:cityNameCodeMap.entrySet()){
if(TextUtils.equals(cityCode,set.getValue())){
return set.getKey();
}
}
return CityTable.getCityNameByCode(cityCode);
/*if(cityList==null){
return "";
}
for(CityInfoEntity c :cityList){
if(TextUtils.equals(c.getCityCode(), cityCode)){
return c.getCityName();
}
}
return "";*/
}
/**
* 相对于枚举实现,asset中导入数据库,这种方法最优化.
* 这个方法没必要,只需要根据城市汉字得到.可以记住热门的
*/
public void productCityMapByCode(){
cityNameCodeMap = null;
cityNameCodeMap = new HashMap<String, String>();
cityNameCodeMap.put("北京","BJS");
cityNameCodeMap.put("上海","SHA");
cityNameCodeMap.put("天津","TSN");
cityNameCodeMap.put("重庆","CKG");
cityNameCodeMap.put("哈尔滨","HRB");
cityNameCodeMap.put("西安","SIA");
cityNameCodeMap.put("昆明","KMG");
cityNameCodeMap.put("南京","NKG");
cityNameCodeMap.put("苏州","SZV");
cityNameCodeMap.put("杭州","HGH");
cityNameCodeMap.put("扬州","YTY");
cityNameCodeMap.put("长沙","CSX");//
cityNameCodeMap.put("厦门","XMN");//
cityNameCodeMap.put("张家界","DYG");
cityNameCodeMap.put("成都","CTU");
cityNameCodeMap.put("广州","CAN");
cityNameCodeMap.put("深圳","SZX");
cityNameCodeMap.put("郑州","CGO");//
cityNameCodeMap.put("三亚","SYX");//
cityNameCodeMap.put("济南","TNA");//
cityNameCodeMap.put("福州","FOC");//
cityNameCodeMap.put("九寨沟","JZH");//
cityNameCodeMap.put("泰安","454");//?
cityNameCodeMap.put("泰山","145");//?
cityNameCodeMap.put("黄山","TXN");//?
cityNameCodeMap.put("林芝","LZY");//?
cityNameCodeMap.put("大连","DLC");
cityNameCodeMap.put("青岛","TAO");
cityNameCodeMap.put("敦煌","DNH");
cityNameCodeMap.put("曲阜","143");
}
public void productCityNameListByCode(){
cityNames = null;
cityNames = new ArrayList<String>();
cityNames.add("北京");
cityNames.add("上海");
cityNames.add("天津");
cityNames.add("重庆");
cityNames.add("哈尔滨");
cityNames.add("西安");
cityNames.add("昆明");
cityNames.add("南京");
cityNames.add("苏州");
cityNames.add("扬州");
cityNames.add("杭州");
cityNames.add("长沙");
cityNames.add("厦门");
cityNames.add("张家界");
cityNames.add("成都");
cityNames.add("广州");
cityNames.add("深圳");
cityNames.add("郑州");
cityNames.add("三亚");
cityNames.add("济南");
cityNames.add("福州");
cityNames.add("九寨沟");
cityNames.add("泰山");
cityNames.add("泰安");
cityNames.add("黄山");
cityNames.add("林芝");
cityNames.add("大连");
cityNames.add("青岛");
cityNames.add("敦煌");
cityNames.add("曲阜");
}
}