Content Management Guide
CHAPTER 8
Working with Content Management Events
This chapter describes how to handle events related to Content Management (CM) subsystem operations and activities. It has these sections:
This chapter assumes familiarity with exteNd Director event model and event handling. For more information, see the chapter on working with events in Developing exteNd Director Applications.

About CM events
CM events are an extension of the exteNd Director event model framework, consisting of state change events, event producers, and event listeners (including vetoable listeners). The API for CM events is defined in these packages:
com.sssw.cm.event.api
com.sssw.cm.event.util

CM event types
The API defines a set of state change events related to CM operations on documents, folders, and other elementsas well as general activities like data import/export. Event IDs are exposed on the individual event classes as well as on the com.sssw.cm.event.api.EbiConstants interface. In addition, there are state change constants defined in com.sssw.fw.event.api.EboStateChangeEvent.
Here is a list of events defined for the CM subsystem:
Event type
|
Operation
|
Event constant
|
Category
|
added
|
EVENT_ID_CATEGORY_ADDED
|
contents listed
|
EVENT_ID_CATEGORY_CONTENTS_LISTED
|
copied
|
EVENT_ID_CATEGORY_COPIED
|
moved
|
EVENT_ID_CATEGORY_MOVED
|
removed
|
EVENT_ID_CATEGORY_REMOVED
|
document removed
|
EVENT_ID_DOC_REMOVED_FROM_CATEGORY
|
metadata retrieved
|
EVENT_ID_CATEGORY_RETRIEVED
|
metadata updated
|
EVENT_ID_CATEGORY_UPDATED
|
Data export/import
|
data exported
|
EVENT_ID_DATA_EXPORTED
|
data imported
|
EVENT_ID_DATA_IMPORTED
|
Document
|
added
|
EVENT_ID_DOC_ADDED
|
added to category
|
EVENT_ID_DOC_ADDED_TO_CATEGORY
|
checked in
|
EVENT_ID_DOC_CHECKED_IN
|
checked out
|
EVENT_ID_DOC_CHECKED_OUT
|
copied
|
EVENT_ID_DOC_COPIED
|
moved
|
EVENT_ID_DOC_MOVED
|
published
|
EVENT_ID_DOC_PUBLISHED
|
removed
|
EVENT_ID_DOC_REMOVED
|
retrieved
|
EVENT_ID_DOC_RETRIEVED
|
rolled back
|
EVENT_ID_DOC_ROLLED_BACK
|
unchecked out
|
EVENT_ID_DOC_UNCHECKED_OUT
|
unlocked
|
EVENT_ID_DOC_UNLOCKED
|
unpublished
|
EVENT_ID_DOC_UNPUBLISHED
|
updated
|
EVENT_ID_DOC_UPDATED
|
link added
|
EVENT_ID_DOC_LINK_ADDED
|
link removed
|
EVENT_ID_DOC_LINK_REMOVED
|
link retrieved
|
EVENT_ID_DOC_LINK_RETRIEVED
|
link updated
|
EVENT_ID_DOC_LINK_UPDATED
|
links listed
|
EVENT_ID_DOC_LINKS_LISTED
|
Document type
|
added
|
EVENT_ID_DOC_TYPE_ADDED
|
removed
|
EVENT_ID_DOC_TYPE_REMOVED
|
retrieved
|
EVENT_ID_DOC_TYPE_RETRIEVED
|
updated
|
EVENT_ID_DOC_TYPE_UPDATED
|
listed
|
EVENT_ID_DOC_TYPES_LISTED
|
fields listed
|
EVENT_ID_DOC_TYPE_FIELDS_LISTED
|
Field
|
added
|
EVENT_ID_DOC_FIELD_ADDED
|
added to document type
|
EVENT_ID_DOC_FIELD_ADDED_TO_TYPE
|
listed
|
EVENT_ID_DOC_FIELDS_LISTED
|
removed
|
EVENT_ID_DOC_FIELD_REMOVED
|
removed from document type
|
EVENT_ID_DOC_FIELD_REMOVED_FROM_TYPE
|
retrieved
|
EVENT_ID_DOC_FIELD_RETRIEVED
|
updated
|
EVENT_ID_DOC_FIELD_UPDATED
|
Folder
|
added
|
EVENT_ID_FOLDER_ADDED
|
contents listed
|
EVENT_ID_FOLDER_CONTENTS_LISTED
|
copied
|
EVENT_ID_FOLDER_COPIED
|
moved
|
EVENT_ID_FOLDER_MOVED
|
removed
|
EVENT_ID_FOLDER_REMOVED
|
retrieved
|
EVENT_ID_FOLDER_RETRIEVED
|
updated
|
EVENT_ID_FOLDER_UPDATED
|
Layout document descriptor
|
added
|
EVENT_ID_LLD_ADDED
|
listed for a style
|
EVENT_ID_LLDS_LISTED
|
removed
|
EVENT_ID_LLD_REMOVED
|
retrieved
|
EVENT_ID_LLD_RETRIEVED
|
updated
|
EVENT_ID_LLD_UPDATED
|
Layout style
|
added
|
EVENT_ID_DOC_LAYOUT_STYLE_ADDED
|
removed
|
EVENT_ID_DOC_LAYOUT_STYLE_REMOVED
|
retrieved
|
EVENT_ID_DOC_LAYOUT_STYLE_RETRIEVED
|
updated
|
EVENT_ID_DOC_LAYOUT_STYLE_UPDATED
|
styles listed
|
EVENT_ID_DOC_LAYOUT_STYLES_LISTED
|
Directory entry lookup
|
by absolute path (URL)
|
EVENT_ID_LOOKUP_BY_ABSOLUTE
|
by ancestor and relative path
|
EVENT_ID_LOOKUP_BY_RELATIVE
|
CM repository
|
added
|
EVENT_ID_REPOSITORY_ADDED
|
listed
|
EVENT_ID_REPOSITORIES_LISTED
|
removed
|
EVENT_ID_REPOSITORY_REMOVED
|
retrieved
|
EVENT_ID_REPOSITORY_RETRIEVED
|
updated
|
EVENT_ID_REPOSITORY_UPDATED
|
Query/search
|
document query executed
|
EVENT_ID_DOC_QUERY_EXECUTED
|
document search query executed
|
EVENT_ID_DOC_SEARCH_QUERY_EXECUTED
|
Security
|
access checked
|
EVENT_ID_ACCESS_CHECKED
|
|
admin access checked
|
EVENT_ID_ADMIN_ACCESS_CHECKED
|
access removed
|
EVENT_ID_SECURITY_REMOVED
|
access retrieved
|
EVENT_ID_SECURITY_RETRIEVED
|
access set
|
EVENT_ID_SECURITY_SET
|

