1 10 package mondrian.gui; 11 12 import java.lang.reflect.Field ; 13 import java.util.*; 14 15 20 public class PropertyTableModel extends javax.swing.table.AbstractTableModel { 21 private Object parentTarget; private String factTable; private String factTableSchema; private ArrayList names; private String errorMsg = null; 27 String [] propertyNames; 28 Object target; 29 30 public PropertyTableModel(Object t, String [] pNames) { 31 super(); 32 33 propertyNames = pNames; 34 target = t; 35 } 36 37 public String getColumnName(int i) { 38 if (i == 0) { 39 return "Attribute"; 41 } else if (i==1) { 42 return "Value"; 43 } 44 45 return "?"; 46 } 47 48 52 public String getRowName(int i) { 54 String pName = propertyNames[i]; 55 int j=-1; 56 if ((j=pName.indexOf('|')) != -1) { return pName.substring(0,j).trim(); 58 } else { 59 return propertyNames[i]; } 60 } 61 62 public boolean isCellEditable(int row, int col) { 63 if (col == 1) { 64 Object cellObj = getValueAt(row, col); 65 if (cellObj instanceof MondrianGuiDef.Join) { 66 return false; 67 } else { 68 return true; 69 } 70 } 71 72 return false; 73 } 74 75 83 public int getColumnCount() { 84 return 2; } 86 87 96 public int getRowCount() { 97 return propertyNames.length; 98 } 99 100 104 112 public Object getValueAt(int rowIndex, int columnIndex) { 113 if (columnIndex == 0) { 114 return propertyNames[rowIndex]; 115 } else { 116 try { 117 String pName = propertyNames[rowIndex]; 118 if ((pName.indexOf('|')) != -1) { 123 Object obj = null; 124 String [] pNames = pName.split("\\|",0); for(int j=0; j<pNames.length; j++) { 126 if ((pNames[j].indexOf('.')) != -1) { 127 String [] pNamesField = pNames[j].trim().split("\\.",0); if(pNamesField.length >1) { 129 Field f = target.getClass().getField(pNamesField[0].trim()); 130 obj = f.get(target); 131 if (obj != null) { 132 Field f2 = obj.getClass().getField(pNamesField[1].trim()); 133 Object obj2 = f2.get(obj); 134 return obj2; 135 } 136 } 137 return null; 138 } else { 139 Field f = target.getClass().getField(pNames[j].trim()); 140 obj = f.get(target); 141 if (obj != null) { 142 return obj; 143 } 144 } 145 } 146 return obj; 147 } else { 148 Field f = target.getClass().getField(propertyNames[rowIndex]); 150 151 Object obj = f.get(target); 152 return obj; 153 } 154 } catch (Exception ex) { 155 ex.printStackTrace(); 156 return "#ERROR"; 157 } 158 } 159 } 160 161 165 public void setValueAt(Object aValue, int rowIndex, int columnIndex) { 166 setErrorMsg(null); 167 try { 168 String pName = propertyNames[rowIndex]; 169 int i=-1; 170 if ((i=pName.indexOf('|')) != -1) { Field f = target.getClass().getField(propertyNames[rowIndex].substring(0,i).trim()); f.set(target,aValue); 173 String [] pNames = pName.split("\\|",0); for(int j=1; j<pNames.length; j++) { 176 String [] pNamesField = pNames[j].trim().split("\\.",0); Field f2 = target.getClass().getField(pNamesField[0].trim()); 178 f2.set(target,null); 179 } 180 181 } else if ( (target instanceof MondrianGuiDef.Level) && (pName.equals("ordinalExp")) ) { 182 ((MondrianGuiDef.Level) target).ordinalExp.expressions[0] = (MondrianGuiDef.SQL) aValue; 183 187 } else if ( (target instanceof MondrianGuiDef.Table && pName.equals("name")) || 188 (target instanceof MondrianGuiDef.Hierarchy && pName.equals("primaryKeyTable")) || 189 (target instanceof MondrianGuiDef.Level && pName.equals("table")) 190 ) { 191 if (aValue != null) { String [] aValues = ((String ) aValue).split("->"); 194 if (aValues.length == 2) { 195 if (target instanceof MondrianGuiDef.Table) { 196 ((MondrianGuiDef.Table) target).name = aValues[1]; 197 ((MondrianGuiDef.Table) target).schema = aValues[0]; 198 fireTableDataChanged(); } else { 200 Field f = target.getClass().getField(propertyNames[rowIndex]); 201 f.set(target,aValues[1]); 202 } 203 } else { 204 Field f = target.getClass().getField(propertyNames[rowIndex]); 205 f.set(target,aValue); 206 } 207 } 208 209 } else if ( (target instanceof MondrianGuiDef.Dimension && pName.equals("foreignKey")) || 210 (target instanceof MondrianGuiDef.DimensionUsage && pName.equals("foreignKey")) || 211 (target instanceof MondrianGuiDef.Measure && pName.equals("column")) || 212 (target instanceof MondrianGuiDef.Hierarchy && pName.equals("primaryKey")) || 213 (target instanceof MondrianGuiDef.Level && pName.equals("column")) || 214 (target instanceof MondrianGuiDef.Property && pName.equals("column")) 215 ) { 216 if (aValue != null) { String [] aValues = ((String ) aValue).split("->"); 219 Field f = target.getClass().getField(propertyNames[rowIndex]); 220 f.set(target, aValues[aValues.length-1]); } 222 223 } else { 224 if ( propertyNames[rowIndex].equals("name") 225 && (! (target instanceof MondrianGuiDef.Table)) 226 && (! aValue.equals(target.getClass().getField(propertyNames[rowIndex]).get(target))) 227 && duplicateName(aValue) ) { 228 setErrorMsg("Error setting name property. '"+aValue+"' already exists"); 229 } else { 230 Field f = target.getClass().getField(propertyNames[rowIndex]); 231 f.set(target,aValue); 232 } 233 } 234 } catch (Exception ex) { 235 ex.printStackTrace(); 236 } 237 } 238 239 public Object getValue() { 240 return target; 241 } 242 243 247 public Object getParentTarget() { 248 return parentTarget; 249 } 250 251 public void setParentTarget(Object parentTarget) { 252 this.parentTarget = parentTarget; 253 } 254 255 public String getFactTable() { 256 return factTable; 257 } 258 259 public void setFactTable(String factTable) { 260 this.factTable = factTable; 261 } 262 263 public String getFactTableSchema() { 264 return factTableSchema; 265 } 266 267 public void setFactTableSchema(String factTableSchema) { 268 this.factTableSchema = factTableSchema; 269 } 270 271 private boolean duplicateName(Object aValue) { 272 return (names!=null && names.contains(aValue)); 273 } 274 275 public ArrayList getNames() { 276 return names; 277 } 278 279 public void setNames(ArrayList names) { 280 this.names = names; 281 } 282 283 public String getErrorMsg() { 284 return errorMsg; 285 } 286 287 public void setErrorMsg(String errorMsg) { 288 this.errorMsg = errorMsg; 289 } 290 } 291 292 | Popular Tags |