package com.thoughtworks.gauge.execution.parameters.parsers.converters; import java.util.ArrayList; import java.util.List; import com.thoughtworks.gauge.Table; import gauge.messages.Spec; public class TableConverter implements StringToPrimitiveConverter { public Object convert(Spec.Parameter source) { Spec.ProtoTable protoTable = source.getTable(); return tableFromProto(protoTable); } private Object tableFromProto(Spec.ProtoTable protoTable) { if (protoTable.getHeaders() == null) { throw new RuntimeException("Invalid table passed"); } Spec.ProtoTableRow headerRow = protoTable.getHeaders(); List<String> headers = getTableRowFor(headerRow); Table table = new Table(headers); for (int i = 0; i < protoTable.getRowsCount(); i++) { Spec.ProtoTableRow protoRow = protoTable.getRows(i); table.addRow(getTableRowFor(protoRow)); } return table; } private List<String> getTableRowFor(Spec.ProtoTableRow tableRow) { List<String> row = new ArrayList<String>(); for (int i = 0; i < tableRow.getCellsCount(); i++) { row.add(tableRow.getCells(i)); } return row; } }