Class OmeroInterceptor

  • All Implemented Interfaces:
    java.io.Serializable, org.hibernate.Interceptor

    public class OmeroInterceptor
    extends SqlQueryInterceptor
    implements Interceptor for controlling various aspects of the Hibernate runtime. Where no special requirements exist, methods delegate to EmptyInterceptor Current responsibilities include the proper (re-)setting of Details
    Since:
    3.0-M3
    See Also:
    EmptyInterceptor, SqlQueryInterceptor, Interceptor, Serialized Form
    • Field Summary

      • Fields inherited from class org.hibernate.EmptyInterceptor

        INSTANCE
    • Method Summary

      All Methods Instance Methods Concrete Methods Deprecated Methods 
      Modifier and Type Method Description
      void afterTransactionBegin​(org.hibernate.Transaction tx)  
      void afterTransactionCompletion​(org.hibernate.Transaction tx)  
      void beforeTransactionCompletion​(org.hibernate.Transaction tx)  
      ome.model.internal.Details checkManagedDetails​(ome.model.IObject iobj, ome.model.internal.Details previousDetails)  
      protected ome.model.internal.Details checkManagedDetails​(ome.model.IObject iobj, ome.model.internal.Details previousDetails, ome.model.internal.Details newDetails)
      Like checkManagedDetails(IObject, Details, Details) but allows passing in a specific Details instance.
      ome.model.internal.Details evaluateLinkages​(ome.model.IObject changedObject)
      Checks the details of the objects which the given object links to in order to guarantee that linkages are valid.
      int[] findDirty​(java.lang.Object entity, java.io.Serializable id, java.lang.Object[] currentState, java.lang.Object[] previousState, java.lang.String[] propertyNames, org.hibernate.type.Type[] types)
      default logic
      java.lang.Object getEntity​(java.lang.String entityName, java.io.Serializable id)  
      java.lang.String getEntityName​(java.lang.Object object)  
      java.lang.Object instantiate​(java.lang.String entityName, org.hibernate.EntityMode entityMode, java.io.Serializable id)
      default logic, but we may want to use them eventually for dependency-injection.
      java.lang.Boolean isTransient​(java.lang.Object entity)  
      protected void log​(java.lang.String msg)  
      protected boolean managedEvent​(boolean privileged, ome.model.IObject obj, ome.model.internal.Details previousDetails, ome.model.internal.Details currentDetails, ome.model.internal.Details newDetails)  
      protected boolean managedExternalInfo​(boolean privileged, ome.model.IObject obj, ome.model.internal.Details previousDetails, ome.model.internal.Details currentDetails, ome.model.internal.Details newDetails)
      Deprecated.
      protected boolean managedGroup​(boolean privileged, ome.model.IObject obj, ome.model.internal.Details previousDetails, ome.model.internal.Details currentDetails, ome.model.internal.Details newDetails, BasicEventContext bec)  
      protected boolean managedOwner​(boolean privileged, ome.model.IObject obj, ome.model.internal.Details previousDetails, ome.model.internal.Details currentDetails, ome.model.internal.Details newDetails, BasicEventContext bec)  
      protected ome.model.internal.Permissions.Right neededRight​(java.lang.Class<?> changedClass, java.lang.Class<?> linkedClass)
      The default right need for a linkage is Permissions.Right.WRITE.
      ome.model.internal.Details newTransientDetails​(ome.model.IObject obj)  
      protected ome.model.internal.Details newTransientDetails​(ome.model.IObject obj, ome.model.internal.Details newDetails)
      Like newTransientDetails(IObject) but allows passing in a newDetails object with possibly preset values.
      void onCollectionRecreate​(java.lang.Object collection, java.io.Serializable key)  
      void onCollectionRemove​(java.lang.Object collection, java.io.Serializable key)  
      void onCollectionUpdate​(java.lang.Object collection, java.io.Serializable key)  
      void onDelete​(java.lang.Object entity, java.io.Serializable id, java.lang.Object[] state, java.lang.String[] propertyNames, org.hibernate.type.Type[] types)
      default logic
      boolean onFlushDirty​(java.lang.Object entity, java.io.Serializable id, java.lang.Object[] currentState, java.lang.Object[] previousState, java.lang.String[] propertyNames, org.hibernate.type.Type[] types)
      calls back to BasicSecuritySystem.checkManagedDetails(IObject, Details) for properly setting Details.
      boolean onLoad​(java.lang.Object entity, java.io.Serializable id, java.lang.Object[] state, java.lang.String[] propertyNames, org.hibernate.type.Type[] types)
      default logic.
      java.lang.String onPrepareStatement​(java.lang.String sql)  
      boolean onSave​(java.lang.Object entity, java.io.Serializable id, java.lang.Object[] state, java.lang.String[] propertyNames, org.hibernate.type.Type[] types)
      calls back to BasicSecuritySystem.newTransientDetails(IObject) for properly setting Details
      void postFlush​(java.util.Iterator entities)  
      void preFlush​(java.util.Iterator entities)  
      protected boolean resetDetails​(ome.model.IObject entity, java.lang.Object[] currentState, java.lang.Object[] previousState, int idx, ome.model.internal.Details newDetails)
      asks BasicSecuritySystem to create a new managed Details based on the previous state of this entity.
      • Methods inherited from class java.lang.Object

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

      • instantiate

        public java.lang.Object instantiate​(java.lang.String entityName,
                                            org.hibernate.EntityMode entityMode,
                                            java.io.Serializable id)
                                     throws org.hibernate.CallbackException
        default logic, but we may want to use them eventually for dependency-injection.
        Specified by:
        instantiate in interface org.hibernate.Interceptor
        Overrides:
        instantiate in class org.hibernate.EmptyInterceptor
        Throws:
        org.hibernate.CallbackException
      • onLoad

        public boolean onLoad​(java.lang.Object entity,
                              java.io.Serializable id,
                              java.lang.Object[] state,
                              java.lang.String[] propertyNames,
                              org.hibernate.type.Type[] types)
                       throws org.hibernate.CallbackException
        default logic.
        Specified by:
        onLoad in interface org.hibernate.Interceptor
        Overrides:
        onLoad in class org.hibernate.EmptyInterceptor
        Throws:
        org.hibernate.CallbackException
      • findDirty

        public int[] findDirty​(java.lang.Object entity,
                               java.io.Serializable id,
                               java.lang.Object[] currentState,
                               java.lang.Object[] previousState,
                               java.lang.String[] propertyNames,
                               org.hibernate.type.Type[] types)
        default logic
        Specified by:
        findDirty in interface org.hibernate.Interceptor
        Overrides:
        findDirty in class org.hibernate.EmptyInterceptor
      • onSave

        public boolean onSave​(java.lang.Object entity,
                              java.io.Serializable id,
                              java.lang.Object[] state,
                              java.lang.String[] propertyNames,
                              org.hibernate.type.Type[] types)
        calls back to BasicSecuritySystem.newTransientDetails(IObject) for properly setting Details
        Specified by:
        onSave in interface org.hibernate.Interceptor
        Overrides:
        onSave in class org.hibernate.EmptyInterceptor
      • onFlushDirty

        public boolean onFlushDirty​(java.lang.Object entity,
                                    java.io.Serializable id,
                                    java.lang.Object[] currentState,
                                    java.lang.Object[] previousState,
                                    java.lang.String[] propertyNames,
                                    org.hibernate.type.Type[] types)
        calls back to BasicSecuritySystem.checkManagedDetails(IObject, Details) for properly setting Details.
        Specified by:
        onFlushDirty in interface org.hibernate.Interceptor
        Overrides:
        onFlushDirty in class org.hibernate.EmptyInterceptor
      • onDelete

        public void onDelete​(java.lang.Object entity,
                             java.io.Serializable id,
                             java.lang.Object[] state,
                             java.lang.String[] propertyNames,
                             org.hibernate.type.Type[] types)
                      throws org.hibernate.CallbackException
        default logic
        Specified by:
        onDelete in interface org.hibernate.Interceptor
        Overrides:
        onDelete in class org.hibernate.EmptyInterceptor
        Throws:
        org.hibernate.CallbackException
      • onCollectionRecreate

        public void onCollectionRecreate​(java.lang.Object collection,
                                         java.io.Serializable key)
                                  throws org.hibernate.CallbackException
        Specified by:
        onCollectionRecreate in interface org.hibernate.Interceptor
        Overrides:
        onCollectionRecreate in class org.hibernate.EmptyInterceptor
        Throws:
        org.hibernate.CallbackException
      • onCollectionRemove

        public void onCollectionRemove​(java.lang.Object collection,
                                       java.io.Serializable key)
                                throws org.hibernate.CallbackException
        Specified by:
        onCollectionRemove in interface org.hibernate.Interceptor
        Overrides:
        onCollectionRemove in class org.hibernate.EmptyInterceptor
        Throws:
        org.hibernate.CallbackException
      • onCollectionUpdate

        public void onCollectionUpdate​(java.lang.Object collection,
                                       java.io.Serializable key)
                                throws org.hibernate.CallbackException
        Specified by:
        onCollectionUpdate in interface org.hibernate.Interceptor
        Overrides:
        onCollectionUpdate in class org.hibernate.EmptyInterceptor
        Throws:
        org.hibernate.CallbackException
      • preFlush

        public void preFlush​(java.util.Iterator entities)
                      throws org.hibernate.CallbackException
        Specified by:
        preFlush in interface org.hibernate.Interceptor
        Overrides:
        preFlush in class org.hibernate.EmptyInterceptor
        Throws:
        org.hibernate.CallbackException
      • postFlush

        public void postFlush​(java.util.Iterator entities)
                       throws org.hibernate.CallbackException
        Specified by:
        postFlush in interface org.hibernate.Interceptor
        Overrides:
        postFlush in class org.hibernate.EmptyInterceptor
        Throws:
        org.hibernate.CallbackException
      • afterTransactionBegin

        public void afterTransactionBegin​(org.hibernate.Transaction tx)
        Specified by:
        afterTransactionBegin in interface org.hibernate.Interceptor
        Overrides:
        afterTransactionBegin in class org.hibernate.EmptyInterceptor
      • afterTransactionCompletion

        public void afterTransactionCompletion​(org.hibernate.Transaction tx)
        Specified by:
        afterTransactionCompletion in interface org.hibernate.Interceptor
        Overrides:
        afterTransactionCompletion in class org.hibernate.EmptyInterceptor
      • beforeTransactionCompletion

        public void beforeTransactionCompletion​(org.hibernate.Transaction tx)
        Specified by:
        beforeTransactionCompletion in interface org.hibernate.Interceptor
        Overrides:
        beforeTransactionCompletion in class org.hibernate.EmptyInterceptor
      • getEntity

        public java.lang.Object getEntity​(java.lang.String entityName,
                                          java.io.Serializable id)
                                   throws org.hibernate.CallbackException
        Specified by:
        getEntity in interface org.hibernate.Interceptor
        Overrides:
        getEntity in class org.hibernate.EmptyInterceptor
        Throws:
        org.hibernate.CallbackException
      • getEntityName

        public java.lang.String getEntityName​(java.lang.Object object)
                                       throws org.hibernate.CallbackException
        Specified by:
        getEntityName in interface org.hibernate.Interceptor
        Overrides:
        getEntityName in class org.hibernate.EmptyInterceptor
        Throws:
        org.hibernate.CallbackException
      • isTransient

        public java.lang.Boolean isTransient​(java.lang.Object entity)
        Specified by:
        isTransient in interface org.hibernate.Interceptor
        Overrides:
        isTransient in class org.hibernate.EmptyInterceptor
      • onPrepareStatement

        public java.lang.String onPrepareStatement​(java.lang.String sql)
        Specified by:
        onPrepareStatement in interface org.hibernate.Interceptor
        Overrides:
        onPrepareStatement in class SqlQueryInterceptor
      • resetDetails

        protected boolean resetDetails​(ome.model.IObject entity,
                                       java.lang.Object[] currentState,
                                       java.lang.Object[] previousState,
                                       int idx,
                                       ome.model.internal.Details newDetails)
        asks BasicSecuritySystem to create a new managed Details based on the previous state of this entity. If the previous state is null (see ticket:3929) then throw an exception.
        Parameters:
        entity - IObject to be updated
        currentState - the possibly changed field data for this entity
        previousState - the field data as seen in the db
        idx - the index of Details in the state arrays.
      • log

        protected void log​(java.lang.String msg)
      • evaluateLinkages

        public ome.model.internal.Details evaluateLinkages​(ome.model.IObject changedObject)
        Checks the details of the objects which the given object links to in order to guarantee that linkages are valid. In the case of a non-specific UID or GID, then the Details object returned by this method can be used as the basis for unknown user/group. This method is called during save and update since this is the only time that new entity references can be created.
        Parameters:
        changedObject - new or updated entity which may reference other entities which then require locking. Nulls are tolerated but do nothing.
      • neededRight

        protected ome.model.internal.Permissions.Right neededRight​(java.lang.Class<?> changedClass,
                                                                   java.lang.Class<?> linkedClass)
        The default right need for a linkage is Permissions.Right.WRITE. If however, this is only an annotation or only a viewing, then less permission is needed.
        Parameters:
        changedClass - the changed class
        linkedClass - the linked class
        Returns:
        the right that is needed
      • newTransientDetails

        protected ome.model.internal.Details newTransientDetails​(ome.model.IObject obj,
                                                                 ome.model.internal.Details newDetails)
        Like newTransientDetails(IObject) but allows passing in a newDetails object with possibly preset values.
        See Also:
        evaluateLinkages(IObject)
      • managedExternalInfo

        @Deprecated
        protected boolean managedExternalInfo​(boolean privileged,
                                              ome.model.IObject obj,
                                              ome.model.internal.Details previousDetails,
                                              ome.model.internal.Details currentDetails,
                                              ome.model.internal.Details newDetails)
        Deprecated.
        responsible for guaranteeing that external info is not modified by any users, including root. This does not apply to the "client concern" fields which can be modified after the fact.
        Parameters:
        privileged - if the user is privileged
        obj - the model object
        previousDetails - details representing the known DB state
        currentDetails - details representing the user request (UNTRUSTED)
        newDetails - details from the current context. Holder for the merged Permissions
        Returns:
        true if the Permissions of newDetails are changed.
      • managedOwner

        protected boolean managedOwner​(boolean privileged,
                                       ome.model.IObject obj,
                                       ome.model.internal.Details previousDetails,
                                       ome.model.internal.Details currentDetails,
                                       ome.model.internal.Details newDetails,
                                       BasicEventContext bec)
      • managedGroup

        protected boolean managedGroup​(boolean privileged,
                                       ome.model.IObject obj,
                                       ome.model.internal.Details previousDetails,
                                       ome.model.internal.Details currentDetails,
                                       ome.model.internal.Details newDetails,
                                       BasicEventContext bec)
      • managedEvent

        protected boolean managedEvent​(boolean privileged,
                                       ome.model.IObject obj,
                                       ome.model.internal.Details previousDetails,
                                       ome.model.internal.Details currentDetails,
                                       ome.model.internal.Details newDetails)