org.apache.jackrabbit.mk.core
Class MicroKernelImpl

java.lang.Object
  extended by org.apache.jackrabbit.mk.core.MicroKernelImpl
All Implemented Interfaces:
MicroKernel

public class MicroKernelImpl
extends Object
implements MicroKernel


Field Summary
protected  Repository rep
           
 
Constructor Summary
MicroKernelImpl()
          Argument-less constructor, used for in-memory kernel.
MicroKernelImpl(Repository rep)
          Alternate constructor, used for testing.
MicroKernelImpl(String homeDir)
           
 
Method Summary
 String commit(String path, String jsonDiff, String revision, String message)
          Applies the specified changes on the specified target node.
 String diff(String fromRevision, String toRevision, String filter)
          Returns the JSON diff representation of the changes between the specified revisions.
 void dispose()
          Dispose this instance.
 long getChildNodeCount(String path, String revision)
          Returns the number of child nodes of the specified node.
 String getHeadRevision()
          Return the id of the current head revision.
 String getJournal(String fromRevision, String toRevision, String filter)
          Returns a revision journal, starting with fromRevisionId and ending with toRevisionId.
 long getLength(String blobId)
          Returns the length of the specified blob.
 String getNodes(String path, String revision)
          Returns the node tree rooted at the specified parent node with depth 1.
 String getNodes(String path, String revision, int depth, long offset, int count, String filter)
          Returns the node tree rooted at the specified parent node with the specified depth, maximum child node count and offset.
 String getRevisions(long since, int maxEntries)
          Returns a chronological list of all revisions since a specific point in time.
protected  void init(String homeDir)
           
 boolean nodeExists(String path, String revision)
          Determines whether the specified node exists.
 int read(String blobId, long pos, byte[] buff, int off, int length)
          Reads up to length bytes of data from the specified blob into the given array of bytes.
 String waitForCommit(String oldHeadRevision, long maxWaitMillis)
          Wait for a commit to occur that is newer than the given revision number.
 String write(InputStream in)
          Stores the content of the given stream and returns an associated identifier for later retrieval.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

rep

protected Repository rep
Constructor Detail

MicroKernelImpl

public MicroKernelImpl(String homeDir)
                throws MicroKernelException
Throws:
MicroKernelException

MicroKernelImpl

public MicroKernelImpl()
Argument-less constructor, used for in-memory kernel.


MicroKernelImpl

public MicroKernelImpl(Repository rep)
Alternate constructor, used for testing.

Parameters:
rep - repository, already initialized
Method Detail

init

protected void init(String homeDir)
             throws MicroKernelException
Throws:
MicroKernelException

dispose

public void dispose()
Description copied from interface: MicroKernel
Dispose this instance.

Specified by:
dispose in interface MicroKernel

getHeadRevision

public String getHeadRevision()
                       throws MicroKernelException
Description copied from interface: MicroKernel
Return the id of the current head revision.

Specified by:
getHeadRevision in interface MicroKernel
Returns:
id of head revision
Throws:
MicroKernelException - if an error occurs

getRevisions

public String getRevisions(long since,
                           int maxEntries)
                    throws MicroKernelException
Description copied from interface: MicroKernel
Returns a chronological list of all revisions since a specific point in time.

Format:

 [ { "id" : "", "ts" :  }, ... ]
 

Specified by:
getRevisions in interface MicroKernel
Parameters:
since - timestamp (ms) of earliest revision to be returned
maxEntries - maximum #entries to be returned; if < 0, no limit will be applied.
Returns:
a chronological list of revisions in JSON format.
Throws:
MicroKernelException - if an error occurs

waitForCommit

public String waitForCommit(String oldHeadRevision,
                            long maxWaitMillis)
                     throws MicroKernelException,
                            InterruptedException
Description copied from interface: MicroKernel
Wait for a commit to occur that is newer than the given revision number.

This method is useful efficient polling. The method will return the current head revision if it is newer than the given old revision number, or wait until the given number of milliseconds passed or a new head revision is available.

Specified by:
waitForCommit in interface MicroKernel
maxWaitMillis - the maximum number of milliseconds to wait (0 if the method should not wait).
Returns:
the current head revision
Throws:
MicroKernelException - if an error occurs
InterruptedException - if the thread was interrupted

getJournal

public String getJournal(String fromRevision,
                         String toRevision,
                         String filter)
                  throws MicroKernelException
Description copied from interface: MicroKernel
Returns a revision journal, starting with fromRevisionId and ending with toRevisionId.

Format:

 [ { "id" : "<revisionId>", "ts" : "<revisionTimestamp>", "msg" : "<commitMessage>", "changes" : "<JSON diff>" }, ... ]
 

Specified by:
getJournal in interface MicroKernel
Parameters:
fromRevision - first revision to be returned in journal
toRevision - last revision to be returned in journal, if null the current head revision is assumed
filter - (optional) filter criteria (e.g. path, property names, etc); TODO specify format and semantics
Returns:
a chronological list of revisions in JSON format
Throws:
MicroKernelException - if an error occurs

diff

public String diff(String fromRevision,
                   String toRevision,
                   String filter)
            throws MicroKernelException
Description copied from interface: MicroKernel
Returns the JSON diff representation of the changes between the specified revisions. The changes will be consolidated if the specified range covers intermediary revisions. The revisions need not be in a specified chronological order.

Format:

 [ { "id" : "<revisionId>", "ts" : "<revisionTimestamp>", "msg" : "<commitMessage>", "changes" : "<JSON diff>" }, ... ]
 

