package org.hsweb.web.bean.po;
import org.hsweb.commons.MD5;
import org.hsweb.web.bean.po.module.Module;
import java.io.Serializable;
import java.lang.reflect.Field;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.UUID;
/**
* 通用的PO对象,实现基本的属性和方法。新建的PO都应继承该类
* Created by 浩 on 2015-07-20 0020.
*/
public class GenericPo<PK> implements Serializable, Cloneable {
private static final long serialVersionUID = 9197157871004374522L;
/**
* 主键
*/
private PK id;
public PK getId() {
return id;
}
public void setId(PK id) {
this.id = id;
}
/**
* 自定义属性
*/
private Map<String, Object> properties;
public <T> T setProperty(String attr, T value) {
if (properties == null) properties = new LinkedHashMap<>();
properties.put(attr, value);
return value;
}
public <T> T getProperty(String attr) {
if (properties == null) return null;
return ((T) properties.get(attr));
}
@Override
public int hashCode() {
if (getId() == null) return 0;
return getId().hashCode();
}
@Override
public boolean equals(Object obj) {
if (obj == null) return false;
return this.hashCode() == obj.hashCode();
}
/**
* 创建一个主键
*
*/
public static String createUID() {
return MD5.encode(UUID.randomUUID().toString());
}
public Map<String, Object> getProperties() {
return properties;
}
public void setProperties(Map<String, Object> properties) {
this.properties = properties;
}
public interface Property {
/**
* 主键
*
* @see GenericPo#id
*/
String id = "id";
/**
* 其他属性
*
* @see GenericPo#properties
*/
String properties = "properties";
}
}