Class DataStore


  • public final class DataStore
    extends java.lang.Object
    A virtual data store, keeping track of all the virtual files existing and offering a set of high-level operations on virtual files.

    A newly created data store doesn't contain a single existing directory.

    • Field Summary

      Fields 
      Modifier and Type Field Description
      private java.lang.String databaseName
      The name of the database this store serves, expected to be the absolute path of the service root (i.e.
      private boolean deleteMe
      Tells if this store is scheduled for deletion.
      private static java.lang.String[] EMPTY_STR_ARR
      Constant for the empty String array.
      private java.util.Map<java.lang.String,​DataStoreEntry> files
      The files exsiting in the store.
      private java.lang.Object LOCK
      Lock object for the file map.
      private static char SEP
      The path separator used.
      private java.lang.Object TMP_COUNTER_LOCK
      Lock object for the temporary file counter.
      private long tmpFileCounter
      Counter used to generate unique temporary file names.
    • Constructor Summary

      Constructors 
      Constructor Description
      DataStore​(java.lang.String databaseName)
      Creates a new data store.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      private boolean _deleteAll​(java.lang.String prefixPath)
      Deletes every child of the root path specified.
      boolean createAllParents​(java.lang.String path)
      Creates all the parents of the specified path.
      DataStoreEntry createEntry​(java.lang.String iPath, boolean isDir)
      Creates a new entry in the data store.
      boolean deleteAll​(java.lang.String iPath)
      Deletes the specified entry and all its children.
      boolean deleteEntry​(java.lang.String iPath)
      Deletes the specified entry.
      java.lang.String getDatabaseName()
      Returns the database name, which is expected to equal the path of the service root.
      DataStoreEntry getEntry​(java.lang.String iPath)
      Returns the entry with the specified path.
      private java.lang.String[] getParentList​(java.lang.String path)
      Returns the list of parents for the specified path.
      long getTempFileCounter()
      Returns an identifier for a temporary file.
      java.lang.String[] listChildren​(java.lang.String iPath)
      Lists the childen of the specified path.
      boolean move​(StorageFile currentFile, StorageFile newFile)
      Moves / renames a file.
      void purge()
      Purges the database and releases all files associated with it.
      boolean scheduledForDeletion()
      Tells if this data store is scheduled for deletion.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • SEP

        private static final char SEP
        The path separator used.
      • EMPTY_STR_ARR

        private static final java.lang.String[] EMPTY_STR_ARR
        Constant for the empty String array.
      • LOCK

        private final java.lang.Object LOCK
        Lock object for the file map.
      • TMP_COUNTER_LOCK

        private final java.lang.Object TMP_COUNTER_LOCK
        Lock object for the temporary file counter.
      • files

        private final java.util.Map<java.lang.String,​DataStoreEntry> files
        The files exsiting in the store.

        The initial size is set to the number of initial files of a Derby database, pluss a few more.

      • databaseName

        private final java.lang.String databaseName
        The name of the database this store serves, expected to be the absolute path of the service root (i.e. /tmp/myDB if the database myDB is created in /tmp).
      • tmpFileCounter

        private long tmpFileCounter
        Counter used to generate unique temporary file names.
      • deleteMe

        private boolean deleteMe
        Tells if this store is scheduled for deletion.
    • Constructor Detail

      • DataStore

        public DataStore​(java.lang.String databaseName)
        Creates a new data store.
        Parameters:
        databaseName - the name of the assoicated database, expected to be the absolute path of the service root.
    • Method Detail

      • getDatabaseName

        public java.lang.String getDatabaseName()
        Returns the database name, which is expected to equal the path of the service root.
        Returns:
        The database name.
      • scheduledForDeletion

        public boolean scheduledForDeletion()
        Tells if this data store is scheduled for deletion.
        Returns:
        true if the store is awaiting deletion, false otherwise.
      • createEntry

        public DataStoreEntry createEntry​(java.lang.String iPath,
                                          boolean isDir)
        Creates a new entry in the data store.

        This method returns null if the path already exists, if one of the parent directories doesn't exist, or if one of the parents is a file instead of a directory.

        Parameters:
        iPath - the path of the entry
        isDir - tells if the new entry shall be directory or a file
        Returns:
        A DataStoreEntry-instance if the entry was successfully created, null otherwise
      • createAllParents

        public boolean createAllParents​(java.lang.String path)
        Creates all the parents of the specified path.
        Returns:
        true if all parents either already existed as directories or were created, false otherwise
      • deleteEntry

        public boolean deleteEntry​(java.lang.String iPath)
        Deletes the specified entry.

        If the specified entry is a directory, it is only deleted if it is empty. Read-only entries are deleted.

        Parameters:
        iPath - path of the entry to delete
        Returns:
        true if the entry was deleted, false otherwise.
      • getEntry

        public DataStoreEntry getEntry​(java.lang.String iPath)
        Returns the entry with the specified path.
        Parameters:
        iPath - path of the entry to fetch
        Returns:
        null if the entry doesn't exist, the DataStoreEntry-object otherwise.
      • deleteAll

        public boolean deleteAll​(java.lang.String iPath)
        Deletes the specified entry and all its children.
        Parameters:
        iPath - the root entry
        Returns:
        true if the entry and all its children were deleted, false if the root doesn't exist.
      • listChildren

        public java.lang.String[] listChildren​(java.lang.String iPath)
        Lists the childen of the specified path.
        Parameters:
        iPath - the directory to list the children of
        Returns:
        An array with the relative paths of the children.
      • move

        public boolean move​(StorageFile currentFile,
                            StorageFile newFile)
        Moves / renames a file.
        Parameters:
        currentFile - the current file
        newFile - the new file
        Returns:
        true if the file was moved, false if the new file already existed or the existing file doesn't exist.
      • purge

        public void purge()
        Purges the database and releases all files associated with it.
      • _deleteAll

        private boolean _deleteAll​(java.lang.String prefixPath)
        Deletes every child of the root path specified.

        Note that the root itself must be removed outside of this method.

        Parameters:
        prefixPath - the normalized root path to start deleting from
        Returns:
        true if all children of the root path were deleted, false otherwise.
      • getTempFileCounter

        public long getTempFileCounter()
        Returns an identifier for a temporary file.
        Returns:
        An integer uniquely identifying a temporary file.
      • getParentList

        private java.lang.String[] getParentList​(java.lang.String path)
        Returns the list of parents for the specified path.

        The lowest level parent is listed first in the list, so all absolute paths will have the root listed as the last element.

        Parameters:
        path - the normalized path to create a parent list for
        Returns:
        A list of parents.