package com.xzx.gc.role.rbac.tree;
|
|
import com.fasterxml.jackson.annotation.JsonIgnore;
|
import com.xzx.gc.entity.CoreMenu;
|
|
import java.text.SimpleDateFormat;
|
import java.util.*;
|
|
public class MenuItem implements TreeItem{
|
CoreMenu sysMenu = null;
|
List<MenuItem> children = new ArrayList<MenuItem>();
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
@JsonIgnore
|
MenuItem parent = null;
|
String name;
|
String createTime;
|
private Integer seq;
|
public MenuItem(CoreMenu sysMenu){
|
this.sysMenu = sysMenu;
|
this.name = sysMenu!=null?sysMenu.getName():null;
|
this.seq = sysMenu.getSeq();
|
}
|
|
|
public void setParent(MenuItem parent){
|
this.parent = parent;
|
parent.children.add(this);
|
}
|
public List<MenuItem> getChildren(){
|
return this.children;
|
}
|
public Long getId(){
|
return sysMenu.getId();
|
}
|
|
public String getCreateTime() {
|
return sdf.format(sysMenu.getCreateTime());
|
}
|
|
public CoreMenu getData(){
|
return this.sysMenu;
|
}
|
|
|
public void filter(Set<Long> allows){
|
Iterator<MenuItem> it = this.children.iterator();
|
while(it.hasNext()){
|
MenuItem item = it.next();
|
if(item.getChildren().size()==0&&!allows.contains(item.getData().getId())){
|
it.remove();
|
}
|
|
if(item.getChildren().size()!=0){
|
item.filter(allows);
|
if(item.getChildren().size()==0){
|
it.remove();
|
}
|
}
|
|
|
|
}
|
|
}
|
|
|
/**
|
* 查找某个指定的子功能
|
* @param
|
* @return
|
*/
|
public MenuItem findChild(Long menuId){
|
if(sysMenu.getId().equals(menuId)){
|
return this;
|
}
|
for(MenuItem item:children){
|
MenuItem find = item.findChild(menuId);
|
if(find!=null){
|
return find;
|
}
|
}
|
return null;
|
|
}
|
|
/**
|
* 查找所有的子菜单
|
* @return
|
*/
|
public List<MenuItem> findAllItem(){
|
List<MenuItem> all = new LinkedList<>();
|
findAllChildItem(all,this);
|
return all;
|
}
|
|
|
private void findAllChildItem(List<MenuItem> all,MenuItem parent){
|
for(MenuItem item:parent.children){
|
all.add(item);
|
findAllChildItem(all,item);
|
}
|
|
}
|
|
|
|
@Override
|
public int hashCode() {
|
final int prime = 31;
|
int result = 1;
|
result = prime * result + ((sysMenu == null) ? 0 : sysMenu.hashCode());
|
return result;
|
}
|
|
|
@Override
|
public boolean equals(Object obj) {
|
if (this == obj) {
|
return true;
|
}
|
if (obj == null){
|
return false;
|
|
}
|
if (getClass() != obj.getClass()) {
|
return false;
|
}
|
MenuItem other = (MenuItem) obj;
|
if (sysMenu == null) {
|
if (other.sysMenu != null)
|
return false;
|
} else if (!sysMenu.equals(other.sysMenu))
|
return false;
|
return true;
|
}
|
|
|
public MenuItem getParent() {
|
return parent;
|
}
|
|
|
@Override
|
public String toString() {
|
return "MenuItem [sysMenu=" + sysMenu.getName() + ","+this.children.size()+"]";
|
}
|
|
|
@Override
|
public String getName() {
|
return this.name;
|
}
|
|
|
public Integer getSeq() {
|
return seq;
|
}
|
|
|
public void setSeq(Integer seq) {
|
this.seq = seq;
|
}
|
|
|
|
|
|
|
|
|
}
|