1 24 25 package com.mckoi.database; 26 27 import com.mckoi.util.IntegerVector; 28 29 41 42 public final class SubsetColumnTable extends FilterTable 43 implements RootTable { 44 45 50 private int[] column_map; 51 52 57 private int[] reverse_column_map; 58 59 63 private DataTableDef subset_table_def; 64 65 70 private Variable[] aliases; 71 72 73 76 public SubsetColumnTable(Table parent) { 77 super(parent); 78 } 79 80 86 public void setColumnMap(int[] mapping, Variable[] aliases) { 87 reverse_column_map = new int[parent.getColumnCount()]; 88 for (int i = 0; i < reverse_column_map.length; ++i) { 89 reverse_column_map[i] = -1; 90 } 91 column_map = mapping; 92 93 this.aliases = aliases; 94 95 subset_table_def = new DataTableDef(); 96 DataTableDef parent_def = parent.getDataTableDef(); 97 subset_table_def.setTableName(parent_def.getTableName()); 98 99 for (int i = 0; i < mapping.length; ++i) { 100 int map_to = mapping[i]; 101 DataTableColumnDef col_def = 102 new DataTableColumnDef(parent.getColumnDefAt(map_to)); 103 col_def.setName(aliases[i].getName()); 104 subset_table_def.addVirtualColumn(col_def); 105 reverse_column_map[map_to] = i; 106 } 107 108 subset_table_def.setImmutable(); 109 } 110 111 112 113 114 117 public int getColumnCount() { 118 return aliases.length; 119 } 120 121 126 public int findFieldName(Variable v) { 127 for (int i = 0; i < aliases.length; ++i) { 128 if (v.equals(aliases[i])) { 129 return i; 130 } 131 } 132 return -1; 133 } 134 135 140 public DataTableDef getDataTableDef() { 141 return subset_table_def; 142 } 143 144 149 public Variable getResolvedVariable(int column) { 150 return aliases[column]; 151 } 152 153 157 final SelectableScheme getSelectableSchemeFor(int column, 158 int original_column, Table table) { 159 160 int mapped_original_column = original_column; 165 if (table == this) { 166 mapped_original_column = column_map[original_column]; 167 } 168 169 return super.getSelectableSchemeFor(column_map[column], 170 mapped_original_column, table); 171 } 172 173 180 final void setToRowTableDomain(int column, IntegerVector row_set, 181 TableDataSource ancestor) { 182 183 super.setToRowTableDomain(column_map[column], row_set, ancestor); 184 } 185 186 190 final RawTableInformation resolveToRawTable(RawTableInformation info) { 191 throw new Error ("Tricky to implement this method!"); 192 } 194 195 201 public final TObject getCellContents(int column, int row) { 202 return parent.getCellContents(column_map[column], row); 203 } 204 205 207 212 public boolean typeEquals(RootTable table) { 213 return (this == table); 214 } 215 216 217 220 public String toString() { 221 String name = "SCT" + hashCode(); 222 return name + "[" + getRowCount() + "]"; 223 } 224 225 } 226 | Popular Tags |