| /******************************************************************************* |
| * Copyright (c) 2003 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Common Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/cpl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| |
| package org.eclipse.osgi.framework.internal.core; |
| |
| import org.eclipse.osgi.framework.debug.Debug; |
| import org.osgi.framework.*; |
| |
| public class FilteredServiceListener implements ServiceListener |
| { |
| /** Filter for listener. */ |
| protected FilterImpl filter; |
| |
| /** Real listener. */ |
| protected ServiceListener listener; |
| |
| /** |
| * Constructor. |
| * |
| * @param filterstring filter for this listener. |
| * @param listener real listener. |
| * @exception InvalidSyntaxException if the filter is invalid. |
| */ |
| protected FilteredServiceListener(String filterstring, ServiceListener listener) |
| throws InvalidSyntaxException |
| { |
| filter = new FilterImpl(filterstring); |
| this.listener = listener; |
| } |
| |
| /** |
| * Receive notification that a service has had a |
| * change occur in it's lifecycle. |
| * |
| * @param event The ServiceEvent. |
| */ |
| public void serviceChanged(ServiceEvent event) |
| { |
| ServiceReferenceImpl reference = (ServiceReferenceImpl)event.getServiceReference(); |
| |
| if (Debug.DEBUG && Debug.DEBUG_EVENTS) |
| { |
| String listenerName = this.getClass().getName() + "@" + Integer.toHexString(this.hashCode()); |
| Debug.println("filterServiceEvent("+listenerName+", \""+filter+"\", "+reference.registration.properties+")"); |
| } |
| |
| if (filter.match(reference)) |
| { |
| if (Debug.DEBUG && Debug.DEBUG_EVENTS) |
| { |
| String listenerName = listener.getClass().getName() + "@" + Integer.toHexString(listener.hashCode()); |
| Debug.println("dispatchFilteredServiceEvent("+listenerName+")"); |
| } |
| |
| listener.serviceChanged(event); |
| } |
| } |
| |
| /** |
| * Get the filter string used by this Filtered listener. |
| * |
| * @return The filter string used by this listener. |
| */ |
| public String toString() |
| { |
| return(filter.toString()); |
| } |
| |
| } |