blob: 6c5a0f0ab4f9609ba44bb29a9b0650b3278310c1 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004 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.discovery;
import java.io.Serializable;
import java.net.*;
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.IAdapterManager;
import org.eclipse.ecf.discovery.identity.IServiceID;
import org.eclipse.ecf.internal.discovery.DiscoveryPlugin;
import org.eclipse.ecf.internal.discovery.Messages;
/**
* Base implementation of {@link IServiceInfo}. Subclasses
* may be created as appropriate.
*/
public class ServiceInfo implements IServiceInfo, Serializable, IContainerServiceInfoAdapter {
private static final long serialVersionUID = -5651115550295457142L;
public static final int DEFAULT_PRIORITY = 0;
public static final int DEFAULT_WEIGHT = 0;
public static final String DEFAULT_PROTOCOL = "xxxxx"; //$NON-NLS-1$
protected URI uri = null;
protected IServiceID serviceID;
protected int priority;
protected int weight;
protected IServiceProperties properties;
protected ServiceInfo() {
// null constructor for subclasses
}
public ServiceInfo(URI anURI, IServiceID serviceID, int priority, int weight, IServiceProperties props) {
this.uri = anURI;
Assert.isNotNull(this.uri);
this.serviceID = serviceID;
Assert.isNotNull(serviceID);
this.priority = priority;
this.weight = weight;
this.properties = (props == null) ? new ServiceProperties() : props;
}
public ServiceInfo(String host, int port, IServiceID serviceID, int priority, int weight, IServiceProperties props) {
try {
if (host == null)
host = InetAddress.getLocalHost().getHostAddress();
uri = new URI(DEFAULT_PROTOCOL, null, host, port, null, null, null);
} catch (URISyntaxException e) {
throw new IllegalArgumentException(Messages.ServiceInfo_EXCEPTION_INVALID_HOST_ARG);
} catch (UnknownHostException e) {
throw new IllegalArgumentException(Messages.ServiceInfo_EXCEPTION_NO_LOCALHOST);
}
this.serviceID = serviceID;
Assert.isNotNull(serviceID);
this.priority = priority;
this.weight = weight;
this.properties = (props == null) ? new ServiceProperties() : props;
}
public ServiceInfo(String host, int port, IServiceID serviceID, IServiceProperties props) {
this(host, port, serviceID, DEFAULT_PRIORITY, DEFAULT_WEIGHT, props);
}
public ServiceInfo(String host, int port, IServiceID serviceID) {
this(host, port, serviceID, new ServiceProperties());
}
public ServiceInfo(URI anURI, IServiceID serviceID, IServiceProperties props) {
this(anURI, serviceID, DEFAULT_PRIORITY, DEFAULT_WEIGHT, props);
}
public ServiceInfo(URI anURI, IServiceID serviceID) {
this(anURI, serviceID, DEFAULT_PRIORITY, DEFAULT_WEIGHT, new ServiceProperties());
}
/* (non-Javadoc)
* @see org.eclipse.ecf.discovery.IServiceInfo#getAddress()
*/
public URI getLocation() {
return uri;
}
protected void setLocation(URI address) {
this.uri = address;
}
/* (non-Javadoc)
* @see org.eclipse.ecf.discovery.IServiceInfo#getServiceID()
*/
public IServiceID getServiceID() {
return serviceID;
}
/* (non-Javadoc)
* @see org.eclipse.ecf.discovery.IServiceInfo#getPriority()
*/
public int getPriority() {
return priority;
}
/* (non-Javadoc)
* @see org.eclipse.ecf.discovery.IServiceInfo#getWeight()
*/
public int getWeight() {
return weight;
}
/* (non-Javadoc)
* @see org.eclipse.ecf.discovery.IServiceInfo#getServiceProperties()
*/
public IServiceProperties getServiceProperties() {
return properties;
}
/* (non-Javadoc)
* @see org.eclipse.ecf.discovery.IServiceInfo#isResolved()
*/
public boolean isResolved() {
return (uri != null);
}
/* (non-Javadoc)
* @see java.lang.Object#toString()
*/
public String toString() {
final StringBuffer buf = new StringBuffer("ServiceInfo["); //$NON-NLS-1$
buf.append("uri=").append(uri).append(";id=").append(serviceID) //$NON-NLS-1$ //$NON-NLS-2$
.append(";priority=").append( //$NON-NLS-1$
priority).append(";weight=").append(weight).append( //$NON-NLS-1$
";props=").append(properties).append("]"); //$NON-NLS-1$ //$NON-NLS-2$
return buf.toString();
}
/* (non-Javadoc)
* @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class)
*/
public Object getAdapter(Class adapter) {
if (adapter.isInstance(this)) {
return this;
}
final IAdapterManager adapterManager = DiscoveryPlugin.getDefault().getAdapterManager();
if (adapterManager == null)
return null;
return adapterManager.loadAdapter(this, adapter.getName());
}
/* (non-Javadoc)
* @see org.eclipse.ecf.discovery.IContainerServiceInfoAdapter#getContainerFactoryName()
*/
public String getContainerFactoryName() {
return (properties == null) ? null : properties.getPropertyString(IDiscoveryContainerAdapter.CONTAINER_FACTORY_NAME_PROPERTY);
}
/* (non-Javadoc)
* @see org.eclipse.ecf.discovery.IContainerServiceInfoAdapter#getTarget()
*/
public String getConnectTarget() {
if (uri == null || properties == null)
return null;
String connectTarget = properties.getPropertyString(IDiscoveryContainerAdapter.CONTAINER_CONNECT_TARGET);
if (connectTarget != null)
return connectTarget;
String t = properties.getPropertyString(IDiscoveryContainerAdapter.CONTAINER_CONNECT_TARGET_PROTOCOL);
if (t == null)
return null;
StringBuffer target = new StringBuffer(t);
String auth = uri.getAuthority();
String path = properties.getPropertyString(IDiscoveryContainerAdapter.CONTAINER_CONNECT_TARGET_PATH);
if (path == null)
path = "/"; //$NON-NLS-1$
target.append("://").append(auth).append("/").append(path); //$NON-NLS-1$ //$NON-NLS-2$
return target.toString();
}
/* (non-Javadoc)
* @see org.eclipse.ecf.discovery.IContainerServiceInfoAdapter#setContainerProperties(java.lang.String, java.lang.String, java.lang.String, java.lang.Boolean)
*/
public void setContainerProperties(String containerFactoryName, String connectProtocol, String connectPath, Boolean connectRequiresPassword) {
Assert.isNotNull(containerFactoryName);
properties.setPropertyString(IDiscoveryContainerAdapter.CONTAINER_FACTORY_NAME_PROPERTY, containerFactoryName);
Assert.isNotNull(connectProtocol);
properties.setPropertyString(IDiscoveryContainerAdapter.CONTAINER_CONNECT_TARGET_PROTOCOL, connectProtocol);
if (connectPath != null)
properties.setPropertyString(IDiscoveryContainerAdapter.CONTAINER_CONNECT_TARGET_PATH, connectPath);
if (connectRequiresPassword != null)
properties.setPropertyString(IDiscoveryContainerAdapter.CONTAINER_CONNECT_REQUIRES_PASSWORD, connectRequiresPassword.toString());
}
/* (non-Javadoc)
* @see org.eclipse.ecf.discovery.IContainerServiceInfoAdapter#connectRequiresPassword()
*/
public Boolean connectRequiresPassword() {
String b = properties.getPropertyString(IDiscoveryContainerAdapter.CONTAINER_CONNECT_REQUIRES_PASSWORD);
if (b == null)
return null;
return Boolean.valueOf(b);
}
/* (non-Javadoc)
* @see org.eclipse.ecf.discovery.IContainerServiceInfoAdapter#setContainerProperties(java.lang.String, java.lang.String, java.lang.Boolean)
*/
public void setContainerProperties(String containerFactoryName, String connectTarget, Boolean connectRequiresPassword) {
Assert.isNotNull(containerFactoryName);
properties.setPropertyString(IDiscoveryContainerAdapter.CONTAINER_FACTORY_NAME_PROPERTY, containerFactoryName);
Assert.isNotNull(connectTarget);
properties.setPropertyString(IDiscoveryContainerAdapter.CONTAINER_CONNECT_TARGET, connectTarget);
if (connectRequiresPassword != null)
properties.setPropertyString(IDiscoveryContainerAdapter.CONTAINER_CONNECT_REQUIRES_PASSWORD, connectRequiresPassword.toString());
}
}