PermissionDO.java

package org.europa.together.domain.acl;

import java.io.Serializable;
import java.util.Objects;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.Index;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.JoinColumns;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table;
import jakarta.persistence.UniqueConstraint;
import org.europa.together.utils.StringUtils;

/**
 * PERMISSION OBJECT.
 */
@Entity
@Table(name = "ACL_PERMISSIONS",
        //CHECKSTYLE:OFF
        indexes = {
            @Index(columnList = "RESOURCE_RESOURCE", name = "acl_resource_resource"),
            @Index(columnList = "RESOURCE_TEMPLATE", name = "acl_resource_template"),
            @Index(columnList = "ROLE_NAME", name = "role_name")
        },
        //CHECKSTYLE:ON
        uniqueConstraints = {
            @UniqueConstraint(columnNames = {
        "RESOURCE_RESOURCE", "RESOURCE_TEMPLATE", "ROLE_NAME"})
        }
)
public class PermissionDO implements Serializable {

    private static final long serialVersionUID = 30L;
    private static final int HASH = 7;

    /**
     * The name of the used database table for this domain object.
     */
    public static final String TABLE_NAME = "ACL_PERMISSIONS";

    @Id
    @Column(name = "IDX", unique = true, nullable = false)
    private String uuid;

    @ManyToOne
    @JoinColumn(name = "ROLE_NAME")
    private RolesDO role;

    @ManyToOne
    @JoinColumns({
        @JoinColumn(name = "RESOURCE_RESOURCE"),
        @JoinColumn(name = "RESOURCE_TEMPLATE")
    })
    private ResourcesDO resource;

    @Column(name = "DO_READ", nullable = false)
    private boolean read = false;

    @Column(name = "DO_CREATE", nullable = false)
    private boolean create = false;

    @Column(name = "DO_CHANGE", nullable = false)
    private boolean change = false;

    @Column(name = "DO_DELETE", nullable = false)
    private boolean delete = false;

    /**
     * Default Constructor.
     */
    public PermissionDO() {
        this.uuid = StringUtils.generateUUID();
    }

    /**
     * Constructor.
     *
     * @param role as RoleDO
     * @param resource as ResourceDO
     */
    public PermissionDO(final RolesDO role, final ResourcesDO resource) {
        this.uuid = StringUtils.generateUUID();
        this.role = role;
        this.resource = resource;
    }

    @Override
    public int hashCode() {
        int hash = HASH * 17;
        hash = hash + Objects.hashCode(this.uuid);
        return hash;
    }

    @Override
    public boolean equals(final Object obj) {
        boolean success = false;
        if (obj != null && obj instanceof PermissionDO) {
            if (this == obj) {
                success = true;
            } else {
                final PermissionDO other = (PermissionDO) obj;
                if (Objects.equals(this.uuid, other.uuid)) {
                    success = true;
                }
            }
        }
        return success;
    }

    @Override
    public String toString() {
        return "PermissionDO{"
                + "uuid=" + uuid
                + ", role=" + role
                + ", resource" + resource
                + ", read=" + read
                + ", create=" + create
                + ", change=" + change
                + ", delete=" + delete
                + "}";
    }

    //<editor-fold defaultstate="collapsed" desc="Getter / Setter">
    /**
     * get the Identifier.
     *
     * @return uuid as String
     */
    public String getUuid() {
        return uuid;
    }

    /**
     * Set the identifier.
     *
     * @param uuid as String
     */
    public void setUuid(final String uuid) {
        this.uuid = uuid;
    }

    /**
     * Get the resources for a permission.
     *
     * @return a resource as Object.
     */
    public ResourcesDO getResource() {
        return resource;
    }

    /**
     * Set the resources for a permission.
     *
     * @param resource as Object
     */
    public void setResource(final ResourcesDO resource) {
        this.resource = resource;
    }

    /**
     * Get the role for a permission.
     *
     * @return role as object
     */
    public RolesDO getRole() {
        return role;
    }

    /**
     *
     * Set the role for a permission.
     *
     * @param role as Object
     */
    public void setRole(final RolesDO role) {
        this.role = role;
    }

    /**
     * Indicate the READ permission for a resource.
     *
     * @return true on success
     */
    public boolean isRead() {
        return read;
    }

    /**
     * Define the READ permission for a resource.
     *
     * @param read as boolean
     */
    public void setRead(final boolean read) {
        this.read = read;
    }

    /**
     * Indicate the CREATE permission for a resource.
     *
     * @return true on success
     */
    public boolean isCreate() {
        return create;
    }

    /**
     * Define the CREATE permission for a resource.
     *
     * @param create as boolean
     */
    public void setCreate(final boolean create) {
        this.create = create;
    }

    /**
     * Indicate the CHANGE (update) permission for a resource.
     *
     * @return true on success
     */
    public boolean isChange() {
        return change;
    }

    /**
     * Define the CHANGE (update) permission for a resource.
     *
     * @param change as boolean
     */
    public void setChange(final boolean change) {
        this.change = change;
    }

    /**
     * Indicate the DELETE permission for a resource.
     *
     * @return true on success
     */
    public boolean isDelete() {
        return delete;
    }

    /**
     * Define the DELETE permission for a resource.
     *
     * @param delete as boolean
     */
    public void setDelete(final boolean delete) {
        this.delete = delete;
    }
    //</editor-fold>
}