package context.arch.service.helper;
import context.arch.comm.DataObject;
import context.arch.comm.DataObjects;
import java.util.Vector;
/**
* This class maintains a list of service descriptions.
*
* @see context.arch.service.Service
*/
public class ServiceDescriptions extends Vector<ServiceDescription> {
private static final long serialVersionUID = -443788880568797984L;
/**
* Tag for a widget's services
*/
public static final String SERVICES = "services";
/**
* Basic empty constructor
*/
public ServiceDescriptions() {
super();
}
/**
* Constructor that takes a DataObject as a parameter. The DataObject
* must contain the tag <SERVICES>. It stores the encoded data.
*
* @param data DataObject that contains the service info
*/
public ServiceDescriptions(DataObject data) {
super();
DataObject services = data.getDataObject(SERVICES);
DataObjects v = services.getChildren();
for (int i=0; i<v.size(); i++) {
addServiceDescription(new ServiceDescription((DataObject)v.elementAt(i)));
}
}
/**
* Converts to a DataObject.
*
* @return Services object converted to an <Services> DataObject
*/
public DataObject toDataObject() {
DataObjects v = new DataObjects();
for (int i=0; i<numServiceDescriptions(); i++) {
v.addElement(getServiceDescriptionAt(i).toDataObject());
}
return new DataObject(SERVICES,v);
}
/**
* Adds the given ServiceDescription object to the container.
*
* @param service ServiceDescription to add
*/
public void addServiceDescription(ServiceDescription service) {
addElement(service);
}
/**
* Adds the given service description to the container.
*
* @param name Name of the service to add
* @param descriptions Descriptions of the service being added
*/
public void addServiceDescription(String name, FunctionDescriptions descriptions) {
addElement(new ServiceDescription(name,descriptions));
}
/**
* Adds the given ServiceDescriptions object to the container.
*
* @param services ServiceDescriptions to add
*/
public void addServiceDescriptions(ServiceDescriptions services) {
for (int i=0; i<services.numServiceDescriptions(); i++) {
addServiceDescription(services.getServiceDescriptionAt(i));
}
}
/**
* Returns the ServiceDescription object at the given index
*
* @param index Index into the container
* @return ServiceDescription at the specified index
*/
public ServiceDescription getServiceDescriptionAt(int index) {
return (ServiceDescription)elementAt(index);
}
/**
* Determines whether the given ServiceDescription object is in the container
*
* @param call ServiceDescription to check
* @return whether ServiceDescription is in the container
*/
public boolean hasServiceDescription(ServiceDescription service) {
return contains(service);
}
/**
* Determines whether the given service description is in the container.
*
* @param name Name of the service to check
* @param descriptions Descriptions of the service to check
* @return whether the given service description is in the container
*/
public boolean hasServiceDescription(String name, FunctionDescriptions descriptions) {
return contains(new ServiceDescription(name,descriptions));
}
/**
* Determines whether a service with the given name is in the container
*
* @param name Name of the service to look for
* @return whether a service with the given name is in the container
*/
public boolean hasServiceDescription(String name) {
for (int i=0; i<numServiceDescriptions(); i++) {
if (getServiceDescriptionAt(i).getName().equals(name)) {
return true;
}
}
return false;
}
/**
* Returns the index at which the ServiceDescription object occurs
*
* @param service ServiceDescription to look for
* @return index of the specified ServiceDescription
*/
public int indexOfServiceDescription(ServiceDescription service) {
return indexOf(service);
}
/**
* Returns the index at which the given service description occurs
*
* @param name Name of the service to look for
* @param descriptions Descriptions of the service to look for
*/
public int indexOfServiceDescription(String name, FunctionDescriptions descriptions) {
return indexOf(new ServiceDescription(name,descriptions));
}
/**
* Returns the number of ServiceDescriptions in the container
*
* return the number of ServiceDescriptions in the container
*/
public int numServiceDescriptions() {
return size();
}
/**
* This method returns the ServiceDescription with the given name
* from this list of ServiceDescriptions.
*
* @param name of the Service to return
* @return ServiceDescription with the given name
*/
public ServiceDescription getServiceDescription(String name) {
for (int i=0; i<numServiceDescriptions(); i++) {
ServiceDescription service = getServiceDescriptionAt(i);
if (service.getName().equals(name)) {
return service;
}
}
return null;
}
}