org.apache.directory.server.core.changelog
Class DefaultChangeLog

java.lang.Object
  extended by org.apache.directory.server.core.changelog.DefaultChangeLog
All Implemented Interfaces:
ChangeLog

public class DefaultChangeLog
extends java.lang.Object
implements ChangeLog

The default ChangeLog service implementation. It stores operations in memory. Entries are stored into a dedicated partition, named ou=changelog, under which we have two other sub-entries : ou=tags and ou= revisions : ou=changelog | +-- ou=revisions | +-- ou=tags

Version:
$Rev$, $Date$
Author:
Apache Directory Project

Constructor Summary
DefaultChangeLog()
           
 
Method Summary
 void destroy()
          Destroy the changeLog
 ChangeLogSearchEngine getChangeLogSearchEngine()
          Gets the change log query engine which would be used to ask questions about what changed, when, how and by whom.
 ChangeLogStore getChangeLogStore()
          
 long getCurrentRevision()
          Gets the current revision for the server.
 Tag getLatest()
          
 TagSearchEngine getTagSearchEngine()
          Gets the tag search engine used to query the snapshots taken.
 void init(DirectoryService service)
          Initialize the ChangeLog system.
 boolean isEnabled()
          Checks whether or not the change log has been enabled to track changes.
 boolean isExposed()
          
 boolean isLogSearchSupported()
          Returns whether or not this ChangeLogService supports searching for changes.
 boolean isTagSearchSupported()
          Returns whether or not this ChangeLogService supports searching for snapshot tags.
 boolean isTagStorageSupported()
          Returns whether or not this ChangeLogService stores snapshot tags.
 ChangeLogEvent log(LdapPrincipal principal, org.apache.directory.shared.ldap.ldif.LdifEntry forward, org.apache.directory.shared.ldap.ldif.LdifEntry reverse)
          Records a change as a forward LDIF, a reverse change to revert the change and the authorized principal triggering the revertable change event.
 ChangeLogEvent log(LdapPrincipal principal, org.apache.directory.shared.ldap.ldif.LdifEntry forward, java.util.List<org.apache.directory.shared.ldap.ldif.LdifEntry> reverses)
          Records a change as a forward LDIF, some reverse changes to revert the change and the authorized principal triggering the revertable change event.
 void setChangeLogStore(ChangeLogStore store)
          Set the underlying storage
 void setEnabled(boolean enabled)
          Enable or disable the ChangeLog service
 void setExposed(boolean exposed)
          Exposes the contents of ChangeLog to clients if set to true.
 void setPartitionSuffix(java.lang.String suffix)
          The prefix of the partition.
 void setRevisionsContainerName(java.lang.String revContainerName)
          The name of the revisions container under the partition.
 void setTagsContainerName(java.lang.String tagContainerName)
          The name of the tags container under the partition.
 void sync()
          Flush the changes to disk
 Tag tag()
          Creates a snapshot of the server at the current revision.
 Tag tag(long revision)
          Creates a tag for a snapshot of the server in a specific state at a revision.
 Tag tag(long revision, java.lang.String description)
          Creates a tag for a snapshot of the server in a specific state at a revision.
 Tag tag(java.lang.String description)
          Creates a snapshot of the server at the current revision.
 java.lang.String toString()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

DefaultChangeLog

public DefaultChangeLog()
Method Detail

getChangeLogStore

public ChangeLogStore getChangeLogStore()

Specified by:
getChangeLogStore in interface ChangeLog
Returns:
The underlying storage

setChangeLogStore

public void setChangeLogStore(ChangeLogStore store)
Set the underlying storage If there is an existing changeLog store, we don't switch it

Specified by:
setChangeLogStore in interface ChangeLog
Parameters:
store - The storage

getCurrentRevision

public long getCurrentRevision()
                        throws java.lang.Exception
Gets the current revision for the server.

Specified by:
getCurrentRevision in interface ChangeLog
Returns:
the current revision
Throws:
java.lang.Exception - if there is a problem accessing this information

log

public ChangeLogEvent log(LdapPrincipal principal,
                          org.apache.directory.shared.ldap.ldif.LdifEntry forward,
                          org.apache.directory.shared.ldap.ldif.LdifEntry reverse)
                   throws java.lang.Exception
Records a change as a forward LDIF, a reverse change to revert the change and the authorized principal triggering the revertable change event.

Specified by:
log in interface ChangeLog
Parameters:
principal - the authorized LDAP principal triggering the change
forward - LDIF of the change going to the next state
reverse - LDIF (anti-operation): the change required to revert this change
Returns:
the new revision reached after having applied the forward LDIF
Throws:
java.lang.Exception - if there are problems logging the change

log

public ChangeLogEvent log(LdapPrincipal principal,
                          org.apache.directory.shared.ldap.ldif.LdifEntry forward,
                          java.util.List<org.apache.directory.shared.ldap.ldif.LdifEntry> reverses)
                   throws java.lang.Exception
Records a change as a forward LDIF, some reverse changes to revert the change and the authorized principal triggering the revertable change event.

Specified by:
log in interface ChangeLog
Parameters:
principal - the authorized LDAP principal triggering the change
forward - LDIF of the change going to the next state
reverses - LDIF (anti-operation): the changes required to revert this change
Returns:
the new revision reached after having applied the forward LDIF
Throws:
java.lang.Exception - if there are problems logging the change

isLogSearchSupported

public boolean isLogSearchSupported()
Returns whether or not this ChangeLogService supports searching for changes.

Specified by:
isLogSearchSupported in interface ChangeLog
Returns:
true if log searching is supported, false otherwise

