Jave反射例
13325 ワード
1.
2.
package common;
import java.lang.reflect.Method;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;
import model.BaseEntity;
public abstract class FillFields {
private static String id = null;
private static Integer deleteFlag = null;
private static Date date = null;
private static final Integer DELETE_FLAG_1 = new Integer(1);
private static final Integer DELETE_FLAG_0 = new Integer(0);
public static <T extends BaseEntity> T fillCreateFields(T t, String user) {
id = UUID.randomUUID().toString();
deleteFlag = DELETE_FLAG_0;
date = new Date();
fillId(t);
fillDeleteFlag(t);
fillCreateDate(t);
fillCreator(t, user);
fillUpdateDate(t);
fillUpdater(t, user);
fillOptimisticLock(t);
return t;
}
public static <T extends BaseEntity> T fillUpdateFields(T t, String user) {
date = new Date();
fillUpdateDate(t);
fillUpdater(t, user);
fillOptimisticLock(t);
return t;
}
public static <T extends BaseEntity> T fillDeleteFields(T t, String user) {
deleteFlag = DELETE_FLAG_1;
date = new Date();
fillDeleteFlag(t);
fillUpdateDate(t);
fillUpdater(t, user);
fillOptimisticLock(t);
return t;
}
public static <T extends BaseEntity> T fillCancelDeleteFields(T t, String user) {
deleteFlag = DELETE_FLAG_0;
date = new Date();
fillDeleteFlag(t);
fillUpdateDate(t);
fillUpdater(t, user);
fillOptimisticLock(t);
return t;
}
public static <T extends BaseEntity> T fillOptimisticLockFields(T t) {
date = new Date();
fillOptimisticLock(t);
return t;
}
private static <T extends BaseEntity> T fillField(T t, String methodName, Class<?> fieldClass,
Object value) {
try {
Class<?> clazz = t.getClass();
Method method = clazz.getMethod(methodName, fieldClass);
method.invoke(t, value);
return t;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
private static <T extends BaseEntity> T fillId(T t) throws RuntimeException {
t = fillField(t, "setId", String.class, id);
return t;
}
private static <T extends BaseEntity> T fillDeleteFlag(T t) {
t = fillField(t, "setDeleteFlag", Integer.class, deleteFlag);
return t;
}
private static <T extends BaseEntity> T fillCreateDate(T t) {
t = fillField(t, "setCreateTime", Date.class, date);
return t;
}
private static <T extends BaseEntity> T fillCreator(T t, String user) {
t = fillField(t, "setCreator", String.class, user);
return t;
}
private static <T extends BaseEntity> T fillUpdateDate(T t) {
t = fillField(t, "setUpdateTime", Date.class, date);
return t;
}
private static <T extends BaseEntity> T fillUpdater(T t, String user) {
t = fillField(t, "setUpdater", String.class, user);
return t;
}
private static <T extends BaseEntity> T fillOptimisticLock(T t) {
SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmssSSS");
df.format(date);
t = fillField(t, "setOptimisticLock", String.class, df.format(date));
return t;
}
}
2.
package common;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.persistence.Column;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang.StringUtils;
import org.codehaus.jackson.JsonFactory;
import org.codehaus.jackson.JsonParser;
import org.codehaus.jackson.JsonToken;
import org.codehaus.jackson.map.ObjectMapper;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import entity.Condition;
import entity.Conditions;
import entity.Page;
import entity.Sort;
public class Building {
public static Page page(HttpServletRequest request) {
int start = Integer.parseInt(request.getParameter("start"));
int limit = Integer.parseInt(request.getParameter("limit"));
Page page = new Page(start, limit);
return page;
}
public static List<Order> sortOne(HttpServletRequest request) {
Map<String, String> orderMap = getOrder(request);
List<Order> orderList = null;
if (orderMap != null) {
orderList = new ArrayList<Order>();
if (orderMap.get("direction").equalsIgnoreCase("asc")) {
orderList.add(Order.asc(orderMap.get("property")));
} else if (orderMap.get("direction").equalsIgnoreCase("desc")) {
orderList.add(Order.desc(orderMap.get("property")));
} else {
orderList = null;
}
}
return orderList;
}
public static Map<String, String> getOrder(HttpServletRequest request) {
Map<String, String> orderMap = null;
try {
String sortStr = request.getParameter("sort");
if (sortStr != null) {
ObjectMapper objectMapper = new ObjectMapper();
Sort sort = objectMapper.readValue(sortStr.replaceAll("\\[", "").replaceAll("\\]", ""), Sort.class);
String property = sort.getProperty() != null ? sort.getProperty().trim() : "";
String direction = sort.getDirection() != null ? sort.getDirection().trim() : "";
if (!property.equals("")) {
orderMap = new HashMap<String, String>();
if (direction.equals("") || direction.equalsIgnoreCase("asc")) {
orderMap.put("property", property);
orderMap.put("direction", "asc");
} else if (direction.equalsIgnoreCase("desc")) {
orderMap.put("property", property);
orderMap.put("direction", "desc");
} else {
orderMap = null;
}
}
return orderMap;
} else {
return null;
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public static <T> T entity(HttpServletRequest request, Class<T> clazz, String parameter) {
try {
String parameterStr = request.getParameter(parameter);
if (parameterStr != null && !parameterStr.equals("") && !parameterStr.equals("{}")) {
ObjectMapper objectMapper = new ObjectMapper();
T t = objectMapper.readValue(parameterStr, clazz);
return t;
} else {
return null;
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public static <T> List<T> entityList(String parameterStr, Class<T> clazz) {
try {
if (parameterStr != null && !parameterStr.equals("") && !parameterStr.equals("[]")) {
List<T> list = null;
ObjectMapper objectMapper = new ObjectMapper();
list = new ArrayList<T>();
JsonFactory f = new JsonFactory();
JsonParser jp = f.createJsonParser(parameterStr);
jp.nextToken();
while (jp.nextToken() == JsonToken.START_OBJECT) {
T t = objectMapper.readValue(jp, clazz);
list.add(t);
}
return list;
} else {
return null;
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public static List<Criterion> criterionList(HttpServletRequest request, Object obj) {
List<Criterion> criterionList = null;
try {
String parameterStr = request.getParameter("queryConditions");
List<Conditions> list = entityList(parameterStr, Conditions.class);
if (list != null) {
criterionList = new ArrayList<Criterion>();
Iterator<Conditions> it = list.iterator();
while (it.hasNext()) {
Conditions conds = it.next();
Condition cond = new Condition(conds.getCondition());
String propertyName = cond.getPropertyName();
Object value = buildGetMethod(obj, cond.getValueProperty()).invoke(obj, new Object[0]);
MatchMode matchMode = null;
if (cond.getType().equalsIgnoreCase("like") || cond.getType().equalsIgnoreCase("ilike")) {
if (cond.getLikeType() != null) {
if (cond.getLikeType().equalsIgnoreCase("left")) {
matchMode = MatchMode.START;
} else if (cond.getLikeType().equalsIgnoreCase("right")) {
matchMode = MatchMode.END;
} else {
matchMode = MatchMode.ANYWHERE;
}
} else {
matchMode = MatchMode.ANYWHERE;
}
if (cond.getType().equalsIgnoreCase("like")) {
criterionList.add(Restrictions.like(propertyName, value.toString(), matchMode));
} else {
criterionList.add(Restrictions.ilike(propertyName, value.toString(), matchMode));
}
} else if (cond.getType().equalsIgnoreCase("between")) {
Object betweenValue = buildGetMethod(obj, cond.getBetweenProperty()).invoke(obj, new Object[0]);
criterionList.add(Restrictions.between(propertyName, value, betweenValue));
} else {
criterionList.add(Restrictions.eq(propertyName, value));
}
}
}
return criterionList;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public static String buildGetMethodName(String propertyName) {
return "get" + StringUtils.capitalize(propertyName);
}
public static String buildGetMethodField(String methodName) {
return StringUtils.uncapitalize(methodName.substring(3));
}
public static <T> Method buildGetMethod(T entity, String propertyName) throws SecurityException, NoSuchMethodException {
String get = buildGetMethodName(propertyName);
Method getMethod = entity.getClass().getMethod(get, new Class[0]);
return getMethod;
}
public static Map<String, Object> buildParameters(HttpServletRequest request, Object entity, Page page) {
Map<String, Object> paramMap = new HashMap<String, Object>();
Map<String, String> orderMap = getOrder(request);
try {
String parameterStr = request.getParameter("queryConditions");
List<Conditions> list = entityList(parameterStr, Conditions.class);
if (list != null) {
Iterator<Conditions> it = list.iterator();
while (it.hasNext()) {
Conditions conds = it.next();
Condition cond = new Condition(conds.getCondition());
Method getMethod = buildGetMethod(entity, cond.getValueProperty());
Object value = getMethod.invoke(entity, new Object[0]);
String columnName = getMethod.getAnnotation(Column.class).name();
if (cond.getType().equalsIgnoreCase("like") || cond.getType().equalsIgnoreCase("ilike")) {
paramMap.put(cond.getPropertyName(), "and " + cond.getTableAlias() + "." + columnName + " like '%" + value.toString() + "%'");
} else {
paramMap.put(cond.getPropertyName(), "and " + cond.getTableAlias() + "." + columnName + " = '" + value.toString() + "'");
}
}
}
if (orderMap != null) {
paramMap.put("order_property", orderMap.get("property"));
paramMap.put("order_direction", orderMap.get("direction"));
}
String nopage = request.getParameter("nopage") == null ? "" : request.getParameter("nopage");
if (page != null && !nopage.equals("yes")) {
paramMap.put("page_start", page.getStart());
paramMap.put("page_limit", page.getLimit());
}
} catch (Exception e) {
throw new RuntimeException(e);
}
return paramMap;
}
}