package util;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
/**
* 对象数组排序.
* 2009-9
* @author ll3231
*/
public class SortObjects {
private String sortProperty;
public String getSortProperty() {
return sortProperty;
}
public void setSortProperty(String sortProperty) {
this.sortProperty = sortProperty;
}
//
// Object[] ss = (Object[]) obj;
//
// try{
// if(ss!=null)ss=sort(ss,sortProperty);
// }catch(Exception e){
// e.printStackTrace();
// }
// 对象数据排序
public static Object[] sort(Object[] o, String sortProperty) {
List<Object> list = new ArrayList<Object>();
String[] methods = null;
String row = "", toprow = "";
if (o != null&&o[0]!=null)
methods = getMethods(o[0], sortProperty);
else return o;
if(methods==null)return o;
try {
for (int k = 0; k < o.length; k++) {
Object obj = o[k];
if(obj==null)
continue;
else
list.add(obj);
for (int i= 0; i < methods.length; i++) {
Method topm = obj.getClass().getMethod(methods[i]);
try {
toprow += topm.invoke(obj).toString();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
for (int i = k+1; i < o.length; i++) {
Object obj2 = o[i];
if(obj2==null)continue;
row = "";
for (int j = 0; j < methods.length; j++) {
Method m = obj2.getClass().getMethod(methods[j]);
try {
row += m.invoke(obj2).toString();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(toprow.equals(row)){
// System.out.println(k+"="+toprow+"\t\t"+i+"="+row);
list.add(o[i]);
o[i]=null;
}
// System.out.println(k+"="+toprow+"\t\t"+i+"="+row);
}
toprow="";
}
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//for(int i=0;i<list.size();i++){
// System.out.println(list.get(i).toString());
//}
for(int i=0;i<o.length;i++)
o[i]=list.get(i);
return o;
}
//获得Object对象方法
public static String[] getMethods(Object o, String sortProperty) {
String s = "";
//int k = 1;
Method[] methods = o.getClass().getMethods();
String[] sort = sortProperty.split(",");
for (int i = 0; i < methods.length; i++) {
for (int j = 0; j < sort.length; j++) {
if (sort[j].equals(methods[i].getName())) {
s = s + sort[j] + ",";
}
}
}
if(s=="")return null;
return s.substring(0, s.length() - 1).split(",");
}
// public static void main(String[] args) {
// DD o0 = new DD();
// DD o1 = new DD();
// DD o2 = new DD();
// DD o3 = new DD();
// DD o4 = new DD();
//
// o0.setBis_disp_code("001");
// o0.setBs_disp_code("001");
// // o0.setBsi_disp_cdoe("001");
//
// o1.setBis_disp_code("002");
// o1.setBs_disp_code("002");
// //o1.setBsi_disp_cdoe("002");
//
// o2.setBis_disp_code("001");
// o2.setBs_disp_code("001");
// // o2.setBsi_disp_cdoe("001");
//
// o3.setBis_disp_code("002");
// o3.setBs_disp_code("002");
// // o3.setBsi_disp_cdoe("002");
//
// o4.setBis_disp_code("002");
// o4.setBs_disp_code("001");
// // o4.setBsi_disp_cdoe("001");
// Object[] oo = { o0, o1, o2, o3,o4 };
//
// String sortProperty = "getEndisp_code,getEn_disp_code,getBs_disp_code222,getBis_disp_code,getBsi_disp_code";
//
// System.out.println("-------------------排序前------------------");
// for (int i = 0; i < oo.length; i++) {
// DD d = (DD) oo[i];
// System.out.println(d);
// }
// System.out.println("-----------------排序处理后----------------");
// Object[] O = JasperDataSortFilter.sort(oo, sortProperty);
// for (int i = 0; i < O.length; i++) {
// DD d = (DD) O[i];
// System.out.println(d);
// }
// }
//
//}
//
//class DD extends BaseObject {
// String bs_disp_code;
// //String bsi_disp_code;
// String bis_disp_code;
//
// public String getBs_disp_code() {
// return bs_disp_code;
// }
//
// public void setBs_disp_code(String bsDispCode) {
// bs_disp_code = bsDispCode;
// }
//
public String getBsi_disp_code() {
// // return bsi_disp_code;
// //}
//
public void setBsi_disp_cdoe(String bsiDispCode) {
// // bsi_disp_code = bsiDispCode;
// //}
//
// public String getBis_disp_code() {
// return bis_disp_code;
// }
//
// public void setBis_disp_code(String bisDispCode) {
// bis_disp_code = bisDispCode;
// }
}