ApplicationPermission.java 3.01 KB
package fi.insomnia.bortal.model;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
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 fi.insomnia.bortal.enums.BortalApplication;
import fi.insomnia.bortal.enums.apps.IAppPermission;

@Entity
@Table(name = "application_permissions", uniqueConstraints = { @UniqueConstraint(columnNames = { ApplicationPermission.ROLE_ID_COLUMN, ApplicationPermission.APPLICATION_COLUMN, ApplicationPermission.PERMISSION_COLUMN }) })
@OptimisticLocking(type = OptimisticLockingType.CHANGED_COLUMNS)
public class ApplicationPermission extends GenericEntity {

    protected static final String APPLICATION_PERMISSION_CONVERTER = "application_permission_perm_typeconverter";
    private static final long serialVersionUID = -7768599976770042101L;

    protected static final String ROLE_ID_COLUMN = "role_id";

    public static final String APPLICATION_COLUMN = "application";

    public static final String PERMISSION_COLUMN = "permission";

    @Column(name = APPLICATION_COLUMN, nullable = false, length = 40)
    private String application;

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

    @ManyToOne(optional = false)
    @JoinColumn(nullable = false, name = ROLE_ID_COLUMN)
    private Role role;

    @Column(nullable = false, name = PERMISSION_COLUMN, length = 40)
    private String permission;

    public ApplicationPermission() {
        super();
    }

    public ApplicationPermission(Role role) {

        this.role = role;
    }

    public ApplicationPermission(Role role, IAppPermission perm) {
        this(role);
        this.role = role;
        setPermission(perm);

    }

    public Role getRole() {
        return role;
    }

    public void setRole(Role rolesId) {
        this.role = rolesId;
    }

    @Transient
    private BortalApplication privateApp;

    @Transient
    private IAppPermission privatePerm;

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

    public void setPermission(IAppPermission perm) {
        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;
    }
}