001    /*
002    // This java file was automatically generated
003    // from XOM model 'mondrian'
004    // on Tue Aug 05 08:42:48 GMT-08:00 2008
005    // Do not edit this file by hand.
006    */
007    
008    package mondrian.gui;
009    import mondrian.olap.*;
010    import mondrian.rolap.sql.SqlQuery;
011    /**
012     * This is the XML model for Mondrian schemas as used by the Schema
013     * Workbench. It is based upon the Mondrian model Mondrian.xml, but has
014     * a number of differences:
015     * The implementation of equals method for schema objects is changed to
016     * == (double equals), to compare two object references rather than
017     * their contents.
018     * The attributes of the root tag <Model> refers to the generated
019     * file MondrianGuiDef.java and its import statements.
020     * The 'aggregator' attribute of the Measure element requires the
021     * <Value> tags to generate a drop-down of possible options in
022     * the Schema Workbench.
023     * Revision is $Id: //open/mondrian-release/3.0/src/main/mondrian/olap/Mondrian_SW.xml#2 $
024     * <p>This class was generated from XOM model 'mondrian' on Tue Aug 05 08:42:48 GMT-08:00 2008
025     */
026    public class MondrianGuiDef {
027    
028            public static java.lang.Class getXMLDefClass()
029            {
030                    return MondrianGuiDef.class;
031            }
032    
033            public static String[] _elements = {
034                    "Schema",
035                    "CubeDimension",
036                    "Cube",
037                    "VirtualCube",
038                    "VirtualCubeDimension",
039                    "VirtualCubeMeasure",
040                    "DimensionUsage",
041                    "Dimension",
042                    "Hierarchy",
043                    "Level",
044                    "Closure",
045                    "Property",
046                    "Measure",
047                    "CalculatedMember",
048                    "CalculatedMemberProperty",
049                    "NamedSet",
050                    "Formula",
051                    "MemberReaderParameter",
052                    "RelationOrJoin",
053                    "Relation",
054                    "View",
055                    "SQL",
056                    "Join",
057                    "Table",
058                    "InlineTable",
059                    "ColumnDefs",
060                    "ColumnDef",
061                    "Rows",
062                    "Row",
063                    "Value",
064                    "AggTable",
065                    "AggName",
066                    "AggPattern",
067                    "AggExclude",
068                    "AggColumnName",
069                    "AggFactCount",
070                    "AggIgnoreColumn",
071                    "AggForeignKey",
072                    "AggLevel",
073                    "AggMeasure",
074                    "Expression",
075                    "Column",
076                    "ExpressionView",
077                    "KeyExpression",
078                    "ParentExpression",
079                    "OrdinalExpression",
080                    "NameExpression",
081                    "CaptionExpression",
082                    "MeasureExpression",
083                    "Role",
084                    "Grant",
085                    "SchemaGrant",
086                    "CubeGrant",
087                    "DimensionGrant",
088                    "HierarchyGrant",
089                    "MemberGrant",
090                    "UserDefinedFunction",
091                    "Parameter"
092            };
093    
094            /**
095             * A schema is a collection of cubes and virtual cubes.
096             * It can also contain shared dimensions (for use by those
097             * cubes), named sets, roles, and declarations of
098             * user-defined functions.
099             */
100            public static class Schema extends org.eigenbase.xom.ElementDef
101            {
102                    public Schema()
103                    {
104                    }
105    
106                    public Schema(org.eigenbase.xom.DOMWrapper _def)
107                            throws org.eigenbase.xom.XOMException
108                    {
109                            try {
110                                    org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianGuiDef.class);
111                                    _parser = _parser;
112                                    org.eigenbase.xom.NodeDef[] _tempArray = null;
113                                    _tempArray = _tempArray;
114                                    name = (String)_parser.getAttribute("name", "String", null, null, true);
115                                    measuresCaption = (String)_parser.getAttribute("measuresCaption", "String", null, null, false);
116                                    defaultRole = (String)_parser.getAttribute("defaultRole", "String", null, null, false);
117                                    _tempArray = _parser.getArray(Parameter.class, 0, 0);
118                                    parameters = new Parameter[_tempArray.length];
119                                    for(int _i=0; _i<parameters.length; _i++)
120                                            parameters[_i] = (Parameter)_tempArray[_i];
121                                    _tempArray = _parser.getArray(Dimension.class, 0, 0);
122                                    dimensions = new Dimension[_tempArray.length];
123                                    for(int _i=0; _i<dimensions.length; _i++)
124                                            dimensions[_i] = (Dimension)_tempArray[_i];
125                                    _tempArray = _parser.getArray(Cube.class, 0, 0);
126                                    cubes = new Cube[_tempArray.length];
127                                    for(int _i=0; _i<cubes.length; _i++)
128                                            cubes[_i] = (Cube)_tempArray[_i];
129                                    _tempArray = _parser.getArray(VirtualCube.class, 0, 0);
130                                    virtualCubes = new VirtualCube[_tempArray.length];
131                                    for(int _i=0; _i<virtualCubes.length; _i++)
132                                            virtualCubes[_i] = (VirtualCube)_tempArray[_i];
133                                    _tempArray = _parser.getArray(NamedSet.class, 0, 0);
134                                    namedSets = new NamedSet[_tempArray.length];
135                                    for(int _i=0; _i<namedSets.length; _i++)
136                                            namedSets[_i] = (NamedSet)_tempArray[_i];
137                                    _tempArray = _parser.getArray(Role.class, 0, 0);
138                                    roles = new Role[_tempArray.length];
139                                    for(int _i=0; _i<roles.length; _i++)
140                                            roles[_i] = (Role)_tempArray[_i];
141                                    _tempArray = _parser.getArray(UserDefinedFunction.class, 0, 0);
142                                    userDefinedFunctions = new UserDefinedFunction[_tempArray.length];
143                                    for(int _i=0; _i<userDefinedFunctions.length; _i++)
144                                            userDefinedFunctions[_i] = (UserDefinedFunction)_tempArray[_i];
145                            } catch(org.eigenbase.xom.XOMException _ex) {
146                                    throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
147                            }
148                    }
149    
150                    public String name;  // required attribute
151                    public String measuresCaption;  // optional attribute
152                    public String defaultRole;  // optional attribute
153    
154                    /**
155                     * This schema's parameter definitions.
156                     */
157                    public Parameter[] parameters;  //optional array
158                    /**
159                     * Shared dimensions in this schema.
160                     */
161                    public Dimension[] dimensions;  //optional array
162                    /**
163                     * Cubes in this schema.
164                     */
165                    public Cube[] cubes;  //optional array
166                    /**
167                     * Virtual cubes in this schema.
168                     */
169                    public VirtualCube[] virtualCubes;  //optional array
170                    /**
171                     * Named sets in this schema.
172                     */
173                    public NamedSet[] namedSets;  //optional array
174                    /**
175                     * Roles in this schema.
176                     */
177                    public Role[] roles;  //optional array
178                    /**
179                     * Declarations of user-defined functions in this schema.
180                     */
181                    public UserDefinedFunction[] userDefinedFunctions;  //optional array
182    
183                    public String getName()
184                    {
185                            return "Schema";
186                    }
187    
188                    public void display(java.io.PrintWriter _out, int _indent)
189                    {
190                            _out.println(getName());
191                            displayAttribute(_out, "name", name, _indent+1);
192                            displayAttribute(_out, "measuresCaption", measuresCaption, _indent+1);
193                            displayAttribute(_out, "defaultRole", defaultRole, _indent+1);
194                            displayElementArray(_out, "parameters", parameters, _indent+1);
195                            displayElementArray(_out, "dimensions", dimensions, _indent+1);
196                            displayElementArray(_out, "cubes", cubes, _indent+1);
197                            displayElementArray(_out, "virtualCubes", virtualCubes, _indent+1);
198                            displayElementArray(_out, "namedSets", namedSets, _indent+1);
199                            displayElementArray(_out, "roles", roles, _indent+1);
200                            displayElementArray(_out, "userDefinedFunctions", userDefinedFunctions, _indent+1);
201                    }
202                    public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
203                    {
204                            _out.beginTag("Schema", new org.eigenbase.xom.XMLAttrVector()
205                                    .add("name", name)
206                                    .add("measuresCaption", measuresCaption)
207                                    .add("defaultRole", defaultRole)
208                                    );
209                            displayXMLElementArray(_out, parameters);
210                            displayXMLElementArray(_out, dimensions);
211                            displayXMLElementArray(_out, cubes);
212                            displayXMLElementArray(_out, virtualCubes);
213                            displayXMLElementArray(_out, namedSets);
214                            displayXMLElementArray(_out, roles);
215                            displayXMLElementArray(_out, userDefinedFunctions);
216                            _out.endTag("Schema");
217                    }
218                    public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
219                    {
220                            boolean _diff = true;
221                            Schema _cother = (Schema)_other;
222                            _diff = _diff && displayAttributeDiff("name", name, _cother.name, _out, _indent+1);
223                            _diff = _diff && displayAttributeDiff("measuresCaption", measuresCaption, _cother.measuresCaption, _out, _indent+1);
224                            _diff = _diff && displayAttributeDiff("defaultRole", defaultRole, _cother.defaultRole, _out, _indent+1);
225                            _diff = _diff && displayElementArrayDiff("parameters", parameters, _cother.parameters, _out, _indent+1);
226                            _diff = _diff && displayElementArrayDiff("dimensions", dimensions, _cother.dimensions, _out, _indent+1);
227                            _diff = _diff && displayElementArrayDiff("cubes", cubes, _cother.cubes, _out, _indent+1);
228                            _diff = _diff && displayElementArrayDiff("virtualCubes", virtualCubes, _cother.virtualCubes, _out, _indent+1);
229                            _diff = _diff && displayElementArrayDiff("namedSets", namedSets, _cother.namedSets, _out, _indent+1);
230                            _diff = _diff && displayElementArrayDiff("roles", roles, _cother.roles, _out, _indent+1);
231                            _diff = _diff && displayElementArrayDiff("userDefinedFunctions", userDefinedFunctions, _cother.userDefinedFunctions, _out, _indent+1);
232                            return _diff;
233                    }
234                    // BEGIN pass-through code block ---
235    Cube getCube(String cubeName) {
236                    for (int i = 0; i < cubes.length; i++) {
237                        if (cubes[i].name.equals(cubeName)) {
238                            return cubes[i];
239                        }
240                    }
241                    throw Util.newInternal("Cannot find cube '" + cubeName + "'");
242                }
243                Dimension getPublicDimension(String dimensionName) {
244                    for (int i = 0; i < dimensions.length; i++) {
245                        if (dimensions[i].name.equals(dimensionName)) {
246                            return dimensions[i];
247                        }
248                    }
249                    throw Util.newInternal(
250                        "Cannot find public dimension '" + dimensionName + "'");
251                }
252                    // END pass-through code block ---
253            }
254    
255            /**
256             * A CubeDimension is either a usage of a Dimension ('shared
257             * dimension', in MSOLAP parlance), or a 'private dimension'.
258             */
259            public static abstract class CubeDimension extends org.eigenbase.xom.ElementDef
260            {
261                    public CubeDimension()
262                    {
263                    }
264    
265                    public CubeDimension(org.eigenbase.xom.DOMWrapper _def)
266                            throws org.eigenbase.xom.XOMException
267                    {
268                            try {
269                                    org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianGuiDef.class);
270                                    _parser = _parser;
271                                    name = (String)_parser.getAttribute("name", "String", null, null, true);
272                                    caption = (String)_parser.getAttribute("caption", "String", null, null, false);
273                                    foreignKey = (String)_parser.getAttribute("foreignKey", "String", null, null, false);
274                            } catch(org.eigenbase.xom.XOMException _ex) {
275                                    throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
276                            }
277                    }
278    
279                    public String name;  // required attribute
280                    public String caption;  // optional attribute
281                    public String foreignKey;  // optional attribute
282    
283    
284                    public String getName()
285                    {
286                            return "CubeDimension";
287                    }
288    
289                    public void display(java.io.PrintWriter _out, int _indent)
290                    {
291                            _out.println(getName());
292                            displayAttribute(_out, "name", name, _indent+1);
293                            displayAttribute(_out, "caption", caption, _indent+1);
294                            displayAttribute(_out, "foreignKey", foreignKey, _indent+1);
295                    }
296                    public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
297                    {
298                            _out.beginTag("(%CubeDimension;)", new org.eigenbase.xom.XMLAttrVector()
299                                    .add("name", name)
300                                    .add("caption", caption)
301                                    .add("foreignKey", foreignKey)
302                                    );
303                            _out.endTag("(%CubeDimension;)");
304                    }
305                    public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
306                    {
307                            boolean _diff = true;
308                            CubeDimension _cother = (CubeDimension)_other;
309                            _diff = _diff && displayAttributeDiff("name", name, _cother.name, _out, _indent+1);
310                            _diff = _diff && displayAttributeDiff("caption", caption, _cother.caption, _out, _indent+1);
311                            _diff = _diff && displayAttributeDiff("foreignKey", foreignKey, _cother.foreignKey, _out, _indent+1);
312                            return _diff;
313                    }
314                    // BEGIN pass-through code block ---
315    /**
316                 * Looks up the base dimension of this dimension. If this is a
317                 * usage of a shared dimension, returns the referenced dimension;
318                 * otherwise returns the dimension itself.
319                 *
320                 * <p>Never returns null; if the dimension cannot be
321                 * found, throws an error.
322                 *
323                 * @param schema Schema, never null
324                 * @pre schema != null
325                 * @post return != null
326                 */
327                public abstract Dimension getDimension(Schema schema);
328                    // END pass-through code block ---
329            }
330    
331            /**
332             * Definition of a cube.
333             */
334            public static class Cube extends org.eigenbase.xom.ElementDef
335            {
336                    public Cube()
337                    {
338                    }
339    
340                    public Cube(org.eigenbase.xom.DOMWrapper _def)
341                            throws org.eigenbase.xom.XOMException
342                    {
343                            try {
344                                    org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianGuiDef.class);
345                                    _parser = _parser;
346                                    org.eigenbase.xom.NodeDef[] _tempArray = null;
347                                    _tempArray = _tempArray;
348                                    name = (String)_parser.getAttribute("name", "String", null, null, true);
349                                    caption = (String)_parser.getAttribute("caption", "String", null, null, false);
350                                    cache = (Boolean)_parser.getAttribute("cache", "Boolean", "true", null, false);
351                                    enabled = (Boolean)_parser.getAttribute("enabled", "Boolean", "true", null, false);
352                                    fact = (Relation)_parser.getElement(Relation.class, true);
353                                    _tempArray = _parser.getArray(CubeDimension.class, 0, 0);
354                                    dimensions = new CubeDimension[_tempArray.length];
355                                    for(int _i=0; _i<dimensions.length; _i++)
356                                            dimensions[_i] = (CubeDimension)_tempArray[_i];
357                                    _tempArray = _parser.getArray(Measure.class, 0, 0);
358                                    measures = new Measure[_tempArray.length];
359                                    for(int _i=0; _i<measures.length; _i++)
360                                            measures[_i] = (Measure)_tempArray[_i];
361                                    _tempArray = _parser.getArray(CalculatedMember.class, 0, 0);
362                                    calculatedMembers = new CalculatedMember[_tempArray.length];
363                                    for(int _i=0; _i<calculatedMembers.length; _i++)
364                                            calculatedMembers[_i] = (CalculatedMember)_tempArray[_i];
365                                    _tempArray = _parser.getArray(NamedSet.class, 0, 0);
366                                    namedSets = new NamedSet[_tempArray.length];
367                                    for(int _i=0; _i<namedSets.length; _i++)
368                                            namedSets[_i] = (NamedSet)_tempArray[_i];
369                            } catch(org.eigenbase.xom.XOMException _ex) {
370                                    throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
371                            }
372                    }
373    
374                    public String name;  // required attribute
375                    public String caption;  // optional attribute
376                    public Boolean cache;  // attribute default: true
377                    public Boolean enabled;  // attribute default: true
378    
379                    /**
380                     * The fact table is the source of all measures in this cube. If
381                     * this is a Table and the schema name is not
382                     * present, table name is left unqualified.
383                     */
384                    public Relation fact;  //required element
385                    /**
386                     */
387                    public CubeDimension[] dimensions;  //optional array
388                    /**
389                     */
390                    public Measure[] measures;  //optional array
391                    /**
392                     * Calculated members in this cube.
393                     */
394                    public CalculatedMember[] calculatedMembers;  //optional array
395                    /**
396                     * Named sets in this cube.
397                     */
398                    public NamedSet[] namedSets;  //optional array
399    
400                    public String getName()
401                    {
402                            return "Cube";
403                    }
404    
405                    public void display(java.io.PrintWriter _out, int _indent)
406                    {
407                            _out.println(getName());
408                            displayAttribute(_out, "name", name, _indent+1);
409                            displayAttribute(_out, "caption", caption, _indent+1);
410                            displayAttribute(_out, "cache", cache, _indent+1);
411                            displayAttribute(_out, "enabled", enabled, _indent+1);
412                            displayElement(_out, "fact", fact, _indent+1);
413                            displayElementArray(_out, "dimensions", dimensions, _indent+1);
414                            displayElementArray(_out, "measures", measures, _indent+1);
415                            displayElementArray(_out, "calculatedMembers", calculatedMembers, _indent+1);
416                            displayElementArray(_out, "namedSets", namedSets, _indent+1);
417                    }
418                    public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
419                    {
420                            _out.beginTag("Cube", new org.eigenbase.xom.XMLAttrVector()
421                                    .add("name", name)
422                                    .add("caption", caption)
423                                    .add("cache", cache)
424                                    .add("enabled", enabled)
425                                    );
426                            displayXMLElement(_out, fact);
427                            displayXMLElementArray(_out, dimensions);
428                            displayXMLElementArray(_out, measures);
429                            displayXMLElementArray(_out, calculatedMembers);
430                            displayXMLElementArray(_out, namedSets);
431                            _out.endTag("Cube");
432                    }
433                    public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
434                    {
435                            boolean _diff = true;
436                            Cube _cother = (Cube)_other;
437                            _diff = _diff && displayAttributeDiff("name", name, _cother.name, _out, _indent+1);
438                            _diff = _diff && displayAttributeDiff("caption", caption, _cother.caption, _out, _indent+1);
439                            _diff = _diff && displayAttributeDiff("cache", cache, _cother.cache, _out, _indent+1);
440                            _diff = _diff && displayAttributeDiff("enabled", enabled, _cother.enabled, _out, _indent+1);
441                            _diff = _diff && displayElementDiff("fact", fact, _cother.fact, _out, _indent+1);
442                            _diff = _diff && displayElementArrayDiff("dimensions", dimensions, _cother.dimensions, _out, _indent+1);
443                            _diff = _diff && displayElementArrayDiff("measures", measures, _cother.measures, _out, _indent+1);
444                            _diff = _diff && displayElementArrayDiff("calculatedMembers", calculatedMembers, _cother.calculatedMembers, _out, _indent+1);
445                            _diff = _diff && displayElementArrayDiff("namedSets", namedSets, _cother.namedSets, _out, _indent+1);
446                            return _diff;
447                    }
448                    // BEGIN pass-through code block ---
449    public boolean isEnabled() {
450                    return enabled.booleanValue();
451                }
452                Dimension getDimension(Schema xmlSchema, String dimensionName) {
453                    for (int i = 0; i < dimensions.length; i++) {
454                        if (dimensions[i].name.equals(dimensionName)) {
455                            return dimensions[i].getDimension(xmlSchema);
456                        }
457                    }
458                    throw Util.newInternal(
459                        "Cannot find dimension '" + dimensionName + "' in cube '" +
460                        name + "'");
461                }
462                public boolean equals(Object o) {
463                    return (this == o);
464                }
465                    // END pass-through code block ---
466            }
467    
468            /**
469             * A VirtualCube is a set of dimensions and
470             * measures gleaned from other cubes.
471             */
472            public static class VirtualCube extends org.eigenbase.xom.ElementDef
473            {
474                    public VirtualCube()
475                    {
476                    }
477    
478                    public VirtualCube(org.eigenbase.xom.DOMWrapper _def)
479                            throws org.eigenbase.xom.XOMException
480                    {
481                            try {
482                                    org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianGuiDef.class);
483                                    _parser = _parser;
484                                    org.eigenbase.xom.NodeDef[] _tempArray = null;
485                                    _tempArray = _tempArray;
486                                    enabled = (Boolean)_parser.getAttribute("enabled", "Boolean", "true", null, false);
487                                    name = (String)_parser.getAttribute("name", "String", null, null, false);
488                                    caption = (String)_parser.getAttribute("caption", "String", null, null, false);
489                                    _tempArray = _parser.getArray(VirtualCubeDimension.class, 0, 0);
490                                    dimensions = new VirtualCubeDimension[_tempArray.length];
491                                    for(int _i=0; _i<dimensions.length; _i++)
492                                            dimensions[_i] = (VirtualCubeDimension)_tempArray[_i];
493                                    _tempArray = _parser.getArray(VirtualCubeMeasure.class, 0, 0);
494                                    measures = new VirtualCubeMeasure[_tempArray.length];
495                                    for(int _i=0; _i<measures.length; _i++)
496                                            measures[_i] = (VirtualCubeMeasure)_tempArray[_i];
497                                    _tempArray = _parser.getArray(CalculatedMember.class, 0, 0);
498                                    calculatedMembers = new CalculatedMember[_tempArray.length];
499                                    for(int _i=0; _i<calculatedMembers.length; _i++)
500                                            calculatedMembers[_i] = (CalculatedMember)_tempArray[_i];
501                            } catch(org.eigenbase.xom.XOMException _ex) {
502                                    throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
503                            }
504                    }
505    
506                    public Boolean enabled;  // attribute default: true
507                    public String name;  // optional attribute
508                    public String caption;  // optional attribute
509    
510                    /**
511                     */
512                    public VirtualCubeDimension[] dimensions;  //optional array
513                    /**
514                     */
515                    public VirtualCubeMeasure[] measures;  //optional array
516                    /**
517                     * Calculated members that belong to this virtual cube.
518                     * (Calculated members inherited from other cubes should not be
519                     * in this list.)
520                     */
521                    public CalculatedMember[] calculatedMembers;  //optional array
522    
523                    public String getName()
524                    {
525                            return "VirtualCube";
526                    }
527    
528                    public void display(java.io.PrintWriter _out, int _indent)
529                    {
530                            _out.println(getName());
531                            displayAttribute(_out, "enabled", enabled, _indent+1);
532                            displayAttribute(_out, "name", name, _indent+1);
533                            displayAttribute(_out, "caption", caption, _indent+1);
534                            displayElementArray(_out, "dimensions", dimensions, _indent+1);
535                            displayElementArray(_out, "measures", measures, _indent+1);
536                            displayElementArray(_out, "calculatedMembers", calculatedMembers, _indent+1);
537                    }
538                    public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
539                    {
540                            _out.beginTag("VirtualCube", new org.eigenbase.xom.XMLAttrVector()
541                                    .add("enabled", enabled)
542                                    .add("name", name)
543                                    .add("caption", caption)
544                                    );
545                            displayXMLElementArray(_out, dimensions);
546                            displayXMLElementArray(_out, measures);
547                            displayXMLElementArray(_out, calculatedMembers);
548                            _out.endTag("VirtualCube");
549                    }
550                    public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
551                    {
552                            boolean _diff = true;
553                            VirtualCube _cother = (VirtualCube)_other;
554                            _diff = _diff && displayAttributeDiff("enabled", enabled, _cother.enabled, _out, _indent+1);
555                            _diff = _diff && displayAttributeDiff("name", name, _cother.name, _out, _indent+1);
556                            _diff = _diff && displayAttributeDiff("caption", caption, _cother.caption, _out, _indent+1);
557                            _diff = _diff && displayElementArrayDiff("dimensions", dimensions, _cother.dimensions, _out, _indent+1);
558                            _diff = _diff && displayElementArrayDiff("measures", measures, _cother.measures, _out, _indent+1);
559                            _diff = _diff && displayElementArrayDiff("calculatedMembers", calculatedMembers, _cother.calculatedMembers, _out, _indent+1);
560                            return _diff;
561                    }
562                    // BEGIN pass-through code block ---
563    public boolean isEnabled() {
564                    return enabled.booleanValue();
565                }
566                    // END pass-through code block ---
567            }
568    
569            /**
570             * A VirtualCubeDimension is a usage of a Dimension in a VirtualCube.
571             */
572            public static class VirtualCubeDimension extends CubeDimension
573            {
574                    public VirtualCubeDimension()
575                    {
576                    }
577    
578                    public VirtualCubeDimension(org.eigenbase.xom.DOMWrapper _def)
579                            throws org.eigenbase.xom.XOMException
580                    {
581                            try {
582                                    org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianGuiDef.class);
583                                    _parser = _parser;
584                                    cubeName = (String)_parser.getAttribute("cubeName", "String", null, null, false);
585                                    caption = (String)_parser.getAttribute("caption", "String", null, null, false);
586                                    foreignKey = (String)_parser.getAttribute("foreignKey", "String", null, null, false);
587                                    name = (String)_parser.getAttribute("name", "String", null, null, false);
588                            } catch(org.eigenbase.xom.XOMException _ex) {
589                                    throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
590                            }
591                    }
592    
593                    public String cubeName;  // optional attribute
594    
595    
596                    public String getName()
597                    {
598                            return "VirtualCubeDimension";
599                    }
600    
601                    public void display(java.io.PrintWriter _out, int _indent)
602                    {
603                            _out.println(getName());
604                            displayAttribute(_out, "cubeName", cubeName, _indent+1);
605                            displayAttribute(_out, "caption", caption, _indent+1);
606                            displayAttribute(_out, "foreignKey", foreignKey, _indent+1);
607                            displayAttribute(_out, "name", name, _indent+1);
608                    }
609                    public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
610                    {
611                            _out.beginTag("VirtualCubeDimension", new org.eigenbase.xom.XMLAttrVector()
612                                    .add("cubeName", cubeName)
613                                    .add("caption", caption)
614                                    .add("foreignKey", foreignKey)
615                                    .add("name", name)
616                                    );
617                            _out.endTag("VirtualCubeDimension");
618                    }
619                    public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
620                    {
621                            boolean _diff = true;
622                            VirtualCubeDimension _cother = (VirtualCubeDimension)_other;
623                            _diff = _diff && displayAttributeDiff("cubeName", cubeName, _cother.cubeName, _out, _indent+1);
624                            return _diff;
625                    }
626                    // BEGIN pass-through code block ---
627    // implement CubeDimension
628                public Dimension getDimension(Schema schema) {
629                    Util.assertPrecondition(schema != null, "schema != null");
630                    if (cubeName == null) {
631                        return schema.getPublicDimension(name);
632                    } else {
633                        Cube cube = schema.getCube(cubeName);
634                        return cube.getDimension(schema, name);
635                    }
636                }
637                    // END pass-through code block ---
638            }
639    
640            /**
641             * A VirtualCubeMeasure is a usage of a Measure in a VirtualCube.
642             */
643            public static class VirtualCubeMeasure extends org.eigenbase.xom.ElementDef
644            {
645                    public VirtualCubeMeasure()
646                    {
647                    }
648    
649                    public VirtualCubeMeasure(org.eigenbase.xom.DOMWrapper _def)
650                            throws org.eigenbase.xom.XOMException
651                    {
652                            try {
653                                    org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianGuiDef.class);
654                                    _parser = _parser;
655                                    cubeName = (String)_parser.getAttribute("cubeName", "String", null, null, false);
656                                    name = (String)_parser.getAttribute("name", "String", null, null, false);
657                                    visible = (Boolean)_parser.getAttribute("visible", "Boolean", null, null, false);
658                            } catch(org.eigenbase.xom.XOMException _ex) {
659                                    throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
660                            }
661                    }
662    
663                    public String cubeName;  // optional attribute
664                    public String name;  // optional attribute
665                    public Boolean visible;  // optional attribute
666    
667    
668                    public String getName()
669                    {
670                            return "VirtualCubeMeasure";
671                    }
672    
673                    public void display(java.io.PrintWriter _out, int _indent)
674                    {
675                            _out.println(getName());
676                            displayAttribute(_out, "cubeName", cubeName, _indent+1);
677                            displayAttribute(_out, "name", name, _indent+1);
678                            displayAttribute(_out, "visible", visible, _indent+1);
679                    }
680                    public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
681                    {
682                            _out.beginTag("VirtualCubeMeasure", new org.eigenbase.xom.XMLAttrVector()
683                                    .add("cubeName", cubeName)
684                                    .add("name", name)
685                                    .add("visible", visible)
686                                    );
687                            _out.endTag("VirtualCubeMeasure");
688                    }
689                    public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
690                    {
691                            boolean _diff = true;
692                            VirtualCubeMeasure _cother = (VirtualCubeMeasure)_other;
693                            _diff = _diff && displayAttributeDiff("cubeName", cubeName, _cother.cubeName, _out, _indent+1);
694                            _diff = _diff && displayAttributeDiff("name", name, _cother.name, _out, _indent+1);
695                            _diff = _diff && displayAttributeDiff("visible", visible, _cother.visible, _out, _indent+1);
696                            return _diff;
697                    }
698            }
699    
700            /**
701             * A DimensionUsage is usage of a shared
702             * Dimension within the context of a cube.
703             */
704            public static class DimensionUsage extends CubeDimension
705            {
706                    public DimensionUsage()
707                    {
708                    }
709    
710                    public DimensionUsage(org.eigenbase.xom.DOMWrapper _def)
711                            throws org.eigenbase.xom.XOMException
712                    {
713                            try {
714                                    org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianGuiDef.class);
715                                    _parser = _parser;
716                                    source = (String)_parser.getAttribute("source", "String", null, null, true);
717                                    level = (String)_parser.getAttribute("level", "String", null, null, false);
718                                    usagePrefix = (String)_parser.getAttribute("usagePrefix", "String", null, null, false);
719                                    name = (String)_parser.getAttribute("name", "String", null, null, true);
720                                    caption = (String)_parser.getAttribute("caption", "String", null, null, false);
721                                    foreignKey = (String)_parser.getAttribute("foreignKey", "String", null, null, false);
722                            } catch(org.eigenbase.xom.XOMException _ex) {
723                                    throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
724                            }
725                    }
726    
727                    public String source;  // required attribute
728                    public String level;  // optional attribute
729                    public String usagePrefix;  // optional attribute
730    
731    
732                    public String getName()
733                    {
734                            return "DimensionUsage";
735                    }
736    
737                    public void display(java.io.PrintWriter _out, int _indent)
738                    {
739                            _out.println(getName());
740                            displayAttribute(_out, "source", source, _indent+1);
741                            displayAttribute(_out, "level", level, _indent+1);
742                            displayAttribute(_out, "usagePrefix", usagePrefix, _indent+1);
743                            displayAttribute(_out, "name", name, _indent+1);
744                            displayAttribute(_out, "caption", caption, _indent+1);
745                            displayAttribute(_out, "foreignKey", foreignKey, _indent+1);
746                    }
747                    public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
748                    {
749                            _out.beginTag("DimensionUsage", new org.eigenbase.xom.XMLAttrVector()
750                                    .add("source", source)
751                                    .add("level", level)
752                                    .add("usagePrefix", usagePrefix)
753                                    .add("name", name)
754                                    .add("caption", caption)
755                                    .add("foreignKey", foreignKey)
756                                    );
757                            _out.endTag("DimensionUsage");
758                    }
759                    public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
760                    {
761                            boolean _diff = true;
762                            DimensionUsage _cother = (DimensionUsage)_other;
763                            _diff = _diff && displayAttributeDiff("source", source, _cother.source, _out, _indent+1);
764                            _diff = _diff && displayAttributeDiff("level", level, _cother.level, _out, _indent+1);
765                            _diff = _diff && displayAttributeDiff("usagePrefix", usagePrefix, _cother.usagePrefix, _out, _indent+1);
766                            return _diff;
767                    }
768                    // BEGIN pass-through code block ---
769    // implement CubeDimension
770                public Dimension getDimension(Schema schema) {
771                    Util.assertPrecondition(schema != null, "schema != null");
772                    for (int i = 0; i < schema.dimensions.length; i++) {
773                        if (schema.dimensions[i].name.equals(source)) {
774                            return schema.dimensions[i];
775                        }
776                    }
777                    throw Util.newInternal(
778                        "Cannot find shared dimension '" + source + "'");
779                }
780                    // END pass-through code block ---
781            }
782    
783            /**
784             * A Dimension is a collection of hierarchies. There are
785             * two kinds: a public dimension belongs to a
786             * Schema, and be used by several cubes; a
787             * private dimension belongs to a
788             * Cube. The foreignKey field is only
789             * applicable to private dimensions.
790             */
791            public static class Dimension extends CubeDimension
792            {
793                    public Dimension()
794                    {
795                    }
796    
797                    public Dimension(org.eigenbase.xom.DOMWrapper _def)
798                            throws org.eigenbase.xom.XOMException
799                    {
800                            try {
801                                    org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianGuiDef.class);
802                                    _parser = _parser;
803                                    org.eigenbase.xom.NodeDef[] _tempArray = null;
804                                    _tempArray = _tempArray;
805                                    type = (String)_parser.getAttribute("type", "String", null, _type_values, false);
806                                    usagePrefix = (String)_parser.getAttribute("usagePrefix", "String", null, null, false);
807                                    foreignKey = (String)_parser.getAttribute("foreignKey", "String", null, null, false);
808                                    name = (String)_parser.getAttribute("name", "String", null, null, true);
809                                    caption = (String)_parser.getAttribute("caption", "String", null, null, false);
810                                    _tempArray = _parser.getArray(Hierarchy.class, 0, 0);
811                                    hierarchies = new Hierarchy[_tempArray.length];
812                                    for(int _i=0; _i<hierarchies.length; _i++)
813                                            hierarchies[_i] = (Hierarchy)_tempArray[_i];
814                            } catch(org.eigenbase.xom.XOMException _ex) {
815                                    throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
816                            }
817                    }
818    
819                    /** Allowable values for {@link #type}. */
820                    public static final String[] _type_values = {"StandardDimension", "TimeDimension"};
821                    public String type;  // optional attribute
822                    public String usagePrefix;  // optional attribute
823    
824                    /**
825                     */
826                    public Hierarchy[] hierarchies;  //optional array
827    
828                    public String getName()
829                    {
830                            return "Dimension";
831                    }
832    
833                    public void display(java.io.PrintWriter _out, int _indent)
834                    {
835                            _out.println(getName());
836                            displayAttribute(_out, "type", type, _indent+1);
837                            displayAttribute(_out, "usagePrefix", usagePrefix, _indent+1);
838                            displayAttribute(_out, "foreignKey", foreignKey, _indent+1);
839                            displayAttribute(_out, "name", name, _indent+1);
840                            displayAttribute(_out, "caption", caption, _indent+1);
841                            displayElementArray(_out, "hierarchies", hierarchies, _indent+1);
842                    }
843                    public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
844                    {
845                            _out.beginTag("Dimension", new org.eigenbase.xom.XMLAttrVector()
846                                    .add("type", type)
847                                    .add("usagePrefix", usagePrefix)
848                                    .add("foreignKey", foreignKey)
849                                    .add("name", name)
850                                    .add("caption", caption)
851                                    );
852                            displayXMLElementArray(_out, hierarchies);
853                            _out.endTag("Dimension");
854                    }
855                    public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
856                    {
857                            boolean _diff = true;
858                            Dimension _cother = (Dimension)_other;
859                            _diff = _diff && displayAttributeDiff("type", type, _cother.type, _out, _indent+1);
860                            _diff = _diff && displayAttributeDiff("usagePrefix", usagePrefix, _cother.usagePrefix, _out, _indent+1);
861                            _diff = _diff && displayElementArrayDiff("hierarchies", hierarchies, _cother.hierarchies, _out, _indent+1);
862                            return _diff;
863                    }
864                    // BEGIN pass-through code block ---
865    // implement CubeDimension
866                public Dimension getDimension(Schema schema) {
867                    Util.assertPrecondition(schema != null, "schema != null");
868                    return this;
869                }
870    
871                // Return the dimension's enumerated type.
872                public DimensionType getDimensionType() {
873                    if (type == null) {
874                        return null; //DimensionType.StandardDimension;
875                    } else {
876                        return DimensionType.valueOf(type);
877                    }
878                }
879                    // END pass-through code block ---
880            }
881    
882            /**
883             * Defines a hierarchy.
884             * You must specify at most one <Relation>
885             * or memberReaderClass. If you specify none, the
886             * hierarchy is assumed to come from the same fact table of the
887             * current cube.
888             */
889            public static class Hierarchy extends org.eigenbase.xom.ElementDef
890            {
891                    public Hierarchy()
892                    {
893                    }
894    
895                    public Hierarchy(org.eigenbase.xom.DOMWrapper _def)
896                            throws org.eigenbase.xom.XOMException
897                    {
898                            try {
899                                    org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianGuiDef.class);
900                                    _parser = _parser;
901                                    org.eigenbase.xom.NodeDef[] _tempArray = null;
902                                    _tempArray = _tempArray;
903                                    name = (String)_parser.getAttribute("name", "String", null, null, false);
904                                    hasAll = (Boolean)_parser.getAttribute("hasAll", "Boolean", null, null, true);
905                                    allMemberName = (String)_parser.getAttribute("allMemberName", "String", null, null, false);
906                                    allMemberCaption = (String)_parser.getAttribute("allMemberCaption", "String", null, null, false);
907                                    allLevelName = (String)_parser.getAttribute("allLevelName", "String", null, null, false);
908                                    primaryKey = (String)_parser.getAttribute("primaryKey", "String", null, null, false);
909                                    primaryKeyTable = (String)_parser.getAttribute("primaryKeyTable", "String", null, null, false);
910                                    defaultMember = (String)_parser.getAttribute("defaultMember", "String", null, null, false);
911                                    memberReaderClass = (String)_parser.getAttribute("memberReaderClass", "String", null, null, false);
912                                    caption = (String)_parser.getAttribute("caption", "String", null, null, false);
913                                    relation = (RelationOrJoin)_parser.getElement(RelationOrJoin.class, false);
914                                    _tempArray = _parser.getArray(Level.class, 0, 0);
915                                    levels = new Level[_tempArray.length];
916                                    for(int _i=0; _i<levels.length; _i++)
917                                            levels[_i] = (Level)_tempArray[_i];
918                                    _tempArray = _parser.getArray(MemberReaderParameter.class, 0, 0);
919                                    memberReaderParameters = new MemberReaderParameter[_tempArray.length];
920                                    for(int _i=0; _i<memberReaderParameters.length; _i++)
921                                            memberReaderParameters[_i] = (MemberReaderParameter)_tempArray[_i];
922                            } catch(org.eigenbase.xom.XOMException _ex) {
923                                    throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
924                            }
925                    }
926    
927                    public String name;  // optional attribute
928                    public Boolean hasAll;  // required attribute
929                    public String allMemberName;  // optional attribute
930                    public String allMemberCaption;  // optional attribute
931                    public String allLevelName;  // optional attribute
932                    public String primaryKey;  // optional attribute
933                    public String primaryKeyTable;  // optional attribute
934                    public String defaultMember;  // optional attribute
935                    public String memberReaderClass;  // optional attribute
936                    public String caption;  // optional attribute
937    
938                    /**
939                     * The {@link MondrianGuiDef.Table table},
940                     * {@link MondrianGuiDef.Join set of tables},
941                     * {@link MondrianGuiDef.View SQL statement}, or
942                     * {@link MondrianGuiDef.InlineTable inline table}
943                     * which populates this hierarchy.
944                     */
945                    public RelationOrJoin relation;  //optional element
946                    /**
947                     */
948                    public Level[] levels;  //optional array
949                    public MemberReaderParameter[] memberReaderParameters;  //optional array
950    
951                    public String getName()
952                    {
953                            return "Hierarchy";
954                    }
955    
956                    public void display(java.io.PrintWriter _out, int _indent)
957                    {
958                            _out.println(getName());
959                            displayAttribute(_out, "name", name, _indent+1);
960                            displayAttribute(_out, "hasAll", hasAll, _indent+1);
961                            displayAttribute(_out, "allMemberName", allMemberName, _indent+1);
962                            displayAttribute(_out, "allMemberCaption", allMemberCaption, _indent+1);
963                            displayAttribute(_out, "allLevelName", allLevelName, _indent+1);
964                            displayAttribute(_out, "primaryKey", primaryKey, _indent+1);
965                            displayAttribute(_out, "primaryKeyTable", primaryKeyTable, _indent+1);
966                            displayAttribute(_out, "defaultMember", defaultMember, _indent+1);
967                            displayAttribute(_out, "memberReaderClass", memberReaderClass, _indent+1);
968                            displayAttribute(_out, "caption", caption, _indent+1);
969                            displayElement(_out, "relation", relation, _indent+1);
970                            displayElementArray(_out, "levels", levels, _indent+1);
971                            displayElementArray(_out, "memberReaderParameters", memberReaderParameters, _indent+1);
972                    }
973                    public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
974                    {
975                            _out.beginTag("Hierarchy", new org.eigenbase.xom.XMLAttrVector()
976                                    .add("name", name)
977                                    .add("hasAll", hasAll)
978                                    .add("allMemberName", allMemberName)
979                                    .add("allMemberCaption", allMemberCaption)
980                                    .add("allLevelName", allLevelName)
981                                    .add("primaryKey", primaryKey)
982                                    .add("primaryKeyTable", primaryKeyTable)
983                                    .add("defaultMember", defaultMember)
984                                    .add("memberReaderClass", memberReaderClass)
985                                    .add("caption", caption)
986                                    );
987                            displayXMLElement(_out, relation);
988                            displayXMLElementArray(_out, levels);
989                            displayXMLElementArray(_out, memberReaderParameters);
990                            _out.endTag("Hierarchy");
991                    }
992                    public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
993                    {
994                            boolean _diff = true;
995                            Hierarchy _cother = (Hierarchy)_other;
996                            _diff = _diff && displayAttributeDiff("name", name, _cother.name, _out, _indent+1);
997                            _diff = _diff && displayAttributeDiff("hasAll", hasAll, _cother.hasAll, _out, _indent+1);
998                            _diff = _diff && displayAttributeDiff("allMemberName", allMemberName, _cother.allMemberName, _out, _indent+1);
999                            _diff = _diff && displayAttributeDiff("allMemberCaption", allMemberCaption, _cother.allMemberCaption, _out, _indent+1);
1000                            _diff = _diff && displayAttributeDiff("allLevelName", allLevelName, _cother.allLevelName, _out, _indent+1);
1001                            _diff = _diff && displayAttributeDiff("primaryKey", primaryKey, _cother.primaryKey, _out, _indent+1);
1002                            _diff = _diff && displayAttributeDiff("primaryKeyTable", primaryKeyTable, _cother.primaryKeyTable, _out, _indent+1);
1003                            _diff = _diff && displayAttributeDiff("defaultMember", defaultMember, _cother.defaultMember, _out, _indent+1);
1004                            _diff = _diff && displayAttributeDiff("memberReaderClass", memberReaderClass, _cother.memberReaderClass, _out, _indent+1);
1005                            _diff = _diff && displayAttributeDiff("caption", caption, _cother.caption, _out, _indent+1);
1006                            _diff = _diff && displayElementDiff("relation", relation, _cother.relation, _out, _indent+1);
1007                            _diff = _diff && displayElementArrayDiff("levels", levels, _cother.levels, _out, _indent+1);
1008                            _diff = _diff && displayElementArrayDiff("memberReaderParameters", memberReaderParameters, _cother.memberReaderParameters, _out, _indent+1);
1009                            return _diff;
1010                    }
1011                    // BEGIN pass-through code block ---
1012    /* implement equals required to handle cases where two different
1013                    hierarchy objects have equal contents.
1014                    Resolves problem : of Hierarchy tree disappears when expanded
1015                    if there are two (or more) exactly similar Hierarchy objects
1016                    within a dimension. We can say two hierarchy objects are different
1017                    if their references are different.
1018                */
1019                public boolean equals(Object o) {
1020                    return (this == o);
1021                }
1022                    // END pass-through code block ---
1023            }
1024    
1025            public static class Level extends org.eigenbase.xom.ElementDef
1026            {
1027                    public Level()
1028                    {
1029                    }
1030    
1031                    public Level(org.eigenbase.xom.DOMWrapper _def)
1032                            throws org.eigenbase.xom.XOMException
1033                    {
1034                            try {
1035                                    org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianGuiDef.class);
1036                                    _parser = _parser;
1037                                    org.eigenbase.xom.NodeDef[] _tempArray = null;
1038                                    _tempArray = _tempArray;
1039                                    approxRowCount = (String)_parser.getAttribute("approxRowCount", "String", null, null, false);
1040                                    name = (String)_parser.getAttribute("name", "String", null, null, false);
1041                                    table = (String)_parser.getAttribute("table", "String", null, null, false);
1042                                    column = (String)_parser.getAttribute("column", "String", null, null, false);
1043                                    nameColumn = (String)_parser.getAttribute("nameColumn", "String", null, null, false);
1044                                    ordinalColumn = (String)_parser.getAttribute("ordinalColumn", "String", null, null, false);
1045                                    parentColumn = (String)_parser.getAttribute("parentColumn", "String", null, null, false);
1046                                    nullParentValue = (String)_parser.getAttribute("nullParentValue", "String", null, null, false);
1047                                    type = (String)_parser.getAttribute("type", "String", "String", _type_values, false);
1048                                    uniqueMembers = (Boolean)_parser.getAttribute("uniqueMembers", "Boolean", "false", null, false);
1049                                    levelType = (String)_parser.getAttribute("levelType", "String", "Regular", _levelType_values, false);
1050                                    hideMemberIf = (String)_parser.getAttribute("hideMemberIf", "String", "Never", _hideMemberIf_values, false);
1051                                    formatter = (String)_parser.getAttribute("formatter", "String", null, null, false);
1052                                    caption = (String)_parser.getAttribute("caption", "String", null, null, false);
1053                                    captionColumn = (String)_parser.getAttribute("captionColumn", "String", null, null, false);
1054                                    keyExp = (KeyExpression)_parser.getElement(KeyExpression.class, false);
1055                                    nameExp = (NameExpression)_parser.getElement(NameExpression.class, false);
1056                                    ordinalExp = (OrdinalExpression)_parser.getElement(OrdinalExpression.class, false);
1057                                    parentExp = (ParentExpression)_parser.getElement(ParentExpression.class, false);
1058                                    closure = (Closure)_parser.getElement(Closure.class, false);
1059                                    _tempArray = _parser.getArray(Property.class, 0, 0);
1060                                    properties = new Property[_tempArray.length];
1061                                    for(int _i=0; _i<properties.length; _i++)
1062                                            properties[_i] = (Property)_tempArray[_i];
1063                            } catch(org.eigenbase.xom.XOMException _ex) {
1064                                    throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
1065                            }
1066                    }
1067    
1068                    public String approxRowCount;  // optional attribute
1069                    public String name;  // optional attribute
1070                    public String table;  // optional attribute
1071                    public String column;  // optional attribute
1072                    public String nameColumn;  // optional attribute
1073                    public String ordinalColumn;  // optional attribute
1074                    public String parentColumn;  // optional attribute
1075                    public String nullParentValue;  // optional attribute
1076                    /** Allowable values for {@link #type}. */
1077                    public static final String[] _type_values = {"String", "Numeric", "Integer", "Boolean", "Date", "Time", "Timestamp"};
1078                    public String type;  // attribute default: String
1079                    public Boolean uniqueMembers;  // attribute default: false
1080                    /** Allowable values for {@link #levelType}. */
1081                    public static final String[] _levelType_values = {"Regular", "TimeYears", "TimeQuarters", "TimeMonths", "TimeWeeks", "TimeDays"};
1082                    public String levelType;  // attribute default: Regular
1083                    /** Allowable values for {@link #hideMemberIf}. */
1084                    public static final String[] _hideMemberIf_values = {"Never", "IfBlankName", "IfParentsName"};
1085                    public String hideMemberIf;  // attribute default: Never
1086                    public String formatter;  // optional attribute
1087                    public String caption;  // optional attribute
1088                    public String captionColumn;  // optional attribute
1089    
1090                    /**
1091                     * The SQL expression used to populate this level's key.
1092                     */
1093                    public KeyExpression keyExp;  //optional element
1094                    /**
1095                     * The SQL expression used to populate this level's name. If not
1096                     * specified, the level's key is used.
1097                     */
1098                    public NameExpression nameExp;  //optional element
1099                    /**
1100                     * The SQL expression used to populate this level's ordinal.
1101                     */
1102                    public OrdinalExpression ordinalExp;  //optional element
1103                    /**
1104                     * The SQL expression used to join to the parent member in a
1105                     * parent-child hierarchy.
1106                     */
1107                    public ParentExpression parentExp;  //optional element
1108                    public Closure closure;  //optional element
1109                    public Property[] properties;  //optional array
1110    
1111                    public String getName()
1112                    {
1113                            return "Level";
1114                    }
1115    
1116                    public void display(java.io.PrintWriter _out, int _indent)
1117                    {
1118                            _out.println(getName());
1119                            displayAttribute(_out, "approxRowCount", approxRowCount, _indent+1);
1120                            displayAttribute(_out, "name", name, _indent+1);
1121                            displayAttribute(_out, "table", table, _indent+1);
1122                            displayAttribute(_out, "column", column, _indent+1);
1123                            displayAttribute(_out, "nameColumn", nameColumn, _indent+1);
1124                            displayAttribute(_out, "ordinalColumn", ordinalColumn, _indent+1);
1125                            displayAttribute(_out, "parentColumn", parentColumn, _indent+1);
1126                            displayAttribute(_out, "nullParentValue", nullParentValue, _indent+1);
1127                            displayAttribute(_out, "type", type, _indent+1);
1128                            displayAttribute(_out, "uniqueMembers", uniqueMembers, _indent+1);
1129                            displayAttribute(_out, "levelType", levelType, _indent+1);
1130                            displayAttribute(_out, "hideMemberIf", hideMemberIf, _indent+1);
1131                            displayAttribute(_out, "formatter", formatter, _indent+1);
1132                            displayAttribute(_out, "caption", caption, _indent+1);
1133                            displayAttribute(_out, "captionColumn", captionColumn, _indent+1);
1134                            displayElement(_out, "keyExp", keyExp, _indent+1);
1135                            displayElement(_out, "nameExp", nameExp, _indent+1);
1136                            displayElement(_out, "ordinalExp", ordinalExp, _indent+1);
1137                            displayElement(_out, "parentExp", parentExp, _indent+1);
1138                            displayElement(_out, "closure", closure, _indent+1);
1139                            displayElementArray(_out, "properties", properties, _indent+1);
1140                    }
1141                    public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
1142                    {
1143                            _out.beginTag("Level", new org.eigenbase.xom.XMLAttrVector()
1144                                    .add("approxRowCount", approxRowCount)
1145                                    .add("name", name)
1146                                    .add("table", table)
1147                                    .add("column", column)