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.OrderBy; import javax.persistence.Table; import javax.persistence.Transient; import org.apache.commons.lang3.StringUtils; import org.exitsoft.showcase.vcsadmin.common.SystemVariableUtils; import org.exitsoft.showcase.vcsadmin.common.enumeration.SystemDictionaryCode; import org.exitsoft.showcase.vcsadmin.common.enumeration.entity.ResourceType; import org.exitsoft.showcase.vcsadmin.entity.UniversallyUniqueIdentifier; import org.hibernate.annotations.NamedQuery; /** * 资源安全类 * * @author vincent * */ @Entity @Table(name="TB_RESOURCE") @SuppressWarnings("serial") @NamedQuery(name=Resource.UserResources,query="select distinct rl from User u left join u.groupsList gl left join gl.resourcesList rl where u.id=?1 and gl.type= '03' order by rl.sort") public class Resource extends UniversallyUniqueIdentifier{ /** * 通过用户id和资源类型获取该用户下的所有资源 */ public static final String UserResources = "userResources"; //名称 private String name; //action url private String value; //父类 private Resource parent; //顺序值 private Integer sort; //子类 private List<Resource> children = new ArrayList<Resource>(); //备注 private String remark; //资源类型 private String type; //资源所对应的组集合 private List<Group> groupsList = new ArrayList<Group>(); //shiro permission 字符串 private String permission; //图标 private String icon; /** * 构造方法 */ public Resource() { } /** * 获取资源名称 * * @return String */ @Column(length=64,nullable=false,unique=true) public String getName() { return name; } /** * 设置资源名称 * * @param name 资源名称 */ public void setName(String name) { this.name = name; } /** * 获取资源操作URL * * @return String */ @Column(length=512) public String getValue() { if(StringUtils.isEmpty(value)) { return "#"; } return value; } /** * 设置资源操作URL * * @param url 资源操作URL */ public void setValue(String value) { this.value = value; } /** * 获取父类资源 * * @return {@link Resource} */ @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "FK_PARENT_ID") public Resource getParent() { return parent; } /** * 设置父类资源 * * @param parent 父类资源 */ public void setParent(Resource parent) { this.parent = parent; } /** * 获取顺序值 * * @return Integer */ @Column(nullable=false) public Integer getSort() { return sort; } /** * 设置顺序值 * * @param sort 顺序值 */ public void setSort(Integer sort) { this.sort = sort; } /** * 获取子类资源 * * @return List */ @OrderBy("sort ASC") @OneToMany(mappedBy = "parent",fetch = FetchType.LAZY,cascade={CascadeType.ALL}) public List<Resource> getChildren() { return children; } /** * 设置子类资源 * * @param children 子类资源 */ public void setChildren(List<Resource> children) { this.children = children; } /** * 获取备注 * * @return String */ @Column(columnDefinition="text") public String getRemark() { return remark; } /** * 设置备注 * * @param remark 备注 */ public void setRemark(String remark) { this.remark = remark; } /** * 获取当前实体是否是为根节点,如果是返回ture,否则返回false * * @return boolean */ @Transient public Boolean getLeaf() { return this.children != null && this.getChildren().size() > 0; } /** * 获取资源类型 * @return String */ @Column(nullable=false,length=2) public String getType() { return type; } /** * 设置资源类型 * @param type 类型 * @see ResourceType */ public void setType(String type) { this.type = type; } /** * 获取该资源对应的组集合 * * @return List */ @ManyToMany(fetch=FetchType.LAZY) @JoinTable(name = "TB_GROUP_RESOURCE", joinColumns = { @JoinColumn(name = "FK_RESOURCE_ID") }, inverseJoinColumns = { @JoinColumn(name = "FK_GROUP_ID") }) public List<Group> getGroupsList() { return groupsList; } /** * 设置该资源对应的组集合 * * @param groupsList 组集合 */ public void setGroupsList(List<Group> groupsList) { this.groupsList = groupsList; } /** * 获取父类名称 * * @return String */ @Transient public String getParentName() { return this.parent == null ? "" : parent.getName(); } /** * 获取父类ID * * @return String */ @Transient public String getParentId() { return this.parent == null ? "" : parent.getId(); } /** * 获取permission字符串 * * @return String */ @Column(unique=true,length=64) public String getPermission() { return permission; } /** * 设置permission字符串 * @param permission 字符串 */ public void setPermission(String permission) { this.permission = permission; } /** * 获取资源图标 * * @return String */ @Column(length=64) public String getIcon() { return icon; } /** * 设置资源图标 * @param icon 图标css class */ public void setIcon(String icon) { this.icon = icon; } /** * 获取资源类型的名称 * * @return String */ @Transient public String getTypeName() { return SystemVariableUtils.getDictionaryNameByValue(SystemDictionaryCode.ResourceType, this.type); } }