Registering for CM events
This section includes these sections:

Registering for events on directory elements
Event support in the CM subsystem provides convenience methods for registration of listeners based on CM categories, folders, and documents. The methods are available on an EbiContentMgmtDelegate object:
Listener convenience method
|
What it subscribes to
|
addCategoryStateChangeListener()
|
All category events
|
addDocumentStateChangeListener()
|
All document events
|
addFolderStateChangeListener()
|
All folder events
|
addVetoableCategoryStateChangeListener()
|
All category events, with ability to veto operation
|
addVetoableDocumentStateChangeListener()
|
Subscribes to all document events, with ability to veto operation
|
addVetoableFolderStateChangeListener()
|
Subscribes to all folder events, with ability to veto operation
|
For example, here is how to subscribe to all events that relate to folder operations:
EbiContentMgmtDelegate cmgr =
com.sssw.cm.client.EboFactory.getDefaultContentMgmtDelegate();
cmgr. addFolderStateChangeListener (myStateChangeListener);

Specifying event types
You can register for specified type(s) of events using the framework version of addStateChangeListener(), available on EbiContentMgmtDelegate:
public boolean addStateChangeListener(
BitSet events, EbiStateChangeListener listener)
where events is a bit set of event IDs. The CM API provides some helper methods for specifying a bit set, as described in Using the event helper class next.
You can also filter events that occur on either a specific directory entry or a directory and entries underneath it (recursively). In order to register for events that occur within a certain directory entry scope, add the listener using this method:
public boolean addStateChangeListener(
BitSet events, EbiDirectoryEntry entry, int depth,
EbiStateChangeListener listener)
Method parameter
|
What it means
|
events
|
Bit set of event IDs
|
entry
|
Directory entry (a folder, a category, or a document)
|
depth
|
How deep event tracking should go:
0 means that state changes that occur only on the entry itself
1 means that state changes that occur to the entry and its children
-1 means that state changes that occur to the entry and any of its descendant
Any other depth specifies that state changes that occur on the entry and its descendants to that depth in the entry hierarchy are to be tracked
|
listener
|
A new listener object
|

