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