Class ImmutableRoot

  • All Implemented Interfaces:
    Root, ReadOnly

    public final class ImmutableRoot
    extends java.lang.Object
    implements Root, ReadOnly
    Simple implementation of the Root interface that only supports simple read operations based on the NodeState (or ImmutableTree) passed to the constructor. This root implementation provides a query engine with index support limited to the PropertyIndexProvider.
    • Field Summary

      • Fields inherited from interface org.apache.jackrabbit.oak.api.Root

        COMMIT_PATH
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void commit()
      Atomically persists all changes made to the tree attached to this root.
      void commit​(@NotNull java.util.Map<java.lang.String,​java.lang.Object> info)
      Atomically persists all changes made to the tree attached to this root.
      @NotNull Blob createBlob​(@NotNull java.io.InputStream stream)
      Reads (and closes) the given stream and returns a Blob that contains that binary.
      Blob getBlob​(@NotNull java.lang.String reference)
      Get a blob by its reference.
      @NotNull ContentSession getContentSession()
      Get the ContentSession from which this root was acquired
      static ImmutableRoot getInstance​(@NotNull Root root)  
      @NotNull QueryEngine getQueryEngine()
      Get the query engine.
      @NotNull ImmutableTree getTree​(@NotNull java.lang.String path)
      Retrieve the possible non existing Tree at the given absolute path.
      boolean hasPendingChanges()
      Determine whether there are changes on this tree
      boolean move​(java.lang.String sourcePath, java.lang.String destPath)
      Move the child located at sourcePath to a child at destPath.
      void rebase()
      Rebase this root instance to the latest revision.
      void refresh()
      Reverts all changes made to this root and refreshed to the latest trunk.
      • Methods inherited from class java.lang.Object

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

      • ImmutableRoot

        public ImmutableRoot​(@NotNull
                             @NotNull NodeState rootState)
      • ImmutableRoot

        public ImmutableRoot​(@NotNull
                             @NotNull Root root)
      • ImmutableRoot

        public ImmutableRoot​(@NotNull
                             @NotNull ImmutableTree rootTree)
    • Method Detail

      • getInstance

        public static ImmutableRoot getInstance​(@NotNull
                                                @NotNull Root root)
      • getTree

        @NotNull
        public @NotNull ImmutableTree getTree​(@NotNull
                                              @NotNull java.lang.String path)
        Description copied from interface: Root
        Retrieve the possible non existing Tree at the given absolute path. The path must resolve to a tree in this root.
        Specified by:
        getTree in interface Root
        Parameters:
        path - absolute path to the tree
        Returns:
        tree at the given path.
      • move

        public boolean move​(java.lang.String sourcePath,
                            java.lang.String destPath)
        Description copied from interface: Root
        Move the child located at sourcePath to a child at destPath. Both paths must be absolute and resolve to a child located beneath this root.
        This method does nothing and returns false if
        • the tree at sourcePath does not exist or is not accessible,
        • the parent of the tree at destinationPath does not exist or is not accessible,
        • a tree already exists at destinationPath.
        If a tree at destinationPath exists but is not accessible to the editing content session this method succeeds but a subsequent Root.commit() will detect the violation and fail.
        Specified by:
        move in interface Root
        Parameters:
        sourcePath - The source path
        destPath - The destination path
        Returns:
        true on success, false otherwise.
      • rebase

        public void rebase()
        Description copied from interface: Root
        Rebase this root instance to the latest revision. After a call to this method, trees obtained through Root.getTree(String) may become non existing.
        Specified by:
        rebase in interface Root
      • refresh

        public void refresh()
        Description copied from interface: Root
        Reverts all changes made to this root and refreshed to the latest trunk. After a call to this method, trees obtained through Root.getTree(String) may become non existing.
        Specified by:
        refresh in interface Root
      • commit

        public void commit​(@NotNull
                           @NotNull java.util.Map<java.lang.String,​java.lang.Object> info)
        Description copied from interface: Root
        Atomically persists all changes made to the tree attached to this root.

        If info contains a mapping for Root.COMMIT_PATH and the associated value is a string, implementations may throw a CommitFailedException if there are changes outside of the subtree designated by that path and the implementation does not support such partial commits. However all implementation must handler the case where a path designates a subtree that contains all unpersisted changes.

        The info map is passed to the underlying storage as a part of the internal commit information attached to this commit. The commit information will be made available to local observers but will not be visible to observers on other cluster nodes.

        After a successful operation the root is automatically refreshed, such that trees previously obtained through Root.getTree(String) may become non existing.

        Specified by:
        commit in interface Root
        Parameters:
        info - commit information
      • commit

        public void commit()
        Description copied from interface: Root
        Atomically persists all changes made to the tree attached to this root. Calling this method is equivalent to calling the Root.commit(Map info) method with an empty info map.
        Specified by:
        commit in interface Root
      • hasPendingChanges

        public boolean hasPendingChanges()
        Description copied from interface: Root
        Determine whether there are changes on this tree
        Specified by:
        hasPendingChanges in interface Root
        Returns:
        true iff this tree was modified
      • getQueryEngine

        @NotNull
        public @NotNull QueryEngine getQueryEngine()
        Description copied from interface: Root
        Get the query engine.
        Specified by:
        getQueryEngine in interface Root
        Returns:
        the query engine
      • createBlob

        @NotNull
        public @NotNull Blob createBlob​(@NotNull
                                        @NotNull java.io.InputStream stream)
        Description copied from interface: Root
        Reads (and closes) the given stream and returns a Blob that contains that binary. The returned blob will remain valid at least until the ContentSession of this root is closed, or longer if it has been committed as a part of a content update.

        The implementation may decide to persist the blob at any point during or between this method method call and a Root.commit() that includes the blob, but the blob will become visible to other sessions only after such a commit.

        Specified by:
        createBlob in interface Root
        Parameters:
        stream - the stream for reading the binary
        Returns:
        the blob that was created
      • getBlob

        public Blob getBlob​(@NotNull
                            @NotNull java.lang.String reference)
        Description copied from interface: Root
        Get a blob by its reference.
        Specified by:
        getBlob in interface Root
        Parameters:
        reference - reference to the blob
        Returns:
        blob or null if the reference does not resolve to a blob.
        See Also:
        Blob.getReference()
      • getContentSession

        @NotNull
        public @NotNull ContentSession getContentSession()
        Description copied from interface: Root
        Get the ContentSession from which this root was acquired
        Specified by:
        getContentSession in interface Root
        Returns:
        the associated ContentSession