MenuNavigation.java 5.59 KB
package fi.insomnia.bortal.model;

import static javax.persistence.CascadeType.ALL;
import static javax.persistence.CascadeType.PERSIST;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OrderBy;
import javax.persistence.Table;
import javax.persistence.Transient;
import javax.persistence.UniqueConstraint;

import org.eclipse.persistence.annotations.OptimisticLocking;
import org.eclipse.persistence.annotations.OptimisticLockingType;
import org.eclipse.persistence.annotations.PrivateOwned;

import fi.insomnia.bortal.enums.BortalApplication;
import fi.insomnia.bortal.enums.apps.IAppPermission;

@Entity
@Table(name = "menu_navigation",
        uniqueConstraints = { @UniqueConstraint(columnNames = {
                MenuNavigation.ITEM_COLUMN,
                MenuNavigation.EVENT_COLUMN })
        })
@OptimisticLocking(type = OptimisticLockingType.CHANGED_COLUMNS)
public class MenuNavigation extends GenericEntity implements Comparable<MenuNavigation> {

    private static final long serialVersionUID = 1404769998091479699L;

    protected static final String ITEM_COLUMN = "item_id";
    protected static final String EVENT_COLUMN = "event_id";

    @ManyToOne
    @JoinColumn(nullable = false, name = EVENT_COLUMN)
    private LanEvent event;

    @Lob
    private String key;
    @Lob
    private String header;
    @Lob
    private String footer;

    @Column(nullable = false)
    private Integer sort = 1000;

    @Column(nullable = false)
    private boolean visible = false;

    @ManyToOne(cascade = PERSIST)
    @JoinColumn(name = ITEM_COLUMN)
    private Menuitem item;

    @ManyToOne()
    private SitePage sitepage;

    @ManyToOne
    @JoinColumn(nullable = true)
    private MenuNavigation parent;

    @OneToMany(mappedBy = "parent", cascade = ALL)
    @PrivateOwned
    @OrderBy("sort")
    private List<MenuNavigation> children = new ArrayList<MenuNavigation>();

    @Transient
    transient private IAppPermission privatePerm;
    @Transient
    transient private BortalApplication privateApp;
    private String application;
    private String permission;

    private MenuNavigation() {
        super();
    }

    public MenuNavigation(LanEvent ev, String keyString) {
        super();
        this.event = ev;
        this.key = keyString;
        this.visible = true;
    }

    public BortalApplication getApplication() {
        if (privateApp == null && application != null) {
            privateApp = BortalApplication.valueOf(application);
        }
        return privateApp;
    }

    public void setPermission(IAppPermission perm) {
        if (perm != null)
        {
            privatePerm = perm;
            privateApp = perm.getParent();
            this.application = perm.getParent().toString();
            this.permission = perm.toString();
        }
    }

    public IAppPermission getPermission() {
        if (privatePerm == null && application != null && permission != null) {
            for (IAppPermission appPerm : getApplication().getPermissions()) {
                if (appPerm.toString().equals(permission)) {
                    privatePerm = appPerm;
                    break;
                }
            }

        }

        return privatePerm;
    }

    public List<MenuNavigation> getChildren() {
        return children;
    }

    public void setChildren(List<MenuNavigation> children) {
        this.children = children;
    }

    public MenuNavigation getParent() {
        return parent;
    }

    public void setParent(MenuNavigation parent) {
        this.parent = parent;
    }

    public Menuitem getItem() {
        return item;
    }

    public void setItem(Menuitem item) {
        this.item = item;
    }

    public String getFooter() {
        return footer;
    }

    public void setFooter(String footer) {
        this.footer = footer;
    }

    public String getHeader() {
        return header;
    }

    public void setHeader(String header) {
        this.header = header;
    }

    public String getKey() {
        return key;
    }

    public void setKey(String key) {
        this.key = key;
    }

    public boolean isVisible() {
        return visible;
    }

    public void setVisible(boolean visible) {
        this.visible = visible;
    }

    @Override
    public int compareTo(MenuNavigation o) {
        return sort.compareTo(o.sort);
    }

    @Transient
    private transient Integer pagesort = 0;

    // used only for initialization function...
    public MenuNavigation addPage(Menuitem item, IAppPermission permission) {
        if (children == null) {
            children = new ArrayList<MenuNavigation>();
        }
        MenuNavigation add = new MenuNavigation();
        add.setSort(pagesort += 10);
        if (item != null)
        {
            add.setKey("submenu" + item.getUrl().replace("/", "."));
        }
        add.setItem(item);
        add.setEvent(event);
        add.setPermission(permission);
        add.setParent(this);
        add.setVisible(true);
        children.add(add);
        return add;

    }

    public SitePage getSitepage() {
        return sitepage;
    }

    public void setSitepage(SitePage sitepage) {
        this.sitepage = sitepage;
    }

    public LanEvent getEvent() {
        return event;
    }

    public void setEvent(LanEvent event) {
        this.event = event;
    }

    public Integer getSort() {
        return sort;
    }

    public void setSort(Integer sort) {
        this.sort = sort;
    }

}