isTagSearchSupported

public boolean isTagSearchSupported()
Returns whether or not this ChangeLogService supports searching for snapshot tags.

Specified by:
isTagSearchSupported in interface ChangeLog
Returns:
true if snapshot tag searching is supported, false otherwise

isTagStorageSupported

public boolean isTagStorageSupported()
Returns whether or not this ChangeLogService stores snapshot tags.

Specified by:
isTagStorageSupported in interface ChangeLog
Returns:
true if this ChangeLogService supports tag storage, false otherwise

getChangeLogSearchEngine

public ChangeLogSearchEngine getChangeLogSearchEngine()
Gets the change log query engine which would be used to ask questions about what changed, when, how and by whom. It may not be supported by all implementations. Some implementations may simply log changes without direct access to those changes from within the server.

Specified by:
getChangeLogSearchEngine in interface ChangeLog
Returns:
the change log query engine

getTagSearchEngine

public TagSearchEngine getTagSearchEngine()
Gets the tag search engine used to query the snapshots taken. If this ChangeLogService does not support a taggable and searchable store then an UnsupportedOperationException will result.

Specified by:
getTagSearchEngine in interface ChangeLog
Returns:
the snapshot query engine for this store

tag

public Tag tag(long revision,
               java.lang.String description)
        throws java.lang.Exception
Creates a tag for a snapshot of the server in a specific state at a revision. If the ChangeLog has a TaggableChangeLogStore then the tag is stored. If it does not then it's up to callers to track this tag since it will not be stored by this service.

Specified by:
tag in interface ChangeLog
Parameters:
revision - the revision to tag the snapshot
description - some information about what the snapshot tag represents
Returns:
the Tag associated with the revision
Throws:
java.lang.Exception - if there is a problem taking a tag
java.lang.IllegalArgumentException - if the revision is out of range (less than 0 and greater than the current revision)

tag

public Tag tag(long revision)
        throws java.lang.Exception
Creates a tag for a snapshot of the server in a specific state at a revision. If the ChangeLog has a TaggableChangeLogStore then the tag is stored. If it does not then it's up to callers to track this tag since it will not be stored by this service.

Specified by:
tag in interface ChangeLog
Parameters:
revision - the revision to tag the snapshot
Returns:
the Tag associated with the revision
Throws:
java.lang.Exception - if there is a problem taking a tag
java.lang.IllegalArgumentException - if the revision is out of range (less than 0 and greater than the current revision)

tag

public Tag tag(java.lang.String description)
        throws java.lang.Exception
Creates a snapshot of the server at the current revision.

Specified by:
tag in interface ChangeLog
Parameters:
description - some information about what the snapshot tag represents
Returns:
the revision at which the tag is created
Throws:
java.lang.Exception - if there is a problem taking a tag

tag

public Tag tag()
        throws java.lang.Exception
Creates a snapshot of the server at the current revision.

Specified by:
tag in interface ChangeLog
Returns:
the revision at which the tag is created
Throws:
java.lang.Exception - if there is a problem taking a tag

setEnabled

public void setEnabled(boolean enabled)
Enable or disable the ChangeLog service

Specified by:
setEnabled in interface ChangeLog
Parameters:
enabled - true to enable the service, flase to disable it

isEnabled

public boolean isEnabled()
Checks whether or not the change log has been enabled to track changes.

Specified by:
isEnabled in interface ChangeLog
Returns:
true if the change log is tracking changes, false otherwise

getLatest

public Tag getLatest()
              throws java.lang.Exception

Specified by:
getLatest in interface ChangeLog
Returns:
The latest tag
Throws:
java.lang.Exception - if there is a problem taking the latest tag

init

public void init(DirectoryService service)
          throws java.lang.Exception
Initialize the ChangeLog system. We will initialize the associated store.

Specified by:
init in interface ChangeLog
Parameters:
service - The associated DirectoryService
Throws:
java.lang.Exception

sync

public void sync()
          throws java.lang.Exception
Flush the changes to disk

Specified by:
sync in interface ChangeLog
Throws:
java.lang.Exception - If the flush failed

destroy

public void destroy()
             throws java.lang.Exception
Destroy the changeLog

Specified by:
destroy in interface ChangeLog
Throws:
java.lang.Exception

isExposed

public boolean isExposed()

Specified by:
isExposed in interface ChangeLog
Returns:
true if the changeLog system is visible by clients

setExposed

public void setExposed(boolean exposed)
Exposes the contents of ChangeLog to clients if set to true. Default setting is false.

Specified by:
setExposed in interface ChangeLog
Parameters:
exposed - true to expose the contents, false to not expose.

setPartitionSuffix

public void setPartitionSuffix(java.lang.String suffix)
The prefix of the partition. Default value is ou=changelog.

Specified by:
setPartitionSuffix in interface ChangeLog
Parameters:
suffix - suffix value to be set for the changelog partition

setRevisionsContainerName

public void setRevisionsContainerName(java.lang.String revContainerName)
The name of the revisions container under the partition. Default value is ou=revisions

Specified by:
setRevisionsContainerName in interface ChangeLog
Parameters:
revContainerName - the name of the revisions container

setTagsContainerName

public void setTagsContainerName(java.lang.String tagContainerName)
The name of the tags container under the partition. Default value is ou=tags

Specified by:
setTagsContainerName in interface ChangeLog
Parameters:
tagContainerName - the name of the revisions container

toString

public java.lang.String toString()
Overrides:
toString in class java.lang.Object
See Also:
Object.toString()


Copyright © 2003-2011 Apache Software Foundation. All Rights Reserved.