package context.arch.service.helper;
import context.arch.comm.DataObject;
import context.arch.comm.DataObjects;
import context.arch.storage.Attributes;
import context.arch.util.Constants;
/**
* This class implements a service input object used for executing a service.
*/
public class ServiceInput {
/**
* Tag for a service input
*/
public static final String SERVICE_INPUT = "serviceInput";
/**
* Tag for a service id
*/
public static final String SERVICE_ID = "serviceId";
/**
* Tag for a service name
*/
public static final String SERVICE_NAME = ServiceDescription.SERVICE_NAME;
/**
* Tag for a function name
*/
public static final String FUNCTION_NAME = FunctionDescription.FUNCTION_NAME;
/**
* Tag for a service request tag
*/
public static final String REQUEST_TAG = "requestTag";
private String serviceId;
private String service;
private String function;
private Attributes input;
private String host;
private String port;
private String id;
private String requestTag;
/**
* Basic constructor that creates a serviceInput object for a synchronous services.
* It contains the name of the service and function to execute and the input to
* the service.
*
* @param service Name of the service to execute
* @param function Name of the service function to execute
* @input containint AttributeNameValues as input to the service
*/
public ServiceInput(String service, String function, Attributes input) {
this.service = service;
this.function = function;
this.input = input;
}
/**
* Basic constructor that creates a serviceInput object for a synchronous services.
* It contains the name of the service and function to execute and the input to
* the service. No input attributes parameters.
*
* @param service Name of the service to execute
* @param function Name of the service function to execute
*/
public ServiceInput(String service, String function) {
this.service = service;
this.function = function;
this.input = new Attributes();
}
/**
* Basic constructor that creates a serviceInput object for an asynchronous services.
* It contains the name of the service and function to execute and the input to
* the service, just like the one for the synchronous service. But, it also
* includes the requester's port, hostname, id, a unique tag to identify
* the request and the id of the component offering the service.
*
* @param serviceId Id of the component offering the service
* @param service Name of the service to execute
* @param function Name of the service function to execute
* @input AttributeNameValues object containing the input to the service
* @param host Hostname of the component requesting the service
* @param port Port of the component requesting the service
* @input id Id of the component requesting the service
* @input requestId Unique id for identifying the request
*/
public ServiceInput(String serviceId,String service, String function, Attributes input, String host,
int port, String id, String requestTag) {
this(serviceId,service,function,input,host,String.valueOf(port),id,requestTag);
}
/**
* Basic constructor that creates a serviceInput object for an asynchronous services.
* It contains the name of the service and function to execute and the input to
* the service, just like the one for the synchronous service. But, it also
* includes the requester's port, hostname, id, a unique tag to identify
* the request and the id of the component offering the service.
*
* @param serviceId Id of the component offering the service
* @param service Name of the service to execute
* @param function Name of the service function to execute
* @input AttributeNameValues object containing the input to the service
* @param host Hostname of the component requesting the service
* @param port Port of the component requesting the service
* @input id Id of the component requesting the service
* @input requestId Unique id for identifying the request
*/
public ServiceInput(String serviceId,String service, String function, Attributes input, String host,
String port, String id, String requestTag) {
this.serviceId = serviceId;
this.service = service;
this.function = function;
this.input = input;
this.host = host;
this.port = port;
this.id = id;
this.requestTag = requestTag;
}
/**
* Basic constructor that creates a serviceInput object from a DataObject.
* The DataObject must contain the <SERVICE_INPUT> tag.
*/
public ServiceInput(DataObject data) {
DataObject serv = data.getDataObject(SERVICE_INPUT);
DataObject sidObj = serv.getDataObject(SERVICE_ID);
if (sidObj != null) {
serviceId = sidObj.getValue();
}
DataObject nameObj = serv.getDataObject(SERVICE_NAME);
if (nameObj != null) {
service = nameObj.getValue();
}
DataObject functionObj = serv.getDataObject(FUNCTION_NAME);
if (functionObj != null) {
function = functionObj.getValue();
}
input = Attributes.fromDataObject(serv);
DataObject hostObj = serv.getDataObject(Constants.HOSTNAME);
if (hostObj != null) {
host = hostObj.getValue();
}
DataObject portObj = serv.getDataObject(Constants.PORT);
if (portObj != null) {
port = portObj.getValue();
}
DataObject idObj = serv.getDataObject(Constants.ID);
if (idObj != null) {
id = idObj.getValue();
}
DataObject requestTagObj = serv.getDataObject(REQUEST_TAG);
if (requestTagObj != null) {
requestTag = requestTagObj.getValue();
}
}
/**
* This method converts the service input info to a DataObject
*
* @return ServiceInput object converted to a <SERVICE_INPUT> DataObject
*/
public DataObject toDataObject() {
DataObjects v = new DataObjects();
if (service != null) {
v.addElement(new DataObject(SERVICE_NAME,service));
}
if (function != null) {
v.addElement(new DataObject(FUNCTION_NAME,function));
}
if (input != null) {
v.addElement(input.toDataObject());
}
if (serviceId != null) {
v.addElement(new DataObject(SERVICE_ID,serviceId));
}
if (host != null) {
v.addElement(new DataObject(Constants.HOSTNAME,host));
}
if (port != null) {
v.addElement(new DataObject(Constants.PORT,port));
}
if (id != null) {
v.addElement(new DataObject(Constants.ID,id));
}
if (requestTag != null) {
v.addElement(new DataObject(REQUEST_TAG,requestTag));
}
return new DataObject(SERVICE_INPUT, v);
}
/**
* Sets the id of the component offering the service.
*
* @param serviceId Id of the component offering the service
*/
public void setServiceId(String serviceId) {
this.serviceId = serviceId;
}
/**
* Returns the id of the component offering the service.
*
* @return id of the component offering the service
*/
public String getServiceId() {
return serviceId;
}
/**
* Sets the requested service name.
*
* @param serviceName Name of the requested service
*/
public void setServiceName(String service) {
this.service = service;
}
/**
* Returns the requested service name.
*
* @return name of the requested service
*/
public String getServiceName() {
return service;
}
/**
* Sets the requested service function name.
*
* @param functionName Name of the requested service function
*/
public void setFunctionName(String function) {
this.function = function;
}
/**
* Returns the requested service function name.
*
* @return name of the requested service function
*/
public String getFunctionName() {
return function;
}
/**
* Sets the input to the service.
*
* @param input Attributes for the service to operate with
*/
public void setInput(Attributes input) {
this.input = input;
}
/**
* Returns the input to the service.
*
* @return input to the service
*/
public Attributes getInput() {
return input;
}
/**
* Sets the requester's hostname.
*
* @param host Hostname of the requester
*/
public void setHostname(String host) {
this.host = host;
}
/**
* Returns the requester's hostname.
*
* @return hostname of the requester
*/
public String getHostname() {
return host;
}
/**
* Sets the requester's port.
*
* @param port Port of the requester
*/
public void setPort(String port) {
this.port = port;
}
/**
* Returns the requester's port.
*
* @return Port of the requester
*/
public String getPort() {
return port;
}
/**
* Sets the requester's id.
*
* @param id Id of the requester
*/
public void setId(String id) {
this.id = id;
}
/**
* Returns the requester's id.
*
* @return id of the requester
*/
public String getId() {
return id;
}
/**
* Sets the requester's request tag.
*
* @param requestTag Tag for the requester's request
*/
public void setRequestTag(String requestTag) {
this.requestTag = requestTag;
}
/**
* Returns the requester's requesting tag
*
* @return the requester's requesting tag
*/
public String getRequestTag() {
return requestTag;
}
/**
* Returns the requester's unique id.
*
* @return the requester's unique id
*/
public String getUniqueId() {
return requestTag+host+port+id;
}
/**
* This method returns a printable version of this class
*
* @return printable version of this class
*/
public String toString() {
return new String("service="+service+",function="+function+",input="+input+
",host="+host+",port="+port+",id="+id+",requestTag="+requestTag);
}
}