Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorslewis2007-10-03 05:26:57 +0000
committerslewis2007-10-03 05:26:57 +0000
commitfaa586bd42627a6e100490a84c9cc7563567e783 (patch)
treedc439ea781a25322486a22bce1345f0c953e067d /providers/bundles/org.eclipse.ecf.provider.remoteservice/src
parentff2f4e753375e9b1406ac66ae2b21874fc0015fc (diff)
downloadorg.eclipse.ecf-faa586bd42627a6e100490a84c9cc7563567e783.tar.gz
org.eclipse.ecf-faa586bd42627a6e100490a84c9cc7563567e783.tar.xz
org.eclipse.ecf-faa586bd42627a6e100490a84c9cc7563567e783.zip
Added ServiceTypeListener class
Diffstat (limited to 'providers/bundles/org.eclipse.ecf.provider.remoteservice/src')
-rw-r--r--providers/bundles/org.eclipse.ecf.provider.remoteservice/src/org/eclipse/ecf/provider/remoteservice/ServiceTypeListener.java135
1 files changed, 135 insertions, 0 deletions
diff --git a/providers/bundles/org.eclipse.ecf.provider.remoteservice/src/org/eclipse/ecf/provider/remoteservice/ServiceTypeListener.java b/providers/bundles/org.eclipse.ecf.provider.remoteservice/src/org/eclipse/ecf/provider/remoteservice/ServiceTypeListener.java
new file mode 100644
index 000000000..c10e4680a
--- /dev/null
+++ b/providers/bundles/org.eclipse.ecf.provider.remoteservice/src/org/eclipse/ecf/provider/remoteservice/ServiceTypeListener.java
@@ -0,0 +1,135 @@
+/****************************************************************************
+ * Copyright (c) 2007 Composent, Inc. and others.
+ * 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:
+ * Composent, Inc. - initial API and implementation
+ *****************************************************************************/
+
+package org.eclipse.ecf.provider.remoteservice;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.ecf.discovery.IDiscoveryContainerAdapter;
+import org.eclipse.ecf.discovery.IServiceEvent;
+import org.eclipse.ecf.discovery.IServiceInfo;
+import org.eclipse.ecf.discovery.IServiceListener;
+import org.eclipse.ecf.discovery.IServiceProperties;
+import org.eclipse.ecf.discovery.IServiceTypeListener;
+import org.eclipse.ecf.discovery.identity.IServiceTypeID;
+
+/**
+ * Helper class for setting up service listeners for a given serviceTypeID.
+ */
+public class ServiceTypeListener implements IServiceTypeListener {
+
+ private final IDiscoveryContainerAdapter discovery;
+ private final IServiceTypeID[] serviceTypeIDs;
+ private final IServiceListener serviceListener;
+ private final String[] requiredProperties;
+
+ class ServiceListener implements IServiceListener {
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ecf.discovery.IServiceListener#serviceAdded(org.eclipse.ecf.discovery.IServiceEvent)
+ */
+ public void serviceAdded(IServiceEvent event) {
+ final IServiceInfo svcInfo = event.getServiceInfo();
+ if (hasRequiredProperties(svcInfo.getServiceProperties()))
+ serviceListener.serviceAdded(event);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ecf.discovery.IServiceListener#serviceRemoved(org.eclipse.ecf.discovery.IServiceEvent)
+ */
+ public void serviceRemoved(IServiceEvent event) {
+ final IServiceInfo svcInfo = event.getServiceInfo();
+ if (hasRequiredProperties(svcInfo.getServiceProperties()))
+ serviceListener.serviceRemoved(event);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ecf.discovery.IServiceListener#serviceResolved(org.eclipse.ecf.discovery.IServiceEvent)
+ */
+ public void serviceResolved(IServiceEvent event) {
+ final IServiceInfo svcInfo = event.getServiceInfo();
+ if (hasRequiredProperties(svcInfo.getServiceProperties()))
+ serviceListener.serviceResolved(event);
+ }
+ }
+
+ /**
+ *
+ * @param discovery discovery adapter instance to set up. Must not be <code>null</code>.
+ * @param serviceListener service listener to receive notifications of service added/removed and resolved notifications. Must not be <code>null</code>.
+ * @param serviceTypeID service type IDs to setup service listeners for. May be <code>null</code>. If <code>null</code>, then
+ * all service types will notify the given serviceListener.
+ * @param requiredProperties properties required of the service info
+ */
+ public ServiceTypeListener(IDiscoveryContainerAdapter discovery, IServiceListener serviceListener, IServiceTypeID[] serviceTypeIDs, String[] requiredProperties) {
+ this.discovery = discovery;
+ Assert.isNotNull(this.discovery);
+ this.serviceListener = serviceListener;
+ Assert.isNotNull(this.serviceListener);
+ this.serviceTypeIDs = serviceTypeIDs;
+ this.requiredProperties = requiredProperties;
+ }
+
+ /**
+ *
+ * @param discovery discovery adapter instance to set up. Must not be <code>null</code>.
+ * @param serviceListener service listener to receive notifications of service added/removed and resolved notifications. Must not be <code>null</code>.
+ * @param serviceTypeID service type IDs to setup service listeners for. May be <code>null</code>. If <code>null</code>, then
+ * all service types will notify the given serviceListener.
+ * @param requiredProperties properties required of the service info
+ */
+ public ServiceTypeListener(IDiscoveryContainerAdapter discovery, IServiceListener serviceListener, IServiceTypeID serviceTypeID, String[] requiredProperties) {
+ this(discovery, serviceListener, new IServiceTypeID[] {serviceTypeID}, requiredProperties);
+ }
+
+ /**
+ *
+ * @param discovery discovery adapter instance to set up. Must not be <code>null</code>.
+ * @param serviceListener service listener to receive notifications of service added/removed and resolved notifications. Must not be <code>null</code>.
+ * @param serviceTypeID service type IDs to setup service listeners for. May be <code>null</code>. If <code>null</code>, then
+ * all service types will notify the given serviceListener.
+ */
+ public ServiceTypeListener(IDiscoveryContainerAdapter discovery, IServiceListener serviceListener, IServiceTypeID serviceTypeID) {
+ this(discovery, serviceListener, new IServiceTypeID[] {serviceTypeID}, null);
+ }
+
+ public ServiceTypeListener(IDiscoveryContainerAdapter discovery, IServiceListener serviceListener) {
+ this(discovery, serviceListener, (IServiceTypeID[]) null, null);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ecf.discovery.IServiceTypeListener#serviceTypeAdded(org.eclipse.ecf.discovery.IServiceEvent)
+ */
+ public final void serviceTypeAdded(IServiceEvent event) {
+ final IServiceTypeID remoteServiceTypeID = event.getServiceInfo().getServiceID().getServiceTypeID();
+ if (hasRequiredTypeID(remoteServiceTypeID)) {
+ this.discovery.addServiceListener(remoteServiceTypeID, serviceListener);
+ this.discovery.registerServiceType(remoteServiceTypeID);
+ }
+ }
+
+ private boolean hasRequiredTypeID(IServiceTypeID remoteServiceTypeID) {
+ if (serviceTypeIDs == null)
+ return true;
+ for (int i = 0; i < serviceTypeIDs.length; i++)
+ if (remoteServiceTypeID.equals(serviceTypeIDs[i]))
+ return true;
+ return false;
+ }
+
+ private boolean hasRequiredProperties(IServiceProperties serviceProperties) {
+ if (requiredProperties == null)
+ return true;
+ for (int i = 0; i < requiredProperties.length; i++)
+ if (serviceProperties.getProperty(requiredProperties[i]) == null)
+ return false;
+ return true;
+ }
+}

Back to the top