package com.bao.lc.site.s3.bean; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public class GenericBean { private static Log log = LogFactory.getLog(GenericBean.class); private List<String> fields = null; private int primaryKey = 0; public GenericBean(List<String> fieldList, int primaryKey) { if(fieldList == null || fieldList.isEmpty()) { fields = new ArrayList<String>(0); } else { fields = new ArrayList<String>(fieldList.size()); fields.addAll(fieldList); } this.primaryKey = primaryKey; } public GenericBean(List<String> fieldList) { this(fieldList, 0); } public GenericBean(String[] a) { this(Arrays.asList(a)); } public String getField(int index) { if(index < 0 || index >= fields.size()) { fail(index, fields.size()); } return fields.get(index); } public void setPrimaryKey(int index) { this.primaryKey = index; } public String toString() { return getField(primaryKey); } public boolean equals(Object obj) { if(!(obj instanceof GenericBean)) { return false; } GenericBean other = (GenericBean)obj; if(fields.size() != other.fields.size()) { return false; } for(int i = 0, size = fields.size(); i < size; i++) { String a = fields.get(i); String b = other.fields.get(i); if(!a.equals(b)) { return false; } } return true; } public int hashCode() { return fields.hashCode(); } public static int indexOf(String field, int keyIndex, List<GenericBean> dataList) { for(int i = 0, size = dataList.size(); i < size; i++) { GenericBean bean = dataList.get(i); if(keyIndex < 0 || keyIndex >= bean.fields.size()) { fail(keyIndex, bean.fields.size()); } if(field.equals(bean.fields.get(keyIndex))) { return i; } } return -1; } public static GenericBean get(String field, int keyIndex, List<GenericBean> dataList) { int index = indexOf(field, keyIndex, dataList); if(index == -1) { return null; } return dataList.get(index); } public static List<String> getFieldList(int keyIndex, List<GenericBean> dataList) { List<String> fieldList = new ArrayList<String>(dataList.size()); for(int i = 0, size = dataList.size(); i < size; i++) { GenericBean bean = dataList.get(i); if(keyIndex < 0 || keyIndex >= bean.fields.size()) { fail(keyIndex, bean.fields.size()); } fieldList.add(bean.getField(keyIndex)); } return fieldList; } public static String getField(String key, int keyIndex, int valueIndex, List<GenericBean> beans) { GenericBean bean = GenericBean.get(key, keyIndex, beans); if(bean == null) { log.error("The key: " + key + " doesn't exist."); throw new IllegalArgumentException("The key: " + key + " doesn't exist."); // return "null"; } return bean.getField(valueIndex); } private static void fail(int rangeHigh, int value) { throw new IllegalArgumentException("index [" + value + "] is out of range [0-" + rangeHigh + "]" ); } }