Specified by:
diff in interface MicroKernel
Parameters:
fromRevision - a revision
toRevision - another revision, if null the current head revision is assumed
filter - (optional) filter criteria (e.g. path, property names, etc); TODO specify format and semantics
Returns:
JSON diff representation of the changes
Throws:
MicroKernelException - if an error occurs

nodeExists

public boolean nodeExists(String path,
                          String revision)
                   throws MicroKernelException
Description copied from interface: MicroKernel
Determines whether the specified node exists.

Specified by:
nodeExists in interface MicroKernel
Parameters:
path - path denoting node
revision - revision, if null the current head revision is assumed
Returns:
true if the specified node exists, otherwise false
Throws:
MicroKernelException - if an error occurs

getChildNodeCount

public long getChildNodeCount(String path,
                              String revision)
                       throws MicroKernelException
Description copied from interface: MicroKernel
Returns the number of child nodes of the specified node.

This is a convenience method since this information could gathered by calling getNodes(path, revisionId, 0, 0, 0) and evaluating the :childNodeCount property.

Specified by:
getChildNodeCount in interface MicroKernel
Parameters:
path - path denoting node
revision - revision, if null the current head revision is assumed
Returns:
the number of child nodes
Throws:
MicroKernelException - if an error occurs

getNodes

public String getNodes(String path,
                       String revision)
                throws MicroKernelException
Description copied from interface: MicroKernel
Returns the node tree rooted at the specified parent node with depth 1. Depth 1 means all properties of the node are returned, including the direct child nodes and their properties (including :childNodeCount). Example:
 {
     "someprop": "someval",
     ":childNodeCount": 2,
     "child1" : {
          "prop1": "foo",
          ":childNodeCount": 2
      },
      "child2": {
          "prop1": "bar"
          ":childNodeCount": 0
      }
 }
 
Remarks: This method is a convenience method for getNodes(path, revisionId, 1, 0, -1, null)

Specified by:
getNodes in interface MicroKernel
Parameters:
path - path denoting root of node tree to be retrieved
revision - revision, if null the current head revision is assumed
Returns:
node tree in JSON format
Throws:
MicroKernelException - if an error occurs

getNodes

public String getNodes(String path,
                       String revision,
                       int depth,
                       long offset,
                       int count,
                       String filter)
                throws MicroKernelException
Description copied from interface: MicroKernel
Returns the node tree rooted at the specified parent node with the specified depth, maximum child node count and offset. The depth of the returned tree is governed by the depth parameter:
depth = 0 properties, including :childNodeCount and child node names (i.e. empty child node objects)
depth = 1 properties, child nodes and their properties (including :childNodeCount)
depth = 2 [and so on...]

The offset and count parameters are only applied to the direct child nodes of the root of the returned node tree.

Specified by:
getNodes in interface MicroKernel
Parameters:
path - path denoting root of node tree to be retrieved
revision - revision, if null the current head revision is assumed
depth - maximum depth of returned tree
offset - start position in the iteration order of child nodes (0 to start at the beginning)
count - maximum number of child nodes to retrieve (-1 for all)
filter - (optional) filter criteria (e.g. names of properties to be included, etc); TODO specify format and semantics
Returns:
node tree in JSON format
Throws:
MicroKernelException - if an error occurs

commit

public String commit(String path,
                     String jsonDiff,
                     String revision,
                     String message)
              throws MicroKernelException
Description copied from interface: MicroKernel
Applies the specified changes on the specified target node.

If path.length() == 0 the paths specified in the jsonDiff are expected to be absolute.

The implementation tries to merge changes if the revision id of the commit is set accordingly. As an example, deleting a node is allowed if the node existed in the given revision, even if it was deleted in the meantime.

Specified by:
commit in interface MicroKernel
Parameters:
path - path denoting target node
jsonDiff - changes to be applied in JSON diff format.
revision - revision the changes are based on, if null the current head revision is assumed
message - commit message
Returns:
id of newly created revision
Throws:
MicroKernelException - if an error occurs

getLength

public long getLength(String blobId)
               throws MicroKernelException
Description copied from interface: MicroKernel
Returns the length of the specified blob.

Specified by:
getLength in interface MicroKernel
Parameters:
blobId - blob identifier
Returns:
length of the specified blob
Throws:
MicroKernelException - if an error occurs

read

public int read(String blobId,
                long pos,
                byte[] buff,
                int off,
                int length)
         throws MicroKernelException
Description copied from interface: MicroKernel
Reads up to length bytes of data from the specified blob into the given array of bytes. An attempt is made to read as many as length bytes, but a smaller number may be read. The number of bytes actually read is returned as an integer.

Specified by:
read in interface MicroKernel
Parameters:
blobId - blob identifier
pos - the offset within the blob
buff - the buffer into which the data is read.
off - the start offset in array buff at which the data is written.
length - the maximum number of bytes to read
Returns:
the total number of bytes read into the buffer, or -1 if there is no more data because the end of the blob content has been reached.
Throws:
MicroKernelException - if an error occurs

write

public String write(InputStream in)
             throws MicroKernelException
Description copied from interface: MicroKernel
Stores the content of the given stream and returns an associated identifier for later retrieval.

If identical stream content has been stored previously, then the existing identifier will be returned instead of storing a redundant copy.

The stream is closed by this method.

Specified by:
write in interface MicroKernel
Parameters:
in - InputStream providing the blob content
Returns:
blob identifier associated with the given content
Throws:
MicroKernelException - if an error occurs


Copyright © 2012 The Apache Software Foundation. All Rights Reserved.