All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.ctosb.core.util.ProcessUtil Maven / Gradle / Ivy

The newest version!

package com.ctosb.core.util;

import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Map;

import com.ctosb.core.mybatis.dialet.DialetFactory;
import com.ctosb.core.mybatis.page.Limit;
import com.ctosb.core.mybatis.page.Page;
import com.ctosb.core.mybatis.sort.Sort;

/**
 * ProcessUtil
 * @date 2016年6月30日 下午9:11:14
 * @author alan
 * @since 1.0.0
 */
public class ProcessUtil {

	/**
	 * get page or limit instance from paramterObject
	 * @param parameterObj
	 * @return
	 * @author Alan
	 * @date 2016年6月30日 下午9:11:14
	 */
	public static Object getPageOrLimit(Object parameterObj) {
		Object object = null;
		// extract the page object from the input param
		if (Map.class.isInstance(parameterObj)) {
			Map parameterMap = ((Map) parameterObj);
			Collection values = parameterMap.values();
			for (Object obj : values) {
				if (isPageOrLimit(obj)) {
					object = obj;
					break;
				}
			}
		} else if (isPageOrLimit(parameterObj)) {
			object = parameterObj;
		}
		return object;
	}

	@SuppressWarnings("unchecked")
	public static Object getSort(Object parameterObj) {
		Collection sorts = new HashSet();
		// extract the sort object from the input param
		if (Map.class.isInstance(parameterObj)) {
			// if the param is Map,then loop its value
			Map parameterMap = ((Map) parameterObj);
			Collection values = parameterMap.values();
			for (Object obj : values) {
				if (Sort.class.isInstance(obj)) {
					// process sort object
					sorts.add((Sort) obj);
				} else if (Sort[].class.isInstance(obj)) {
					// process sort array
					Collections.addAll(sorts, (Sort[]) obj);
				} /*
					 * else if (Collection.class.isAssignableFrom(obj.getClass()) &&
					 * Sort.class.isAssignableFrom(obj.getClass().getGenericSuperclass().getClass())
					 * ) { //process sort collection sorts.addAll((Collection) obj); }
					 */
			}
		} else if (Sort.class.isInstance(parameterObj)) {
			// process sort object
			sorts.add((Sort) parameterObj);
		} else if (Sort[].class.isInstance(parameterObj)) {
			// process sort array
			Collections.addAll(sorts, (Sort[]) parameterObj);
		} /*
			 * else if (Collection.class.isAssignableFrom(parameterObj.getClass()) &&
			 * Sort.class.isAssignableFrom(parameterObj.getClass().getGenericSuperclass().
			 * getClass())) { //process sort collection sorts.addAll((Collection)
			 * parameterObj); }
			 */
		return sorts;
	}

	/**
	 * get paging infomation
	 * @param parameterObj
	 * @return
	 * @author Alan
	 * @date 2015年12月12日 上午8:38:59
	 */
	public static Page getPage(Object parameterObj) {
		Page page = null;
		// extract the page object from the input param
		if (Map.class.isInstance(parameterObj)) {
			for (Object obj : ((Map) parameterObj).values()) {
				if (Page.class.isInstance(obj)) {
					page = (Page) obj;
					break;
				}
			}
		} else if (Page.class.isInstance(parameterObj)) {
			page = (Page) parameterObj;
		}
		return page;
	}

	/**
	 * get count sql
	 * @param sql
	 * @param dbType
	 * @return
	 * @author Alan
	 * @date 2015年12月12日 下午1:22:05
	 */
	public static String getCountSql(String sql, String dbType) {
		return DialetFactory.getLimit(dbType).getCountSql(sql);
	}

	/**
	 * get sort sql
	 * @param sql
	 * @param dbType
	 * @param sorts
	 * @return
	 * @author Alan
	 * @date 2015年12月12日 下午1:22:05
	 */
	public static String getSortSql(String sql, String dbType, Collection sorts) {
		// if the paging object is null,return source sql
		if (sorts == null || sorts.isEmpty()) {
			return sql;
		}
		return DialetFactory.getLimit(dbType).getSortSql(sql, sorts);
	}

	/**
	 * get limit sql
	 * @param sql
	 * @param page
	 * @param dbType
	 * @return
	 * @author Alan
	 * @date 2015年12月12日 下午1:22:05
	 */
	public static String getLimitSql(String sql, Page page, String dbType) {
		// if the paging object is null,return source sql
		if (page == null) {
			return sql;
		}
		// join limit sql
		int offset = (page.getPageNum() - 1) * page.getPageSize();
		int limit = page.getPageSize();
		sql = DialetFactory.getLimit(dbType).getLimitSql(sql, offset, limit);
		return sql;
	}

	/**
	 * get limit sql
	 * @param sql
	 * @param limit
	 * @param dbType
	 * @return
	 * @author Alan
	 * @date 2016年6月30日 下午2:17:18
	 */
	public static String getLimitSql(String sql, Limit limit, String dbType) {
		// if the paging object is null,return source sql
		if (limit == null) {
			return sql;
		}
		// join limit sql
		sql = DialetFactory.getLimit(dbType).getLimitSql(sql, limit.getOffset(), limit.getCount());
		return sql;
	}

	/**
	 * if object is Page or Limit,return true
	 * @param object
	 * @return
	 */
	public static boolean isPageOrLimit(Object object) {
		return Page.class.isInstance(object) || Limit.class.isInstance(object);
	}

	/**
	 * extract Param for parameter object. if the parameter object only include one
	 * param of not annotation, exclude page、limit、sort、sort array、sort collection.
	 * @param parameterObject
	 * @return
	 */
	public static Object extractParameterObject(Object parameterObject) {
		// parameterObject contain repeat parameter,so need wipe repeat
		int repeatNum = 2;
		if (Map.class.isInstance(parameterObject)) {
			Map parameterMap = ((Map) parameterObject);
			int paramNum = parameterMap.size();
			for (int i = 0; i < paramNum / repeatNum; i++) {
				if (!parameterMap.containsKey(i + "")) {
					// param contain annotation, return origin param
					return parameterMap;
				}
			}
			Object tmpParam = null;
			for (int i = 0; i < paramNum / repeatNum; i++) {
				Object param = parameterMap.get(i + "");
				if (!((ProcessUtil.isPageOrLimit(param) || Sort.class.isInstance(param)
						|| Sort[].class.isInstance(param) || (Collection.class.isAssignableFrom(param.getClass())
								&& Sort.class.isAssignableFrom(param.getClass().getGenericSuperclass().getClass()))))) {
					if (tmpParam != null) {
						// exclude param of page、 limit、 sort、 sort array、 sort collection,there are two
						// or more param,return origin param
						return parameterMap;
					} else {
						tmpParam = param;
					}
				}
			}
			if (tmpParam != null) {
				// exclude param of page、 limit、 sort、 sort array、 sort collection,there is a
				// param only, return this param。
				return tmpParam;
			}
		}
		return parameterObject;
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy