package org.yamcs.yarch;
import java.util.Arrays;
import java.util.List;
/**
* Contains the tuple value (as an array of Columns) together with a pointer to its definition
* @author nm
*
*/
public class Tuple {
private TupleDefinition definition;
List<Object> columns;
public Tuple(TupleDefinition definition, List<Object> columns) {
if(definition.size() != columns.size()) throw new IllegalArgumentException("columns size does not match the definition size");
this.setDefinition(definition);
this.columns=columns;
}
public Tuple(TupleDefinition definition, Object[] columns) {
this(definition, Arrays.asList(columns));
}
public void setDefinition(TupleDefinition definition) {
this.definition = definition;
}
public TupleDefinition getDefinition() {
return definition;
}
public List<Object> getColumns() {
return columns;
}
public void setColumns(List<Object> cols) {
this.columns=cols;
}
public int getColumnIndex(String colName) {
return definition.getColumnIndex(colName);
}
public Object getColumn(String colName) {
int i = definition.getColumnIndex(colName);
if(i==-1) {
return null;
}
return columns.get(i);
}
public ColumnDefinition getColumnDefinition(String colName) {
int i=definition.getColumnIndex(colName);
if(i==-1) throw new IllegalArgumentException("invalid column "+colName);
return definition.getColumn(i);
}
public ColumnDefinition getColumnDefinition(int i) {
return definition.getColumn(i);
}
public boolean hasColumn(String colName) {
return (definition.getColumnIndex(colName)!=-1);
}
public Object getColumn(int i) {
return columns.get(i);
}
/**
*
* @return return the number of columns
*/
public int size() {
return columns.size();
}
@Override
public String toString() {
StringBuffer sb=new StringBuffer();
boolean first=true;
sb.append("(");
for(Object c: columns) {
if(!first) {
sb.append(", ");
} else {
first=false;
}
sb.append(c.toString());
}
sb.append(")");
return sb.toString();
}
}