edu.cornell.mannlib.vitro.webapp.beans.BaseResourceBean.java Source code

Java tutorial

Introduction

Here is the source code for edu.cornell.mannlib.vitro.webapp.beans.BaseResourceBean.java

Source

/* $This file is distributed under the terms of the license in /doc/license.txt$ */

package edu.cornell.mannlib.vitro.webapp.beans;

import java.util.Set;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.hp.hpl.jena.rdf.model.Resource;
import com.hp.hpl.jena.rdf.model.ResourceFactory;

import edu.cornell.mannlib.vedit.beans.LoginStatusBean;
import edu.cornell.mannlib.vitro.webapp.auth.permissions.PermissionSets;
import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary;

public class BaseResourceBean implements ResourceBean {

    private static final Log log = LogFactory.getLog(BaseResourceBean.class.getName());
    protected String URI = null;
    protected String namespace = null;
    protected String localName = null;
    protected String localNameWithPrefix = null;
    protected String pickListName = null;

    protected RoleLevel hiddenFromDisplayBelowRoleLevel = null;
    protected RoleLevel prohibitedFromUpdateBelowRoleLevel = null;
    protected RoleLevel hiddenFromPublishBelowRoleLevel = null;

    public enum RoleLevel {
        PUBLIC("http://vitro.mannlib.cornell.edu/ns/vitro/role#public", "all users, including public",
                "all users who can log in", "public"),

        SELF("http://vitro.mannlib.cornell.edu/ns/vitro/role#selfEditor", "self-editor and above",
                "self-editor and above", "self"),

        EDITOR("http://vitro.mannlib.cornell.edu/ns/vitro/role#editor", "editor and above", "editor and above",
                "editor"),

        CURATOR("http://vitro.mannlib.cornell.edu/ns/vitro/role#curator", "curator and above", "curator and above",
                "curator"),

        DB_ADMIN("http://vitro.mannlib.cornell.edu/ns/vitro/role#dbAdmin", "site admin and root user",
                "site admin and root user", "siteAdmin"),

        NOBODY("http://vitro.mannlib.cornell.edu/ns/vitro/role#nobody", "root user", "root user", "root");

        private final String uri;
        private final String displayLabel;
        private final String updateLabel;
        private final String shorthand;

        private RoleLevel(String uri, String displayLabel, String updateLabel, String shorthand) {
            this.uri = uri;
            this.displayLabel = displayLabel;
            this.updateLabel = updateLabel;
            this.shorthand = shorthand;
        }

        public String getURI() {
            return uri;
        }

        public String getDisplayLabel() {
            return displayLabel;
        }

        public String getUpdateLabel() {
            return updateLabel;
        }

        public String getShorthand() {
            return shorthand;
        }

        // Never returns null.
        public static RoleLevel getRoleByUri(String uri2) {
            if (uri2 == null)
                return RoleLevel.values()[0];

            for (RoleLevel role : RoleLevel.values()) {
                if (role.uri.equals(uri2))
                    return role;
            }
            return RoleLevel.values()[0];
        }

        public static RoleLevel getRoleFromLoginStatus(HttpServletRequest req) {
            UserAccount u = LoginStatusBean.getCurrentUser(req);
            if (u == null) {
                return PUBLIC;
            }

            Set<String> roles = u.getPermissionSetUris();
            if (roles.contains(PermissionSets.URI_DBA)) {
                return DB_ADMIN;
            } else if (roles.contains(PermissionSets.URI_CURATOR)) {
                return CURATOR;
            } else if (roles.contains(PermissionSets.URI_EDITOR)) {
                return EDITOR;
            } else if (roles.contains(PermissionSets.URI_SELF_EDITOR)) {
                return SELF;
            } else {
                // Logged in but with no recognized role? Make them SELF
                return SELF;
            }
        }
    }

    public BaseResourceBean() {
        // default constructor
    }

    public BaseResourceBean(String uri) {
        buildLocalAndNS(uri);
    }

    @Override
    public boolean isAnonymous() {
        return (this.URI == null || VitroVocabulary.PSEUDO_BNODE_NS.equals(this.getNamespace()));
    }

