package org.drools.grid.service.directory.impl;
import java.io.Serializable;
import java.net.InetSocketAddress;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import org.drools.grid.GridServiceDescription;
import org.drools.grid.service.directory.Address;
public class GridServiceDescriptionImpl
implements
GridServiceDescription,
Serializable {
private String id;
private Class serviceInterface;
private Map<String, Address> addresses = new HashMap<String, Address>();
private Serializable data;
public GridServiceDescriptionImpl() {
}
public GridServiceDescriptionImpl(Class cls) {
this.serviceInterface = cls;
this.id = cls.getName();
}
public GridServiceDescriptionImpl(String id) {
this.id = id;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public Class getServiceInterface() {
return this.serviceInterface;
}
public void setServiceInterface(Class serviceInterface) {
this.serviceInterface = serviceInterface;
}
public synchronized Address addAddress(String protocol) {
AddressImpl address = new AddressImpl( this,
protocol,
null );
this.addresses.put( address.getTransport(),
address );
return address;
}
public synchronized Map<String, Address> getAddresses() {
return Collections.unmodifiableMap( addresses );
}
public synchronized void removeAddress(String transport) {
this.addresses.remove( transport );
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((addresses == null) ? 0 : addresses.hashCode());
result = prime * result + ((id == null) ? 0 : id.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
//@TODO: improve equals comparision
final GridServiceDescription other = (GridServiceDescription) obj;
if ( !this.getId().equals( other.getId() ) ) {
return false;
}
return true;
}
@Override
public String toString() {
String result = id + "@";
Set<String> keys = addresses.keySet();
for ( String key : keys ) {
if ( addresses.get( key ).getObject() instanceof InetSocketAddress[] ) {
result += key + "=[" + ((InetSocketAddress[]) addresses.get( key ).getObject())[0].getHostName() + ":" +
((InetSocketAddress[]) addresses.get( key ).getObject())[0].getPort() + "]/" + addresses.get( key ).getTransport();
}
}
return result;
}
public Serializable getData() {
return data;
}
public void setData(Serializable data) {
this.data = data;
}
}