package doser.entitydisambiguation.table.logic;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import org.apache.log4j.Logger;
public class TableColumn implements Cloneable {
private List<TableCell> cellList;
private final int columnNr;
private final String header;
private Type leadingType;
private final Set<Type> types;
public TableColumn(final String header, final int columnNr) {
super();
this.header = header;
this.cellList = new LinkedList<TableCell>();
this.columnNr = columnNr;
this.types = new LinkedHashSet<Type>();
}
public void addCell(final String content) {
this.cellList.add(new TableCell(content));
}
public void addCellGroundTruth(final String groundtruth, final int cellNr) {
this.cellList.get(cellNr).setGt(groundtruth);
}
public void addPossibleType(final Type type) {
this.types.add(type);
if (this.leadingType == null) {
this.leadingType = type;
} else {
for (final Type cType : this.types) {
if (this.leadingType.getWeightedScore() < cType
.getWeightedScore()) {
this.leadingType = cType;
}
}
}
}
@Override
public TableColumn clone() throws CloneNotSupportedException {
TableColumn clone = null;
try {
clone = (TableColumn) super.clone();
final List<TableCell> newL = new LinkedList<TableCell>();
for (final TableCell cell : this.cellList) {
final TableCell tcell = new TableCell(new String(
cell.getCellContent()));
tcell.setDisambiguatedContent(new String(cell
.getDisambiguatedContent()));
tcell.setDisambigutedContentString(new String(cell
.getDisambigutedContentString()));
tcell.setGt(new String(cell.getGt()));
newL.add(tcell);
}
clone.setLeadingType(this.leadingType.clone());
for (final Type cType : this.types) {
clone.addPossibleType(cType.clone());
}
} catch (final CloneNotSupportedException e) {
Logger.getRootLogger().error(e.getStackTrace());
}
return clone;
}
public List<TableCell> getCellList() {
return this.cellList;
}
public int getColumnNr() {
return this.columnNr;
}
public List<Type> getColumnTypes() {
final List<Type> res = new LinkedList<Type>();
for (final Type type : this.types) {
res.add(type);
}
return res;
}
public String getHeader() {
return this.header;
}
public double getScoreOfLeadingType() {
return this.leadingType.getWeightedScore();
}
public String getURIOfLeadingType() {
return this.leadingType.getUri();
}
public void resetTypes() {
this.types.clear();
this.leadingType = null;
}
public void setCellList(final List<TableCell> cellList) {
this.cellList = cellList;
}
private void setLeadingType(final Type type) {
this.leadingType = type;
}
public void setNewLeadingType(final Type type) {
for (final Type cType : this.types) {
if (cType.equals(cType)) {
this.leadingType = cType;
}
}
}
}