/*******************************************************************************
* 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.identity;
import java.net.URI;
import org.eclipse.core.runtime.Assert;
import org.eclipse.ecf.core.identity.BaseID;
import org.eclipse.ecf.core.identity.Namespace;
import org.eclipse.ecf.discovery.IServiceInfo;
/**
* Service identity type. ServiceIDs are IDs that uniquely identify a remote
* service. Subclasses may be created as appropriate.
*/
public class ServiceID extends BaseID implements IServiceID {
private static final long serialVersionUID = 4362768703249025783L;
/**
* @since 3.0
*/
protected IServiceInfo serviceInfo;
protected IServiceTypeID type;
/**
* @since 3.0
*/
protected URI location;
/**
* @param namespace
* namespace should not be <code>null</code>
* @param type
* service type ID should not be <code>null</code>
* @param anURI
* uri for service location should not be <code>null</code>
* @since 3.0
*/
protected ServiceID(Namespace namespace, IServiceTypeID type, URI anURI) {
super(namespace);
Assert.isNotNull(type);
Assert.isNotNull(anURI);
this.type = type;
this.location = anURI;
}
protected String getFullyQualifiedName() {
return type.getName() + "@" + location; //$NON-NLS-1$
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.ecf.core.identity.BaseID#namespaceCompareTo(org.eclipse.ecf
* .core.identity.BaseID)
*/
protected int namespaceCompareTo(BaseID o) {
if (o instanceof ServiceID) {
final ServiceID other = (ServiceID) o;
final String typename = other.getFullyQualifiedName();
return getFullyQualifiedName().compareTo(typename);
}
return 1;
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.ecf.core.identity.BaseID#namespaceEquals(org.eclipse.ecf.
* core.identity.BaseID)
*/
protected boolean namespaceEquals(BaseID o) {
if (o == null)
return false;
if (o instanceof ServiceID) {
final ServiceID other = (ServiceID) o;
if (other.getName().equals(getName())) {
return true;
}
}
return false;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ecf.core.identity.BaseID#namespaceGetName()
*/
protected String namespaceGetName() {
return getFullyQualifiedName();
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ecf.core.identity.BaseID#namespaceHashCode()
*/
protected int namespaceHashCode() {
return getFullyQualifiedName().hashCode();
}
/**
* Get service type for this ID.
*
* @return String service type. Will not be <code>null</code>.
*/
public String getServiceType() {
return type.getName();
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ecf.discovery.identity.IServiceID#getServiceTypeID()
*/
public IServiceTypeID getServiceTypeID() {
return type;
}
/**
* Get service name for this ID.
*
* @return String service name. May be <code>null</code>.
*/
public String getServiceName() {
return serviceInfo.getServiceName();
}
/*
* (non-Javadoc)
*
* @see java.lang.Object#toString()
*/
public String toString() {
final StringBuffer buf = new StringBuffer("ServiceID["); //$NON-NLS-1$
buf.append("type=").append(type).append(";location=").append(getLocation()).append( //$NON-NLS-1$ //$NON-NLS-2$
";full=" + getFullyQualifiedName()).append("]"); //$NON-NLS-1$ //$NON-NLS-2$
return buf.toString();
}
/**
* (non-Javadoc)
*
* @see org.eclipse.ecf.discovery.identity.IServiceID#getLocation()
* @since 3.0
*/
public URI getLocation() {
return location;
}
/**
* @return the serviceInfo
* @since 3.0
*/
public IServiceInfo getServiceInfo() {
return serviceInfo;
}
/**
* @param serviceInfo
* the serviceInfo to set
* @since 3.0
*/
public void setServiceInfo(IServiceInfo serviceInfo) {
this.serviceInfo = serviceInfo;
}
/**
* @see java.lang.Object#hashCode()
*
* @since 3.0
*/
public int hashCode() {
final int prime = 31;
int result = super.hashCode();
result = prime * result + ((location == null) ? 0 : location.hashCode());
result = prime * result + ((type == null) ? 0 : type.hashCode());
return result;
}
/**
* @see java.lang.Object#equals(java.lang.Object)
*
* @since 3.0
*/
public boolean equals(Object obj) {
if (this == obj)
return true;
if (!super.equals(obj))
return false;
if (getClass() != obj.getClass())
return false;
ServiceID other = (ServiceID) obj;
if (location == null) {
if (other.location != null)
return false;
} else if (!location.equals(other.location))
return false;
if (type == null) {
if (other.type != null)
return false;
} else if (!type.equals(other.type))
return false;
return true;
}
}