Using the event helper class
The com.sssw.cm.event.util.EboEventHelper class provides utilities for managing event sets. It includes these methods:
Event helper method
|
What it does
|
getFullEventIDSet()
|
Returns a bit set containing the full set of CM events exposed on all CM element types
|
getEventIDSet(String elType)
|
Returns a bit set containing the full set of CM events exposed on a specified CM element type
|
getEventIDSet(int stateChangeID)
|
Returns a bit set for all events that map to a given state change type
|
adjustEventIDSet()
|
Given a bit set for event IDs, turns on or off the bits for CM events of the specified state change type
|

Event registration examples
Listen on one event for all elements
This example adds a listener for the "create" state change event on all elements:
EbiContentMgmtDelegate cmgr =
com.sssw.cm.client.EboFactory.getDefaultContentMgmtDelegate();
BitSet events = EboEventHelper.getEventIDSet(
com.sssw.fw.event.api.EboStateChangeEvent.SC_CREATE);
cmgr.addStateChangeListener(events, MyListener);
Listen on all events for two element types
This example adds a listener for all changes on document types and fields only; note the use of adjustEventIDSet():
EbiContentMgmtDelegate cmgr =
com.sssw.cm.client.EboFactory.getDefaultContentMgmtDelegate();
BitSet events =
EboEventHelper.getEventIDSet(EbiDocType.EL_DOC_TYPE);
EboEventHelper.adjustEventIDSet(events,
EbiDocField.EL_DOC_FIELD, true);
cmgr.addStateChangeListener(events, Mylistener);
Listen on multiple events for all elements
This example adds event types by instantiating a new bit set; this is the technique to use for specifying multiple sets of events:
EbiContentMgmtDelegate cmgr =
com.sssw.cm.client.EboFactory.getDefaultContentMgmtDelegate();
BitSet events = new BitSet();
events.set(com.sssw.cm.event.api.EbiConstants.
EVENT_ID_ACCESS_CHECKED);
events.set(com.sssw.cm.event.api.EbiConstants.
EVENT_ID_ADMIN_ACCESS_CHECKED);
events.set(com.sssw.cm.event.api.EbiConstants.
EVENT_ID_SECUIRTY_RETRIEVED);
cmgr.addStateChangeListener(events, Mylistener);
Listen on all events except for a specified element type
This example shows how to use the boolean argument on adjustEventIDSet() to turn off an event set:
EbiContentMgmtDelegate cmgr =
com.sssw.cm.client.EboFactory.getDefaultContentMgmtDelegate();
BitSet events = EboEventHelper.getFullEventIDSet();
EboEventHelper.adjustEventIDSet(events, EbiDocType.EL_DOC_TYPE, false);
cmgr.addStateChangeListener(events, Mylistener);

Enabling CM events
To enable or disable CM events:
Open config.xml for CM your exteNd Director project.
Find this property:
com.sssw.cm.events.enable.Default
Set the value to true for enable or false for disable.
Redeploy your project.
Copyright © 2004 Novell, Inc. All rights reserved. Copyright © 1997, 1998, 1999, 2000, 2001, 2002, 2003 SilverStream Software, LLC. All rights reserved. more ...