blob: dac4f1d27649736c71654586c07c4b58cdc14deb [file] [log] [blame]
/*
* $Header: /cvshome/build/info.dmtree/src/info/dmtree/DmtEvent.java,v 1.8 2006/07/04 12:12:16 tszeredi Exp $
*
* Copyright (c) OSGi Alliance (2004, 2006). All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package info.dmtree;
/**
* Event class storing the details of a change in the tree.
* <code>DmtEvent</code> is used by <code>DmtAdmin</code> to notify registered
* {@link DmtEventListener EventListeners} about important changes. Events are
* generated after every successful DMT change, and also when sessions are
* opened or closed. If a {@link DmtSession} is opened in atomic mode, DMT
* events are only sent when the session is committed, when the changes are
* actually performed.
* <p>
* An event is generated for each group of nodes added, deleted, replaced,
* renamed or copied, in this order. Events are also generated when sessions
* are opened and closed.
* <p>
* The <code>type</code> of the event describes the change that triggered the
* event delivery. Each event carries the unique identifier of the session in
* which the described change happened. The events describing changes in the DMT
* carry the list of affected nodes. In case of {@link #COPIED} or
* {@link #RENAMED} events, the event carries the list of new nodes as well.
* <p>
* When a <code>DmtEvent</code> is delivered to a listener, the event contains
* only those node URIs that the listener has access to. This access control
* decision is based on the principal specified when the listener was
* registered:
* <ul>
* <li> If the listener was registered specifying an explicit principal, using
* the {@link DmtAdmin#addEventListener(String, int, String, DmtEventListener)}
* method, then the target node ACLs should be checked for providing GET access
* to the specified principal;
* <li> When the listener was registered without an explicit principal then the
* listener needs GET {@link info.dmtree.security.DmtPermission} for
* the corresponding node.
* </ul>
*/
public interface DmtEvent {
/**
* Event type indicating nodes that were added.
*/
int ADDED = 0x01;
/**
* Event type indicating nodes that were copied.
*/
int COPIED = 0x02;
/**
* Event type indicating nodes that were deleted.
*/
int DELETED = 0x04;
/**
* Event type indicating nodes that were renamed.
*/
int RENAMED = 0x08;
/**
* Event type indicating nodes that were replaced.
*/
int REPLACED = 0x10;
/**
* Event type indicating that a new session was opened.
*/
int SESSION_OPENED = 0x20;
/**
* Event type indicating that a session was closed. This type of event is
* sent when the session is closed by the client or becomes inactive for any
* other reason (session timeout, fatal errors in business methods, etc.).
*/
int SESSION_CLOSED = 0x40;
/**
* This method returns the type of this event.
*
* @return the type of this event.
*/
int getType();
/**
* This method returns the identifier of the session in which this event
* took place. The ID is guaranteed to be unique on a machine.
*
* @return the unique indetifier of the session that triggered the event
*/
int getSessionId();
/**
* This method can be used to query the subject nodes of this event. The
* method returns <code>null</code> for {@link #SESSION_OPENED} and
* {@link #SESSION_CLOSED}.
* <p>
* The method returns only those affected nodes that the caller has the GET
* permission for (or in case of {@link #COPIED} or {@link #RENAMED} events,
* where the caller has GET permissions for either the source or the
* destination nodes). Therefore, it is possible that the method returns an
* empty array. All returned URIs are absolute.
*
* @return the array of affected nodes
* @see #getNewNodes
*/
String[] getNodes();
/**
* This method can be used to query the new nodes, when the type of the
* event is {@link #COPIED} or {@link #RENAMED}. For all other event types
* this method returns <code>null</code>.
* <p>
* The array returned by this method runs parallel to the array returned by
* {@link #getNodes}, the elements in the two arrays contain the source and
* destination URIs for the renamed or copied nodes in the same order. All
* returned URIs are absolute.
* <p>
* This method returns only those nodes where the caller has the GET
* permission for the source or destination node of the operation.
* Therefore, it is possible that the method returns an empty array.
*
* @return the array of newly created nodes
*/
String[] getNewNodes();
}