/* * Copyright (C) 2013 WhiteCat 白猫 (www.thinkandroid.cn) * * 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.ta.util.config; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.lang.reflect.Field; import java.util.Enumeration; import java.util.Properties; import com.ta.common.TAReflectUtils; import android.content.Context; /** * @Title TAPropertiesConfig * @Package com.ta.util.config * @Description TAPropertiesConfig是ThinkAndroid的Properties类型配置文件操作类 * @author 白猫 * @date 2013-1-7 上午 10:35 * @version V1.0 */ public class TAPropertiesConfig implements TAIConfig { /** assets中配置信息文件 */ private String assetsPath = "/assets/tacdonfig.properties"; /** 软件Files文件夹中配置信息文件 */ private String filesPath = "tacdonfig.properties"; private static TAPropertiesConfig mPropertiesConfig; private static final String LOADFLAG = "assetsload"; private Context mContext; private Properties mProperties; private TAPropertiesConfig(Context context) { this.mContext = context; } /** * 获得系统资源类 * * @param context * @return */ public static TAPropertiesConfig getPropertiesConfig(Context context) { if (mPropertiesConfig == null) { mPropertiesConfig = new TAPropertiesConfig(context); } return mPropertiesConfig; } @Override public void loadConfig() { // TODO Auto-generated method stub Properties props = new Properties(); InputStream in = TAPropertiesConfig.class .getResourceAsStream(assetsPath); try { if (in != null) { props.load(in); Enumeration<?> e = props.propertyNames(); if (e.hasMoreElements()) { while (e.hasMoreElements()) { String s = (String) e.nextElement(); props.setProperty(s, props.getProperty(s)); } } } setBoolean(LOADFLAG, true); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } @Override public Boolean isLoadConfig() { return getBoolean(LOADFLAG, false); } public void setConfig(String key, String value) { if (value != null) { Properties props = getProperties(); props.setProperty(key, value); setProperties(props); } } public String getAssetsPath() { return assetsPath; } public void setAssetsPath(String assetsPath) { this.assetsPath = assetsPath; } public String getFilesPath() { return filesPath; } public void setFilesPath(String filesPath) { this.filesPath = filesPath; } /** * 返回配置关于配置实体 * * @return 返回配置实体 */ private Properties getProperties() { if (mProperties == null) { mProperties = getPro(); } return mProperties; } private Properties getPro() { Properties props = new Properties(); try { InputStream in = mContext.openFileInput(filesPath); props.load(in); } catch (IOException e) { e.printStackTrace(); } return props; } private void setProperties(Properties p) { OutputStream out; try { out = mContext.openFileOutput(filesPath, Context.MODE_PRIVATE); p.store(out, null); out.flush(); } catch (Exception e) { e.printStackTrace(); } } @Override public void close() { // TODO Auto-generated method stub } @Override public boolean isClosed() { // TODO Auto-generated method stub return false; } @Override public void setString(String key, String value) { // TODO Auto-generated method stub setConfig(key, value); } @Override public void setInt(String key, int value) { // TODO Auto-generated method stub setString(key, String.valueOf(value)); } @Override public void setBoolean(String key, Boolean value) { // TODO Auto-generated method stub setString(key, String.valueOf(value)); } @Override public void setByte(String key, byte[] value) { // TODO Auto-generated method stub setString(key, String.valueOf(value)); } @Override public void setShort(String key, short value) { // TODO Auto-generated method stub setString(key, String.valueOf(value)); } @Override public void setLong(String key, long value) { // TODO Auto-generated method stub setString(key, String.valueOf(value)); } @Override public void setFloat(String key, float value) { // TODO Auto-generated method stub setString(key, String.valueOf(value)); } @Override public void setDouble(String key, double value) { // TODO Auto-generated method stub setString(key, String.valueOf(value)); } public String getConfig(String key, String defaultValue) { // TODO Auto-generated method stub return getProperties().getProperty(key, defaultValue); } @Override public String getString(String key, String defaultValue) { // TODO Auto-generated method stub return getConfig(key, defaultValue); } @Override public int getInt(String key, int defaultValue) { // TODO Auto-generated method stub try { return Integer.valueOf(getString(key, "")); } catch (Exception e) { // TODO: handle exception } return defaultValue; } @Override public boolean getBoolean(String key, Boolean defaultValue) { // TODO Auto-generated method stub try { return Boolean.valueOf(getString(key, "")); } catch (Exception e) { // TODO: handle exception } return defaultValue; } @Override public byte[] getByte(String key, byte[] defaultValue) { // TODO Auto-generated method stub try { return getString(key, "").getBytes(); } catch (Exception e) { // TODO: handle exception } return defaultValue; } @Override public short getShort(String key, Short defaultValue) { // TODO Auto-generated method stub try { return Short.valueOf(getString(key, "")); } catch (Exception e) { // TODO: handle exception } return defaultValue; } @Override public long getLong(String key, Long defaultValue) { // TODO Auto-generated method stub try { return Long.valueOf(getString(key, "")); } catch (Exception e) { // TODO: handle exception } return defaultValue; } @Override public float getFloat(String key, Float defaultValue) { // TODO Auto-generated method stub try { return Float.valueOf(getString(key, "")); } catch (Exception e) { // TODO: handle exception } return defaultValue; } @Override public double getDouble(String key, Double defaultValue) { // TODO Auto-generated method stub try { return Double.valueOf(getString(key, "")); } catch (Exception e) { // TODO: handle exception } return defaultValue; } @Override public String getString(int resID, String defaultValue) { // TODO Auto-generated method stub return getString(this.mContext.getString(resID), defaultValue); } @Override public int getInt(int resID, int defaultValue) { // TODO Auto-generated method stub return getInt(this.mContext.getString(resID), defaultValue); } @Override public boolean getBoolean(int resID, Boolean defaultValue) { // TODO Auto-generated method stub return getBoolean(this.mContext.getString(resID), defaultValue); } @Override public byte[] getByte(int resID, byte[] defaultValue) { // TODO Auto-generated method stub return getByte(this.mContext.getString(resID), defaultValue); } @Override public short getShort(int resID, Short defaultValue) { // TODO Auto-generated method stub return getShort(this.mContext.getString(resID), defaultValue); } @Override public long getLong(int resID, Long defaultValue) { // TODO Auto-generated method stub return getLong(this.mContext.getString(resID), defaultValue); } @Override public float getFloat(int resID, Float defaultValue) { // TODO Auto-generated method stub return getFloat(this.mContext.getString(resID), defaultValue); } @Override public double getDouble(int resID, Double defaultValue) { // TODO Auto-generated method stub return getDouble(this.mContext.getString(resID), defaultValue); } @Override public void setString(int resID, String value) { // TODO Auto-generated method stub setString(this.mContext.getString(resID), value); } @Override public void setInt(int resID, int value) { // TODO Auto-generated method stub setInt(this.mContext.getString(resID), value); } @Override public void setBoolean(int resID, Boolean value) { // TODO Auto-generated method stub setBoolean(this.mContext.getString(resID), value); } @Override public void setByte(int resID, byte[] value) { // TODO Auto-generated method stub setByte(this.mContext.getString(resID), value); } @Override public void setShort(int resID, short value) { // TODO Auto-generated method stub setShort(this.mContext.getString(resID), value); } @Override public void setLong(int resID, long value) { // TODO Auto-generated method stub setLong(this.mContext.getString(resID), value); } @Override public void setFloat(int resID, float value) { // TODO Auto-generated method stub setFloat(this.mContext.getString(resID), value); } @Override public void setDouble(int resID, double value) { // TODO Auto-generated method stub setDouble(this.mContext.getString(resID), value); } @Override public void setConfig(Object entity) { // TODO Auto-generated method stub Class<?> clazz = entity.getClass(); Field[] fields = clazz.getDeclaredFields(); for (Field field : fields) { if (!TAReflectUtils.isTransient(field)) { if (TAReflectUtils.isBaseDateType(field)) { String columnName = TAReflectUtils.getFieldName(field); field.setAccessible(true); setValue(field, columnName, entity); } } } } private void setValue(Field field, String columnName, Object entity) { try { Class<?> clazz = field.getType(); if (clazz.equals(String.class)) { setString(columnName, (String) field.get(entity)); } else if (clazz.equals(Integer.class) || clazz.equals(int.class)) { setInt(columnName, (Integer) field.get(entity)); } else if (clazz.equals(Float.class) || clazz.equals(float.class)) { setFloat(columnName, (Float) field.get(entity)); } else if (clazz.equals(Double.class) || clazz.equals(double.class)) { setDouble(columnName, (Double) field.get(entity)); } else if (clazz.equals(Short.class) || clazz.equals(Short.class)) { setShort(columnName, (Short) field.get(entity)); } else if (clazz.equals(Long.class) || clazz.equals(long.class)) { setLong(columnName, (Long) field.get(entity)); } else if (clazz.equals(Boolean.class)) { setBoolean(columnName, (Boolean) field.get(entity)); } } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public <T> T getConfig(Class<T> clazz) { // TODO Auto-generated method stub Field[] fields = clazz.getDeclaredFields(); T entity = null; try { entity = (T) clazz.newInstance(); for (Field field : fields) { field.setAccessible(true); if (!TAReflectUtils.isTransient(field)) { if (TAReflectUtils.isBaseDateType(field)) { String columnName = TAReflectUtils.getFieldName(field); field.setAccessible(true); getValue(field, columnName, entity); } } } } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } return entity; } private <T> void getValue(Field field, String columnName, T entity) { try { Class<?> clazz = field.getType(); if (clazz.equals(String.class)) { field.set(entity, getString(columnName, "")); } else if (clazz.equals(Integer.class) || clazz.equals(int.class)) { field.set(entity, getInt(columnName, 0)); } else if (clazz.equals(Float.class) || clazz.equals(float.class)) { field.set(entity, getFloat(columnName, 0f)); } else if (clazz.equals(Double.class) || clazz.equals(double.class)) { field.set(entity, getDouble(columnName, 0.0)); } else if (clazz.equals(Short.class) || clazz.equals(Short.class)) { field.set(entity, getShort(columnName, (short) 0)); } else if (clazz.equals(Long.class) || clazz.equals(long.class)) { field.set(entity, getLong(columnName, 0l)); } else if (clazz.equals(Byte.class) || clazz.equals(byte.class)) { field.set(entity, getByte(columnName, new byte[8])); } else if (clazz.equals(Boolean.class)) { field.set(entity, getBoolean(columnName, false)); } } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public void remove(String key) { // TODO Auto-generated method stub Properties props = getProperties(); props.remove(key); setProperties(props); } @Override public void remove(String... keys) { // TODO Auto-generated method stub Properties props = getProperties(); for (String key : keys) { props.remove(key); } setProperties(props); } @Override public void clear() { // TODO Auto-generated method stub Properties props = getProperties(); props.clear(); setProperties(props); } @Override public void open() { // TODO Auto-generated method stub } }