Class ProjectKey

  • All Implemented Interfaces:
    AccessControlled, Identifiable

    public class ProjectKey
    extends Key
    This class is used to get information about which projects a Shareable item has been shared to.

    A project key is immutable and the project/permission combinations cannot be changed once the key has been created. This allows the core to resuse project keys for all items with the same combination of project/permission values without fear that someone else may change the permissions.

    Project keys can be used with Shareable items to share them with projects. If the logged in user has set an active project (see SessionControl.setActiveProject(Project)) new items will automatically be shared to that project.

    To create a new project key use the ProjectPermissions object and pass the information to the getNewOrExisting(DbControl, ProjectPermissions) method.

    Another option is to use the MultiPermissions object which allows you to modifiy the sharing information of a whole bunch of shareable items in one go. The MultiPermissions class takes care of all the cumbersome work of creating new keys and assigning those to the items for you.

    Version:
    2.0
    Author:
    Nicklas
    See Also:
    Shareable, SessionControl.setActiveProject(Project)
    Last modified
    $Date: 2017-05-22 14:35:27 +0200 (må, 22 maj 2017) $
    • Method Detail

      • getNewOrExisting

        public static ProjectKey getNewOrExisting​(DbControl dc,
                                                  ProjectPermissions projectPermissions)
                                           throws BaseException
        Create a new or load an existing ProjectKey when you have a combination of project/permission values. If the database contains a project key with the same combination that project key is loaded and returned, otherwise a new project key is created. If no existing key is found, the new key will immediately be saved and committed to the database using another transaction. This ensures that no two keys contains identical permissions.
        Parameters:
        dc - The DbControl which will be used for permission checking and database access
        projectPermissions - A ProjectPermissions object holding the permissions
        Returns:
        The ProjectKey item
        Throws:
        BaseException - If there is an error
      • deleteUnusedProjectKeys

        public static int deleteUnusedProjectKeys()
                                           throws BaseException
        Delete all keys that are currently not used by any item. This method is intended to be executed at regular intervals by a cleanup application.
        Throws:
        BaseException - If there is some kind of error.
      • getType

        public Item getType()
        Description copied from interface: Identifiable
        Get the type of item represented by the object. The returned value is one of the values defined in the Item enumeration.
        Returns:
        A value indicating the type of item
      • initPermissions

        void initPermissions​(int granted,
                             int denied)
                      throws BaseException
        WRITE permission is always denied. USE and CREATE permission is always granted.
        Overrides:
        initPermissions in class BasicItem
        Parameters:
        granted - Permissions that have been granted by the subclass
        denied - Permissions that have been denied by the subclass
        Throws:
        BaseException - If the permissions couldn't be initialised
      • getPermissions

        public Set<Permission> getPermissions​(Project project)
                                       throws InvalidDataException
        Get the permissions for a project.
        Parameters:
        project - The Project for which we want to get the permission
        Returns:
        A Set containing the granted permissions, or an empty set if no permissions have been granted
        Throws:
        InvalidDataException - If the project is null
        See Also:
        Permission
      • getProjectIds

        public Set<Integer> getProjectIds​(Permission permission)
        Get the ID:s of all projects that are shared with this project key having the specified permission.
        Parameters:
        permission - The permission the projects must have
        Returns:
        A set with the ID:s of all matching projects, or an empty set if there are no matches
      • getNewOrExistingId

        static int getNewOrExistingId​(Session session,
                                      Map<ProjectData,​Integer> projectPermissions)
                               throws BaseException
        Find the ID of an existing key with exactly the same project/permission combination. If no existing key is found a new one is created.
        Parameters:
        projectPermissions - A Map holding the project/permission combinations
        Returns:
        The ID of the new or existing key
        Throws:
        BaseException