2018-06-03 22:26:41 +08:00

295 lines
10 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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<String,Object> getBizClassRelativeType(BizObjectClass bizObjectClass,String relativeType) throws JBOException{
String relativeTypeString=getBizClassProperty(bizObjectClass,"RelativeType."+relativeType);
if(StringX.isEmpty(relativeTypeString)) return null;
List<String> configInfo=new ArrayList<String>();
String regex = "[^{}]+";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(relativeTypeString);
while (m.find()) {
configInfo.add(m.group());
}
Map<String,Object> relativeConfig=new HashMap<String,Object>();
relativeConfig.put("BizObjectClass",configInfo.get(0));
String[] t=configInfo.get(1).split(";");
String[][] attributes=new String[t.length][3];
for(int i=0;i<t.length;i++){
String[] s=t[i].split("=");
attributes[i][0]=s[0];
if(s[1].trim().startsWith("'")){
attributes[i][1]="CONSTANT";
s[1]=s[1].substring(1, s[1].length()-2);
}
else
attributes[i][1]="ATTRIBUTE";
attributes[i][2]=s[1];
}
relativeConfig.put("AttributeMapping",attributes);
return relativeConfig;
}
public static String getBizClassProperty(BizObjectClass bizObjectClass ,String propertyName) throws JBOException{
try {
BizObjectClass c = JBOFactory.getBizObjectClass(bizObjectClass.getRoot().getAbsoluteName());
ElementList properties = c.getProperties();
if(properties==null) return null;
for(int i=0;i<properties.size();i++){
Element e = properties.get(i);
if(propertyName.equals(e.getName())) return (String)e.getValue();
}
} catch (JBOClassNotFoundException e) {
}
return null;
}
public static Object getValue(Collection<BusinessObject> array,String attributeID) throws Exception{
List<Object> l=getDistinctValues(array,attributeID);
if(l.isEmpty()) return null;
if(l.size()>1){
String desc ="<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>󣬲<EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ô˷<EFBFBD><EFBFBD><EFBFBD>!";
throw new JBOException(desc);
}
return l.get(0);
}
public static List<Object> getDistinctValues(Collection<BusinessObject> array,String attributeID) throws Exception{
TreeSet<Object> l=new TreeSet<Object>();
for(BusinessObject o:array){
Object value = o.getObject(attributeID);
if(value!=null)
l.add(value);
}
List<Object> result = new ArrayList<Object>();
result.addAll(l);
return result;
}
public static List<Object> getValues(Collection<BusinessObject> array,String attributeID) throws Exception{
List<Object> l=new ArrayList<Object>();
for(BusinessObject o:array){
l.add(o.getObject(attributeID));
}
return l;
}
public static Object getMaxValue(Collection<BusinessObject> array,String attributeID) throws Exception{
List<Object> l=BusinessObjectHelper.getValues(array, attributeID);
if(l.isEmpty()) return null;
Comparable<Object> r=null;
for(Object o:l){
if(o==null) continue;
if(o instanceof Comparable<?>){
@SuppressWarnings("unchecked")
Comparable<Object> c=(Comparable<Object>)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<Object> getMaxValue(Collection<BusinessObject> array,String attributeID,String groupID) throws Exception{
List<Object> l=BusinessObjectHelper.getDistinctValues(array, groupID);
if(l.isEmpty()) return null;
List<Object> res = new ArrayList<Object>();
for(Object o : l){
List<BusinessObject> list = new ArrayList<BusinessObject>();
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<BusinessObject> array,String attributeID) throws Exception{
List<Object> l=BusinessObjectHelper.getValues(array, attributeID);
if(l.isEmpty()) return null;
Comparable<Object> r=null;
for(Object o:l){
if(o==null) continue;
if(o instanceof Comparable<?>){
@SuppressWarnings("unchecked")
Comparable<Object> c=(Comparable<Object>)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<BusinessObject> array,String attributeID) throws Exception{
double d=0d;
List<Object> 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<objectNoArray.length;i++){
BizObjectKey bizObjectKey=new BizObjectKey(objectType);
bizObjectKey.setAttributeValue(0, objectNoArray[i]);
bizObjectKeyArray[i]=bizObjectKey;
}
return bizObjectKeyArray;
}
public static BusinessObject getBusinessObjectByAttributes(List<BusinessObject> data,Object... parameters) throws Exception{
List<BusinessObject> 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<BusinessObject> data,Map<String,Object> parameterMap) throws Exception{
List<BusinessObject> 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<BusinessObject> data,String querySql,Object... parameters) throws Exception{
List<BusinessObject> 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<BusinessObject> getBusinessObjectsByAttributes(List<BusinessObject> data,Map<String,Object> parameterMap) throws JBOException{
List<BusinessObject> list = new ArrayList<BusinessObject>();
for (BusinessObject businessObject : data) {
if (!businessObject.matchAttributes(parameterMap))
continue;
list.add(businessObject);
}
return list;
}
public static List<BusinessObject> getBusinessObjectsByAttributes(List<BusinessObject> data,Object... parameters) throws JBOException{
List<BusinessObject> list = new ArrayList<BusinessObject>();
for (BusinessObject businessObject : data) {
if (!businessObject.matchAttributes(parameters))
continue;
list.add(businessObject);
}
return list;
}
public static List<BusinessObject> getBusinessObjectsBySql(List<BusinessObject> data,String querySql,Object... parameters) throws JBOException{
List<BusinessObject> list = new ArrayList<BusinessObject>();
Map<String,Object> parameterMap=new HashMap<String,Object>();
for(int i=0;i<parameters.length;i++){
parameterMap.put((String)parameters[i], parameters[i+1]);
i++;
}
for (BusinessObject businessObject : data) {
if (!businessObject.matchSql(querySql,parameterMap))
continue;
list.add(businessObject);
}
return list;
}
/**
* <20><><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD>ݣ<EFBFBD>װ<EFBFBD><D7B0>com.amarsoft.app.base.businessobject.BusinessObject<63><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD><EFBFBD><EFBFBD>԰<EFBFBD><D4B0><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param list
* @param attributeID
*/
public static void sortBusinessObject(List<BusinessObject> list, String attributeID){
sortBusinessObject(list, attributeID,BusinessObjectComparator.sortIndicator_asc);
}
/**
* <20><><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD>ݣ<EFBFBD>װ<EFBFBD><D7B0>com.amarsoft.app.base.businessobject.BusinessObject<63><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD><EFBFBD><EFBFBD>԰<EFBFBD><D4B0><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>н<EFBFBD><D0BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param list
* @param attributeID
*/
public static void reverseBusinessObject(List<BusinessObject> list, String attributeID){
sortBusinessObject(list, attributeID,BusinessObjectComparator.sortIndicator_desc);
}
/**
* <20><><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD>ݣ<EFBFBD>װ<EFBFBD><D7B0>com.amarsoft.app.base.businessobject.BusinessObject<63><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD><EFBFBD><EFBFBD>԰<EFBFBD><D4B0>մ<EFBFBD><D5B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param list
* @param attributeID
* @param dataType
* @param sortIndicator
*/
private static void sortBusinessObject(List<BusinessObject> list, String attributeID, int sortIndicator){
BusinessObjectComparator comparator = new BusinessObjectComparator();
comparator.attributeID = attributeID;
comparator.sortIndicator = sortIndicator;
Collections.sort(list, comparator);
}
public static List<Object> convertToMapList(List<BusinessObject> l) throws JBOException{
List<Object> ll=new ArrayList<Object>();
for(BusinessObject o:l){
Map<String,Object> map=o.convertToMap();
ll.add(map);
}
return ll;
}
/**
* <20><>BusinessObject<63><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Hashtable<6C><65><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD>
* @param obj
* @return
* @throws Exception
*/
public static Hashtable<String,Object> convertToHashtable(BusinessObject obj)throws Exception{
Hashtable<String,Object> hashvalues = new Hashtable<String,Object>();
if(obj!=null){
String[] attributeIDArray = obj.getAttributeIDArray();
for(int i=0;i<attributeIDArray.length;i++){
Object value = obj.getObject(attributeIDArray[i]);
if(value == null) value = "";
hashvalues.put(attributeIDArray[i].toUpperCase(),value);
}
}
return hashvalues;
}
}