package javax.management.relation;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.ObjectStreamField;
import java.io.StreamCorruptedException;
import java.util.HashSet;
import java.util.List;
import java.util.Vector;
import javax.management.MBeanServerNotification;
import javax.management.Notification;
import javax.management.NotificationFilterSupport;
import javax.management.ObjectName;
import org.jboss.mx.util.Serialization;
public class MBeanServerNotificationFilter
extends NotificationFilterSupport
{
private HashSet enabled = new HashSet();
private HashSet disabled = null;
private static final long serialVersionUID;
private static final ObjectStreamField[] serialPersistentFields;
static
{
switch (Serialization.version)
{
case Serialization.V1R0:
serialVersionUID = 6001782699077323605L;
serialPersistentFields = new ObjectStreamField[]
{
new ObjectStreamField("myDeselectObjNameList", Vector.class),
new ObjectStreamField("mySelectObjNameList", Vector.class),
};
break;
default:
serialVersionUID = 2605900539589789736L;
serialPersistentFields = new ObjectStreamField[]
{
new ObjectStreamField("deselectedNames", List.class),
new ObjectStreamField("selectedNames", List.class)
};
}
}
public MBeanServerNotificationFilter()
{
}
public synchronized void disableAllObjectNames()
{
enabled = new HashSet();
disabled = null;
}
public synchronized void disableObjectName(ObjectName objectName)
throws IllegalArgumentException
{
if (objectName == null)
throw new IllegalArgumentException("null object name");
if (enabled != null)
enabled.remove(objectName);
if (disabled != null && disabled.contains(objectName) == false)
disabled.add(objectName);
}
public synchronized void enableAllObjectNames()
{
enabled = null;
disabled = new HashSet();
}
public synchronized void enableObjectName(ObjectName objectName)
throws IllegalArgumentException
{
if (objectName == null)
throw new IllegalArgumentException("null object name");
if (disabled != null)
disabled.remove(objectName);
if (enabled != null && enabled.contains(objectName) == false)
enabled.add(objectName);
}
public synchronized Vector getDisabledObjectNames()
{
if (disabled == null)
return null;
return new Vector(disabled);
}
public synchronized Vector getEnabledObjectNames()
{
if (enabled == null)
return null;
return new Vector(enabled);
}
public String toString()
{
StringBuffer buffer = new StringBuffer(100);
buffer.append(getClass().getName()).append(":");
buffer.append(" enabledTypes=").append(getEnabledTypes());
buffer.append(" enabledObjectNames=").append(getEnabledObjectNames());
buffer.append(" disabledObjectNames=").append(getDisabledObjectNames());
return buffer.toString();
}
public synchronized boolean isNotificationEnabled(Notification notification)
throws IllegalArgumentException
{
if (notification == null)
throw new IllegalArgumentException("null notification");
if (super.isNotificationEnabled(notification) == false)
return false;
MBeanServerNotification mbsNotification = (MBeanServerNotification) notification;
ObjectName objectName = mbsNotification.getMBeanName();
if (enabled != null)
return enabled.contains(objectName);
if (disabled.contains(objectName) == false)
return true;
return false;
}
private void readObject(ObjectInputStream ois)
throws IOException, ClassNotFoundException
{
ObjectInputStream.GetField getField = ois.readFields();
List deselectedNames;
List selectedNames;
switch (Serialization.version)
{
case Serialization.V1R0:
deselectedNames = (List) getField.get("myDeselectObjNameList", null);
selectedNames = (List) getField.get("mySelectObjNameList", null);
break;
default:
deselectedNames = (List) getField.get("deselectedNames", null);
selectedNames = (List) getField.get("selectedNames", null);
}
if (deselectedNames == null && selectedNames == null)
throw new StreamCorruptedException("Nothing enabled or disabled?");
if (deselectedNames == null)
disabled = null;
else
disabled = new HashSet(deselectedNames);
if (selectedNames == null)
enabled = null;
else
enabled = new HashSet(selectedNames);
}
private void writeObject(ObjectOutputStream oos)
throws IOException
{
ObjectOutputStream.PutField putField = oos.putFields();
switch (Serialization.version)
{
case Serialization.V1R0:
putField.put("myDeselectObjNameList", getDisabledObjectNames());
putField.put("mySelectObjNameList", getEnabledObjectNames());
break;
default:
putField.put("deselectedNames", getDisabledObjectNames());
putField.put("selectedNames", getEnabledObjectNames());
}
oos.writeFields();
}
}