package org.exitsoft.showcase.vcsadmin.entity.account; import java.util.ArrayList; import java.util.List; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.JoinColumn; import javax.persistence.JoinTable; import javax.persistence.ManyToMany; import javax.persistence.ManyToOne; import javax.persistence.OneToMany; import javax.persistence.Table; import javax.persistence.Transient; import org.exitsoft.common.utils.CollectionUtils; import org.exitsoft.showcase.vcsadmin.common.SystemVariableUtils; import org.exitsoft.showcase.vcsadmin.common.enumeration.SystemDictionaryCode; import org.exitsoft.showcase.vcsadmin.common.enumeration.entity.GroupType; import org.exitsoft.showcase.vcsadmin.entity.UniversallyUniqueIdentifier; import org.hibernate.annotations.NamedQuery; /** * 组实体 * * @author vincent * */ @Entity @Table(name="TB_GROUP") @SuppressWarnings("serial") @NamedQuery(name=Group.UserGroups,query="select gl from User u left join u.groupsList gl where u.id=?1 and gl.type= '03'") public class Group extends UniversallyUniqueIdentifier{ public static final String UserGroups = "userGroups"; //名称 private String name; //成员 private List<User> membersList = new ArrayList<User>(); //上级组 private Group parent; //下级组集合 private List<Group> children = new ArrayList<Group>(); //类型 private String type; //备注 private String remark; //状态 private int state; //拥有资源 private List<Resource> resourcesList = new ArrayList<Resource>(); //shiro role 字符串 private String role; //shiro role连定义的值 private String value; /** * 构造方法 */ public Group() { } /** * 获取组名称 * * @return String */ @Column(length=64,nullable=false,unique=true) public String getName() { return name; } /** * 设置组名称 * * @param name 组名称 */ public void setName(String name) { this.name = name; } /** * 获取上级组 * * @return {@link Group} */ @ManyToOne(fetch=FetchType.LAZY) @JoinColumn(name = "FK_PARENT_ID") public Group getParent() { return parent; } /** * 设置上级组 * * @param parent 组实体 */ public void setParent(Group parent) { this.parent = parent; } /** * 获取下级组集合 * * @return List */ @OneToMany(fetch=FetchType.LAZY,mappedBy="parent",cascade={CascadeType.ALL}) public List<Group> getChildren() { return children; } /** * 设置下级组集合 * * @param children 下级组集合 */ public void setChildren(List<Group> children) { this.children = children; } /** * 获取组成员 * * @return List */ @ManyToMany(fetch=FetchType.LAZY) @JoinTable(name = "TB_GROUP_USER", joinColumns = { @JoinColumn(name = "FK_GROUP_ID") }, inverseJoinColumns = { @JoinColumn(name = "FK_USER_ID") }) public List<User> getMembersList() { return membersList; } /** * 设置组成员 * * @param membersList 用户集合 */ public void setMembersList(List<User> membersList) { this.membersList = membersList; } /** * 获取拥有资源 * * @return List */ @ManyToMany(fetch=FetchType.LAZY) @JoinTable(name = "TB_GROUP_RESOURCE", joinColumns = { @JoinColumn(name = "FK_GROUP_ID") }, inverseJoinColumns = { @JoinColumn(name = "FK_RESOURCE_ID") }) public List<Resource> getResourcesList() { return resourcesList; } /** * 设置该组的操作资源 * * @param resourcesList 资源集合 */ public void setResourcesList(List<Resource> resourcesList) { this.resourcesList = resourcesList; } /** * 获取组类型 * * @return String */ @Column(nullable=false,length=2) public String getType() { return type; } /** * 设置组类型 * * @param type 类型 * * @see GroupType */ public void setType(String type) { this.type = type; } /** * 获取备注 * * @return String */ @Column(columnDefinition="text") public String getRemark() { return remark; } /** * 设置备注 * * @param remark 备注 */ public void setRemark(String remark) { this.remark = remark; } /** * 获取组状态 * @return */ @Column(nullable=false) public int getState() { return state; } /** * 设置组状态 * @param state */ public void setState(int state) { this.state = state; } /** * 获取所有成员的id * * @return List */ @Transient public List<String> getMemberIds() { return CollectionUtils.extractToList(this.membersList, "id"); } /** * 获取当前实体是否是为根节点,如果是返回ture,否则返回false * * @return boolean */ @Transient public boolean getLeaf() { return this.children != null && children.size() > 0; } /** * 获取shiro role字符串 * @return String */ @Column(unique=true,length=64) public String getRole() { return role; } /** * 设置shiro role字符串 * @param role字符串 */ public void setRole(String role) { this.role = role; } /** * 获取shiro role连定义的值 * @return String */ @Column(length=512) public String getValue() { return value; } /** * 设置 shiro role连定义的值 * @param value 值 */ public void setValue(String value) { this.value = value; } /** * 获取父类ID * * @return String */ @Transient public String getParentId() { return this.parent == null ? "" : this.parent.getId(); } /** * 获取父类名称 * * @return String */ @Transient public String getParentName(){ return this.parent == null ? "" : this.parent.getName(); } /** * 获取状态名称 * * @return String */ @Transient public String getStateName() { return SystemVariableUtils.getDictionaryNameByValue(SystemDictionaryCode.State, this.state); } }