package eu.leads.processor.execute; import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; import net.sf.jsqlparser.schema.Table; import net.sf.jsqlparser.statement.create.table.ColumnDefinition; import java.util.*; /** * Created with IntelliJ IDEA. * User: vagvaz * Date: 11/3/13 * Time: 11:40 PM * To change this template use File | Settings | File Templates. */ @JsonAutoDetect public class TableInfo { private Table table; private List<String> tableOptionsStrings; private final Map<String, ColumnDefinition> columnDefinitions; @JsonCreator public TableInfo(@JsonProperty("table") Table table, @JsonProperty("tableOptionsStrings") List<String> tableOptionsStrings, @JsonProperty("columnDefinitions") List<ColumnDefinition> columns) { columnDefinitions = new HashMap<String, ColumnDefinition>(); setTable(table); setTableOptionsStrings(tableOptionsStrings); setColumnDefinitions(columns); } public TableInfo(Table table) { setTable(table); tableOptionsStrings = new ArrayList<String>(); columnDefinitions = new HashMap<String, ColumnDefinition>(); } public Table getTable() { return table; } public void setTable(Table table) { this.table = table; } public List<String> getTableOptionsStrings() { return tableOptionsStrings; } public void setTableOptionsStrings(List<String> tableOptionsStrings) { this.tableOptionsStrings = tableOptionsStrings; } public Collection<ColumnDefinition> getColumnDefinitions() { return columnDefinitions.values(); } public void setColumnDefinitions(List<ColumnDefinition> columnDefinitions) { for (ColumnDefinition col : columnDefinitions) this.columnDefinitions.put(col.getColumnName(), col); } @JsonIgnore public void addColumn(ColumnDefinition col) { columnDefinitions.put(col.getColumnName(), col); } @JsonIgnore public void removeColumn(String columnName) { columnDefinitions.remove(columnName); } @JsonIgnore public void removeOption(String optionName) { tableOptionsStrings.remove(optionName); } @JsonIgnore public void addOption(String option) { tableOptionsStrings.add(option); } @JsonIgnore public boolean hasColumn(String columnName) { return columnDefinitions.containsKey(columnName); } public String getColumnType(String columnName) { return columnDefinitions.get(columnName).getColDataType().getDataType(); } @Override public String toString() { String result = table.toString() + " "; StringBuilder builder = new StringBuilder(); for (Map.Entry<String, ColumnDefinition> entry : columnDefinitions.entrySet()) { builder.append(entry.getKey() + " --> " + entry.getValue() + "\n"); } return result + builder.toString(); } }