package com.norteksoft.mms.module.entity; import java.io.Serializable; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.EnumType; import javax.persistence.Enumerated; import javax.persistence.JoinColumn; import javax.persistence.Lob; import javax.persistence.ManyToOne; import javax.persistence.OneToMany; import javax.persistence.Table; import javax.persistence.Transient; import com.norteksoft.mms.base.OpenWay; import com.norteksoft.mms.form.enumeration.MenuType; import com.norteksoft.product.enumeration.DataState; import com.norteksoft.product.orm.IdEntity; import com.norteksoft.task.entity.WorkflowTask; /** * 菜单实体 * @author wurong * */ @Entity @Table(name="MMS_MENU") public class Menu extends IdEntity implements Serializable,Comparable<Menu>,Cloneable { private static final long serialVersionUID = 1L; @Column(length=64) private String code; //编号 @Column(length=64) private String name; //名称 private Integer displayOrder = 0; //序号 private String imageUrl;//图片路径 private String iconName; // 显示的图片的名称 @Enumerated(EnumType.STRING) @Column(length=32) private DataState enableState = DataState.DRAFT; //启用状态 @OneToMany(mappedBy="parent",cascade=CascadeType.ALL) private List<Menu> children = new ArrayList<Menu>(); //菜单下的菜单 @ManyToOne @JoinColumn(name="FK_PARENT_MENU") private Menu parent; //父菜单 private String url="#this"; //按钮对应的url,一级系统菜单才会使用 @Lob @Column(columnDefinition="NTEXT", nullable=true) private String event; private Long systemId; //系统id private Integer layer = 1; //菜单的层次 根节点的层次为1,子菜单为父菜单层次加1 @Enumerated(EnumType.STRING) @Column(length=32) private MenuType type=MenuType.CUSTOM; @Transient private Long lastMenuId; private OpenWay openWay=OpenWay.CURRENT_PAGE_OPEN; public String getCode() { return code; } public void setCode(String code) { this.code = code; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getDisplayOrder() { return displayOrder; } public void setDisplayOrder(Integer displayOrder) { this.displayOrder = displayOrder; } public DataState getEnableState() { return enableState; } public void setEnableState(DataState enableState) { this.enableState = enableState; } public List<Menu> getChildren() { Collections.sort(children, new Comparator<Menu>() { public int compare(Menu m1, Menu m2) { return m1.getDisplayOrder()-m2.getDisplayOrder(); } }); return children; } /** * 获得第一个子菜单 */ public Menu getFirstChildren(){ return getChildren().size()==0?null:getChildren().get(0); } public void setChildren(List<Menu> children) { this.children = children; } public Menu getParent() { return parent; } public void setParent(Menu parent) { this.parent = parent; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getIconName() { return iconName; } public void setIconName(String iconName) { this.iconName = iconName; } public Long getSystemId() { return systemId; } public void setSystemId(Long systemId) { this.systemId = systemId; } public Integer getLayer() { return layer; } public void setLayer(Integer layer) { this.layer = layer; } public String getEvent() { return event; } public void setEvent(String event) { this.event = event; } public int compareTo(Menu menu) { return this.getDisplayOrder()-menu.getDisplayOrder(); } public MenuType getType() { return type; } public void setType(MenuType type) { this.type = type; } public Long getLastMenuId() { return lastMenuId; } public void setLastMenuId(Long lastMenuId) { this.lastMenuId = lastMenuId; } public String getImageUrl() { return imageUrl; } public void setImageUrl(String imageUrl) { this.imageUrl = imageUrl; } public OpenWay getOpenWay() { return openWay; } public void setOpenWay(OpenWay openWay) { this.openWay = openWay; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((code == null) ? 0 : code.hashCode()); result = prime * result + ((displayOrder == null) ? 0 : displayOrder.hashCode()); result = prime * result + ((enableState == null) ? 0 : enableState.hashCode()); result = prime * result + ((event == null) ? 0 : event.hashCode()); result = prime * result + ((iconName == null) ? 0 : iconName.hashCode()); result = prime * result + ((imageUrl == null) ? 0 : imageUrl.hashCode()); result = prime * result + ((lastMenuId == null) ? 0 : lastMenuId.hashCode()); result = prime * result + ((layer == null) ? 0 : layer.hashCode()); result = prime * result + ((name == null) ? 0 : name.hashCode()); result = prime * result + ((openWay == null) ? 0 : openWay.hashCode()); result = prime * result + ((systemId == null) ? 0 : systemId.hashCode()); result = prime * result + ((url == null) ? 0 : url.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; if (getId() == null) { if (((Menu)obj).getId() != null) return false; } else{ return getId().equals(((Menu)obj).getId()); } return true; } @Override public Menu clone(){ try { return (Menu) super.clone(); } catch (CloneNotSupportedException e) { e.printStackTrace(); throw new RuntimeException("Menu clone failure"); } } }