package android.source.tuangou.framework; import android.content.res.AssetManager; import android.source.tuangou.framework.util.LogUtil; import android.source.tuangou.framework.util.StringUtil; import java.io.IOException; import java.io.InputStream; import java.util.*; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; /* * 配置文件类 * */ public class Config{ /* * 对Config.xml文件的解析类 * * DefaultHandler类是SAX2事件处理程序的默认基类 * */ static class ConfigXmlHandler extends DefaultHandler{ Boolean inAssetsTag; String preTag; //获取element元素之间content方法 public void characters(char ac[], int i, int j) throws SAXException{ String s = preTag; //remote相关配置信息获取 if (!"remote-prefix".equalsIgnoreCase(s)){ String s3 = preTag; if ("remote-update-path".equalsIgnoreCase(s3)){ String s4 = new String(ac, i, j); String s5 = Config.REMOTE_UPDATE_PATH; Config.REMOTE_UPDATE_PATH = StringUtil.getValueOrDefault(s4, s5); } else{ String s6 = preTag; if ("remote-version-url".equalsIgnoreCase(s6)){ String s7 = new String(ac, i, j); String s8 = Config.REMOTE_VERSION_URL; Config.REMOTE_VERSION_URL = StringUtil.getValueOrDefault(s7, s8); } } return; }else{ String s1 = new String(ac, i, j); String s2 = Config.REMOTE_PREFIX; Config.REMOTE_PREFIX = StringUtil.getValueOrDefault(s1, s2); } } //元素解析完成函数 public void endElement(String s, String s1, String s2) throws SAXException{ if ("assets".equalsIgnoreCase(s1)){ Boolean boolean1 = Boolean.valueOf(false); inAssetsTag = boolean1; } preTag = null; } //元素开始解析函数 public void startElement(String s, String s1, String s2, Attributes attributes) throws SAXException{ if (!"config".equalsIgnoreCase(s1)){ //assets标签下放置了关于assets文件夹下文件的设置 if ("assets".equalsIgnoreCase(s1)){ //Assets文件夹list对象清楚 Config.ASSETS_FOLDERS_TO_COPY.clear(); Boolean boolean1 = Boolean.valueOf(true); //标识是否在Assets配置 inAssetsTag = boolean1; } //asset标签关于assets文件夹下文件的具体设置 else if ("asset".equalsIgnoreCase(s1)){ //获取相应属性值 String sCopy = attributes.getValue("copy"); String sPath = attributes.getValue("path"); String sConfig = attributes.getValue("config"); boolean flag; if ("true".equalsIgnoreCase(sCopy) && !StringUtil.isEmpty(sPath).booleanValue()){ flag = Config.ASSETS_FOLDERS_TO_COPY.add(sPath); } if ("WEB_FILE_FOLDER".equalsIgnoreCase(sConfig)){ Config.WEB_FILE_FOLDER = sPath; } else if ("UPDATE_FILE_FOLDER".equalsIgnoreCase(sConfig)){ Config.UPDATE_FILE_FOLDER = sPath; } } //数据库的相关配置 else if ("database".equalsIgnoreCase(s1)){ String s13 = attributes.getValue("name"); String s14 = Config.DEFAULT_DATABASE; //获取默认数据库的名称 Config.DEFAULT_DATABASE = StringUtil.getValueOrDefault(s13, s14); } //javascript-bridge的配置 else if ("javascript-bridges".equalsIgnoreCase(s1)){ Config.JAVASCRIPT_BRIDGES.clear(); } else if ("javascript-bridge".equalsIgnoreCase(s1)){ String s15 = attributes.getValue("name"); String s16 = attributes.getValue("class"); Object obj; if (!StringUtil.isEmpty(s15).booleanValue() && !StringUtil.isEmpty(s16).booleanValue()) obj = Config.JAVASCRIPT_BRIDGES.put(s15, s16); } preTag = s1; return; } //获取客户端相关信息 else{ //Client_tag信息 String s3 = attributes.getValue("client-tag"); String s4 = Config.CLIENT_TAG; Config.CLIENT_TAG = StringUtil.getValueOrDefault(s3, s4); //Client_version版本信息 String s5 = attributes.getValue("client-version"); String s6 = Config.CLIENT_VERSION; Config.CLIENT_VERSION = StringUtil.getValueOrDefault(s5, s6); //Page_source信息 String s7 = attributes.getValue("page-source"); String s8 = Config.PAGE_SOURCE; Config.PAGE_SOURCE = StringUtil.getValueOrDefault(s7, s8); //debug信息 String s9 = attributes.getValue("debug"); Config.DEBUG = Boolean.valueOf("true".equalsIgnoreCase(s9)); } } public ConfigXmlHandler(){ super(); Boolean boolean1 = Boolean.valueOf(false); inAssetsTag = boolean1; } } /* * 相关变量的定义 * * API_ANDROID_PREFIX--android的api地址 * API_IPHONE_PREFIX--ipone的api地址 * ASSETS_FOLDERS_TO_COPY--Assets文件夹下拷贝的list * CLIENT_TAG--客户端的标识 * CLIENT_VERSION--客户端的版本 * DEBUG--是否调试标识 * DEFAULT_DATABASE-默认数据库 * JAVASCRIPT_BRIDGES--javascript的map对象 * JS_ADAPTER--jd数据源标识 * LOCAL_VERSION_FILE--本地关于版本信息的配置文件 * PAGE_SOURCE--页面来源 * REMOTE_PREFIX-- * REMOTE_UPDATE_PATH--更新的路径 * REMOTE_VERSION_URL--获取版本的url * UPDATE_FILE_FOLDER--更新文件夹 * WEB_FILE_FOLDER-web文件夹 * WEB_FILE_PREFIX--保存web数据源路径,分为网络与本地 * * */ public static final String API_ANDROID_PREFIX = "http://api.tuan800.com/mobile_api/android/"; public static final String API_IPHONE_PREFIX = "http://api.tuan800.com/iphone/"; public static List ASSETS_FOLDERS_TO_COPY = null; public static String CLIENT_TAG = ""; public static String CLIENT_VERSION = ""; public static Boolean DEBUG = false; public static String DEFAULT_DATABASE = ""; public static Map JAVASCRIPT_BRIDGES = null; public static final String JS_ADAPTER = "android"; public static final String LOCAL_VERSION_FILE = "ver.xml"; public static String PAGE_SOURCE; public static String REMOTE_PREFIX; public static String REMOTE_UPDATE_PATH; public static String REMOTE_VERSION_URL; public static String UPDATE_FILE_FOLDER = "update"; public static String WEB_FILE_FOLDER = "web"; public static String WEB_FILE_PREFIX; public Config(){ } /* * 配置文件的初始化 * */ public static void init(){ try { //获取assets目录下的文件管理类 AssetManager assetmanager = Application.getInstance().getAssets(); //打开assets目录下的config.xml文件 InputStream inputstream = assetmanager.open("config.xml"); //采用了SAx方式对xml文件进行解析 SAXParser saxparser = SAXParserFactory.newInstance().newSAXParser(); //用于解析xml的handler ConfigXmlHandler configxmlhandler = new ConfigXmlHandler(); saxparser.parse(inputstream, configxmlhandler); String s = PAGE_SOURCE; //判断数据源是本地还是网络 if ("remote".equalsIgnoreCase(s)) { StringBuilder stringbuilder = new StringBuilder(); String s1 = REMOTE_PREFIX; StringBuilder stringbuilder1 = stringbuilder.append(s1); String s2 = CLIENT_TAG; WEB_FILE_PREFIX = stringbuilder1.append(s2).append("/") .toString(); } else { StringBuilder stringbuilder2 = (new StringBuilder()) .append("file://"); String s3 = Application.getAppFilesPath(); StringBuilder stringbuilder3 = stringbuilder2.append(s3) .append("/"); String s4 = WEB_FILE_FOLDER; WEB_FILE_PREFIX = stringbuilder3.append(s4).append("/") .toString(); } inputstream.close(); } catch (Exception e) { e.printStackTrace(); // TODO: handle exception } return; } static { /* * 相关变量的初始化 * */ PAGE_SOURCE = "local"; CLIENT_TAG = "android_web"; CLIENT_VERSION = "3.0"; REMOTE_PREFIX = "http://d.tuan800.com/dl/mobile/webapp/"; StringBuilder stringbuilder2; String s3; StringBuilder stringbuilder3; String s4; //判断数据源是本地还是网络 if ("remote".equalsIgnoreCase(PAGE_SOURCE)){ StringBuilder stringbuilder = new StringBuilder(); String s1 = REMOTE_PREFIX; StringBuilder stringbuilder1 = stringbuilder.append(s1); String s2 = CLIENT_TAG; WEB_FILE_PREFIX = stringbuilder1.append(s2).append("/").toString(); } else{ //数据源为本地 WEB_FILE_PREFIX = "file:///data/data/com.tuan800.android/files/web/"; } DEBUG = Boolean.valueOf(false); stringbuilder2 = new StringBuilder(); s3 = REMOTE_PREFIX; REMOTE_UPDATE_PATH = stringbuilder2.append(s3).append("update/").toString(); stringbuilder3 = new StringBuilder(); s4 = REMOTE_UPDATE_PATH; REMOTE_VERSION_URL = stringbuilder3.append(s4).append("ver.xml").toString(); //Assets数据list对象创建 ASSETS_FOLDERS_TO_COPY = new ArrayList(); DEFAULT_DATABASE = "tuan800"; JAVASCRIPT_BRIDGES = new HashMap(); } }