jp.ac.tokushima_u.is.ll.common.orm.hibernate.HibernateWebUtils.java Source code

Java tutorial

Introduction

Here is the source code for jp.ac.tokushima_u.is.ll.common.orm.hibernate.HibernateWebUtils.java

Source

/**
 * 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;
    }
}