    @Override
    public String getURI() {
        return URI;
    }

    @Override
    public void setURI(String URI) {
        if (this.localName != null || this.namespace != null)
            buildLocalAndNS(URI);
        else
            this.URI = URI;
    }

    private void buildLocalAndNS(String URI) {
        if (URI == null) {
            this.URI = null;
            this.namespace = null;
            this.localName = null;
        } else {
            this.URI = URI;
            Resource uri = ResourceFactory.createResource(URI);
            this.namespace = uri.getNameSpace();
            this.localName = uri.getLocalName();
        }
    }

    @Override
    public String getNamespace() {
        if (namespace == null && this.URI != null)
            buildLocalAndNS(this.URI);
        return namespace;
    }

    @Override
    public void setNamespace(String namespace) {
        this.namespace = namespace;
        if (namespace != null && localName != null) {
            this.URI = namespace + localName;
        }
    }

    @Override
    public String getLabel() {
        return getLocalName();
    }

    @Override
    public String getLocalName() {
        if (localName == null && this.URI != null)
            buildLocalAndNS(this.URI);
        return localName;
    }

    @Override
    public void setLocalName(String localName) {
        this.localName = localName;
        if (namespace != null && localName != null) {
            this.URI = namespace + localName;
        }
    }

    public String getLocalNameWithPrefix() {
        return localNameWithPrefix != null ? localNameWithPrefix
                : getLocalName() != null ? getLocalName() : URI != null ? URI : "(no name)";
    }

    public void setLocalNameWithPrefix(String prefixedLocalName) {
        this.localNameWithPrefix = prefixedLocalName;
    }

    @Override
    public String getPickListName() {
        return pickListName == null ? getLocalName() == null ? (URI == null ? "(no name)" : URI) : getLocalName()
                : pickListName;
    }

    public void setPickListName(String pickListName) {
        this.pickListName = pickListName;
    }

    @Override
    public RoleLevel getHiddenFromDisplayBelowRoleLevel() {
        return hiddenFromDisplayBelowRoleLevel;
    }

    @Override
    public void setHiddenFromDisplayBelowRoleLevel(RoleLevel level) {
        hiddenFromDisplayBelowRoleLevel = level;
    }

    @Override
    public void setHiddenFromDisplayBelowRoleLevelUsingRoleUri(String roleUri) {
        hiddenFromDisplayBelowRoleLevel = RoleLevel.getRoleByUri(roleUri);
    }

    @Override
    public RoleLevel getProhibitedFromUpdateBelowRoleLevel() {
        return prohibitedFromUpdateBelowRoleLevel;
    }

    @Override
    public void setProhibitedFromUpdateBelowRoleLevel(RoleLevel level) {
        prohibitedFromUpdateBelowRoleLevel = level;
    }

    @Override
    public void setProhibitedFromUpdateBelowRoleLevelUsingRoleUri(String roleUri) {
        prohibitedFromUpdateBelowRoleLevel = RoleLevel.getRoleByUri(roleUri);
    }

    @Override
    public RoleLevel getHiddenFromPublishBelowRoleLevel() {
        return hiddenFromPublishBelowRoleLevel;
    }

    @Override
    public void setHiddenFromPublishBelowRoleLevel(RoleLevel level) {
        hiddenFromPublishBelowRoleLevel = level;
    }

    @Override
    public void setHiddenFromPublishBelowRoleLevelUsingRoleUri(String roleUri) {
        hiddenFromPublishBelowRoleLevel = BaseResourceBean.RoleLevel.getRoleByUri(roleUri);
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null)
            return false;
        else if (obj instanceof BaseResourceBean) {
            String thisURI = this.getURI();
            String thatURI = ((BaseResourceBean) obj).getURI();
            if (thisURI != null && thatURI != null) {
                return thisURI.equals(thatURI);
            }
        }
        return obj.hashCode() == this.hashCode();
    }

    @Override
    public int hashCode() {
        if (getURI() != null)
            return getURI().hashCode();
        else
            return super.hashCode();
    }

}