at.spardat.xma.event.global.GlobalEvent Maven / Gradle / Ivy
/*******************************************************************************
* Copyright (c) 2003, 2007 s IT Solutions AT Spardat GmbH .
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* s IT Solutions AT Spardat GmbH - initial API and implementation
*******************************************************************************/
/*
* @(#) $Id: GlobalEvent.java 2089 2007-11-28 13:56:13Z s3460 $
*
*
*
*
*
*/
package at.spardat.xma.event.global;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
/**
* A GlobalEvent is created and sent by GlobalEventManager. Sent events can than
* be polled (by GlobalEventManager) and be transmitted to server side or client
* side registered GlobalEventListener
*
* @author s3460
* @since version_number
*/
public class GlobalEvent implements Serializable {
/**
* The event is sent only to a client identified by its session ID.
* Can be '|' concatinated with the other constants.
*/
public static final int RECIPIENT_BY_ID = 0;
/**
* The event is sent to all servers in the cluster.
* Can be '|' concatinated with the other constants.
*/
public static final int RECIPIENT_ALL_SERVERS = 1;
/**
* The event is sent to all clients of all servers in the cluster.
* Can be '|' concatinated with the other constants.
*/
public static final int RECIPIENT_ALL_CLIENTS = 2;
/**
* The event is sent to all clients and servers in the cluster.
* Concat of RECIPIENT_ALL_SERVERS | RECIPIENT_ALL_CLIENTS.
*/
public static final int RECIPIENT_ALL_CLIENTS_ALL_SERVERS = (RECIPIENT_ALL_SERVERS | RECIPIENT_ALL_CLIENTS);
/**
* Key for member name for toMap() method
*/
private static final String KEY_NAME ="name_";
/**
* Key for member count for toMap() method
*/
private static final String KEY_COUNT ="count_";
/**
* Key for member recipient for toMap() method
*/
private static final String KEY_SERVERNAME ="servername_";
/**
* Key for member recipient for toMap() method
*/
private static final String KEY_RECIPIENT ="recipient_";
/**
* Key for member expiresMilliSec for toMap() method
*/
private static final String KEY_EXPIRES_MILLISEC ="expiresMilliSec_";
/**
* Key for member properties for toMap() method
*/
private static final String KEY_SESSIONID ="sessionid_";
/**
* Key for member properties for toMap() method
*/
private static final String KEY_PROPERTIES ="properties_";
/**
* type of event
*/
private String name;
/*
* unique id
*/
private int count;
/**
* server on which this event was created
*/
private String serverName;
/**
* type of recipient
*/
private int recipient = 0;
/**
* expires millisec after 1970
*/
private long expiresMilliSec;
/**
* key - value pairs
*
*/
private Properties properties = new Properties();
/**
* Session ID of recepient (usually creator).
*/
private String sessionId;
/**
* @param name
* type of GlobalEvent
* @param recipient
* type of recipient: RECIPIENT_ALL_SERVERS,
* RECIPIENT_ALL_CLIENTS, RECIPIENT_ALL_CLIENTS_ALL_SERVERS
* @param serverName
* name of server on which is event is created
* @param expiresMilliSec
* milli seconds after 1970
*
*/
GlobalEvent(String name, int recipient, String serverName, long expiresMilliSec,String sessionId) {
super();
this.name = name;
this.recipient = recipient;
this.serverName = serverName;
this.expiresMilliSec = expiresMilliSec;
this.sessionId = sessionId;
}
/**
* creates a new GlobalEvent instance from a map created by toMap().
* @param map - must be a map created by GlobalEvent.toMap().
*/
GlobalEvent(Map map) {
super();
if(map!=null){
this.name = (String) map.get(KEY_NAME);
if(map.get(KEY_COUNT) != null) //bugfix 27.09.2007 - old maps may not have a count at JNDI - @todo this if can be deleted in future versions!
this.count = ((Integer)map.get(KEY_COUNT)).intValue();
this.recipient = ((Integer)map.get(KEY_RECIPIENT)).intValue();
this.serverName = (String) map.get(KEY_SERVERNAME);
this.expiresMilliSec = ((Long)map.get(KEY_EXPIRES_MILLISEC)).longValue();
this.sessionId = (String) map.get(KEY_SESSIONID);
this.properties = (Properties) map.get(KEY_PROPERTIES);
}else{
throw new IllegalArgumentException("Failed to use constructor: GlobalEvent(Map map) - map is null ");
}
}
/**
* Transforms this class to a map object. All members of the class are stored in the map.
* This method is used to store intances of this classes as map in JNDI trees.
* @return
* @since version_number
* @author s3460
*/
Map toMap(){
Map map = new HashMap();
map.put(KEY_NAME, name);
map.put(KEY_COUNT, new Integer(count));
map.put(KEY_RECIPIENT, new Integer(recipient));
map.put(KEY_SERVERNAME, serverName);
map.put(KEY_EXPIRES_MILLISEC, new Long(expiresMilliSec));
map.put(KEY_SESSIONID, serverName);
map.put(KEY_PROPERTIES, properties);
return map;
}
/**
* @return Returns the expires.
*/
public long getExpiresMilliSec() {
return expiresMilliSec;
}
/**
* @return Returns the id.
*/
public int getCount() {
return count;
}
/**
* @param count
* The count to set.
*/
void setCount(int count) {
this.count = count;
}
/**
* @return Returns the name.
*/
public String getName() {
return name;
}
/**
* @return Returns the properties.
*/
public Properties getProperties() {
return properties;
}
/**
*
* @return unique ID
* @since version_number
* @author s3460
*/
public String getId() {
return serverName + "_" + count;
}
/**
*
* @param name
* @return @since version_number
* @author s3460
*/
public String getProperty(String name) {
return properties != null ? properties.getProperty(name) : null;
}
/**
*
* @param name
* @param defaultValue
* @return the named property transmitted from xma caller
* @since version_number
* @author s3460
*/
public String getProperty(String name, String defaultValue) {
return properties != null ? properties.getProperty(name, defaultValue) : null;
}
/**
* @param key
* @param value
* @return @since version_number
* @author s3460
*/
public Object setProperty(String key, String value) {
return properties.setProperty(key, value);
}
/*
* (non-Javadoc)
*
* @see java.lang.Object#toString()
*/
public String toString() {
return getId() + ": " + properties.toString();
}
/**
* Returns true if this event is valid for the type of recipient of
* aRecipient.
*
* @param aRecipient
* @return @since version_number
* @author s3460
*/
public boolean filterRecipient(int aRecipient) {
return (recipient & aRecipient) > 0;
}
/**
* is recipient RECIPIENT_ALL_SERVERS
*
* @return @since version_number
* @author s3460
*/
public boolean isEventForServer() {
return (recipient & RECIPIENT_ALL_SERVERS) > 0;
}
/**
* is recipient RECIPIENT_ALL_CLIENTS
*
* @return @since version_number
* @author s3460
*/
public boolean isEventForClient() {
return (recipient & RECIPIENT_ALL_CLIENTS) > 0;
}
/**
*
* @param idSession
* @return true if it is an event for a client with the session id idSession.
* @since version_number
* @author s3460
*/
public boolean isEventForClient(String idSession) {
return this.sessionId != null ? this.sessionId.equals(idSession) : false;
}
}