Java tutorial
/** * Copyright (c) 2005-20010 springside.org.cn * * Licensed under the Apache License, Version 2.0 (the "License"); * * $Id: PropertyFilter.java,v 1.1 2012/03/13 04:05:42 yanchangyong Exp $ */ package com.blue.ssh.core.orm; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.apache.commons.lang.StringUtils; import org.springframework.util.Assert; import com.blue.ssh.core.utils.reflection.ConvertUtils; import com.blue.ssh.core.utils.web.ServletUtils; /** * ORM??, ?????. * * @author bluegongrui@gmail.com */ public class PropertyFilter { /** OR. */ public static final String OR_SEPARATOR = "_OR_"; /** . */ public enum MatchType { EQ, LIKE, LT, GT, LE, GE, NE; //eq=equal like=like lt=lowerthan gt=greatthan le=lowerandequal ge=greaterandequal ne=notequal } /** ?. */ public enum PropertyType { S(String.class), I(Integer.class), L(Long.class), N(Double.class), D(Date.class), B(Boolean.class); private Class<?> clazz; private PropertyType(Class<?> clazz) { this.clazz = clazz; } public Class<?> getValue() { return clazz; } } private MatchType matchType = null; private Object matchValue = null; private Class<?> propertyClass = null; private String[] propertyNames = null; public PropertyFilter() { } /** * @param filterName * ,???. eg. LIKES_NAME_OR_LOGIN_NAME * @param value * . */ public PropertyFilter(final String filterName, final String value) { String firstPart = StringUtils.substringBefore(filterName, "_"); String matchTypeCode = StringUtils.substring(firstPart, 0, firstPart.length() - 1); String propertyTypeCode = StringUtils.substring(firstPart, firstPart.length() - 1, firstPart.length()); try { matchType = Enum.valueOf(MatchType.class, matchTypeCode); } catch (RuntimeException e) { throw new IllegalArgumentException( "filter??" + filterName + ",.", e); } try { propertyClass = Enum.valueOf(PropertyType.class, propertyTypeCode).getValue(); } catch (RuntimeException e) { throw new IllegalArgumentException( "filter??" + filterName + ",.", e); } String propertyNameStr = StringUtils.substringAfter(filterName, "_"); Assert.isTrue(StringUtils.isNotBlank(propertyNameStr), "filter??" + filterName + ",??."); propertyNames = StringUtils.splitByWholeSeparator(propertyNameStr, PropertyFilter.OR_SEPARATOR); this.matchValue = ConvertUtils.convertStringToObject(value, propertyClass); } /** * HttpRequestPropertyFilter, Filter???filter. * * @see #buildFromHttpRequest(HttpServletRequest, String) */ public static List<PropertyFilter> buildFromHttpRequest(final HttpServletRequest request) { return buildFromHttpRequest(request, "filter"); } /** * HttpRequestPropertyFilter * PropertyFilter??Filter?__??. * * eg. filter_EQS_name filter_LIKES_name_OR_email */ public static List<PropertyFilter> buildFromHttpRequest(final HttpServletRequest request, final String filterPrefix) { List<PropertyFilter> filterList = new ArrayList<PropertyFilter>(); // request??????,?????Map. Map<String, Object> filterParamMap = ServletUtils.getParametersStartingWith(request, filterPrefix + "_"); // ??Map,PropertyFilter for (Map.Entry<String, Object> entry : filterParamMap.entrySet()) { String filterName = entry.getKey(); String value = (String) entry.getValue(); // value,filter. if (StringUtils.isNotBlank(value)) { PropertyFilter filter = new PropertyFilter(filterName, value); filterList.add(filter); } } return filterList; } /** * ?. */ public Class<?> getPropertyClass() { return propertyClass; } /** * ??. */ public MatchType getMatchType() { return matchType; } /** * ?. */ public Object getMatchValue() { return matchValue; } /** * ???. */ public String[] getPropertyNames() { return propertyNames; } /** * ???. */ public String getPropertyName() { Assert.isTrue(propertyNames.length == 1, "There are not only one property in this filter."); return propertyNames[0]; } /** * ?. */ public boolean hasMultiProperties() { return (propertyNames.length > 1); } }