Class Directory

All Implemented Interfaces:
AccessControlled, Identifiable, Nameable, Ownable, Removable, Shareable, SystemItem

public class Directory
extends SharedItem
implements Nameable, Removable, SystemItem
This is used to represent directory items. Directories can be used to group File:s into more manageable compartments. Directories can be organised into an arbitrarily deep tree-like structure. For each directory no two sub-directories may have the same name, and no two files may have the same name. However, it is legal for a file to have the same name as a directory.
Version:
2.0
Author:
enell
Last modified
$Date: 2024-01-08 15:38:53 +0100 (Mon, 08 Jan 2024) $
  • Field Details

    • TYPE

      public static final Item TYPE
      The type of item represented by this class.
      See Also:
      Item.DIRECTORY, getType()
    • ROOT

      public static final String ROOT
      The id for the Directory item representing the root.
      See Also:
      Constant Field Values
    • HOME

      public static final String HOME
      The id for the Directory item representing the home directory. The home directory is the parent directory for the user's home directories.
      See Also:
      Constant Field Values
    • TEMPLATE

      public static final String TEMPLATE
      The id for the Directory item representing the template directory. The template directory is used to create the directory structure for new users.
      See Also:
      Constant Field Values
    • DIRECTORY_CACHE

      private static ThreadLocal<Map<String,​Directory>> DIRECTORY_CACHE
  • Constructor Details

    • Directory

      Directory​(DirectoryData data)
      Creates a new directory item from the given data.
      Parameters:
      data - the data.
  • Method Details

    • getNew

      public static Directory getNew​(DbControl dc, Directory parent) throws BaseException
      Create a new Directory item.
      Parameters:
      dc - The DbControl which will be used for permission checking and database access.
      parent - The parent directory for this directory. It cannot be null
      Returns:
      The new Directory item
      Throws:
      PermissionDeniedException - This exception is thrown if the logged in user doesn't have CREATE permission for this type of items
      BaseException - This exception is thrown if there is another error
    • getNew

      public static Directory getNew​(DbControl dc, Path path)
      Create a new or existing Directory from a path. Every directory that doesn't exist is created.

      NOTE! If the directory given by the path already exists, the existing directory object is returned. Since there is existing code that expects this behavior we will not change the implementation to throw an exception which might have been expected.

      Parameters:
      dc - The DbControl which will be used for permission checking and database access
      path - The path to create
      Returns:
      The directory representing the path
    • getById

      public static Directory getById​(DbControl dc, int id) throws ItemNotFoundException, PermissionDeniedException, BaseException
      Get a Directory item when you know the ID.
      Parameters:
      dc - The DbControl which will be used for permission checking and database access.
      id - The ID of the item to load
      Returns:
      The Directory item
      Throws:
      ItemNotFoundException - If an item with the specified ID is not found
      PermissionDeniedException - If the logged in user doesn't have Permission.READ permission to the item
      BaseException - If there is another error
    • getByPath

      public static Directory getByPath​(DbControl dc, Path path) throws ItemNotFoundException, PermissionDeniedException, BaseException
      Get a Directory item when you know the path.
      Parameters:
      dc - The DbControl which will be used for permission checking and database access.
      path - The path to the directory to load
      Returns:
      The Directory item
      Throws:
      ItemNotFoundException - If an item with the specified path is not found
      PermissionDeniedException - If the logged in user doesn't have Permission.READ permission to the item
      BaseException - If there is another error
    • getByPath

      public static Directory getByPath​(DbControl dc, Path path, boolean create) throws ItemNotFoundException, PermissionDeniedException, BaseException
      Get an existing Directory or create a new one if the given path doesn't exists.
      Throws:
      ItemNotFoundException
      PermissionDeniedException
      BaseException
      Since:
      3.19.10
    • getIdFromPath

      public static int getIdFromPath​(DbControl dc, Path path) throws BaseException
      Get the id of a directory when you know the path.
      Parameters:
      dc - The DbControl which will be used for permission checking and database access.
      path - The path to the directory to load
      Returns:
      The id of the Directory item
      Throws:
      ItemNotFoundException - If an item with the specified path is not found
      BaseException - If there is another error
    • exists

      public static boolean exists​(DbControl dc, Directory directory, String subdirectoryName) throws BaseException
      Checks if a subdirectory with the specified name exists in a directory.
      Parameters:
      dc - The DbControl which will be used for permission checking and database access.
      directory - The directory to check in
      subdirectoryName - The name of the subdirectory to look for
      Returns:
      TRUE if the file exists, FALSE otherwise
      Throws:
      BaseException - If there is an error
    • createHomeDirectory

      public static Directory createHomeDirectory​(DbControl dc, User user, boolean copyTemplate) throws PermissionDeniedException, BaseException
      Creates a homedirectory for a specified user. The Directory will be placed in the predefined home directory, HOME.
      Parameters:
      dc - The DbControl which will be used for permission checking and database access.
      user - The user whose home directry should be created.
      copyTemplate - TRUE if the new home directory shold copy the directory structure in the template directory.
      Returns:
      The new hom directory.
      Throws:
      PermissionDeniedException - If the logged in user doesn't have Permission.WRITE or Permission.CREATE permission to the item.
      BaseException - If there is another error.
    • copySubdirectories

      public static void copySubdirectories​(DbControl dc, Directory from, Directory to, User owner) throws BaseException
      This method copies a directory strucure to the destination directory.
      Parameters:
      dc - The DbControl which will be used for permission checking and database access.
      from - The source directory to copy
      to - The destination directory where the new directory structure is created
      owner - The owner of the destination directory
      Throws:
      BaseException - If there is an error
    • getQuery

      public static ItemQuery<Directory> getQuery()
      Get a query configured to retrieve directories.
      Returns:
      An ItemQuery object
    • getData

      DirectoryData getData()
      Description copied from class: BasicItem
      Get the BasicData object that holds all data for this item.
      Overrides:
      getData in class SharedItem
    • getName

      public String getName()
      Description copied from interface: Nameable
      Get the name of the item.
      Specified by:
      getName in interface Nameable
      Returns:
      A String with the name of the item
    • setName

      public void setName​(String name) throws PermissionDeniedException, InvalidDataException
      Description copied from interface: Nameable
      Set the name of the item. The name cannot be null and mustn't be longer than the value specified by the Nameable.MAX_NAME_LENGTH constant.
      Specified by:
      setName in interface Nameable
      Parameters:
      name - The new name for the item
      Throws:
      PermissionDeniedException - If the logged in user doesn't have write permission
      InvalidDataException - If the name is null or longer than specified by the Nameable.MAX_NAME_LENGTH constant
    • getDescription

      public String getDescription()
      Description copied from interface: Nameable
      Get the description for the item.
      Specified by:
      getDescription in interface Nameable
      Returns:
      A String with a description of the item
    • setDescription

      public void setDescription​(String description) throws PermissionDeniedException, InvalidDataException
      Description copied from interface: Nameable
      Set the description for the item. The description can be null but mustn't be longer than the value specified by the Nameable.MAX_DESCRIPTION_LENGTH constant.
      Specified by:
      setDescription in interface Nameable
      Parameters:
      description - The new description for the item
      Throws:
      PermissionDeniedException - If the logged in user doesn't have write permission
      InvalidDataException - If the description longer than specified by the Nameable.MAX_DESCRIPTION_LENGTH constant
    • 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.
      Specified by:
      getType in interface Identifiable
      Returns:
      A value indicating the type of item
    • isRemoved

      public boolean isRemoved()
      Description copied from interface: Removable
      Check if the removed flag is set for this item.
      Specified by:
      isRemoved in interface Removable
      Returns:
      TRUE if the item is flagged as removed, FALSE otherwise
    • setRemoved

      public void setRemoved​(boolean removed) throws PermissionDeniedException
      Description copied from interface: Removable
      Set the removed flag for this item.
      Specified by:
      setRemoved in interface Removable
      Parameters:
      removed - TRUE if the item should be flagged as removed, FALSE otherwise
      Throws:
      PermissionDeniedException - If the logged in user doesn't have Permission.DELETE permission for setting the flag to TRUE or Permission.WRITE permission for setting the flag to FALSE
    • getRemovedBy

      public User getRemovedBy() throws PermissionDeniedException, ItemNotFoundException
      Description copied from interface: Removable
      Get the user that flagged this item for removal.
      Specified by:
      getRemovedBy in interface Removable
      Returns:
      A User object, or null if this item has not been flagged
      Throws:
      PermissionDeniedException - If the logged in user doesn't have Permission.READ permission for the user
      ItemNotFoundException - If the user that removed this item can't be found
    • getSystemId

      public String getSystemId()
      Description copied from interface: SystemItem
      Get the system id for the item.
      Specified by:
      getSystemId in interface SystemItem
      Returns:
      The id of the item or null if it is not a system item
    • isSystemItem

      public boolean isSystemItem()
      Description copied from interface: SystemItem
      Check if the item is a system item or not. A system item have a non-null value for the system id.
      Specified by:
      isSystemItem in interface SystemItem
      Returns:
      TRUE if this item is a system item, FALSE otherwise
    • isUsed

      public boolean isUsed() throws BaseException
      Check that:
      • no files are in the directory
      • no subdirectories are in the directory
      • no user has this directory as the home directory
      Overrides:
      isUsed in class BasicItem
      Returns:
      TRUE if the directory is used.
      Throws:
      BaseException - If there is an error.
      See Also:
      BasicItem.getUsingItems()
    • getUsingItems

      public Set<ItemProxy> getUsingItems()
      Get all:
      • File:s in this directory
      • Sub-Directory:s in this directory
      • User:s having this directory as their home-directory
      • Experiment:s having this directory as the plugin directory
      Overrides:
      getUsingItems in class BasicItem
      Returns:
      A set containing proxies for the items, or an empty set if no items are using this item
      Since:
      2.2
      See Also:
      BasicItem.addUsingItems(Set, Item, org.hibernate.query.Query)
    • initPermissions

      void initPermissions​(int granted, int denied) throws BaseException
      Description copied from class: SharedItem
      Grant permissions according to the item and project keys.
      Overrides:
      initPermissions in class SharedItem
      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
    • getParent

      Get the parent directory of this directory.
      Returns:
      The parent Directory, or null if this directory is a root directory
      Throws:
      PermissionDeniedException - This exception is thrown if the logged in user doesn't have READ permission to the items
      BaseException - If there is another error
    • setParent

      public void setParent​(Directory parent) throws PermissionDeniedException, InvalidDataException
      Set the parent directory of this directory.
      Parameters:
      parent - The new parent directory. Cant be null.
      Throws:
      PermissionDeniedException - If the logged in user doesn't have Permission.WRITE permission to this directory or Permission.USE permission to the parent directory permission for the parent directory
      InvalidDataException - If parent is null or is a subdirectory to this directory
    • getAutoCompress

      public boolean getAutoCompress()
      If files that are uploaded to this directory should be compressed or not. This setting only affects files when they are uploaded. It doesn't affect files that are moved between directories.
      Returns:
      TRUE to automatically compress files uploaded to this directory
      Since:
      2.5
    • setAutoCompress

      public void setAutoCompress​(boolean autoCompress) throws PermissionDeniedException
      Set if files of should automatically be compressed when they are uploaded to this directory.
      Parameters:
      autoCompress - TRUE to enable auto-compression
      Throws:
      PermissionDeniedException - If the logged in user doesn't have write permission
      Since:
      2.5
    • getAutoShare

      public boolean getAutoShare()
      If new files and subdirectories that are created in this directory automatically should be shared wtih the same permissions as this directory. This setting only affects new files/directories.
      Returns:
      TRUE to automatically share new files and subdreictories
      Since:
      2.8
    • setAutoShare

      public void setAutoShare​(boolean autoShare) throws PermissionDeniedException
      Set if new files and subdirectories of should automatically be shared with the same permissions as this directory. If a project is active and this directory isn't already shared to the project, the permissions will be extended to also share the new item to the project.
      Parameters:
      autoShare - TRUE to enable auto-sharing
      Throws:
      PermissionDeniedException - If the logged in user doesn't have write permission
      Since:
      2.8
    • isRootDirectory

      public boolean isRootDirectory()
      Returns TRUE if this directories parent equals null and therfore is a root directory.
      Returns:
      TRUE if this directory is root directory.
    • isHomeDirectory

      public boolean isHomeDirectory()
      Returns TRUE if this directory is a subdirectory to HOME.
      Returns:
      TRUE is this directory is a home directory.
    • getPath

      public Path getPath()
      Get the complete path to this directory.
      Returns:
      A Path object
    • newSubDirectory

      public Directory newSubDirectory() throws PermissionDeniedException, BaseException
      Create a new subdirectory to this directory.
      Returns:
      The new Directory item
      Throws:
      PermissionDeniedException - This exception is thrown if the logged in user doesn't have CREATE permission for directory items, or WRITE permission for this directory
      BaseException - This exception is thrown if there is another error
    • getSubDirectories

      public ItemQuery<Directory> getSubDirectories()
      Get a query that return subdirectories of this directory.
      Returns:
      An ItemQuery object
    • getFiles

      public ItemQuery<File> getFiles()
      Get a query that return all files in this directory.
      Returns:
      An ItemQuery object