Class RepositoryDaoImpl

  • All Implemented Interfaces:
    RepositoryDao

    public class RepositoryDaoImpl
    extends java.lang.Object
    implements RepositoryDao
    DAO class for encapsulating operations related to resource access inside the repository. Methods return types already mapped from Ice. DAO is also used in the form of a mock in unit tests.
    Since:
    5.0.0
    • Field Summary

      Fields 
      Modifier and Type Field Description
      protected ome.services.util.Executor executor  
      protected java.lang.String fileRepoSecretKey  
      protected ome.security.basic.OmeroInterceptor interceptor  
      protected ome.system.Principal principal  
      protected ome.system.Roles roles  
      protected ome.services.util.Executor statefulExecutor  
    • Constructor Summary

      Constructors 
      Constructor Description
      RepositoryDaoImpl​(ome.system.Principal principal, ome.services.util.Executor executor)
      Previous constructor which should no longer be used.
      RepositoryDaoImpl​(ome.system.Principal principal, ome.system.Roles roles, ome.services.util.Executor executor, ome.services.util.Executor statefulExecutor, ome.security.basic.OmeroInterceptor interceptor, java.lang.String fileRepoSecretKey)
      Primary constructor which takes all final fields.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      boolean canUpdate​(IObject obj, Ice.Current current)
      Delegates to IAdmin#canUpdate
      protected void canWriteParentDirectory​(ome.system.ServiceFactory sf, ome.util.SqlAction sql, java.lang.String repoUuid, CheckedPath parent)
      Throw a SecurityViolation if the current context cannot write to the parent directory.
      void createOrFixUserDir​(java.lang.String repoUuid, java.util.List<CheckedPath> checkedPaths, org.hibernate.Session s, ome.system.ServiceFactory sf, ome.util.SqlAction sql)
      Checks that the given CheckedPath objects exist (via RepositoryDao.findRepoFile(String, CheckedPath, String, Ice.Current)) and are in the "user" group.
      protected java.util.List<ome.model.core.OriginalFile> createOriginalFile​(ome.system.ServiceFactory sf, ome.util.SqlAction sql, java.lang.String repoUuid, java.util.List<CheckedPath> checked, ChecksumAlgorithm checksumAlgorithm, java.lang.String mimetype, org.hibernate.Session session)
      Primary location for creating original files from a CheckedPath instance.
      protected ome.system.Principal currentUser​(Ice.Current __current)  
      java.util.List<java.lang.Integer> deleteRepoDeleteLogs​(java.util.List<ome.util.SqlAction.DeleteLog> templates, Ice.Current current)
      Call SqlAction.deleteRepoDeleteLogs(DeleteLog) with the current context for a number of templates.
      int deleteRepoDeleteLogs​(ome.util.SqlAction.DeleteLog template, Ice.Current current)
      Call SqlAction.deleteRepoDeleteLogs(DeleteLog) with the current context.
      protected java.util.Map<java.lang.String,​java.lang.String> fileContext​(long fileId, Ice.Current current)
      Create a String-String map which can be used as the context for a call to Executor.execute based on the group of the file object.
      java.util.List<java.lang.Long> filterFilesByRepository​(java.lang.String repo, java.util.List<java.lang.Long> ids, Ice.Current current)
      Find the original file IDs among those given that are in the given repository.
      java.util.List<java.util.List<ome.util.SqlAction.DeleteLog>> findRepoDeleteLogs​(java.util.List<ome.util.SqlAction.DeleteLog> templates, Ice.Current current)
      As findRepoDeleteLogs(DeleteLog, Current) but for a collection of templates.
      java.util.List<ome.util.SqlAction.DeleteLog> findRepoDeleteLogs​(ome.util.SqlAction.DeleteLog template, Ice.Current current)
      Call SqlAction.findRepoDeleteLogs(DeleteLog) with the current context.
      OriginalFile findRepoFile​(java.lang.String uuid, CheckedPath checked, java.lang.String mimetype, Ice.Current current)
      Delegate to SqlAction.findRepoFile(String, String, String, String) for looking up the id of the file, and then load it normally via IQuery.
      ome.model.core.OriginalFile findRepoFile​(ome.system.ServiceFactory sf, ome.util.SqlAction sql, java.lang.String uuid, CheckedPath checked, java.lang.String mimetype)
      As RepositoryDao.findRepoFile(String, CheckedPath, String, Current) but can be called from within a transaction.
      ome.model.enums.ChecksumAlgorithm getChecksumAlgorithm​(java.lang.String name, Ice.Current current)
      Retrieve the checksum algorithm of the given name.
      EventContext getEventContext​(Ice.Current curr)
      Look up information for the current session as specified in the ctx field of the current.
      FsFile getFile​(long id, Ice.Current current, java.lang.String repoUuid)
      Get an FsFile object based on its ID.
      OriginalFile getOriginalFile​(long repoId, Ice.Current current)
      Gets the original file instance for a given file ID.
      java.util.List<OriginalFile> getOriginalFiles​(java.lang.String repoUuid, CheckedPath checked, Ice.Current current)
      Return a non-null, possibly empty list of OriginalFile elements which are accessible to the given user at the given path.
      protected java.util.List<ome.model.core.OriginalFile> getOriginalFiles​(ome.system.ServiceFactory sf, ome.util.SqlAction sql, java.lang.String repoUuid, CheckedPath checked)  
      ome.model.core.OriginalFile getOriginalFileWithHasher​(long id, Ice.Current current)
      Retrieve the original file of the given ID.
      ome.api.RawFileStore getRawFileStore​(long fileId, CheckedPath checked, java.lang.String mode, Ice.Current current)
      Create a RawFileBean (i.e.
      java.lang.String getUserInstitution​(long userId, Ice.Current current)
      Get the current user's institution.
      java.lang.String getUserInstitution​(long userId, ome.system.ServiceFactory sf)
      Get the current user's institution.
      protected java.util.Map<java.lang.String,​java.lang.String> groupContext​(java.lang.Long groupId, Ice.Current current)
      Creates a copy of the Current.ctx map and if groupId is not null, sets the "omero.group" key to be a string version of the id.
      protected void internalMkdir​(CheckedPath file)
      This method should only be used by the register public method in order to guarantee that the DB is kept in sync with the file system.
      java.util.List<Fileset> loadFilesets​(java.util.List<java.lang.Long> ids, Ice.Current current)
      Load filesets by id.
      void makeDirs​(PublicRepositoryI repo, java.util.List<CheckedPath> dirs, boolean parents, Ice.Current __current)
      Create a number of directories in a single transaction, using the PublicRepositoryI instance as a callback for implementation specific logic.
      OriginalFile register​(java.lang.String repoUuid, CheckedPath checked, java.lang.String mimetype, Ice.Current current)
      Register an OriginalFile object
      ome.model.core.OriginalFile register​(java.lang.String repoUuid, CheckedPath checked, java.lang.String mimetype, ome.system.ServiceFactory sf, ome.util.SqlAction sql, org.hibernate.Session session)
      Returns original file object is "live" within the Hibernate session.
      Fileset saveFileset​(java.lang.String repoUuid, Fileset _fs, ChecksumAlgorithm checksumAlgorithm, java.util.List<CheckedPath> paths, Ice.Current current)
      Fill the various fields of the Fileset and then save the entire instance into the database.
      Job saveJob​(Job job, Ice.Current current)
      Create a job from an instance provided by either the client or the server.
      void saveObject​(ome.model.IObject object, Ice.Current current)
      Save the given model object.
      RMap treeList​(java.lang.String repoUuid, CheckedPath checked, Ice.Current current)  
      protected ome.services.RawFileBean unwrapRawFileBean​(ome.api.RawFileStore proxy)
      Loads
      void updateJob​(Job job, java.lang.String message, java.lang.String status, Ice.Current current)
      Set both the message and the status of the given job.
      protected SecurityViolation wrapSecurityViolation​(ome.conditions.SecurityViolation sv)  
      • Methods inherited from class java.lang.Object

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

      • principal

        protected final ome.system.Principal principal
      • roles

        protected final ome.system.Roles roles
      • executor

        protected final ome.services.util.Executor executor
      • statefulExecutor

        protected final ome.services.util.Executor statefulExecutor
      • interceptor

        protected final ome.security.basic.OmeroInterceptor interceptor
      • fileRepoSecretKey

        protected final java.lang.String fileRepoSecretKey
    • Constructor Detail

      • RepositoryDaoImpl

        public RepositoryDaoImpl​(ome.system.Principal principal,
                                 ome.system.Roles roles,
                                 ome.services.util.Executor executor,
                                 ome.services.util.Executor statefulExecutor,
                                 ome.security.basic.OmeroInterceptor interceptor,
                                 java.lang.String fileRepoSecretKey)
        Primary constructor which takes all final fields.
      • RepositoryDaoImpl

        public RepositoryDaoImpl​(ome.system.Principal principal,
                                 ome.services.util.Executor executor)
        Previous constructor which should no longer be used. Primarily for simplicity of testing.
    • Method Detail

      • unwrapRawFileBean

        protected ome.services.RawFileBean unwrapRawFileBean​(ome.api.RawFileStore proxy)
        Loads
        Returns:
        See above.
      • getRawFileStore

        public ome.api.RawFileStore getRawFileStore​(long fileId,
                                                    CheckedPath checked,
                                                    java.lang.String mode,
                                                    Ice.Current current)
                                             throws SecurityViolation
        Description copied from interface: RepositoryDao
        Create a RawFileBean (i.e. an implementation of RawFileStore which can be passed to RepoRawFileStoreI for performing internal functions. The primary difference to an instance created via the ServiceFactory is that the RawFileBean.setFileIdWithBuffer(long, FileBuffer) method is called pointing to a non-romio file path, e.g. /OMERO/Files/x.
        Specified by:
        getRawFileStore in interface RepositoryDao
        Parameters:
        fileId - ID of an OriginalFile
        checked - Not null. Normalized path from the repository.
        mode - FileChannel mode, "r", "rw", etc.
        Returns:
        An instance with RawFileBean.setFileIdWithBuffer(long, FileBuffer) called.
        Throws:
        SecurityViolation
      • findRepoFile

        public OriginalFile findRepoFile​(java.lang.String uuid,
                                         CheckedPath checked,
                                         java.lang.String mimetype,
                                         Ice.Current current)
                                  throws ServerError
        Description copied from interface: RepositoryDao
        Delegate to SqlAction.findRepoFile(String, String, String, String) for looking up the id of the file, and then load it normally via IQuery. This will enforce any read security checks.
        Specified by:
        findRepoFile in interface RepositoryDao
        Returns:
        See above.
        Throws:
        ServerError
      • canUpdate

        public boolean canUpdate​(IObject obj,
                                 Ice.Current current)
        Description copied from interface: RepositoryDao
        Delegates to IAdmin#canUpdate
        Specified by:
        canUpdate in interface RepositoryDao
        Returns:
        See above.
      • filterFilesByRepository

        public java.util.List<java.lang.Long> filterFilesByRepository​(java.lang.String repo,
                                                                      java.util.List<java.lang.Long> ids,
                                                                      Ice.Current current)
        Description copied from interface: RepositoryDao
        Find the original file IDs among those given that are in the given repository.
        Specified by:
        filterFilesByRepository in interface RepositoryDao
        Parameters:
        repo - a repository UUID
        ids - IDs of original files
        current - Ice method invocation context
        Returns:
        those IDs among those given whose original files are in the given repository
      • getOriginalFile

        public OriginalFile getOriginalFile​(long repoId,
                                            Ice.Current current)
                                     throws SecurityViolation
        Description copied from interface: RepositoryDao
        Gets the original file instance for a given file ID.
        Specified by:
        getOriginalFile in interface RepositoryDao
        Parameters:
        repoId - a file ID
        current - applicable ICE context
        Returns:
        the original file corresponding to the given file ID
        Throws:
        SecurityViolation - if the query threw a security violation
      • getOriginalFiles

        protected java.util.List<ome.model.core.OriginalFile> getOriginalFiles​(ome.system.ServiceFactory sf,
                                                                               ome.util.SqlAction sql,
                                                                               java.lang.String repoUuid,
                                                                               CheckedPath checked)
      • saveFileset

        public Fileset saveFileset​(java.lang.String repoUuid,
                                   Fileset _fs,
                                   ChecksumAlgorithm checksumAlgorithm,
                                   java.util.List<CheckedPath> paths,
                                   Ice.Current current)
                            throws ServerError
        Description copied from interface: RepositoryDao
        Fill the various fields of the Fileset and then save the entire instance into the database.
        Specified by:
        saveFileset in interface RepositoryDao
        Parameters:
        repoUuid - for the repository in question.
        _fs - a user provided Fileset that must minimally have the FilesetEntry objects present with their clientPath set. The rest of the fields will be filled here.
        checksumAlgorithm - The algorithm to use.
        paths - a List of the same size as the number of entries in fs one per FilesetEntry.
        current - Current context
        Throws:
        ServerError
      • register

        public OriginalFile register​(java.lang.String repoUuid,
                                     CheckedPath checked,
                                     java.lang.String mimetype,
                                     Ice.Current current)
                              throws ServerError
        Description copied from interface: RepositoryDao
        Register an OriginalFile object
        Specified by:
        register in interface RepositoryDao
        Parameters:
        repoUuid - uuid of the repository that the given file argument should be registered with. Cannot be null.
        checked - Normalized path provided by the repository. Not null.
        mimetype - Mimetype for use with the OriginalFile. May be null in which case a default will be chosen.
        current - Not null.
        Returns:
        The OriginalFile with id set (unloaded)
        Throws:
        ServerError
      • register

        public ome.model.core.OriginalFile register​(java.lang.String repoUuid,
                                                    CheckedPath checked,
                                                    java.lang.String mimetype,
                                                    ome.system.ServiceFactory sf,
                                                    ome.util.SqlAction sql,
                                                    org.hibernate.Session session)
                                             throws ServerError
        Returns original file object is "live" within the Hibernate session.
        Specified by:
        register in interface RepositoryDao
        Parameters:
        repoUuid -
        checked -
        mimetype -
        sf -
        sql -
        session -
        Returns:
        See above.
        Throws:
        ServerError
      • saveJob

        public Job saveJob​(Job job,
                           Ice.Current current)
                    throws ServerError
        Description copied from interface: RepositoryDao
        Create a job from an instance provided by either the client or the server. Only those fields which are modifiable by the user will be copied.
        Specified by:
        saveJob in interface RepositoryDao
        Parameters:
        job - Not null.
        current - Not null.
        Returns:
        See above.
        Throws:
        ServerError
      • updateJob

        public void updateJob​(Job job,
                              java.lang.String message,
                              java.lang.String status,
                              Ice.Current current)
                       throws ServerError
        Description copied from interface: RepositoryDao
        Set both the message and the status of the given job.
        Specified by:
        updateJob in interface RepositoryDao
        Parameters:
        job - Not null.
        message - If null, no modification will be made for the message
        status - If null, no modification will be made for the status.
        current - Not null.
        Throws:
        ServerError
      • getFile

        public FsFile getFile​(long id,
                              Ice.Current current,
                              java.lang.String repoUuid)
        Description copied from interface: RepositoryDao
        Get an FsFile object based on its ID. Returns null if the file does not exist or does not belong to this repository.
        Specified by:
        getFile in interface RepositoryDao
        Parameters:
        id - database ID of the sought original file
        current - current applicable ICE context
        repoUuid - the UUID of the repository containing the original file
        Returns:
        the requested FsFile object
      • findRepoDeleteLogs

        public java.util.List<ome.util.SqlAction.DeleteLog> findRepoDeleteLogs​(ome.util.SqlAction.DeleteLog template,
                                                                               Ice.Current current)
        Description copied from interface: RepositoryDao
        Call SqlAction.findRepoDeleteLogs(DeleteLog) with the current context.
        Specified by:
        findRepoDeleteLogs in interface RepositoryDao
        Parameters:
        template - not null.
        current - not null.
        Returns:
        all the rows found which match the non-null fields on templates
      • findRepoDeleteLogs

        public java.util.List<java.util.List<ome.util.SqlAction.DeleteLog>> findRepoDeleteLogs​(java.util.List<ome.util.SqlAction.DeleteLog> templates,
                                                                                               Ice.Current current)
        Description copied from interface: RepositoryDao
        As findRepoDeleteLogs(DeleteLog, Current) but for a collection of templates.
        Specified by:
        findRepoDeleteLogs in interface RepositoryDao
        Parameters:
        templates - not null.
        current - not null.
        Returns:
        all the rows found which match the non-null fields on templates
      • deleteRepoDeleteLogs

        public int deleteRepoDeleteLogs​(ome.util.SqlAction.DeleteLog template,
                                        Ice.Current current)
        Description copied from interface: RepositoryDao
        Call SqlAction.deleteRepoDeleteLogs(DeleteLog) with the current context.
        Specified by:
        deleteRepoDeleteLogs in interface RepositoryDao
        Parameters:
        template - not null.
        current - not null.
        Returns:
        the number of rows deleted
      • deleteRepoDeleteLogs

        public java.util.List<java.lang.Integer> deleteRepoDeleteLogs​(java.util.List<ome.util.SqlAction.DeleteLog> templates,
                                                                      Ice.Current current)
        Description copied from interface: RepositoryDao
        Call SqlAction.deleteRepoDeleteLogs(DeleteLog) with the current context for a number of templates.
        Specified by:
        deleteRepoDeleteLogs in interface RepositoryDao
        Parameters:
        templates - not null.
        current - not null.
        Returns:
        A list containing the number of rows deleted
      • getEventContext

        public EventContext getEventContext​(Ice.Current curr)
        Description copied from interface: RepositoryDao
        Look up information for the current session as specified in the ctx field of the current.
        Specified by:
        getEventContext in interface RepositoryDao
      • getUserInstitution

        public java.lang.String getUserInstitution​(long userId,
                                                   Ice.Current current)
        Description copied from interface: RepositoryDao
        Get the current user's institution.
        Specified by:
        getUserInstitution in interface RepositoryDao
        Parameters:
        userId - the ID of the user whose institution is to be fetched
        current - the current ICE method invocation context
        Returns:
        the institution, may be null
      • getUserInstitution

        public java.lang.String getUserInstitution​(long userId,
                                                   ome.system.ServiceFactory sf)
        Description copied from interface: RepositoryDao
        Get the current user's institution.
        Specified by:
        getUserInstitution in interface RepositoryDao
        Parameters:
        userId - the ID of the user whose institution is to be fetched
        sf - the service factory to use for the query
        Returns:
        the institution, may be null
      • createOriginalFile

        protected java.util.List<ome.model.core.OriginalFile> createOriginalFile​(ome.system.ServiceFactory sf,
                                                                                 ome.util.SqlAction sql,
                                                                                 java.lang.String repoUuid,
                                                                                 java.util.List<CheckedPath> checked,
                                                                                 ChecksumAlgorithm checksumAlgorithm,
                                                                                 java.lang.String mimetype,
                                                                                 org.hibernate.Session session)
        Primary location for creating original files from a CheckedPath instance. This will use access to the actual File object in order to calculate size, timestamps, etc.
        Parameters:
        sf -
        sql -
        repoUuid -
        checked -
        checksumAlgorithm -
        mimetype -
        session -
        Returns:
        See above.
      • internalMkdir

        protected void internalMkdir​(CheckedPath file)
        This method should only be used by the register public method in order to guarantee that the DB is kept in sync with the file system.
        Parameters:
        file - the path to ensure exists as a directory
        Throws:
        ome.conditions.ResourceError
      • canWriteParentDirectory

        protected void canWriteParentDirectory​(ome.system.ServiceFactory sf,
                                               ome.util.SqlAction sql,
                                               java.lang.String repoUuid,
                                               CheckedPath parent)
        Throw a SecurityViolation if the current context cannot write to the parent directory.
        Parameters:
        sf -
        sql -
        repoUuid -
        parent -
      • currentUser

        protected ome.system.Principal currentUser​(Ice.Current __current)
      • fileContext

        protected java.util.Map<java.lang.String,​java.lang.String> fileContext​(long fileId,
                                                                                     Ice.Current current)
                                                                              throws SecurityViolation
        Create a String-String map which can be used as the context for a call to Executor.execute based on the group of the file object.
        Returns:
        See above.
        Throws:
        SecurityViolation - if the file can't be read.
      • groupContext

        protected java.util.Map<java.lang.String,​java.lang.String> groupContext​(java.lang.Long groupId,
                                                                                      Ice.Current current)
        Creates a copy of the Current.ctx map and if groupId is not null, sets the "omero.group" key to be a string version of the id.
        Parameters:
        groupId -
        current -
        Returns:
        See above.
      • getChecksumAlgorithm

        public ome.model.enums.ChecksumAlgorithm getChecksumAlgorithm​(java.lang.String name,
                                                                      Ice.Current current)
        Description copied from interface: RepositoryDao
        Retrieve the checksum algorithm of the given name.
        Specified by:
        getChecksumAlgorithm in interface RepositoryDao
        Parameters:
        name - a checksum algorithm name, must exist
        current - Ice method invocation context
        Returns:
        the corresponding checksum algorithm model object
      • getOriginalFileWithHasher

        public ome.model.core.OriginalFile getOriginalFileWithHasher​(long id,
                                                                     Ice.Current current)
        Description copied from interface: RepositoryDao
        Retrieve the original file of the given ID.
        Specified by:
        getOriginalFileWithHasher in interface RepositoryDao
        Parameters:
        id - the ID of an original file, must exist
        current - Ice method invocation context
        Returns:
        the corresponding original file model object
      • saveObject

        public void saveObject​(ome.model.IObject object,
                               Ice.Current current)
        Description copied from interface: RepositoryDao
        Save the given model object.
        Specified by:
        saveObject in interface RepositoryDao
        Parameters:
        object - a model object
        current - Ice method invocation context