1 12 package mondrian.gui; 13 14 import javax.swing.tree.TreePath ; 15 16 import javax.swing.*; 17 import java.awt.*; 18 import java.lang.reflect.Field ; 19 import java.util.ResourceBundle ; 20 21 import org.eigenbase.xom.ElementDef; 22 23 29 public class SchemaTreeCellRenderer extends javax.swing.tree.DefaultTreeCellRenderer { 30 31 private final ClassLoader myClassLoader; 32 public boolean invalidFlag; 33 private JDBCMetaData jdbcMetaData; 34 35 36 37 public SchemaTreeCellRenderer(JDBCMetaData jdbcMetaData ){ 38 this(); 39 this.jdbcMetaData = jdbcMetaData; 40 } 41 public SchemaTreeCellRenderer() { 42 super(); 43 myClassLoader = this.getClass().getClassLoader(); 44 45 } 46 47 public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) { 48 super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus); 49 ResourceBundle resources = ResourceBundle.getBundle("mondrian.gui.resources.gui"); 50 51 invalidFlag = isInvalid(tree, value, row); 52 53 this.setPreferredSize(null); if (value instanceof MondrianGuiDef.Cube) { 55 setText(invalidFlag, ((MondrianGuiDef.Cube) value).name); 56 super.setIcon(new ImageIcon(myClassLoader.getResource(resources.getString("cube")))); 57 } else if (value instanceof MondrianGuiDef.Column) { 58 setText(invalidFlag, ((MondrianGuiDef.Column) value).name); 59 } else if (value instanceof MondrianGuiDef.Dimension) { 60 super.setIcon(new ImageIcon(myClassLoader.getResource(resources.getString("dimension")))); 61 setText(invalidFlag, ((MondrianGuiDef.CubeDimension) value).name); 62 71 this.setPreferredSize(new java.awt.Dimension (this.getPreferredSize().width+1, 25)); } else if (value instanceof MondrianGuiDef.DimensionUsage) { 73 super.setIcon(new ImageIcon(myClassLoader.getResource(resources.getString("dimensionUsage")))); 74 setText(invalidFlag, ((MondrianGuiDef.CubeDimension) value).name); 75 } else if (value instanceof MondrianGuiDef.KeyExpression) { 76 super.setIcon(new ImageIcon(myClassLoader.getResource(resources.getString("key")))); 77 setText("Key Expression"); 78 } else if (value instanceof MondrianGuiDef.NameExpression) { 79 super.setIcon(new ImageIcon(myClassLoader.getResource(resources.getString("name")))); 80 setText("Name Expression"); 81 } else if (value instanceof MondrianGuiDef.OrdinalExpression) { 82 super.setIcon(new ImageIcon(myClassLoader.getResource(resources.getString("ordinal")))); 83 setText("Ordinal Expression"); 84 } else if (value instanceof MondrianGuiDef.ParentExpression) { 85 super.setIcon(new ImageIcon(myClassLoader.getResource(resources.getString("parent")))); 86 setText("Parent Expression"); 87 } else if (value instanceof MondrianGuiDef.Expression) { 88 setText("Expression"); 89 } else if (value instanceof MondrianGuiDef.ExpressionView) { 90 setText("ExpressionView"); 91 } else if (value instanceof MondrianGuiDef.Hierarchy) { 92 setText(invalidFlag, "Hierarchy"); 93 super.setIcon(new ImageIcon(myClassLoader.getResource(resources.getString("hierarchy")))); 95 this.setPreferredSize(new java.awt.Dimension (this.getPreferredSize().width+1, 25)); 97 } else if ((value instanceof MondrianGuiDef.Relation) || 99 (value instanceof MondrianGuiDef.Table)) { 100 TreePath tpath = tree.getPathForRow(row); 101 String prefix = ""; 102 if (tpath != null) { 103 TreePath parentpath = tpath.getParentPath(); 104 if (parentpath != null) { 105 Object parent = parentpath.getLastPathComponent(); 106 if (parent instanceof MondrianGuiDef.Join) { 107 int indexOfChild = tree.getModel().getIndexOfChild(parent, value); 108 switch (indexOfChild) { 109 case 0: prefix="Left : "; break; 110 case 1: prefix="Right : "; break; 111 } 112 } 113 } 114 } 115 if (value instanceof MondrianGuiDef.Join) { 116 setText(prefix+"Join"); 117 super.setIcon(new ImageIcon(myClassLoader.getResource(resources.getString("join")))); 118 } else if (value instanceof MondrianGuiDef.Table) { 119 setText(prefix+"Table: "+ ((MondrianGuiDef.Table) value).name); 120 super.setIcon(new ImageIcon(myClassLoader.getResource(resources.getString("table")))); 121 } 122 this.getPreferredSize(); 123 this.setPreferredSize(new Dimension(this.getPreferredSize().width+35, 24)); 128 } else if (value instanceof MondrianGuiDef.Level) { 129 setText(invalidFlag, ((MondrianGuiDef.Level) value).name); 130 super.setIcon(new ImageIcon(myClassLoader.getResource(resources.getString("level")))); 131 140 this.setPreferredSize(new java.awt.Dimension (this.getPreferredSize().width+1, 25)); } else if (value instanceof MondrianGuiDef.Measure) { 142 143 setText(invalidFlag, ((MondrianGuiDef.Measure) value).name); 144 super.setIcon(new ImageIcon(myClassLoader.getResource(resources.getString("measure")))); 145 } else if (value instanceof MondrianGuiDef.MemberReaderParameter) { 146 setText(invalidFlag, ((MondrianGuiDef.MemberReaderParameter) value).name); 147 } else if (value instanceof MondrianGuiDef.Property) { 148 setText(invalidFlag, ((MondrianGuiDef.Property) value).name); 149 super.setIcon(new ImageIcon(myClassLoader.getResource(resources.getString("property")))); 150 } else if (value instanceof MondrianGuiDef.Schema) { 151 setText(invalidFlag, "Schema"); 152 super.setIcon(new ImageIcon(myClassLoader.getResource(resources.getString("schema")))); 153 } else if (value instanceof MondrianGuiDef.NamedSet) { 154 setText(invalidFlag, ((MondrianGuiDef.NamedSet) value).name); 155 super.setIcon(new ImageIcon(myClassLoader.getResource(resources.getString("namedSet")))); 156 } else if (value instanceof MondrianGuiDef.CalculatedMember) { 157 setText(invalidFlag, ((MondrianGuiDef.CalculatedMember) value).name); 158 super.setIcon(new ImageIcon(myClassLoader.getResource(resources.getString("calculatedMember")))); 159 } else if (value instanceof MondrianGuiDef.CalculatedMemberProperty) { 160 setText(invalidFlag, ((MondrianGuiDef.CalculatedMemberProperty) value).name); 161 super.setIcon(new ImageIcon(myClassLoader.getResource(resources.getString("nopic")))); 162 } else if (value instanceof MondrianGuiDef.UserDefinedFunction) { 163 setText(invalidFlag, ((MondrianGuiDef.UserDefinedFunction) value).name); 164 super.setIcon(new ImageIcon(myClassLoader.getResource(resources.getString("userDefinedFunction")))); 165 } else if (value instanceof MondrianGuiDef.Role) { 166 setText(invalidFlag, ((MondrianGuiDef.Role) value).name); 167 super.setIcon(new ImageIcon(myClassLoader.getResource(resources.getString("role")))); 168 } else if (value instanceof MondrianGuiDef.SchemaGrant) { 169 setText(invalidFlag, "Schema Grant"); 170 super.setIcon(new ImageIcon(myClassLoader.getResource(resources.getString("schemaGrant")))); 171 } else if (value instanceof MondrianGuiDef.CubeGrant) { 172 setText(invalidFlag, "Cube Grant"); 173 super.setIcon(new ImageIcon(myClassLoader.getResource(resources.getString("cubeGrant")))); 174 } else if (value instanceof MondrianGuiDef.DimensionGrant) { 175 setText(invalidFlag, "Dimension Grant"); 176 super.setIcon(new ImageIcon(myClassLoader.getResource(resources.getString("dimensionGrant")))); 177 } else if (value instanceof MondrianGuiDef.HierarchyGrant) { 178 setText(invalidFlag, "Hierarchy Grant"); 179 super.setIcon(new ImageIcon(myClassLoader.getResource(resources.getString("hierarchyGrant")))); 180 } else if (value instanceof MondrianGuiDef.MemberGrant) { 181 setText(invalidFlag, "Member Grant"); 182 super.setIcon(new ImageIcon(myClassLoader.getResource(resources.getString("memberGrant")))); 183 } else if (value instanceof MondrianGuiDef.SQL) { 184 setText("SQL"); 185 super.setIcon(new ImageIcon(myClassLoader.getResource(resources.getString("sql")))); 186 } else if (value instanceof MondrianGuiDef.View) { 187 setText("View"); 188 } else if (value instanceof MondrianGuiDef.VirtualCube) { 189 setText(invalidFlag, ((MondrianGuiDef.VirtualCube) value).name); 190 super.setIcon(new ImageIcon(myClassLoader.getResource(resources.getString("virtualCube")))); 191 } else if (value instanceof MondrianGuiDef.VirtualCubeDimension) { 192 setText(invalidFlag, ((MondrianGuiDef.VirtualCubeDimension) value).name); 193 super.setIcon(new ImageIcon(myClassLoader.getResource(resources.getString("virtualCubeDimension")))); 194 } else if (value instanceof MondrianGuiDef.VirtualCubeMeasure) { 195 setText(invalidFlag, ((MondrianGuiDef.VirtualCubeMeasure) value).name); 196 super.setIcon(new ImageIcon(myClassLoader.getResource(resources.getString("virtualCubeMeasure")))); 197 } else if (value instanceof MondrianGuiDef.AggName) { 198 setText(invalidFlag, "Aggregate Name"); 199 super.setIcon(new ImageIcon(myClassLoader.getResource(resources.getString("aggTable")))); 200 } else if (value instanceof MondrianGuiDef.AggForeignKey) { 201 setText(invalidFlag, "Aggregate Foreign Key"); 202 super.setIcon(new ImageIcon(myClassLoader.getResource(resources.getString("aggForeignKey")))); 203 } else if (value instanceof MondrianGuiDef.AggIgnoreColumn) { 204 setText(invalidFlag, "Aggregate Ignore Column"); 205 super.setIcon(new ImageIcon(myClassLoader.getResource(resources.getString("aggIgnoreColumn")))); 206 } else if (value instanceof MondrianGuiDef.AggLevel) { 207 setText(invalidFlag, "Aggregate Level"); 208 super.setIcon(new ImageIcon(myClassLoader.getResource(resources.getString("aggLevel")))); 209 } else if (value instanceof MondrianGuiDef.AggMeasure) { 210 setText(invalidFlag, "Aggregate Measure"); 211 super.setIcon(new ImageIcon(myClassLoader.getResource(resources.getString("aggMeasure")))); 212 } else if (value instanceof MondrianGuiDef.AggPattern) { 213 setText(invalidFlag, "Aggregate Pattern"); 214 super.setIcon(new ImageIcon(myClassLoader.getResource(resources.getString("aggPattern")))); 215 } else if (value instanceof MondrianGuiDef.AggExclude) { 216 setText(invalidFlag, "Aggregate Exclude"); 217 super.setIcon(new ImageIcon(myClassLoader.getResource(resources.getString("aggExclude")))); 218 } else if (value instanceof MondrianGuiDef.Closure) { 219 setText(invalidFlag, "Closure"); 220 super.setIcon(new ImageIcon(myClassLoader.getResource(resources.getString("closure")))); 221 } else if (value instanceof ElementDef) { 222 setText(((ElementDef) value).getName()); 223 } else { 224 super.setText(""); 225 } 226 227 return this; 228 229 } 230 231 public String invalid(JTree tree, TreePath tpath, Object value) { 233 return this.invalid(tree, tpath, value, null, null, null, null); 234 } 235 236 public String invalid(JTree tree, TreePath tpath, Object value, Object icube, Object iparentDimension, Object iparentHierarchy, Object iparentLevel) { 237 String errMsg = null; 238 String nameLiteral = "Name"; 239 String emptyMsg = " must be set"; 241 242 MondrianGuiDef.Cube cube = (MondrianGuiDef.Cube) icube ; MondrianGuiDef.Dimension parentDimension = (MondrianGuiDef.Dimension) iparentDimension; MondrianGuiDef.Hierarchy parentHierarchy = (MondrianGuiDef.Hierarchy) iparentHierarchy ; MondrianGuiDef.Level parentLevel = (MondrianGuiDef.Level) iparentLevel ; 247 if (tpath != null ) { 248 int pathcount = tpath.getPathCount(); 249 for(int i=0; i<pathcount && (cube==null || parentDimension==null || parentHierarchy==null || parentLevel==null) ;i++) { 250 if (tpath.getPathComponent(i) instanceof MondrianGuiDef.Cube && cube==null) { 252 cube = (MondrianGuiDef.Cube) tpath.getPathComponent(i); 253 } 254 if (tpath.getPathComponent(i) instanceof MondrianGuiDef.Dimension && parentDimension == null) { 255 parentDimension = (MondrianGuiDef.Dimension) tpath.getPathComponent(i); 256 } 257 if (tpath.getPathComponent(i) instanceof MondrianGuiDef.Hierarchy && parentHierarchy == null) { 258 parentHierarchy = (MondrianGuiDef.Hierarchy) tpath.getPathComponent(i); 259 } 260 if (tpath.getPathComponent(i) instanceof MondrianGuiDef.Level && parentLevel == null) { 261 parentLevel = (MondrianGuiDef.Level) tpath.getPathComponent(i); 262 } 263 } 265 } 266 267 if (value instanceof MondrianGuiDef.Schema) { 269 if ( isEmpty(((MondrianGuiDef.Schema) value).name) ) { 270 return nameLiteral + emptyMsg; 271 } 272 } else if(value instanceof MondrianGuiDef.VirtualCube) { 273 if ( isEmpty(((MondrianGuiDef.VirtualCube) value).name) ) { 274 return nameLiteral + emptyMsg; 275 } 276 } else if(value instanceof MondrianGuiDef.VirtualCubeDimension) { 277 if ( isEmpty(((MondrianGuiDef.VirtualCubeDimension) value).name) ) { 278 return nameLiteral + emptyMsg; 279 } 280 } else if(value instanceof MondrianGuiDef.VirtualCubeMeasure) { 281 if ( isEmpty(((MondrianGuiDef.VirtualCubeMeasure) value).name) ) { 282 return nameLiteral + emptyMsg; 283 } 284 } else if (value instanceof MondrianGuiDef.Cube) { 285 if ( isEmpty(((MondrianGuiDef.Cube) value).name) ) { 286 return nameLiteral + emptyMsg;} 287 if ( ((MondrianGuiDef.Cube) value).fact == null || isEmpty(((MondrianGuiDef.Table) ((MondrianGuiDef.Cube) value).fact).name) ) { return "Fact name" + emptyMsg;} 289 290 if (jdbcMetaData.getErrMsg() == null) { 292 293 String schemaName = ((MondrianGuiDef.Table) ((MondrianGuiDef.Cube) value).fact).schema; 295 String factTable = ((MondrianGuiDef.Table) ((MondrianGuiDef.Cube) value).fact).name; 296 if (! jdbcMetaData.isTableExists(schemaName, factTable)) { 297 return "Fact table '"+factTable+"' does not exist in database "+((schemaName==null || schemaName.equals(""))?".":"schema "+schemaName); 298 } 299 } 300 } else if (value instanceof MondrianGuiDef.CubeDimension) { 301 if (isEmpty(((MondrianGuiDef.CubeDimension) value).name)) { return nameLiteral + emptyMsg;} 303 if (value instanceof MondrianGuiDef.DimensionUsage) { 304 if(isEmpty(((MondrianGuiDef.DimensionUsage) value).source)) { return "Source" + emptyMsg;} 306 MondrianGuiDef.Schema s = (MondrianGuiDef.Schema) tree.getModel().getRoot(); 308 MondrianGuiDef.Dimension ds[] = s.dimensions; 309 String sourcename = ((MondrianGuiDef.DimensionUsage) value).source; 310 boolean notfound = true; 311 for(int j=0; j<ds.length; j++) { 312 if (ds[j].name.equalsIgnoreCase(sourcename)) { 313 notfound = false; 314 break; 315 } 316 } 317 if (notfound) { 318 return "Source '"+sourcename+"' does not exist as Shared Dimension of Schema"; 319 } 320 } 321 if (value instanceof MondrianGuiDef.Dimension && cube != null) { 322 327 if(! isEmpty(((MondrianGuiDef.Dimension) value).foreignKey)) { 328 if (jdbcMetaData.getErrMsg() == null) { 330 331 String foreignKey = ((MondrianGuiDef.Dimension) value).foreignKey; 333 if (! jdbcMetaData.isColExists(((MondrianGuiDef.Table) cube.fact).schema, ((MondrianGuiDef.Table) cube.fact).name, foreignKey)) { 334 return "foreignKey '"+foreignKey+"' does not exist in fact table."; 335 } 336 340 } 341 } 342 } 343 } else if (value instanceof MondrianGuiDef.Level) { 344 350 MondrianGuiDef.Level l = (MondrianGuiDef.Level) value; 351 if (! isEmpty(l.levelType)) { 352 if (parentDimension != null) { 354 if ((isEmpty(parentDimension.type) || parentDimension.type.equals("StandardDimension")) && 355 (! l.levelType.equals(MondrianGuiDef.Level._levelType_values[0]))) { 356 return "levelType '"+l.levelType+"' can only be used with a TimeDimension."; 358 } 359 if ((parentDimension.type.equals("TimeDimension")) && 360 (l.levelType.equals(MondrianGuiDef.Level._levelType_values[0]))) { 362 return "levelType '"+l.levelType+"' can only be used with a StandardDimension."; 363 } 364 } 365 } 366 String column = l.column; 372 if (isEmpty(column)) { 373 if (l.properties == null || l.properties.length == 0) { 374 return "column" + emptyMsg; 375 } 376 } else { 377 if (jdbcMetaData.getErrMsg() == null) { 379 String table = l.table; if (isEmpty(table)) { 381 if (parentHierarchy != null ) { 382 if (parentHierarchy.relation == null && cube != null) { if (! jdbcMetaData.isColExists(((MondrianGuiDef.Table) cube.fact).schema, ((MondrianGuiDef.Table) cube.fact).name, column)) { 384 return "Degenerate dimension validation check - Column '"+column+"' does not exist in fact table."; 385 } 386 } else if (parentHierarchy.relation instanceof MondrianGuiDef.Table){ 387 if (! jdbcMetaData.isColExists(((MondrianGuiDef.Table) parentHierarchy.relation).schema, ((MondrianGuiDef.Table) parentHierarchy.relation).name, column)) { 388 return "column '"+column+"' does not exist in Dimension table '"+((MondrianGuiDef.Table) parentHierarchy.relation).name+"'."; 389 } 390 } else if (parentHierarchy.relation instanceof MondrianGuiDef.Join){ return "table" + emptyMsg; 392 } 393 } 394 } else { 395 if (! jdbcMetaData.isColExists(null, table, column)) { 396 return "column '"+column+"' does not exist in table '"+table+"'."; 397 } 398 } 399 } 400 } 401 } else if (value instanceof MondrianGuiDef.Property) { 402 408 MondrianGuiDef.Property p = (MondrianGuiDef.Property) value; 409 String column = p.column; if (isEmpty(column)) { 411 return "column" + emptyMsg; 412 } 413 if (jdbcMetaData.getErrMsg() == null) { 415 String table = null; 416 if (parentLevel != null) { 417 table = parentLevel.table; } 419 if (isEmpty(table)) { 420 if (parentHierarchy != null ) { 421 if (parentHierarchy.relation == null && cube != null) { if (! jdbcMetaData.isColExists(((MondrianGuiDef.Table) cube.fact).schema, ((MondrianGuiDef.Table) cube.fact).name, column)) { 423 return "Degenerate dimension validation check - Column '"+column+"' does not exist in fact table."; 424 } 425 } else if (parentHierarchy.relation instanceof MondrianGuiDef.Table){ 426 if (! jdbcMetaData.isColExists(((MondrianGuiDef.Table) parentHierarchy.relation).schema, ((MondrianGuiDef.Table) parentHierarchy.relation).name, column)) { 427 return "column '"+column+"' does not exist in Dimension table '"+((MondrianGuiDef.Table) parentHierarchy.relation).name+"'."; 428 } 429 } 430 } 431 } else { 432 if (! jdbcMetaData.isColExists(null, table, column)) { 433 return "column '"+column+"' does not exist in Level table '"+table+"'."; 434 } 435 } 436 } 437 } else if (value instanceof MondrianGuiDef.Measure) { 438 if ( isEmpty(((MondrianGuiDef.Measure) value).name) ) { 439 return nameLiteral + emptyMsg;} 440 if (isEmpty(((MondrianGuiDef.Measure) value).aggregator) ) { 441 return "aggregator" + emptyMsg;} 442 if (isEmpty(((MondrianGuiDef.Measure) value).column) ) { 443 return "column" + emptyMsg;} 444 if (cube != null && cube.fact != null) { 445 446 if (jdbcMetaData.getErrMsg() == null) { 448 449 451 String column = ((MondrianGuiDef.Measure) value).column; 452 if (jdbcMetaData.isColExists(((MondrianGuiDef.Table) cube.fact).schema, ((MondrianGuiDef.Table) cube.fact).name, column)) { 453 458 462 int colType = jdbcMetaData.getColumnDataType(((MondrianGuiDef.Table) cube.fact).schema, ((MondrianGuiDef.Table) cube.fact).name, ((MondrianGuiDef.Measure) value).column); 465 int agIndex = -1; 467 if ("sum".equals(((MondrianGuiDef.Measure) value).aggregator) || "avg".equals(((MondrianGuiDef.Measure) value).aggregator)) { 468 agIndex=0; } 470 if (! (agIndex == -1 || (colType >=2 && colType <=8))) { 471 return "aggregator '"+((MondrianGuiDef.Measure) value).aggregator+"' is not valid on the data type of the column '"+((MondrianGuiDef.Measure) value).column+"'"; 472 } 473 } 474 } 475 } 476 } else if (value instanceof MondrianGuiDef.Hierarchy) { 477 if (((MondrianGuiDef.Hierarchy)value).relation instanceof MondrianGuiDef.Join) { 478 String returnMsg = ""; 479 if ( isEmpty(((MondrianGuiDef.Hierarchy) value).primaryKeyTable)) { 480 returnMsg = "primaryKeyTable "; 481 } 482 if ( isEmpty(((MondrianGuiDef.Hierarchy) value).primaryKey)) { 483 if (returnMsg.length() > 0) { 484 returnMsg = returnMsg + "and"; 485 } 486 returnMsg = returnMsg + " primaryKey "; 487 } 488 if (returnMsg.length() > 0) { 489 return (returnMsg + emptyMsg + " for Join"); 490 } 491 } 492 } else if (value instanceof MondrianGuiDef.NamedSet) { 493 if ( isEmpty(((MondrianGuiDef.NamedSet) value).name) ) { 494 return nameLiteral + emptyMsg;} 495 if ( isEmpty(((MondrianGuiDef.NamedSet) value).formula) ) { 496 return "formula " + emptyMsg;} 497 } else if (value instanceof MondrianGuiDef.UserDefinedFunction) { 498 if ( isEmpty(((MondrianGuiDef.UserDefinedFunction) value).name) ) { 499 return nameLiteral + emptyMsg;} 500 if( isEmpty(((MondrianGuiDef.UserDefinedFunction) value).className)) { 501 return "className" + emptyMsg;} 502 } else if (value instanceof MondrianGuiDef.CalculatedMember) { 503 if ( isEmpty(((MondrianGuiDef.CalculatedMember) value).name) ) { 504 return nameLiteral + emptyMsg;} 505 if (isEmpty(((MondrianGuiDef.CalculatedMember) value).dimension) ) { 506 return "dimension" + emptyMsg;} 507 } else if (value instanceof MondrianGuiDef.Join) { 508 if ( isEmpty(((MondrianGuiDef.Join) value).leftKey) ) { 509 return "leftKey" + emptyMsg;} 510 if (isEmpty(((MondrianGuiDef.Join) value).rightKey) ) { 511 return "rightKey" + emptyMsg;} 512 } 513 514 SchemaTreeModel model = (SchemaTreeModel) tree.getModel(); 516 int childCnt = model.getChildCount(value); 517 for (int i=0; i<childCnt; i++) { 518 Object child = model.getChild(value, i); 519 String childErrMsg; 520 if (child instanceof MondrianGuiDef.Cube) { 521 childErrMsg = invalid(tree, tpath, child, child, parentDimension, parentHierarchy, parentLevel); } else if (child instanceof MondrianGuiDef.Dimension) { 523 childErrMsg = invalid(tree, tpath, child, cube, child, parentHierarchy, parentLevel); } else if (child instanceof MondrianGuiDef.Hierarchy) { 525 if (value instanceof MondrianGuiDef.Dimension && cube != null && ((MondrianGuiDef.Hierarchy)child).relation != null) { 527 if(isEmpty(((MondrianGuiDef.Dimension) value).foreignKey)) { return "foreignKey" + emptyMsg; } 530 } 531 childErrMsg = invalid(tree, tpath, child, cube, parentDimension, child, parentLevel); } else if (child instanceof MondrianGuiDef.Level) { 533 childErrMsg = invalid(tree, tpath, child, cube, parentDimension, parentHierarchy, child); } else { 535 childErrMsg = invalid(tree, tpath, child, cube, parentDimension, parentHierarchy, parentLevel); } 537 538 541 578 if (childErrMsg != null) { 580 String childClassName = child.getClass().getName(); 581 String simpleName[] = childClassName.split("[$.]",0); 582 String childName; 583 try { 584 Field f = child.getClass().getField("name"); 585 childName = (String ) f.get(child) ; 586 if (childName == null) { 587 childName=""; 588 } else { 589 childName = " '" + childName + "'"; 590 } 591 childErrMsg = simpleName[simpleName.length-1] + " " + 592 childName +" is invalid."; 593 } catch(Exception ex) { 594 childErrMsg = simpleName[simpleName.length-1] + " is invalid."; 595 } 596 return childErrMsg; 597 } 598 } 599 600 return errMsg; 601 } 602 603 private boolean isEmpty(Object v) { 604 if ((v == null) || v.equals("") ) { 605 return true; 606 } else { 607 return false; 608 } 609 } 610 private boolean isInvalid(JTree tree, Object value, int row) { 611 615 return (invalid(tree, tree.getPathForRow(row), value) ==null)?false:true; 616 } 618 619 public void setText(boolean invalidFlag, String myText) { 620 if (invalidFlag) { 621 myText = "<html><FONT COLOR=RED><b>x</b></FONT><FONT COLOR="+ getForeground().hashCode()+">"+myText+"</FONT></html>"; 622 } 623 setText(myText); 624 } 625 } 626 627 | Popular Tags |