package eis.iilang;
import java.util.LinkedList;
/**
* A superclass for actions, events, et cetera. Consists of a name and a
* sequence of parameters. Additionally it stores a time-stamp that indicates
* the time of creation, and also a string that indicates the source.
*
* @author tristanbehrens
*
*/
public abstract class DataContainer extends IILElement {
/**
*
*/
private static final long serialVersionUID = 1139628940335051005L;
/** The name of the DataContainer. */
protected String name = null;
/** A list of parameters. */
protected LinkedList<Parameter> params = new LinkedList<Parameter>();
/** Time of creation */
protected long timeStamp = System.currentTimeMillis();
/** Source of the data-container */
protected String source = null;
protected DataContainer() {
}
/**
* Contructs an DataContainer.
*
* @param name
* @param parameters
*/
public DataContainer(String name, Parameter... parameters) {
setName(name);
for (Parameter p : parameters)
this.params.add(p);
}
/**
* Contructs an DataContainer.
*
* @param name
* @param parameters
*/
public DataContainer(String name, LinkedList<Parameter> parameters) {
setName(name);
this.params = parameters;
}
/**
* Returns the name.
*
* @return the name of the data-container
*/
public String getName() {
return name;
}
/**
* Sets the name.
*
* @param name
* the name of the data-container.
*/
public void setName(String name) {
assert Character.isLowerCase(name.charAt(0)) : name
+ " should start with a lowercase letter";
this.name = name;
}
/**
* Returns the parameters.
*
* @return the parameters of the data-container
*/
public LinkedList<Parameter> getParameters() {
return params;
}
/**
* Returns the parameters. Returns the parameters as a clone.
*
* @return the parameters of the data-container
*/
public LinkedList<Parameter> getClonedParameters() {
LinkedList<Parameter> ret = new LinkedList<Parameter>();
for (Parameter p : params) {
ret.add((Parameter) p.clone());
}
return ret;
}
/**
* Sets the parameters.
*
* @param params
* the parameters of the data-container
*/
public void setParameters(LinkedList<Parameter> params) {
this.params = params;
}
/**
* Adds a parameter to the data-container.
*
* @param p
* the new data-container
*/
public void addParameter(Parameter p) {
params.add(p);
}
/**
* Converts a data container to a percept.
*
* @param container
* @return the percept
*/
public static Percept toPercept(DataContainer container) {
Parameter[] parameters = new Parameter[container.params.size()];
for (int a = 0; a < parameters.length; a++)
parameters[a] = container.params.get(a);
return new Percept(container.getName(), parameters);
}
/**
* Sets the source of the data-container.
*
* @param source
* is the source of the data-container.
*/
public void setSource(String source) {
this.source = source;
}
/**
* Returns the source of the data-container.
*
* @return the source of the data-container.
*/
public String getSource() {
return source;
}
/*
* (non-Javadoc)
*
* @see java.lang.Object#hashCode()
*/
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result + ((params == null) ? 0 : params.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (obj == null)
return false;
if (obj == this)
return true;
if (!(obj instanceof DataContainer))
return false;
DataContainer dc = (DataContainer) obj;
if (dc.name.equals(name) == false)
return false;
if (dc.params.size() != params.size())
return false;
for (int a = 0; a < params.size(); a++) {
if (dc.params.get(a).equals(params.get(a)) == false)
return false;
}
return true;
}
}