Java tutorial
/** * Copyright (c) 2005-2009 springside.org.cn * * Licensed under the Apache License, Version 2.0 (the "License"); * * $Id: HibernateWebUtils.java 515 2009-10-01 16:19:34Z calvinxiu $ */ package jp.ac.tokushima_u.is.ll.common.orm.hibernate; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import jp.ac.tokushima_u.is.ll.common.orm.PropertyFilter; import jp.ac.tokushima_u.is.ll.util.ReflectionUtils; import org.apache.commons.beanutils.PropertyUtils; import org.apache.commons.lang.StringUtils; import org.springframework.util.Assert; import org.springframework.web.util.WebUtils; /** * Learning Log?????? * HibernateWebUtils?. * * @author calvin */ public class HibernateWebUtils { private HibernateWebUtils() { } /** * ?ID?,???. * * ????"id". * * @see #mergeByCheckedIds(Collection, Collection, Class, String) */ public static <T, ID> void mergeByCheckedIds(final Collection<T> srcObjects, final Collection<ID> checkedIds, final Class<T> clazz) { mergeByCheckedIds(srcObjects, checkedIds, clazz, "id"); } /** * ?ID?,???. * * ??????id,??????id?????. * ???id??,??id??. * ?ID, ??cascade-save-or-update. * * @param srcObjects ??,. * @param checkedIds ?,ID. * @param clazz ? * @param idName ?? */ public static <T, ID> void mergeByCheckedIds(final Collection<T> srcObjects, final Collection<ID> checkedIds, final Class<T> clazz, final String idName) { //? Assert.notNull(srcObjects, "scrObjects?"); Assert.hasText(idName, "idName?"); Assert.notNull(clazz, "clazz?"); //?,???. if (checkedIds == null) { srcObjects.clear(); return; } //????,id?ID?,. //?,???id,?id???ID. Iterator<T> srcIterator = srcObjects.iterator(); try { while (srcIterator.hasNext()) { T element = srcIterator.next(); Object id; id = PropertyUtils.getProperty(element, idName); if (!checkedIds.contains(id)) { srcIterator.remove(); } else { checkedIds.remove(id); } } //ID??id????,,id??. for (ID id : checkedIds) { T obj = clazz.newInstance(); PropertyUtils.setProperty(obj, idName, id); srcObjects.add(obj); } } catch (Exception e) { throw ReflectionUtils.convertReflectionExceptionToUnchecked(e); } } /** * ?PropertyFilter??Request?,PropertyFilter. * Filter???filter_. * * @see #buildPropertyFilters(HttpServletRequest, String) */ public static List<PropertyFilter> buildPropertyFilters(final HttpServletRequest request) { return buildPropertyFilters(request, "filter_"); } /** * ?PropertyFilter??Request?,PropertyFilter. * PropertyFilter??Filter?__??. * * eg. * filter_EQUAL_name * filter_LIKE_name_OR_email */ public static List<PropertyFilter> buildPropertyFilters(final HttpServletRequest request, final String filterPrefix) { List<PropertyFilter> filterList = new ArrayList<PropertyFilter>(); //request??????,?????Map. Map<String, Object> filterParamMap = WebUtils.getParametersStartingWith(request, filterPrefix); //??Map,PropertyFilter for (Map.Entry<String, Object> entry : filterParamMap.entrySet()) { String filterName = entry.getKey(); String value = String.valueOf(entry.getValue()); //value,filter. boolean omit = StringUtils.isBlank(value); if (!omit) { PropertyFilter filter = new PropertyFilter(filterName, value); filterList.add(filter); } } return filterList; } }