package javax.slee.usage; import javax.management.Notification; import javax.management.NotificationFilter; import javax.slee.InvalidArgumentException; import javax.slee.SbbID; import javax.slee.ServiceID; import javax.slee.management.NotificationSource; /** * A notification filter that only allows through {@link UsageNotification}s where the * notification source and usage parameter name match specified values, and the value of * the usage parameter contained in the notification falls outside a specified range. * <p> * If the notification contains usage information for some other notification source or * usage parameter, or the value of the usage parameter falls within the specified range, * the notification is suppressed. * <p> * Notifications that are not instances of {@link UsageNotification} are suppressed * by this filter. */ public class UsageOutOfRangeFilter implements NotificationFilter { /** * Create a <code>UsageOutOfRangeFilter</code>. A filter created using this constructor * will only allow SLEE 1.0-compliant usage notifications to pass through where they * otherwise satisfy the filtering criteria. * @param service the component identifier of the Service whose usage parameter * should be monitored. * @param sbb the component identifier of the SBB whose usage parameter should be * monitored. * @param paramName the name of a usage parameter defined by the SBB. * @param lowValue the lower bound of the range. Notifications are allowed through * this filter if the value of the specified usage parameter is less than * this value. * @param highValue the upper bound of the range. Notifications are allowed through * this filter if the value of the specified usage parameter is greater than * this value. * @throws NullPointerException if <code>service</code>, <code>sbb</code>, or * <code>paramName</code> is <code>null</code>. * @throws InvalidArgumentException if <code>highValue < lowValue</code>. * @deprecated Replaced with {@link #UsageOutOfRangeFilter(NotificationSource, String, long, long)} * as usage collecting has been expanded to include SLEE components other than SBBs. */ public UsageOutOfRangeFilter(ServiceID service, SbbID sbb, String paramName, long lowValue, long highValue) throws NullPointerException, InvalidArgumentException { if (service == null) throw new NullPointerException("service is null"); if (sbb == null) throw new NullPointerException("sbb is null"); if (paramName == null) throw new NullPointerException("paramName is null"); if (highValue < lowValue) throw new InvalidArgumentException("highValue < lowValue"); this.service = service; this.sbb = sbb; this.paramName = paramName; this.lowValue = lowValue; this.highValue = highValue; // forward compatibiltiy this.notificationSource = null; } /** * Create a <code>UsageOutOfRangeFilter</code>. A filter created using this constructor * will only allow SLEE 1.0-compliant usage notifications to pass through where they * otherwise satisfy the filtering criteria. * @param notificationSource the notification source whose usage parameter should be * monitored. * @param paramName the name of a usage parameter defined by the SBB. * @param lowValue the lower bound of the range. Notifications are allowed through * this filter if the value of the specified usage parameter is less than * this value. * @param highValue the upper bound of the range. Notifications are allowed through * this filter if the value of the specified usage parameter is greater than * this value. * @throws NullPointerException if <code>notificationSource</code> or <code>paramName</code> * is <code>null</code>. * @throws InvalidArgumentException if <code>highValue < lowValue</code>. */ public UsageOutOfRangeFilter(NotificationSource notificationSource, String paramName, long lowValue, long highValue) throws NullPointerException, InvalidArgumentException { if (notificationSource == null) throw new NullPointerException("notificationSource is null"); if (paramName == null) throw new NullPointerException("paramName is null"); if (highValue < lowValue) throw new InvalidArgumentException("highValue < lowValue"); this.notificationSource = notificationSource; this.paramName = paramName; this.lowValue = lowValue; this.highValue = highValue; // backward compatibiltiy this.service = null; this.sbb = null; } /** * Determine whether the specified notification should be delivered to notification * listeners using this notification filter. * @param notification the notification to be sent. * @return <code>true</code> if the notification should be delivered to notification * listeners, <code>false</code> otherwise. This method always returns * <code>false</code> if <code>notification</code> is not an instance of * {@link UsageNotification}. */ public boolean isNotificationEnabled(Notification notification) { if (!(notification instanceof UsageNotification)) return false; UsageNotification usageNotification = (UsageNotification)notification; if (service != null) { // SLEE 1.0 comparison return service.equals(usageNotification.getService()) && sbb.equals(usageNotification.getSbb()) && paramName.equals(usageNotification.getUsageParameterName()) && (usageNotification.getValue() < lowValue || usageNotification.getValue() > highValue); } else { // SLEE 1.1 comparison return notificationSource.equals(usageNotification.getNotificationSource()) && paramName.equals(usageNotification.getUsageParameterName()) && (usageNotification.getValue() < lowValue || usageNotification.getValue() > highValue); } } private final ServiceID service; private final SbbID sbb; private final NotificationSource notificationSource; private final String paramName; private final long lowValue; private final long highValue; }