blob: 65c2caedf003421e6cdc4a582a5a4382fd8e7a9c [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010-2011 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.osgi.services.remoteserviceadmin;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.ecf.core.identity.Namespace;
import org.eclipse.ecf.discovery.IDiscoveryLocator;
import org.eclipse.ecf.discovery.IServiceInfo;
import org.eclipse.ecf.discovery.IServiceProperties;
import org.eclipse.ecf.discovery.identity.IServiceID;
import org.osgi.service.remoteserviceadmin.EndpointDescription;
/**
* Default implementation of {@link IDiscoveredEndpointDescriptionFactory} service.
*
* @see IDiscoveredEndpointDescriptionFactory
*/
public class DiscoveredEndpointDescriptionFactory extends
AbstractMetadataFactory implements
IDiscoveredEndpointDescriptionFactory {
protected List<DiscoveredEndpointDescription> discoveredEndpointDescriptions = new ArrayList();
private DiscoveredEndpointDescription findDiscoveredEndpointDescription(
org.osgi.service.remoteserviceadmin.EndpointDescription endpointDescription) {
synchronized (discoveredEndpointDescriptions) {
for (DiscoveredEndpointDescription d : discoveredEndpointDescriptions) {
org.osgi.service.remoteserviceadmin.EndpointDescription ed = d
.getEndpointDescription();
if (ed.equals(endpointDescription))
return d;
}
}
return null;
}
private DiscoveredEndpointDescription findUniscoveredEndpointDescription(
IDiscoveryLocator locator, IServiceID serviceID) {
synchronized (discoveredEndpointDescriptions) {
for (DiscoveredEndpointDescription d : discoveredEndpointDescriptions) {
Namespace dln = d.getDiscoveryLocatorNamespace();
IServiceID svcId = d.getServiceID();
if (dln.getName().equals(
locator.getServicesNamespace().getName())
&& svcId.equals(serviceID)) {
return d;
}
}
}
return null;
}
public DiscoveredEndpointDescription createDiscoveredEndpointDescription(
IDiscoveryLocator locator, IServiceInfo discoveredServiceInfo) {
try {
org.osgi.service.remoteserviceadmin.EndpointDescription endpointDescription = createEndpointDescription(
locator, discoveredServiceInfo);
synchronized (discoveredEndpointDescriptions) {
DiscoveredEndpointDescription ded = findDiscoveredEndpointDescription(endpointDescription);
if (ded != null)
return ded;
else {
ded = createDiscoveredEndpointDescription(locator,
discoveredServiceInfo, endpointDescription);
// put into discoveredEndpointDescriptions
discoveredEndpointDescriptions.add(ded);
return ded;
}
}
} catch (Exception e) {
logError("createDiscoveredEndpointDescription", //$NON-NLS-1$
"Exception creating discovered endpoint description", e); //$NON-NLS-1$
return null;
}
}
public DiscoveredEndpointDescription removeDiscoveredEndpointDescription(
IDiscoveryLocator locator, IServiceID serviceID) {
synchronized (discoveredEndpointDescriptions) {
DiscoveredEndpointDescription ded = findUniscoveredEndpointDescription(
locator, serviceID);
if (ded != null) {
// remove
discoveredEndpointDescriptions.remove(ded);
return ded;
}
}
return null;
}
protected org.osgi.service.remoteserviceadmin.EndpointDescription createEndpointDescription(
IDiscoveryLocator locator, IServiceInfo discoveredServiceInfo) {
IServiceProperties discoveredServiceProperties = discoveredServiceInfo
.getServiceProperties();
return decodeEndpointDescription(discoveredServiceProperties);
}
protected DiscoveredEndpointDescription createDiscoveredEndpointDescription(
IDiscoveryLocator locator,
IServiceInfo discoveredServiceInfo,
org.osgi.service.remoteserviceadmin.EndpointDescription endpointDescription) {
return new DiscoveredEndpointDescription(
locator.getServicesNamespace(),
discoveredServiceInfo.getServiceID(), endpointDescription);
}
public void close() {
removeAllDiscoveredEndpointDescriptions();
super.close();
}
public boolean removeDiscoveredEndpointDescription(
EndpointDescription endpointDescription) {
synchronized (discoveredEndpointDescriptions) {
DiscoveredEndpointDescription d = findDiscoveredEndpointDescription(endpointDescription);
if (d != null) {
discoveredEndpointDescriptions.remove(d);
return true;
}
}
return false;
}
public void removeAllDiscoveredEndpointDescriptions() {
synchronized (discoveredEndpointDescriptions) {
discoveredEndpointDescriptions.clear();
}
}
}