Class FsBlobContainer

  • All Implemented Interfaces:
    BlobContainer

    public class FsBlobContainer
    extends AbstractBlobContainer
    A file system based implementation of BlobContainer. All blobs in the container are stored on a file system, the location of which is specified by the BlobPath. Note that the methods in this implementation of BlobContainer may additionally throw a SecurityException if the configured SecurityManager does not permit read and/or write access to the underlying files.
    • Field Summary

      Fields 
      Modifier and Type Field Description
      protected FsBlobStore blobStore  
      protected java.nio.file.Path path  
    • Method Summary

      Modifier and Type Method Description
      boolean blobExists​(java.lang.String blobName)
      Tests whether a blob with the given blob name exists in the container.
      java.util.Map<java.lang.String,​BlobContainer> children()
      Lists all child containers under this container.
      void deleteBlob​(java.lang.String blobName)
      Deletes the blob with the given name, if the blob exists.
      static boolean isTempBlobName​(java.lang.String blobName)
      Returns true if the blob is a leftover temporary blob.
      java.util.Map<java.lang.String,​BlobMetaData> listBlobs()
      Lists all blobs in the container.
      java.util.Map<java.lang.String,​BlobMetaData> listBlobsByPrefix​(java.lang.String blobNamePrefix)
      Lists all blobs in the container that match the specified prefix.
      void moveBlobAtomic​(java.lang.String sourceBlobName, java.lang.String targetBlobName, boolean failIfAlreadyExists)  
      java.io.InputStream readBlob​(java.lang.String name)
      Creates a new InputStream for the given blob name.
      static java.lang.String tempBlobName​(java.lang.String blobName)  
      void writeBlob​(java.lang.String blobName, java.io.InputStream inputStream, long blobSize, boolean failIfAlreadyExists)
      Reads blob content from the input stream and writes it to the container in a new blob with the given name.
      void writeBlobAtomic​(java.lang.String blobName, java.io.InputStream inputStream, long blobSize, boolean failIfAlreadyExists)
      Reads blob content from the input stream and writes it to the container in a new blob with the given name, using an atomic write operation if the implementation supports it.
      • Methods inherited from class java.lang.Object

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

      • path

        protected final java.nio.file.Path path
    • Constructor Detail

      • FsBlobContainer

        public FsBlobContainer​(FsBlobStore blobStore,
                               BlobPath blobPath,
                               java.nio.file.Path path)
    • Method Detail

      • listBlobs

        public java.util.Map<java.lang.String,​BlobMetaData> listBlobs()
                                                                     throws java.io.IOException
        Description copied from interface: BlobContainer
        Lists all blobs in the container.
        Returns:
        A map of all the blobs in the container. The keys in the map are the names of the blobs and the values are BlobMetaData, containing basic information about each blob.
        Throws:
        java.io.IOException - if there were any failures in reading from the blob container.
      • children

        public java.util.Map<java.lang.String,​BlobContainer> children()
                                                                     throws java.io.IOException
        Description copied from interface: BlobContainer
        Lists all child containers under this container. A child container is defined as a container whose BlobContainer.path() method returns a path that has this containers BlobContainer.path() return as its prefix and has one more path element than the current container's path.
        Returns:
        Map of name of the child container to child container
        Throws:
        java.io.IOException - on failure to list child containers
      • listBlobsByPrefix

        public java.util.Map<java.lang.String,​BlobMetaData> listBlobsByPrefix​(java.lang.String blobNamePrefix)
                                                                             throws java.io.IOException
        Description copied from interface: BlobContainer
        Lists all blobs in the container that match the specified prefix.
        Parameters:
        blobNamePrefix - The prefix to match against blob names in the container.
        Returns:
        A map of the matching blobs in the container. The keys in the map are the names of the blobs and the values are BlobMetaData, containing basic information about each blob.
        Throws:
        java.io.IOException - if there were any failures in reading from the blob container.
      • deleteBlob

        public void deleteBlob​(java.lang.String blobName)
                        throws java.io.IOException
        Description copied from interface: BlobContainer
        Deletes the blob with the given name, if the blob exists. If the blob does not exist, this method may throw a NoSuchFileException if the underlying implementation supports an existence check before delete.
        Parameters:
        blobName - The name of the blob to delete.
        Throws:
        java.nio.file.NoSuchFileException - if the blob does not exist
        java.io.IOException - if the blob exists but could not be deleted.
      • blobExists

        public boolean blobExists​(java.lang.String blobName)
        Description copied from interface: BlobContainer
        Tests whether a blob with the given blob name exists in the container.
        Parameters:
        blobName - The name of the blob whose existence is to be determined.
        Returns:
        true if a blob exists in the BlobContainer with the given name, and false otherwise.
      • readBlob

        public java.io.InputStream readBlob​(java.lang.String name)
                                     throws java.io.IOException
        Description copied from interface: BlobContainer
        Creates a new InputStream for the given blob name.
        Parameters:
        name - The name of the blob to get an InputStream for.
        Returns:
        The InputStream to read the blob.
        Throws:
        java.nio.file.NoSuchFileException - if the blob does not exist
        java.io.IOException - if the blob can not be read.
      • writeBlob

        public void writeBlob​(java.lang.String blobName,
                              java.io.InputStream inputStream,
                              long blobSize,
                              boolean failIfAlreadyExists)
                       throws java.io.IOException
        Description copied from interface: BlobContainer
        Reads blob content from the input stream and writes it to the container in a new blob with the given name. This method assumes the container does not already contain a blob of the same blobName. If a blob by the same name already exists, the operation will fail and an IOException will be thrown.
        Parameters:
        blobName - The name of the blob to write the contents of the input stream to.
        inputStream - The input stream from which to retrieve the bytes to write to the blob.
        blobSize - The size of the blob to be written, in bytes. It is implementation dependent whether this value is used in writing the blob to the repository.
        failIfAlreadyExists - whether to throw a FileAlreadyExistsException if the given blob already exists
        Throws:
        java.nio.file.FileAlreadyExistsException - if failIfAlreadyExists is true and a blob by the same name already exists
        java.io.IOException - if the input stream could not be read, or the target blob could not be written to.
      • writeBlobAtomic

        public void writeBlobAtomic​(java.lang.String blobName,
                                    java.io.InputStream inputStream,
                                    long blobSize,
                                    boolean failIfAlreadyExists)
                             throws java.io.IOException
        Description copied from interface: BlobContainer
        Reads blob content from the input stream and writes it to the container in a new blob with the given name, using an atomic write operation if the implementation supports it. This method assumes the container does not already contain a blob of the same blobName. If a blob by the same name already exists, the operation will fail and an IOException will be thrown.
        Parameters:
        blobName - The name of the blob to write the contents of the input stream to.
        inputStream - The input stream from which to retrieve the bytes to write to the blob.
        blobSize - The size of the blob to be written, in bytes. It is implementation dependent whether this value is used in writing the blob to the repository.
        failIfAlreadyExists - whether to throw a FileAlreadyExistsException if the given blob already exists
        Throws:
        java.nio.file.FileAlreadyExistsException - if failIfAlreadyExists is true and a blob by the same name already exists
        java.io.IOException - if the input stream could not be read, or the target blob could not be written to.
      • moveBlobAtomic

        public void moveBlobAtomic​(java.lang.String sourceBlobName,
                                   java.lang.String targetBlobName,
                                   boolean failIfAlreadyExists)
                            throws java.io.IOException
        Throws:
        java.io.IOException
      • tempBlobName

        public static java.lang.String tempBlobName​(java.lang.String blobName)
      • isTempBlobName

        public static boolean isTempBlobName​(java.lang.String blobName)
        Returns true if the blob is a leftover temporary blob. The temporary blobs might be left after failed atomic write operation.