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:

For more information    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.

 
Top of page

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:

 
Top of section

CM event types

The API defines a set of state change events related to CM operations on documents, folders, and other elements—as 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

 
Top of page

Registering for CM events

This section includes these sections:

 
Top of section

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);

 
Top of section

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

 
Top of section

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

 
Top of section

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);

 
Top of page

Enabling CM events

Procedure To enable or disable CM events:

  1. Open config.xml for CM your exteNd Director project.

  2. Find this property:

      com.sssw.cm.events.enable.Default
    
  3. Set the value to true for enable or false for disable.

  4. 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 ...