package com.amarsoft.app.base.businessobject; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.Hashtable; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.TreeSet; import java.util.regex.Matcher; import java.util.regex.Pattern; import com.amarsoft.app.base.exception.ALSException; import com.amarsoft.are.jbo.BizObjectClass; import com.amarsoft.are.jbo.BizObjectKey; import com.amarsoft.are.jbo.JBOClassNotFoundException; import com.amarsoft.are.jbo.JBOException; import com.amarsoft.are.jbo.JBOFactory; import com.amarsoft.are.lang.Element; import com.amarsoft.are.lang.StringX; import com.amarsoft.are.util.ElementList; public class BusinessObjectHelper { public static Map getBizClassRelativeType(BizObjectClass bizObjectClass,String relativeType) throws JBOException{ String relativeTypeString=getBizClassProperty(bizObjectClass,"RelativeType."+relativeType); if(StringX.isEmpty(relativeTypeString)) return null; List configInfo=new ArrayList(); String regex = "[^{}]+"; Pattern p = Pattern.compile(regex); Matcher m = p.matcher(relativeTypeString); while (m.find()) { configInfo.add(m.group()); } Map relativeConfig=new HashMap(); relativeConfig.put("BizObjectClass",configInfo.get(0)); String[] t=configInfo.get(1).split(";"); String[][] attributes=new String[t.length][3]; for(int i=0;i array,String attributeID) throws Exception{ List l=getDistinctValues(array,attributeID); if(l.isEmpty()) return null; if(l.size()>1){ String desc ="查到多个对象,不能使用此方法!"; throw new JBOException(desc); } return l.get(0); } public static List getDistinctValues(Collection array,String attributeID) throws Exception{ TreeSet l=new TreeSet(); for(BusinessObject o:array){ Object value = o.getObject(attributeID); if(value!=null) l.add(value); } List result = new ArrayList(); result.addAll(l); return result; } public static List getValues(Collection array,String attributeID) throws Exception{ List l=new ArrayList(); for(BusinessObject o:array){ l.add(o.getObject(attributeID)); } return l; } public static Object getMaxValue(Collection array,String attributeID) throws Exception{ List l=BusinessObjectHelper.getValues(array, attributeID); if(l.isEmpty()) return null; Comparable r=null; for(Object o:l){ if(o==null) continue; if(o instanceof Comparable){ @SuppressWarnings("unchecked") Comparable c=(Comparable)o; if(r==null) r=c; else if(c.compareTo(r)>0) r=c; } else throw new ALSException("ED1002",o.getClass().getName()); } return r; } public static List getMaxValue(Collection array,String attributeID,String groupID) throws Exception{ List l=BusinessObjectHelper.getDistinctValues(array, groupID); if(l.isEmpty()) return null; List res = new ArrayList(); for(Object o : l){ List list = new ArrayList(); for(Iterator iter = array.iterator();iter.hasNext();){ BusinessObject bo = (BusinessObject) iter.next(); if(bo.getObject(groupID).equals(o)) list.add(bo); } Object ot = getMaxValue(list,attributeID); res.add(ot); } return res; } public static Object getMinValue(Collection array,String attributeID) throws Exception{ List l=BusinessObjectHelper.getValues(array, attributeID); if(l.isEmpty()) return null; Comparable r=null; for(Object o:l){ if(o==null) continue; if(o instanceof Comparable){ @SuppressWarnings("unchecked") Comparable c=(Comparable)o; if(r==null) r=c; else if(c.compareTo(r)<0) r=c; } else throw new ALSException("ED1002",o.getClass().getName()); } return r; } public static double getSumValue(Collection array,String attributeID) throws Exception{ double d=0d; List l=BusinessObjectHelper.getValues(array, attributeID); if(l.isEmpty()) return 0.0; for(Object o:l){ if(o==null) continue; d=d+((Number)o).doubleValue(); } return d; } public static BizObjectKey[] convertToBizObjectKey(String objectType,Object... objectNoArray) throws JBOException{ BizObjectKey[] bizObjectKeyArray = new BizObjectKey[objectNoArray.length]; for(int i=0;i data,Object... parameters) throws Exception{ List list = BusinessObjectHelper.getBusinessObjectsByAttributes(data, parameters); if(list==null||list.isEmpty()) return null; if(list.size()>1){ throw new ALSException("ED1018"); } return list.get(0); } public static BusinessObject getBusinessObjectByAttributes(List data,Map parameterMap) throws Exception{ List list = BusinessObjectHelper.getBusinessObjectsByAttributes(data, parameterMap); if(list==null||list.isEmpty()) return null; if(list.size()>1){ throw new ALSException("ED1018"); } return list.get(0); } public static BusinessObject getBusinessObjectBySql(List data,String querySql,Object... parameters) throws Exception{ List list = BusinessObjectHelper.getBusinessObjectsBySql(data, querySql, parameters); if(list==null||list.isEmpty()) return null; if(list.size()>1){ throw new ALSException("ED1018"); } return list.get(0); } public static List getBusinessObjectsByAttributes(List data,Map parameterMap) throws JBOException{ List list = new ArrayList(); for (BusinessObject businessObject : data) { if (!businessObject.matchAttributes(parameterMap)) continue; list.add(businessObject); } return list; } public static List getBusinessObjectsByAttributes(List data,Object... parameters) throws JBOException{ List list = new ArrayList(); for (BusinessObject businessObject : data) { if (!businessObject.matchAttributes(parameters)) continue; list.add(businessObject); } return list; } public static List getBusinessObjectsBySql(List data,String querySql,Object... parameters) throws JBOException{ List list = new ArrayList(); Map parameterMap=new HashMap(); for(int i=0;i list, String attributeID){ sortBusinessObject(list, attributeID,BusinessObjectComparator.sortIndicator_asc); } /** * 对列表数据(装有com.amarsoft.app.base.businessobject.BusinessObject)针对某个属性按照字符串进行降序排列 * @param list * @param attributeID */ public static void reverseBusinessObject(List list, String attributeID){ sortBusinessObject(list, attributeID,BusinessObjectComparator.sortIndicator_desc); } /** * 对列表数据(装有com.amarsoft.app.base.businessobject.BusinessObject)针对某个属性按照传入的数据类型和排序类型进行排列 * @param list * @param attributeID * @param dataType * @param sortIndicator */ private static void sortBusinessObject(List list, String attributeID, int sortIndicator){ BusinessObjectComparator comparator = new BusinessObjectComparator(); comparator.attributeID = attributeID; comparator.sortIndicator = sortIndicator; Collections.sort(list, comparator); } public static List convertToMapList(List l) throws JBOException{ List ll=new ArrayList(); for(BusinessObject o:l){ Map map=o.convertToMap(); ll.add(map); } return ll; } /** * 将BusinessObject对象生成Hashtable数据集合 * @param obj * @return * @throws Exception */ public static Hashtable convertToHashtable(BusinessObject obj)throws Exception{ Hashtable hashvalues = new Hashtable(); if(obj!=null){ String[] attributeIDArray = obj.getAttributeIDArray(); for(int i=0;i