001/*
002// This java file was automatically generated
003// from XOM model 'mondrian'
004// on Thu Jul 25 21:17:39 PDT 2013
005// Do not edit this file by hand.
006*/
007
008package mondrian.olap;
009import mondrian.rolap.sql.SqlQuery;
010/**
011 * This is the XML model for Mondrian schemas.
012 * Revision is $Id$
013 * <p>This class was generated from XOM model 'mondrian' on Thu Jul 25 21:17:39 PDT 2013
014 */
015public 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                "Hint",
050                "InlineTable",
051                "ColumnDefs",
052                "ColumnDef",
053                "Rows",
054                "Row",
055                "Value",
056                "AggTable",
057                "AggName",
058                "AggPattern",
059                "AggExclude",
060                "AggColumnName",
061                "AggFactCount",
062                "AggIgnoreColumn",
063                "AggForeignKey",
064                "AggLevel",
065                "AggMeasure",
066                "Expression",
067                "Column",
068                "ExpressionView",
069                "KeyExpression",
070                "ParentExpression",
071                "OrdinalExpression",
072                "NameExpression",
073                "CaptionExpression",
074                "MeasureExpression",
075                "Role",
076                "Grant",
077                "SchemaGrant",
078                "CubeGrant",
079                "DimensionGrant",
080                "HierarchyGrant",
081                "MemberGrant",
082                "Union",
083                "RoleUsage",
084                "UserDefinedFunction",
085                "Parameter",
086                "Annotations",
087                "Annotation",
088                "Script",
089                "CellFormatter",
090                "MemberFormatter",
091                "PropertyFormatter"
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, "", MondrianDef.class);
111                                org.eigenbase.xom.NodeDef[] _tempArray;
112                                name = (String)_parser.getAttribute("name", "String", null, null, true);
113                                description = (String)_parser.getAttribute("description", "String", null, null, false);
114                                measuresCaption = (String)_parser.getAttribute("measuresCaption", "String", null, null, false);
115                                defaultRole = (String)_parser.getAttribute("defaultRole", "String", null, null, false);
116                                annotations = (Annotations)_parser.getElement(Annotations.class, 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 description;  // optional attribute
152                public String measuresCaption;  // optional attribute
153                public String defaultRole;  // optional attribute
154
155                /**
156                 * Contains values of user-defined properties.
157                 */
158                public Annotations annotations;  //optional element
159                /**
160                 * This schema's parameter definitions.
161                 */
162                public Parameter[] parameters;  //optional array
163                /**
164                 * Shared dimensions in this schema.
165                 */
166                public Dimension[] dimensions;  //optional array
167                /**
168                 * Cubes in this schema.
169                 */
170                public Cube[] cubes;  //optional array
171                /**
172                 * Virtual cubes in this schema.
173                 */
174                public VirtualCube[] virtualCubes;  //optional array
175                /**
176                 * Named sets in this schema.
177                 */
178                public NamedSet[] namedSets;  //optional array
179                /**
180                 * Roles in this schema.
181                 */
182                public Role[] roles;  //optional array
183                /**
184                 * Declarations of user-defined functions in this schema.
185                 */
186                public UserDefinedFunction[] userDefinedFunctions;  //optional array
187
188                public String getName()
189                {
190                        return "Schema";
191                }
192
193                public void display(java.io.PrintWriter _out, int _indent)
194                {
195                        _out.println(getName());
196                        displayAttribute(_out, "name", name, _indent+1);
197                        displayAttribute(_out, "description", description, _indent+1);
198                        displayAttribute(_out, "measuresCaption", measuresCaption, _indent+1);
199                        displayAttribute(_out, "defaultRole", defaultRole, _indent+1);
200                        displayElement(_out, "annotations", (org.eigenbase.xom.ElementDef) annotations, _indent+1);
201                        displayElementArray(_out, "parameters", parameters, _indent+1);
202                        displayElementArray(_out, "dimensions", dimensions, _indent+1);
203                        displayElementArray(_out, "cubes", cubes, _indent+1);
204                        displayElementArray(_out, "virtualCubes", virtualCubes, _indent+1);
205                        displayElementArray(_out, "namedSets", namedSets, _indent+1);
206                        displayElementArray(_out, "roles", roles, _indent+1);
207                        displayElementArray(_out, "userDefinedFunctions", userDefinedFunctions, _indent+1);
208                }
209                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
210                {
211                        _out.beginTag("Schema", new org.eigenbase.xom.XMLAttrVector()
212                                .add("name", name)
213                                .add("description", description)
214                                .add("measuresCaption", measuresCaption)
215                                .add("defaultRole", defaultRole)
216                                );
217                        displayXMLElement(_out, (org.eigenbase.xom.ElementDef) annotations);
218                        displayXMLElementArray(_out, parameters);
219                        displayXMLElementArray(_out, dimensions);
220                        displayXMLElementArray(_out, cubes);
221                        displayXMLElementArray(_out, virtualCubes);
222                        displayXMLElementArray(_out, namedSets);
223                        displayXMLElementArray(_out, roles);
224                        displayXMLElementArray(_out, userDefinedFunctions);
225                        _out.endTag("Schema");
226                }
227                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
228                {
229                        Schema _cother = (Schema)_other;
230                        boolean _diff = displayAttributeDiff("name", name, _cother.name, _out, _indent+1);
231                        _diff = _diff && displayAttributeDiff("description", description, _cother.description, _out, _indent+1);
232                        _diff = _diff && displayAttributeDiff("measuresCaption", measuresCaption, _cother.measuresCaption, _out, _indent+1);
233                        _diff = _diff && displayAttributeDiff("defaultRole", defaultRole, _cother.defaultRole, _out, _indent+1);
234                        _diff = _diff && displayElementDiff("annotations", annotations, _cother.annotations, _out, _indent+1);
235                        _diff = _diff && displayElementArrayDiff("parameters", parameters, _cother.parameters, _out, _indent+1);
236                        _diff = _diff && displayElementArrayDiff("dimensions", dimensions, _cother.dimensions, _out, _indent+1);
237                        _diff = _diff && displayElementArrayDiff("cubes", cubes, _cother.cubes, _out, _indent+1);
238                        _diff = _diff && displayElementArrayDiff("virtualCubes", virtualCubes, _cother.virtualCubes, _out, _indent+1);
239                        _diff = _diff && displayElementArrayDiff("namedSets", namedSets, _cother.namedSets, _out, _indent+1);
240                        _diff = _diff && displayElementArrayDiff("roles", roles, _cother.roles, _out, _indent+1);
241                        _diff = _diff && displayElementArrayDiff("userDefinedFunctions", userDefinedFunctions, _cother.userDefinedFunctions, _out, _indent+1);
242                        return _diff;
243                }
244                // BEGIN pass-through code block ---
245Cube getCube(String cubeName) {
246                for (int i = 0; i < cubes.length; i++) {
247                    if (cubes[i].name.equals(cubeName)) {
248                        return cubes[i];
249                    }
250                }
251                throw Util.newInternal("Cannot find cube '" + cubeName + "'");
252            }
253            Dimension getPublicDimension(String dimensionName) {
254                for (int i = 0; i < dimensions.length; i++) {
255                    if (dimensions[i].name.equals(dimensionName)) {
256                        return dimensions[i];
257                    }
258                }
259                throw Util.newInternal(
260                    "Cannot find public dimension '" + dimensionName + "'");
261            }
262                // END pass-through code block ---
263        }
264
265        /**
266         * A CubeDimension is either a usage of a Dimension ('shared
267         * dimension', in MSOLAP parlance), or a 'private dimension'.
268         */
269        public static abstract class CubeDimension extends org.eigenbase.xom.ElementDef
270        {
271                public CubeDimension()
272                {
273                }
274
275                public CubeDimension(org.eigenbase.xom.DOMWrapper _def)
276                        throws org.eigenbase.xom.XOMException
277                {
278                        try {
279                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
280                                name = (String)_parser.getAttribute("name", "String", null, null, true);
281                                caption = (String)_parser.getAttribute("caption", "String", null, null, false);
282                                visible = (Boolean)_parser.getAttribute("visible", "Boolean", "true", null, false);
283                                description = (String)_parser.getAttribute("description", "String", null, null, false);
284                                foreignKey = (String)_parser.getAttribute("foreignKey", "String", null, null, false);
285                                highCardinality = (Boolean)_parser.getAttribute("highCardinality", "Boolean", "false", null, false);
286                                annotations = (Annotations)_parser.getElement(Annotations.class, false);
287                        } catch(org.eigenbase.xom.XOMException _ex) {
288                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
289                        }
290                }
291
292                public String name;  // required attribute
293                public String caption;  // optional attribute
294                public Boolean visible;  // attribute default: true
295                public String description;  // optional attribute
296                public String foreignKey;  // optional attribute
297                public Boolean highCardinality;  // attribute default: false
298
299                /**
300                 * Contains values of user-defined properties.
301                 */
302                public Annotations annotations;  //optional element
303
304                public String getName()
305                {
306                        return "CubeDimension";
307                }
308
309                public void display(java.io.PrintWriter _out, int _indent)
310                {
311                        _out.println(getName());
312                        displayAttribute(_out, "name", name, _indent+1);
313                        displayAttribute(_out, "caption", caption, _indent+1);
314                        displayAttribute(_out, "visible", visible, _indent+1);
315                        displayAttribute(_out, "description", description, _indent+1);
316                        displayAttribute(_out, "foreignKey", foreignKey, _indent+1);
317                        displayAttribute(_out, "highCardinality", highCardinality, _indent+1);
318                        displayElement(_out, "annotations", (org.eigenbase.xom.ElementDef) annotations, _indent+1);
319                }
320                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
321                {
322                        _out.beginTag("CubeDimension", new org.eigenbase.xom.XMLAttrVector()
323                                .add("name", name)
324                                .add("caption", caption)
325                                .add("visible", visible)
326                                .add("description", description)
327                                .add("foreignKey", foreignKey)
328                                .add("highCardinality", highCardinality)
329                                );
330                        displayXMLElement(_out, (org.eigenbase.xom.ElementDef) annotations);
331                        _out.endTag("CubeDimension");
332                }
333                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
334                {
335                        CubeDimension _cother = (CubeDimension)_other;
336                        boolean _diff = displayAttributeDiff("name", name, _cother.name, _out, _indent+1);
337                        _diff = _diff && displayAttributeDiff("caption", caption, _cother.caption, _out, _indent+1);
338                        _diff = _diff && displayAttributeDiff("visible", visible, _cother.visible, _out, _indent+1);
339                        _diff = _diff && displayAttributeDiff("description", description, _cother.description, _out, _indent+1);
340                        _diff = _diff && displayAttributeDiff("foreignKey", foreignKey, _cother.foreignKey, _out, _indent+1);
341                        _diff = _diff && displayAttributeDiff("highCardinality", highCardinality, _cother.highCardinality, _out, _indent+1);
342                        _diff = _diff && displayElementDiff("annotations", annotations, _cother.annotations, _out, _indent+1);
343                        return _diff;
344                }
345                // BEGIN pass-through code block ---
346/**
347             * Looks up the base dimension of this dimension. If this is a
348             * usage of a shared dimension, returns the referenced dimension;
349             * otherwise returns the dimension itself.
350             *
351             * <p>Never returns null; if the dimension cannot be
352             * found, throws an error.
353             *
354             * @param schema Schema, never null
355             * @pre schema != null
356             * @post return != null
357             */
358            public abstract Dimension getDimension(Schema schema);
359                // END pass-through code block ---
360        }
361
362        /**
363         * Definition of a cube.
364         */
365        public static class Cube extends org.eigenbase.xom.ElementDef
366        {
367                public Cube()
368                {
369                }
370
371                public Cube(org.eigenbase.xom.DOMWrapper _def)
372                        throws org.eigenbase.xom.XOMException
373                {
374                        try {
375                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
376                                org.eigenbase.xom.NodeDef[] _tempArray;
377                                name = (String)_parser.getAttribute("name", "String", null, null, true);
378                                caption = (String)_parser.getAttribute("caption", "String", null, null, false);
379                                visible = (Boolean)_parser.getAttribute("visible", "Boolean", "true", null, false);
380                                description = (String)_parser.getAttribute("description", "String", null, null, false);
381                                defaultMeasure = (String)_parser.getAttribute("defaultMeasure", "String", null, null, false);
382                                cache = (Boolean)_parser.getAttribute("cache", "Boolean", "true", null, false);
383                                enabled = (Boolean)_parser.getAttribute("enabled", "Boolean", "true", null, false);
384                                annotations = (Annotations)_parser.getElement(Annotations.class, false);
385                                fact = (Relation)_parser.getElement(Relation.class, true);
386                                _tempArray = _parser.getArray(CubeDimension.class, 0, 0);
387                                dimensions = new CubeDimension[_tempArray.length];
388                                for (int _i = 0; _i < dimensions.length; _i++)
389                                        dimensions[_i] = (CubeDimension)_tempArray[_i];
390                                _tempArray = _parser.getArray(Measure.class, 0, 0);
391                                measures = new Measure[_tempArray.length];
392                                for (int _i = 0; _i < measures.length; _i++)
393                                        measures[_i] = (Measure)_tempArray[_i];
394                                _tempArray = _parser.getArray(CalculatedMember.class, 0, 0);
395                                calculatedMembers = new CalculatedMember[_tempArray.length];
396                                for (int _i = 0; _i < calculatedMembers.length; _i++)
397                                        calculatedMembers[_i] = (CalculatedMember)_tempArray[_i];
398                                _tempArray = _parser.getArray(NamedSet.class, 0, 0);
399                                namedSets = new NamedSet[_tempArray.length];
400                                for (int _i = 0; _i < namedSets.length; _i++)
401                                        namedSets[_i] = (NamedSet)_tempArray[_i];
402                        } catch(org.eigenbase.xom.XOMException _ex) {
403                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
404                        }
405                }
406
407                public String name;  // required attribute
408                public String caption;  // optional attribute
409                public Boolean visible;  // attribute default: true
410                public String description;  // optional attribute
411                public String defaultMeasure;  // optional attribute
412                public Boolean cache;  // attribute default: true
413                public Boolean enabled;  // attribute default: true
414
415                /**
416                 * Contains values of user-defined properties.
417                 */
418                public Annotations annotations;  //optional element
419                /**
420                 * The fact table is the source of all measures in this cube. If
421                 * this is a Table and the schema name is not
422                 * present, table name is left unqualified.
423                 */
424                public Relation fact;  //required element
425                /**
426                 */
427                public CubeDimension[] dimensions;  //optional array
428                /**
429                 */
430                public Measure[] measures;  //optional array
431                /**
432                 * Calculated members in this cube.
433                 */
434                public CalculatedMember[] calculatedMembers;  //optional array
435                /**
436                 * Named sets in this cube.
437                 */
438                public NamedSet[] namedSets;  //optional array
439
440                public String getName()
441                {
442                        return "Cube";
443                }
444
445                public void display(java.io.PrintWriter _out, int _indent)
446                {
447                        _out.println(getName());
448                        displayAttribute(_out, "name", name, _indent+1);
449                        displayAttribute(_out, "caption", caption, _indent+1);
450                        displayAttribute(_out, "visible", visible, _indent+1);
451                        displayAttribute(_out, "description", description, _indent+1);
452                        displayAttribute(_out, "defaultMeasure", defaultMeasure, _indent+1);
453                        displayAttribute(_out, "cache", cache, _indent+1);
454                        displayAttribute(_out, "enabled", enabled, _indent+1);
455                        displayElement(_out, "annotations", (org.eigenbase.xom.ElementDef) annotations, _indent+1);
456                        displayElement(_out, "fact", (org.eigenbase.xom.ElementDef) fact, _indent+1);
457                        displayElementArray(_out, "dimensions", dimensions, _indent+1);
458                        displayElementArray(_out, "measures", measures, _indent+1);
459                        displayElementArray(_out, "calculatedMembers", calculatedMembers, _indent+1);
460                        displayElementArray(_out, "namedSets", namedSets, _indent+1);
461                }
462                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
463                {
464                        _out.beginTag("Cube", new org.eigenbase.xom.XMLAttrVector()
465                                .add("name", name)
466                                .add("caption", caption)
467                                .add("visible", visible)
468                                .add("description", description)
469                                .add("defaultMeasure", defaultMeasure)
470                                .add("cache", cache)
471                                .add("enabled", enabled)
472                                );
473                        displayXMLElement(_out, (org.eigenbase.xom.ElementDef) annotations);
474                        displayXMLElement(_out, (org.eigenbase.xom.ElementDef) fact);
475                        displayXMLElementArray(_out, dimensions);
476                        displayXMLElementArray(_out, measures);
477                        displayXMLElementArray(_out, calculatedMembers);
478                        displayXMLElementArray(_out, namedSets);
479                        _out.endTag("Cube");
480                }
481                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
482                {
483                        Cube _cother = (Cube)_other;
484                        boolean _diff = displayAttributeDiff("name", name, _cother.name, _out, _indent+1);
485                        _diff = _diff && displayAttributeDiff("caption", caption, _cother.caption, _out, _indent+1);
486                        _diff = _diff && displayAttributeDiff("visible", visible, _cother.visible, _out, _indent+1);
487                        _diff = _diff && displayAttributeDiff("description", description, _cother.description, _out, _indent+1);
488                        _diff = _diff && displayAttributeDiff("defaultMeasure", defaultMeasure, _cother.defaultMeasure, _out, _indent+1);
489                        _diff = _diff && displayAttributeDiff("cache", cache, _cother.cache, _out, _indent+1);
490                        _diff = _diff && displayAttributeDiff("enabled", enabled, _cother.enabled, _out, _indent+1);
491                        _diff = _diff && displayElementDiff("annotations", annotations, _cother.annotations, _out, _indent+1);
492                        _diff = _diff && displayElementDiff("fact", fact, _cother.fact, _out, _indent+1);
493                        _diff = _diff && displayElementArrayDiff("dimensions", dimensions, _cother.dimensions, _out, _indent+1);
494                        _diff = _diff && displayElementArrayDiff("measures", measures, _cother.measures, _out, _indent+1);
495                        _diff = _diff && displayElementArrayDiff("calculatedMembers", calculatedMembers, _cother.calculatedMembers, _out, _indent+1);
496                        _diff = _diff && displayElementArrayDiff("namedSets", namedSets, _cother.namedSets, _out, _indent+1);
497                        return _diff;
498                }
499                // BEGIN pass-through code block ---
500public boolean isEnabled() {
501                return enabled.booleanValue();
502            }
503            Dimension getDimension(Schema xmlSchema, String dimensionName) {
504                for (int i = 0; i < dimensions.length; i++) {
505                    if (dimensions[i].name.equals(dimensionName)) {
506                        return dimensions[i].getDimension(xmlSchema);
507                    }
508                }
509                throw Util.newInternal(
510                    "Cannot find dimension '" + dimensionName + "' in cube '" +
511                    name + "'");
512            }
513                // END pass-through code block ---
514        }
515
516        /**
517         * A VirtualCube is a set of dimensions and
518         * measures gleaned from other cubes.
519         */
520        public static class VirtualCube extends org.eigenbase.xom.ElementDef
521        {
522                public VirtualCube()
523                {
524                }
525
526                public VirtualCube(org.eigenbase.xom.DOMWrapper _def)
527                        throws org.eigenbase.xom.XOMException
528                {
529                        try {
530                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
531                                org.eigenbase.xom.NodeDef[] _tempArray;
532                                enabled = (Boolean)_parser.getAttribute("enabled", "Boolean", "true", null, false);
533                                name = (String)_parser.getAttribute("name", "String", null, null, false);
534                                defaultMeasure = (String)_parser.getAttribute("defaultMeasure", "String", null, null, false);
535                                caption = (String)_parser.getAttribute("caption", "String", null, null, false);
536                                visible = (Boolean)_parser.getAttribute("visible", "Boolean", "true", null, false);
537                                description = (String)_parser.getAttribute("description", "String", null, null, false);
538                                annotations = (Annotations)_parser.getElement(Annotations.class, false);
539                                cubeUsage = (CubeUsages)_parser.getElement(CubeUsages.class, false);
540                                _tempArray = _parser.getArray(VirtualCubeDimension.class, 0, 0);
541                                dimensions = new VirtualCubeDimension[_tempArray.length];
542                                for (int _i = 0; _i < dimensions.length; _i++)
543                                        dimensions[_i] = (VirtualCubeDimension)_tempArray[_i];
544                                _tempArray = _parser.getArray(VirtualCubeMeasure.class, 0, 0);
545                                measures = new VirtualCubeMeasure[_tempArray.length];
546                                for (int _i = 0; _i < measures.length; _i++)
547                                        measures[_i] = (VirtualCubeMeasure)_tempArray[_i];
548                                _tempArray = _parser.getArray(CalculatedMember.class, 0, 0);
549                                calculatedMembers = new CalculatedMember[_tempArray.length];
550                                for (int _i = 0; _i < calculatedMembers.length; _i++)
551                                        calculatedMembers[_i] = (CalculatedMember)_tempArray[_i];
552                                _tempArray = _parser.getArray(NamedSet.class, 0, 0);
553                                namedSets = new NamedSet[_tempArray.length];
554                                for (int _i = 0; _i < namedSets.length; _i++)
555                                        namedSets[_i] = (NamedSet)_tempArray[_i];
556                        } catch(org.eigenbase.xom.XOMException _ex) {
557                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
558                        }
559                }
560
561                public Boolean enabled;  // attribute default: true
562                public String name;  // optional attribute
563                public String defaultMeasure;  // optional attribute
564                public String caption;  // optional attribute
565                public Boolean visible;  // attribute default: true
566                public String description;  // optional attribute
567
568                /**
569                 * Contains values of user-defined properties.
570                 */
571                public Annotations annotations;  //optional element
572                /**
573                 */
574                public CubeUsages cubeUsage;  //optional element
575                /**
576                 */
577                public VirtualCubeDimension[] dimensions;  //optional array
578                /**
579                 */
580                public VirtualCubeMeasure[] measures;  //optional array
581                /**
582                 * Calculated members that belong to this virtual cube.
583                 * (Calculated members inherited from other cubes should not be
584                 * in this list.)
585                 */
586                public CalculatedMember[] calculatedMembers;  //optional array
587                /**
588                 * Named sets in this cube.
589                 */
590                public NamedSet[] namedSets;  //optional array
591
592                public String getName()
593                {
594                        return "VirtualCube";
595                }
596
597                public void display(java.io.PrintWriter _out, int _indent)
598                {
599                        _out.println(getName());
600                        displayAttribute(_out, "enabled", enabled, _indent+1);
601                        displayAttribute(_out, "name", name, _indent+1);
602                        displayAttribute(_out, "defaultMeasure", defaultMeasure, _indent+1);
603                        displayAttribute(_out, "caption", caption, _indent+1);
604                        displayAttribute(_out, "visible", visible, _indent+1);
605                        displayAttribute(_out, "description", description, _indent+1);
606                        displayElement(_out, "annotations", (org.eigenbase.xom.ElementDef) annotations, _indent+1);
607                        displayElement(_out, "cubeUsage", (org.eigenbase.xom.ElementDef) cubeUsage, _indent+1);
608                        displayElementArray(_out, "dimensions", dimensions, _indent+1);
609                        displayElementArray(_out, "measures", measures, _indent+1);
610                        displayElementArray(_out, "calculatedMembers", calculatedMembers, _indent+1);
611                        displayElementArray(_out, "namedSets", namedSets, _indent+1);
612                }
613                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
614                {
615                        _out.beginTag("VirtualCube", new org.eigenbase.xom.XMLAttrVector()
616                                .add("enabled", enabled)
617                                .add("name", name)
618                                .add("defaultMeasure", defaultMeasure)
619                                .add("caption", caption)
620                                .add("visible", visible)
621                                .add("description", description)
622                                );
623                        displayXMLElement(_out, (org.eigenbase.xom.ElementDef) annotations);
624                        displayXMLElement(_out, (org.eigenbase.xom.ElementDef) cubeUsage);
625                        displayXMLElementArray(_out, dimensions);
626                        displayXMLElementArray(_out, measures);
627                        displayXMLElementArray(_out, calculatedMembers);
628                        displayXMLElementArray(_out, namedSets);
629                        _out.endTag("VirtualCube");
630                }
631                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
632                {
633                        VirtualCube _cother = (VirtualCube)_other;
634                        boolean _diff = displayAttributeDiff("enabled", enabled, _cother.enabled, _out, _indent+1);
635                        _diff = _diff && displayAttributeDiff("name", name, _cother.name, _out, _indent+1);
636                        _diff = _diff && displayAttributeDiff("defaultMeasure", defaultMeasure, _cother.defaultMeasure, _out, _indent+1);
637                        _diff = _diff && displayAttributeDiff("caption", caption, _cother.caption, _out, _indent+1);
638                        _diff = _diff && displayAttributeDiff("visible", visible, _cother.visible, _out, _indent+1);
639                        _diff = _diff && displayAttributeDiff("description", description, _cother.description, _out, _indent+1);
640                        _diff = _diff && displayElementDiff("annotations", annotations, _cother.annotations, _out, _indent+1);
641                        _diff = _diff && displayElementDiff("cubeUsage", cubeUsage, _cother.cubeUsage, _out, _indent+1);
642                        _diff = _diff && displayElementArrayDiff("dimensions", dimensions, _cother.dimensions, _out, _indent+1);
643                        _diff = _diff && displayElementArrayDiff("measures", measures, _cother.measures, _out, _indent+1);
644                        _diff = _diff && displayElementArrayDiff("calculatedMembers", calculatedMembers, _cother.calculatedMembers, _out, _indent+1);
645                        _diff = _diff && displayElementArrayDiff("namedSets", namedSets, _cother.namedSets, _out, _indent+1);
646                        return _diff;
647                }
648                // BEGIN pass-through code block ---
649public boolean isEnabled() {
650                return enabled.booleanValue();
651            }
652                // END pass-through code block ---
653        }
654
655        /**
656         * List of base cubes used by the virtual cube.
657         */
658        public static class CubeUsages extends org.eigenbase.xom.ElementDef
659        {
660                public CubeUsages()
661                {
662                }
663
664                public CubeUsages(org.eigenbase.xom.DOMWrapper _def)
665                        throws org.eigenbase.xom.XOMException
666                {
667                        try {
668                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
669                                org.eigenbase.xom.NodeDef[] _tempArray;
670                                _tempArray = _parser.getArray(CubeUsage.class, 1, 0);
671                                cubeUsages = new CubeUsage[_tempArray.length];
672                                for (int _i = 0; _i < cubeUsages.length; _i++)
673                                        cubeUsages[_i] = (CubeUsage)_tempArray[_i];
674                        } catch(org.eigenbase.xom.XOMException _ex) {
675                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
676                        }
677                }
678
679
680                /**
681                 */
682                public CubeUsage[] cubeUsages;  //min 1
683
684                public String getName()
685                {
686                        return "CubeUsages";
687                }
688
689                public void display(java.io.PrintWriter _out, int _indent)
690                {
691                        _out.println(getName());
692                        displayElementArray(_out, "cubeUsages", cubeUsages, _indent+1);
693                }
694                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
695                {
696                        _out.beginTag("CubeUsages", new org.eigenbase.xom.XMLAttrVector()
697                                );
698                        displayXMLElementArray(_out, cubeUsages);
699                        _out.endTag("CubeUsages");
700                }
701                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
702                {
703                        CubeUsages _cother = (CubeUsages)_other;
704                        boolean _diff = displayElementArrayDiff("cubeUsages", cubeUsages, _cother.cubeUsages, _out, _indent+1);
705                        return _diff;
706                }
707        }
708
709        public static class CubeUsage extends org.eigenbase.xom.ElementDef
710        {
711                public CubeUsage()
712                {
713                }
714
715                public CubeUsage(org.eigenbase.xom.DOMWrapper _def)
716                        throws org.eigenbase.xom.XOMException
717                {
718                        try {
719                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
720                                cubeName = (String)_parser.getAttribute("cubeName", "String", null, null, true);
721                                ignoreUnrelatedDimensions = (Boolean)_parser.getAttribute("ignoreUnrelatedDimensions", "Boolean", "false", 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 cubeName;  // required attribute
728                public Boolean ignoreUnrelatedDimensions;  // attribute default: false
729
730
731                public String getName()
732                {
733                        return "CubeUsage";
734                }
735
736                public void display(java.io.PrintWriter _out, int _indent)
737                {
738                        _out.println(getName());
739                        displayAttribute(_out, "cubeName", cubeName, _indent+1);
740                        displayAttribute(_out, "ignoreUnrelatedDimensions", ignoreUnrelatedDimensions, _indent+1);
741                }
742                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
743                {
744                        _out.beginTag("CubeUsage", new org.eigenbase.xom.XMLAttrVector()
745                                .add("cubeName", cubeName)
746                                .add("ignoreUnrelatedDimensions", ignoreUnrelatedDimensions)
747                                );
748                        _out.endTag("CubeUsage");
749                }
750                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
751                {
752                        CubeUsage _cother = (CubeUsage)_other;
753                        boolean _diff = displayAttributeDiff("cubeName", cubeName, _cother.cubeName, _out, _indent+1);
754                        _diff = _diff && displayAttributeDiff("ignoreUnrelatedDimensions", ignoreUnrelatedDimensions, _cother.ignoreUnrelatedDimensions, _out, _indent+1);
755                        return _diff;
756                }
757        }
758
759        /**
760         * A VirtualCubeDimension is a usage of a Dimension in a VirtualCube.
761         */
762        public static class VirtualCubeDimension extends CubeDimension
763        {
764                public VirtualCubeDimension()
765                {
766                }
767
768                public VirtualCubeDimension(org.eigenbase.xom.DOMWrapper _def)
769                        throws org.eigenbase.xom.XOMException
770                {
771                        try {
772                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
773                                cubeName = (String)_parser.getAttribute("cubeName", "String", null, null, false);
774                                caption = (String)_parser.getAttribute("caption", "String", null, null, false);
775                                visible = (Boolean)_parser.getAttribute("visible", "Boolean", "true", null, false);
776                                description = (String)_parser.getAttribute("description", "String", null, null, false);
777                                foreignKey = (String)_parser.getAttribute("foreignKey", "String", null, null, false);
778                                highCardinality = (Boolean)_parser.getAttribute("highCardinality", "Boolean", "false", null, false);
779                                name = (String)_parser.getAttribute("name", "String", null, null, false);
780                                annotations = (Annotations)_parser.getElement(Annotations.class, false);
781                        } catch(org.eigenbase.xom.XOMException _ex) {
782                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
783                        }
784                }
785
786                public String cubeName;  // optional attribute
787
788
789                public String getName()
790                {
791                        return "VirtualCubeDimension";
792                }
793
794                public void display(java.io.PrintWriter _out, int _indent)
795                {
796                        _out.println(getName());
797                        displayAttribute(_out, "cubeName", cubeName, _indent+1);
798                        displayAttribute(_out, "caption", caption, _indent+1);
799                        displayAttribute(_out, "visible", visible, _indent+1);
800                        displayAttribute(_out, "description", description, _indent+1);
801                        displayAttribute(_out, "foreignKey", foreignKey, _indent+1);
802                        displayAttribute(_out, "highCardinality", highCardinality, _indent+1);
803                        displayAttribute(_out, "name", name, _indent+1);
804                        displayElement(_out, "annotations", (org.eigenbase.xom.ElementDef) annotations, _indent+1);
805                }
806                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
807                {
808                        _out.beginTag("VirtualCubeDimension", new org.eigenbase.xom.XMLAttrVector()
809                                .add("cubeName", cubeName)
810                                .add("caption", caption)
811                                .add("visible", visible)
812                                .add("description", description)
813                                .add("foreignKey", foreignKey)
814                                .add("highCardinality", highCardinality)
815                                .add("name", name)
816                                );
817                        displayXMLElement(_out, (org.eigenbase.xom.ElementDef) annotations);
818                        _out.endTag("VirtualCubeDimension");
819                }
820                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
821                {
822                        VirtualCubeDimension _cother = (VirtualCubeDimension)_other;
823                        boolean _diff = displayAttributeDiff("cubeName", cubeName, _cother.cubeName, _out, _indent+1);
824                        _diff = _diff && displayElementDiff("annotations", annotations, _cother.annotations, _out, _indent+1);
825                        return _diff;
826                }
827                // BEGIN pass-through code block ---
828// implement CubeDimension
829            public Dimension getDimension(Schema schema) {
830                Util.assertPrecondition(schema != null, "schema != null");
831                if (cubeName == null) {
832                    return schema.getPublicDimension(name);
833                } else {
834                    Cube cube = schema.getCube(cubeName);
835                    return cube.getDimension(schema, name);
836                }
837            }
838                // END pass-through code block ---
839        }
840
841        /**
842         * A VirtualCubeMeasure is a usage of a Measure in a VirtualCube.
843         */
844        public static class VirtualCubeMeasure extends org.eigenbase.xom.ElementDef
845        {
846                public VirtualCubeMeasure()
847                {
848                }
849
850                public VirtualCubeMeasure(org.eigenbase.xom.DOMWrapper _def)
851                        throws org.eigenbase.xom.XOMException
852                {
853                        try {
854                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
855                                cubeName = (String)_parser.getAttribute("cubeName", "String", null, null, false);
856                                name = (String)_parser.getAttribute("name", "String", null, null, false);
857                                visible = (Boolean)_parser.getAttribute("visible", "Boolean", null, null, false);
858                                annotations = (Annotations)_parser.getElement(Annotations.class, false);
859                        } catch(org.eigenbase.xom.XOMException _ex) {
860                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
861                        }
862                }
863
864                public String cubeName;  // optional attribute
865                public String name;  // optional attribute
866                public Boolean visible;  // optional attribute
867
868                /**
869                 * Contains values of user-defined properties.
870                 */
871                public Annotations annotations;  //optional element
872
873                public String getName()
874                {
875                        return "VirtualCubeMeasure";
876                }
877
878                public void display(java.io.PrintWriter _out, int _indent)
879                {
880                        _out.println(getName());
881                        displayAttribute(_out, "cubeName", cubeName, _indent+1);
882                        displayAttribute(_out, "name", name, _indent+1);
883                        displayAttribute(_out, "visible", visible, _indent+1);
884                        displayElement(_out, "annotations", (org.eigenbase.xom.ElementDef) annotations, _indent+1);
885                }
886                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
887                {
888                        _out.beginTag("VirtualCubeMeasure", new org.eigenbase.xom.XMLAttrVector()
889                                .add("cubeName", cubeName)
890                                .add("name", name)
891                                .add("visible", visible)
892                                );
893                        displayXMLElement(_out, (org.eigenbase.xom.ElementDef) annotations);
894                        _out.endTag("VirtualCubeMeasure");
895                }
896                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
897                {
898                        VirtualCubeMeasure _cother = (VirtualCubeMeasure)_other;
899                        boolean _diff = displayAttributeDiff("cubeName", cubeName, _cother.cubeName, _out, _indent+1);
900                        _diff = _diff && displayAttributeDiff("name", name, _cother.name, _out, _indent+1);
901                        _diff = _diff && displayAttributeDiff("visible", visible, _cother.visible, _out, _indent+1);
902                        _diff = _diff && displayElementDiff("annotations", annotations, _cother.annotations, _out, _indent+1);
903                        return _diff;
904                }
905        }
906
907        /**
908         * A DimensionUsage is usage of a shared
909         * Dimension within the context of a cube.
910         */
911        public static class DimensionUsage extends CubeDimension
912        {
913                public DimensionUsage()
914                {
915                }
916
917                public DimensionUsage(org.eigenbase.xom.DOMWrapper _def)
918                        throws org.eigenbase.xom.XOMException
919                {
920                        try {
921                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
922                                source = (String)_parser.getAttribute("source", "String", null, null, true);
923                                level = (String)_parser.getAttribute("level", "String", null, null, false);
924                                usagePrefix = (String)_parser.getAttribute("usagePrefix", "String", null, null, false);
925                                name = (String)_parser.getAttribute("name", "String", null, null, true);
926                                caption = (String)_parser.getAttribute("caption", "String", null, null, false);
927                                visible = (Boolean)_parser.getAttribute("visible", "Boolean", "true", null, false);
928                                description = (String)_parser.getAttribute("description", "String", null, null, false);
929                                foreignKey = (String)_parser.getAttribute("foreignKey", "String", null, null, false);
930                                highCardinality = (Boolean)_parser.getAttribute("highCardinality", "Boolean", "false", null, false);
931                                annotations = (Annotations)_parser.getElement(Annotations.class, false);
932                        } catch(org.eigenbase.xom.XOMException _ex) {
933                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
934                        }
935                }
936
937                public String source;  // required attribute
938                public String level;  // optional attribute
939                public String usagePrefix;  // optional attribute
940
941
942                public String getName()
943                {
944                        return "DimensionUsage";
945                }
946
947                public void display(java.io.PrintWriter _out, int _indent)
948                {
949                        _out.println(getName());
950                        displayAttribute(_out, "source", source, _indent+1);
951                        displayAttribute(_out, "level", level, _indent+1);
952                        displayAttribute(_out, "usagePrefix", usagePrefix, _indent+1);
953                        displayAttribute(_out, "name", name, _indent+1);
954                        displayAttribute(_out, "caption", caption, _indent+1);
955                        displayAttribute(_out, "visible", visible, _indent+1);
956                        displayAttribute(_out, "description", description, _indent+1);
957                        displayAttribute(_out, "foreignKey", foreignKey, _indent+1);
958                        displayAttribute(_out, "highCardinality", highCardinality, _indent+1);
959                        displayElement(_out, "annotations", (org.eigenbase.xom.ElementDef) annotations, _indent+1);
960                }
961                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
962                {
963                        _out.beginTag("DimensionUsage", new org.eigenbase.xom.XMLAttrVector()
964                                .add("source", source)
965                                .add("level", level)
966                                .add("usagePrefix", usagePrefix)
967                                .add("name", name)
968                                .add("caption", caption)
969                                .add("visible", visible)
970                                .add("description", description)
971                                .add("foreignKey", foreignKey)
972                                .add("highCardinality", highCardinality)
973                                );
974                        displayXMLElement(_out, (org.eigenbase.xom.ElementDef) annotations);
975                        _out.endTag("DimensionUsage");
976                }
977                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
978                {
979                        DimensionUsage _cother = (DimensionUsage)_other;
980                        boolean _diff = displayAttributeDiff("source", source, _cother.source, _out, _indent+1);
981                        _diff = _diff && displayAttributeDiff("level", level, _cother.level, _out, _indent+1);
982                        _diff = _diff && displayAttributeDiff("usagePrefix", usagePrefix, _cother.usagePrefix, _out, _indent+1);
983                        _diff = _diff && displayElementDiff("annotations", annotations, _cother.annotations, _out, _indent+1);
984                        return _diff;
985                }
986                // BEGIN pass-through code block ---
987// implement CubeDimension
988            public Dimension getDimension(Schema schema) {
989                Util.assertPrecondition(schema != null, "schema != null");
990                for (int i = 0; i < schema.dimensions.length; i++) {
991                    if (schema.dimensions[i].name.equals(source)) {
992                        return schema.dimensions[i];
993                    }
994                }
995                throw Util.newInternal(
996                    "Cannot find shared dimension '" + source + "'");
997            }
998                // END pass-through code block ---
999        }
1000
1001        /**
1002         * A Dimension is a collection of hierarchies. There are
1003         * two kinds: a public dimension belongs to a
1004         * Schema, and be used by several cubes; a
1005         * private dimension belongs to a
1006         * Cube. The foreignKey field is only
1007         * applicable to private dimensions.
1008         */
1009        public static class Dimension extends CubeDimension
1010        {
1011                public Dimension()
1012                {
1013                }
1014
1015                public Dimension(org.eigenbase.xom.DOMWrapper _def)
1016                        throws org.eigenbase.xom.XOMException
1017                {
1018                        try {
1019                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
1020                                org.eigenbase.xom.NodeDef[] _tempArray;
1021                                type = (String)_parser.getAttribute("type", "String", null, _type_values, false);
1022                                usagePrefix = (String)_parser.getAttribute("usagePrefix", "String", null, null, false);
1023                                visible = (Boolean)_parser.getAttribute("visible", "Boolean", "true", null, false);
1024                                foreignKey = (String)_parser.getAttribute("foreignKey", "String", null, null, false);
1025                                highCardinality = (Boolean)_parser.getAttribute("highCardinality", "Boolean", "false", null, false);
1026                                name = (String)_parser.getAttribute("name", "String", null, null, true);
1027                                caption = (String)_parser.getAttribute("caption", "String", null, null, false);
1028                                description = (String)_parser.getAttribute("description", "String", null, null, false);
1029                                annotations = (Annotations)_parser.getElement(Annotations.class, false);
1030                                _tempArray = _parser.getArray(Hierarchy.class, 0, 0);
1031                                hierarchies = new Hierarchy[_tempArray.length];
1032                                for (int _i = 0; _i < hierarchies.length; _i++)
1033                                        hierarchies[_i] = (Hierarchy)_tempArray[_i];
1034                        } catch(org.eigenbase.xom.XOMException _ex) {
1035                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
1036                        }
1037                }
1038
1039                /** Allowable values for {@link #type}. */
1040                public static final String[] _type_values = {"StandardDimension", "TimeDimension"};
1041                public String type;  // optional attribute
1042                public String usagePrefix;  // optional attribute
1043
1044                /**
1045                 */
1046                public Hierarchy[] hierarchies;  //optional array
1047
1048                public String getName()
1049                {
1050                        return "Dimension";
1051                }
1052
1053                public void display(java.io.PrintWriter _out, int _indent)
1054                {
1055                        _out.println(getName());
1056                        displayAttribute(_out, "type", type, _indent+1);
1057                        displayAttribute(_out, "usagePrefix", usagePrefix, _indent+1);
1058                        displayAttribute(_out, "visible", visible, _indent+1);
1059                        displayAttribute(_out, "foreignKey", foreignKey, _indent+1);
1060                        displayAttribute(_out, "highCardinality", highCardinality, _indent+1);
1061                        displayAttribute(_out, "name", name, _indent+1);
1062                        displayAttribute(_out, "caption", caption, _indent+1);
1063                        displayAttribute(_out, "description", description, _indent+1);
1064                        displayElement(_out, "annotations", (org.eigenbase.xom.ElementDef) annotations, _indent+1);
1065                        displayElementArray(_out, "hierarchies", hierarchies, _indent+1);
1066                }
1067                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
1068                {
1069                        _out.beginTag("Dimension", new org.eigenbase.xom.XMLAttrVector()
1070                                .add("type", type)
1071                                .add("usagePrefix", usagePrefix)
1072                                .add("visible", visible)
1073                                .add("foreignKey", foreignKey)
1074                                .add("highCardinality", highCardinality)
1075                                .add("name", name)
1076                                .add("caption", caption)
1077                                .add("description", description)
1078                                );
1079                        displayXMLElement(_out, (org.eigenbase.xom.ElementDef) annotations);
1080                        displayXMLElementArray(_out, hierarchies);
1081                        _out.endTag("Dimension");
1082                }
1083                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
1084                {
1085                        Dimension _cother = (Dimension)_other;
1086                        boolean _diff = displayAttributeDiff("type", type, _cother.type, _out, _indent+1);
1087                        _diff = _diff && displayAttributeDiff("usagePrefix", usagePrefix, _cother.usagePrefix, _out, _indent+1);
1088                        _diff = _diff && displayElementDiff("annotations", annotations, _cother.annotations, _out, _indent+1);
1089                        _diff = _diff && displayElementArrayDiff("hierarchies", hierarchies, _cother.hierarchies, _out, _indent+1);
1090                        return _diff;
1091                }
1092                // BEGIN pass-through code block ---
1093// implement CubeDimension
1094            public Dimension getDimension(Schema schema) {
1095                Util.assertPrecondition(schema != null, "schema != null");
1096                return this;
1097            }
1098
1099            // Return the dimension's enumerated type.
1100            public DimensionType getDimensionType() {
1101                if (type == null) {
1102                    return null; //DimensionType.StandardDimension;
1103                } else {
1104                    return DimensionType.valueOf(type);
1105                }
1106            }
1107                // END pass-through code block ---
1108        }
1109
1110        /**
1111         * Defines a hierarchy.
1112         * You must specify at most one <Relation>
1113         * or memberReaderClass. If you specify none, the
1114         * hierarchy is assumed to come from the same fact table of the
1115         * current cube.
1116         */
1117        public static class Hierarchy extends org.eigenbase.xom.ElementDef
1118        {
1119                public Hierarchy()
1120                {
1121                }
1122
1123                public Hierarchy(org.eigenbase.xom.DOMWrapper _def)
1124                        throws org.eigenbase.xom.XOMException
1125                {
1126                        try {
1127                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
1128                                org.eigenbase.xom.NodeDef[] _tempArray;
1129                                name = (String)_parser.getAttribute("name", "String", null, null, false);
1130                                visible = (Boolean)_parser.getAttribute("visible", "Boolean", "true", null, false);
1131                                hasAll = (Boolean)_parser.getAttribute("hasAll", "Boolean", null, null, true);
1132                                allMemberName = (String)_parser.getAttribute("allMemberName", "String", null, null, false);
1133                                allMemberCaption = (String)_parser.getAttribute("allMemberCaption", "String", null, null, false);
1134                                allLevelName = (String)_parser.getAttribute("allLevelName", "String", null, null, false);
1135                                primaryKey = (String)_parser.getAttribute("primaryKey", "String", null, null, false);
1136                                primaryKeyTable = (String)_parser.getAttribute("primaryKeyTable", "String", null, null, false);
1137                                defaultMember = (String)_parser.getAttribute("defaultMember", "String", null, null, false);
1138                                memberReaderClass = (String)_parser.getAttribute("memberReaderClass", "String", null, null, false);
1139                                caption = (String)_parser.getAttribute("caption", "String", null, null, false);
1140                                description = (String)_parser.getAttribute("description", "String", null, null, false);
1141                                uniqueKeyLevelName = (String)_parser.getAttribute("uniqueKeyLevelName", "String", null, null, false);
1142                                annotations = (Annotations)_parser.getElement(Annotations.class, false);
1143                                relation = (RelationOrJoin)_parser.getElement(RelationOrJoin.class, false);
1144                                _tempArray = _parser.getArray(Level.class, 0, 0);
1145                                levels = new Level[_tempArray.length];
1146                                for (int _i = 0; _i < levels.length; _i++)
1147                                        levels[_i] = (Level)_tempArray[_i];
1148                                _tempArray = _parser.getArray(MemberReaderParameter.class, 0, 0);
1149                                memberReaderParameters = new MemberReaderParameter[_tempArray.length];
1150                                for (int _i = 0; _i < memberReaderParameters.length; _i++)
1151                                        memberReaderParameters[_i] = (MemberReaderParameter)_tempArray[_i];
1152                        } catch(org.eigenbase.xom.XOMException _ex) {
1153                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
1154                        }
1155                }
1156
1157                public String name;  // optional attribute
1158                public Boolean visible;  // attribute default: true
1159                public Boolean hasAll;  // required attribute
1160                public String allMemberName;  // optional attribute
1161                public String allMemberCaption;  // optional attribute
1162                public String allLevelName;  // optional attribute
1163                public String primaryKey;  // optional attribute
1164                public String primaryKeyTable;  // optional attribute
1165                public String defaultMember;  // optional attribute
1166                public String memberReaderClass;  // optional attribute
1167                public String caption;  // optional attribute
1168                public String description;  // optional attribute
1169                public String uniqueKeyLevelName;  // optional attribute
1170
1171                /**
1172                 * Contains values of user-defined properties.
1173                 */
1174                public Annotations annotations;  //optional element
1175                /**
1176                 * The {@link MondrianDef.Table table},
1177                 * {@link MondrianDef.Join set of tables},
1178                 * {@link MondrianDef.View SQL statement}, or
1179                 * {@link MondrianDef.InlineTable inline table}
1180                 * which populates this hierarchy.
1181                 */
1182                public RelationOrJoin relation;  //optional element
1183                /**
1184                 */
1185                public Level[] levels;  //optional array
1186                public MemberReaderParameter[] memberReaderParameters;  //optional array
1187
1188                public String getName()
1189                {
1190                        return "Hierarchy";
1191                }
1192
1193                public void display(java.io.PrintWriter _out, int _indent)
1194                {
1195                        _out.println(getName());
1196                        displayAttribute(_out, "name", name, _indent+1);
1197                        displayAttribute(_out, "visible", visible, _indent+1);
1198                        displayAttribute(_out, "hasAll", hasAll, _indent+1);
1199                        displayAttribute(_out, "allMemberName", allMemberName, _indent+1);
1200                        displayAttribute(_out, "allMemberCaption", allMemberCaption, _indent+1);
1201                        displayAttribute(_out, "allLevelName", allLevelName, _indent+1);
1202                        displayAttribute(_out, "primaryKey", primaryKey, _indent+1);
1203                        displayAttribute(_out, "primaryKeyTable", primaryKeyTable, _indent+1);
1204                        displayAttribute(_out, "defaultMember", defaultMember, _indent+1);
1205                        displayAttribute(_out, "memberReaderClass", memberReaderClass, _indent+1);
1206                        displayAttribute(_out, "caption", caption, _indent+1);
1207                        displayAttribute(_out, "description", description, _indent+1);
1208                        displayAttribute(_out, "uniqueKeyLevelName", uniqueKeyLevelName, _indent+1);
1209                        displayElement(_out, "annotations", (org.eigenbase.xom.ElementDef) annotations, _indent+1);
1210                        displayElement(_out, "relation", (org.eigenbase.xom.ElementDef) relation, _indent+1);
1211                        displayElementArray(_out, "levels", levels, _indent+1);
1212                        displayElementArray(_out, "memberReaderParameters", memberReaderParameters, _indent+1);
1213                }
1214                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
1215                {
1216                        _out.beginTag("Hierarchy", new org.eigenbase.xom.XMLAttrVector()
1217                                .add("name", name)
1218                                .add("visible", visible)
1219                                .add("hasAll", hasAll)
1220                                .add("allMemberName", allMemberName)
1221                                .add("allMemberCaption", allMemberCaption)
1222                                .add("allLevelName", allLevelName)
1223                                .add("primaryKey", primaryKey)
1224                                .add("primaryKeyTable", primaryKeyTable)
1225                                .add("defaultMember", defaultMember)
1226                                .add("memberReaderClass", memberReaderClass)
1227                                .add("caption", caption)
1228                                .add("description", description)
1229                                .add("uniqueKeyLevelName", uniqueKeyLevelName)
1230                                );
1231                        displayXMLElement(_out, (org.eigenbase.xom.ElementDef) annotations);
1232                        displayXMLElement(_out, (org.eigenbase.xom.ElementDef) relation);
1233                        displayXMLElementArray(_out, levels);
1234                        displayXMLElementArray(_out, memberReaderParameters);
1235                        _out.endTag("Hierarchy");
1236                }
1237                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
1238                {
1239                        Hierarchy _cother = (Hierarchy)_other;
1240                        boolean _diff = displayAttributeDiff("name", name, _cother.name, _out, _indent+1);
1241                        _diff = _diff && displayAttributeDiff("visible", visible, _cother.visible, _out, _indent+1);
1242                        _diff = _diff && displayAttributeDiff("hasAll", hasAll, _cother.hasAll, _out, _indent+1);
1243                        _diff = _diff && displayAttributeDiff("allMemberName", allMemberName, _cother.allMemberName, _out, _indent+1);
1244                        _diff = _diff && displayAttributeDiff("allMemberCaption", allMemberCaption, _cother.allMemberCaption, _out, _indent+1);
1245                        _diff = _diff && displayAttributeDiff("allLevelName", allLevelName, _cother.allLevelName, _out, _indent+1);
1246                        _diff = _diff && displayAttributeDiff("primaryKey", primaryKey, _cother.primaryKey, _out, _indent+1);
1247                        _diff = _diff && displayAttributeDiff("primaryKeyTable", primaryKeyTable, _cother.primaryKeyTable, _out, _indent+1);
1248                        _diff = _diff && displayAttributeDiff("defaultMember", defaultMember, _cother.defaultMember, _out, _indent+1);
1249                        _diff = _diff && displayAttributeDiff("memberReaderClass", memberReaderClass, _cother.memberReaderClass, _out, _indent+1);
1250                        _diff = _diff && displayAttributeDiff("caption", caption, _cother.caption, _out, _indent+1);
1251                        _diff = _diff && displayAttributeDiff("description", description, _cother.description, _out, _indent+1);
1252                        _diff = _diff && displayAttributeDiff("uniqueKeyLevelName", uniqueKeyLevelName, _cother.uniqueKeyLevelName, _out, _indent+1);
1253                        _diff = _diff && displayElementDiff("annotations", annotations, _cother.annotations, _out, _indent+1);
1254                        _diff = _diff && displayElementDiff("relation", relation, _cother.relation, _out, _indent+1);
1255                        _diff = _diff && displayElementArrayDiff("levels", levels, _cother.levels, _out, _indent+1);
1256                        _diff = _diff && displayElementArrayDiff("memberReaderParameters", memberReaderParameters, _cother.memberReaderParameters, _out, _indent+1);
1257                        return _diff;
1258                }
1259        }
1260
1261        public static class Level extends org.eigenbase.xom.ElementDef
1262        {
1263                public Level()
1264                {
1265                }
1266
1267                public Level(org.eigenbase.xom.DOMWrapper _def)
1268                        throws org.eigenbase.xom.XOMException
1269                {
1270                        try {
1271                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
1272                                org.eigenbase.xom.NodeDef[] _tempArray;
1273                                approxRowCount = (String)_parser.getAttribute("approxRowCount", "String", null, null, false);
1274                                name = (String)_parser.getAttribute("name", "String", null, null, true);
1275                                visible = (Boolean)_parser.getAttribute("visible", "Boolean", "true", null, false);
1276                                table = (String)_parser.getAttribute("table", "String", null, null, false);
1277                                column = (String)_parser.getAttribute("column", "String", null, null, false);
1278                                nameColumn = (String)_parser.getAttribute("nameColumn", "String", null, null, false);
1279                                ordinalColumn = (String)_parser.getAttribute("ordinalColumn", "String", null, null, false);
1280                                parentColumn = (String)_parser.getAttribute("parentColumn", "String", null, null, false);
1281                                nullParentValue = (String)_parser.getAttribute("nullParentValue", "String", null, null, false);
1282                                type = (String)_parser.getAttribute("type", "String", "String", _type_values, false);
1283                                internalType = (String)_parser.getAttribute("internalType", "String", null, _internalType_values, false);
1284                                uniqueMembers = (Boolean)_parser.getAttribute("uniqueMembers", "Boolean", "false", null, false);
1285                                levelType = (String)_parser.getAttribute("levelType", "String", "Regular", _levelType_values, false);
1286                                hideMemberIf = (String)_parser.getAttribute("hideMemberIf", "String", "Never", _hideMemberIf_values, false);
1287                                formatter = (String)_parser.getAttribute("formatter", "String", null, null, false);
1288                                caption = (String)_parser.getAttribute("caption", "String", null, null, false);
1289                                description = (String)_parser.getAttribute("description", "String", null, null, false);
1290                                captionColumn = (String)_parser.getAttribute("captionColumn", "String", null, null, false);
1291                                annotations = (Annotations)_parser.getElement(Annotations.class, false);
1292                                keyExp = (KeyExpression)_parser.getElement(KeyExpression.class, false);
1293                                nameExp = (NameExpression)_parser.getElement(NameExpression.class, false);
1294                                captionExp = (CaptionExpression)_parser.getElement(CaptionExpression.class, false);
1295                                ordinalExp = (OrdinalExpression)_parser.getElement(OrdinalExpression.class, false);
1296                                parentExp = (ParentExpression)_parser.getElement(ParentExpression.class, false);
1297                                memberFormatter = (MemberFormatter)_parser.getElement(MemberFormatter.class, false);
1298                                closure = (Closure)_parser.getElement(Closure.class, false);
1299                                _tempArray = _parser.getArray(Property.class, 0, 0);
1300                                properties = new Property[_tempArray.length];
1301                                for (int _i = 0; _i < properties.length; _i++)
1302                                        properties[_i] = (Property)_tempArray[_i];
1303                        } catch(org.eigenbase.xom.XOMException _ex) {
1304                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
1305                        }
1306                }
1307
1308                public String approxRowCount;  // optional attribute
1309                public String name;  // required attribute
1310                public Boolean visible;  // attribute default: true
1311                public String table;  // optional attribute
1312                public String column;  // optional attribute
1313                public String nameColumn;  // optional attribute
1314                public String ordinalColumn;  // optional attribute
1315                public String parentColumn;  // optional attribute
1316                public String nullParentValue;  // optional attribute
1317                /** Allowable values for {@link #type}. */
1318                public static final String[] _type_values = {"String", "Numeric", "Integer", "Boolean", "Date", "Time", "Timestamp"};
1319                public String type;  // attribute default: String
1320                /** Allowable values for {@link #internalType}. */
1321                public static final String[] _internalType_values = {"int", "long", "Object", "String"};
1322                public String internalType;  // optional attribute
1323                public Boolean uniqueMembers;  // attribute default: false
1324                /** Allowable values for {@link #levelType}. */
1325                public static final String[] _levelType_values = {"Regular", "TimeYears", "TimeHalfYears", "TimeHalfYear", "TimeQuarters", "TimeMonths", "TimeWeeks", "TimeDays", "TimeHours", "TimeMinutes", "TimeSeconds", "TimeUndefined"};
1326                public String levelType;  // attribute default: Regular
1327                /** Allowable values for {@link #hideMemberIf}. */
1328                public static final String[] _hideMemberIf_values = {"Never", "IfBlankName", "IfParentsName"};
1329                public String hideMemberIf;  // attribute default: Never
1330                public String formatter;  // optional attribute
1331                public String caption;  // optional attribute
1332                public String description;  // optional attribute
1333                public String captionColumn;  // optional attribute
1334
1335                /**
1336                 * Contains values of user-defined properties.
1337                 */
1338                public Annotations annotations;  //optional element
1339                /**
1340                 * The SQL expression used to populate this level's key.
1341                 */
1342                public KeyExpression keyExp;  //optional element
1343                /**
1344                 * The SQL expression used to populate this level's name. If not
1345                 * specified, the level's key is used.
1346                 */
1347                public NameExpression nameExp;  //optional element
1348                /**
1349                 * The SQL expression used to populate this level's caption. If not
1350                 * specified, the level's name is used.
1351                 */
1352                public CaptionExpression captionExp;  //optional element
1353                /**
1354                 * The SQL expression used to populate this level's ordinal.
1355                 */
1356                public OrdinalExpression ordinalExp;  //optional element
1357                /**
1358                 * The SQL expression used to join to the parent member in a
1359                 * parent-child hierarchy.
1360                 */
1361                public ParentExpression parentExp;  //optional element
1362                /**
1363                 * Member formatter.
1364                 */
1365                public MemberFormatter memberFormatter;  //optional element
1366                public Closure closure;  //optional element
1367                public Property[] properties;  //optional array
1368
1369                public String getName()
1370                {
1371                        return "Level";
1372                }
1373
1374                public void display(java.io.PrintWriter _out, int _indent)
1375                {
1376                        _out.println(getName());
1377                        displayAttribute(_out, "approxRowCount", approxRowCount, _indent+1);
1378                        displayAttribute(_out, "name", name, _indent+1);
1379                        displayAttribute(_out, "visible", visible, _indent+1);
1380                        displayAttribute(_out, "table", table, _indent+1);
1381                        displayAttribute(_out, "column", column, _indent+1);
1382                        displayAttribute(_out, "nameColumn", nameColumn, _indent+1);
1383                        displayAttribute(_out, "ordinalColumn", ordinalColumn, _indent+1);
1384                        displayAttribute(_out, "parentColumn", parentColumn, _indent+1);
1385                        displayAttribute(_out, "nullParentValue", nullParentValue, _indent+1);
1386                        displayAttribute(_out, "type", type, _indent+1);
1387                        displayAttribute(_out, "internalType", internalType, _indent+1);
1388                        displayAttribute(_out, "uniqueMembers", uniqueMembers, _indent+1);
1389                        displayAttribute(_out, "levelType", levelType, _indent+1);
1390                        displayAttribute(_out, "hideMemberIf", hideMemberIf, _indent+1);
1391                        displayAttribute(_out, "formatter", formatter, _indent+1);
1392                        displayAttribute(_out, "caption", caption, _indent+1);
1393                        displayAttribute(_out, "description", description, _indent+1);
1394                        displayAttribute(_out, "captionColumn", captionColumn, _indent+1);
1395                        displayElement(_out, "annotations", (org.eigenbase.xom.ElementDef) annotations, _indent+1);
1396                        displayElement(_out, "keyExp", (org.eigenbase.xom.ElementDef) keyExp, _indent+1);
1397                        displayElement(_out, "nameExp", (org.eigenbase.xom.ElementDef) nameExp, _indent+1);
1398                        displayElement(_out, "captionExp", (org.eigenbase.xom.ElementDef) captionExp, _indent+1);
1399                        displayElement(_out, "ordinalExp", (org.eigenbase.xom.ElementDef) ordinalExp, _indent+1);
1400                        displayElement(_out, "parentExp", (org.eigenbase.xom.ElementDef) parentExp, _indent+1);
1401                        displayElement(_out, "memberFormatter", (org.eigenbase.xom.ElementDef) memberFormatter, _indent+1);
1402                        displayElement(_out, "closure", (org.eigenbase.xom.ElementDef) closure, _indent+1);
1403                        displayElementArray(_out, "properties", properties, _indent+1);
1404                }
1405                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
1406                {
1407                        _out.beginTag("Level", new org.eigenbase.xom.XMLAttrVector()
1408                                .add("approxRowCount", approxRowCount)
1409                                .add("name", name)
1410                                .add("visible", visible)
1411                                .add("table", table)
1412                                .add("column", column)
1413                                .add("nameColumn", nameColumn)
1414                                .add("ordinalColumn", ordinalColumn)
1415                                .add("parentColumn", parentColumn)
1416                                .add("nullParentValue", nullParentValue)
1417                                .add("type", type)
1418                                .add("internalType", internalType)
1419                                .add("uniqueMembers", uniqueMembers)
1420                                .add("levelType", levelType)
1421                                .add("hideMemberIf", hideMemberIf)
1422                                .add("formatter", formatter)
1423                                .add("caption", caption)
1424                                .add("description", description)
1425                                .add("captionColumn", captionColumn)
1426                                );
1427                        displayXMLElement(_out, (org.eigenbase.xom.ElementDef) annotations);
1428                        displayXMLElement(_out, (org.eigenbase.xom.ElementDef) keyExp);
1429                        displayXMLElement(_out, (org.eigenbase.xom.ElementDef) nameExp);
1430                        displayXMLElement(_out, (org.eigenbase.xom.ElementDef) captionExp);
1431                        displayXMLElement(_out, (org.eigenbase.xom.ElementDef) ordinalExp);
1432                        displayXMLElement(_out, (org.eigenbase.xom.ElementDef) parentExp);
1433                        displayXMLElement(_out, (org.eigenbase.xom.ElementDef) memberFormatter);
1434                        displayXMLElement(_out, (org.eigenbase.xom.ElementDef) closure);
1435                        displayXMLElementArray(_out, properties);
1436                        _out.endTag("Level");
1437                }
1438                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
1439                {
1440                        Level _cother = (Level)_other;
1441                        boolean _diff = displayAttributeDiff("approxRowCount", approxRowCount, _cother.approxRowCount, _out, _indent+1);
1442                        _diff = _diff && displayAttributeDiff("name", name, _cother.name, _out, _indent+1);
1443                        _diff = _diff && displayAttributeDiff("visible", visible, _cother.visible, _out, _indent+1);
1444                        _diff = _diff && displayAttributeDiff("table", table, _cother.table, _out, _indent+1);
1445                        _diff = _diff && displayAttributeDiff("column", column, _cother.column, _out, _indent+1);
1446                        _diff = _diff && displayAttributeDiff("nameColumn", nameColumn, _cother.nameColumn, _out, _indent+1);
1447                        _diff = _diff && displayAttributeDiff("ordinalColumn", ordinalColumn, _cother.ordinalColumn, _out, _indent+1);
1448                        _diff = _diff && displayAttributeDiff("parentColumn", parentColumn, _cother.parentColumn, _out, _indent+1);
1449                        _diff = _diff && displayAttributeDiff("nullParentValue", nullParentValue, _cother.nullParentValue, _out, _indent+1);
1450                        _diff = _diff && displayAttributeDiff("type", type, _cother.type, _out, _indent+1);
1451                        _diff = _diff && displayAttributeDiff("internalType", internalType, _cother.internalType, _out, _indent+1);
1452                        _diff = _diff && displayAttributeDiff("uniqueMembers", uniqueMembers, _cother.uniqueMembers, _out, _indent+1);
1453                        _diff = _diff && displayAttributeDiff("levelType", levelType, _cother.levelType, _out, _indent+1);
1454                        _diff = _diff && displayAttributeDiff("hideMemberIf", hideMemberIf, _cother.hideMemberIf, _out, _indent+1);
1455                        _diff = _diff && displayAttributeDiff("formatter", formatter, _cother.formatter, _out, _indent+1);
1456                        _diff = _diff && displayAttributeDiff("caption", caption, _cother.caption, _out, _indent+1);
1457                        _diff = _diff && displayAttributeDiff("description", description, _cother.description, _out, _indent+1);
1458                        _diff = _diff && displayAttributeDiff("captionColumn", captionColumn, _cother.captionColumn, _out, _indent+1);
1459                        _diff = _diff && displayElementDiff("annotations", annotations, _cother.annotations, _out, _indent+1);
1460                        _diff = _diff && displayElementDiff("keyExp", keyExp, _cother.keyExp, _out, _indent+1);
1461                        _diff = _diff && displayElementDiff("nameExp", nameExp, _cother.nameExp, _out, _indent+1);
1462                        _diff = _diff && displayElementDiff("captionExp", captionExp, _cother.captionExp, _out, _indent+1);
1463                        _diff = _diff && displayElementDiff("ordinalExp", ordinalExp, _cother.ordinalExp, _out, _indent+1);
1464                        _diff = _diff && displayElementDiff("parentExp", parentExp, _cother.parentExp, _out, _indent+1);
1465                        _diff = _diff && displayElementDiff("memberFormatter", memberFormatter, _cother.memberFormatter, _out, _indent+1);
1466                        _diff = _diff && displayElementDiff("closure", closure, _cother.closure, _out, _indent+1);
1467                        _diff = _diff && displayElementArrayDiff("properties", properties, _cother.properties, _out, _indent+1);
1468                        return _diff;
1469                }
1470                // BEGIN pass-through code block ---
1471public Expression getKeyExp() {
1472                if (keyExp != null) {
1473                    return keyExp;
1474                } else if (column != null) {
1475                    return new Column(table, column);
1476                } else {
1477                    return null;
1478                }
1479            }
1480
1481            public Expression getNameExp() {
1482                if (nameExp != null) {
1483                    return nameExp;
1484                } else if (nameColumn != null) {
1485                    return new Column(table, nameColumn);
1486                } else {
1487                    return null;
1488                }
1489            }
1490
1491            public Expression getCaptionExp() {
1492                if (captionExp != null) {
1493                    return captionExp;
1494                } else if (captionColumn != null) {
1495                    return new Column(table, captionColumn);
1496                } else {
1497                    return null;
1498                }
1499            }
1500
1501            public Expression getOrdinalExp() {
1502                if (ordinalExp != null) {
1503                    return ordinalExp;
1504                } else if (ordinalColumn != null) {
1505                    return new Column(table, ordinalColumn);
1506                } else {
1507                    return null;
1508                }
1509            }
1510
1511            public Expression getParentExp() {
1512                if (parentExp != null) {
1513                    return parentExp;
1514                } else if (parentColumn != null) {
1515                    return new Column(table, parentColumn);
1516                } else {
1517                    return null;
1518                }
1519            }
1520
1521            public Expression getPropertyExp(int i) {
1522                return new Column(table, properties[i].column);
1523            }
1524
1525            public mondrian.spi.Dialect.Datatype getDatatype() {
1526                return mondrian.spi.Dialect.Datatype.valueOf(type);
1527            }
1528                // END pass-through code block ---
1529        }
1530
1531        /**
1532         * Specifies the transitive closure of a parent-child hierarchy.
1533         * Optional, but recommended for better performance.
1534         * The closure is provided as a set of (parent/child) pairs:
1535         * since it is the transitive closure these are actually (ancestor/descendant) pairs.
1536         */
1537        public static class Closure extends org.eigenbase.xom.ElementDef
1538        {
1539                public Closure()
1540                {
1541                }
1542
1543                public Closure(org.eigenbase.xom.DOMWrapper _def)
1544                        throws org.eigenbase.xom.XOMException
1545                {
1546                        try {
1547                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
1548                                parentColumn = (String)_parser.getAttribute("parentColumn", "String", null, null, true);
1549                                childColumn = (String)_parser.getAttribute("childColumn", "String", null, null, true);
1550                                table = (Table)_parser.getElement(Table.class, true);
1551                        } catch(org.eigenbase.xom.XOMException _ex) {
1552                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
1553                        }
1554                }
1555
1556                public String parentColumn;  // required attribute
1557                public String childColumn;  // required attribute
1558
1559                public Table table;  //required element
1560
1561                public String getName()
1562                {
1563                        return "Closure";
1564                }
1565
1566                public void display(java.io.PrintWriter _out, int _indent)
1567                {
1568                        _out.println(getName());
1569                        displayAttribute(_out, "parentColumn", parentColumn, _indent+1);
1570                        displayAttribute(_out, "childColumn", childColumn, _indent+1);
1571                        displayElement(_out, "table", (org.eigenbase.xom.ElementDef) table, _indent+1);
1572                }
1573                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
1574                {
1575                        _out.beginTag("Closure", new org.eigenbase.xom.XMLAttrVector()
1576                                .add("parentColumn", parentColumn)
1577                                .add("childColumn", childColumn)
1578                                );
1579                        displayXMLElement(_out, (org.eigenbase.xom.ElementDef) table);
1580                        _out.endTag("Closure");
1581                }
1582                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
1583                {
1584                        Closure _cother = (Closure)_other;
1585                        boolean _diff = displayAttributeDiff("parentColumn", parentColumn, _cother.parentColumn, _out, _indent+1);
1586                        _diff = _diff && displayAttributeDiff("childColumn", childColumn, _cother.childColumn, _out, _indent+1);
1587                        _diff = _diff && displayElementDiff("table", table, _cother.table, _out, _indent+1);
1588                        return _diff;
1589                }
1590        }
1591
1592        /**
1593         * Member property.
1594         */
1595        public static class Property extends org.eigenbase.xom.ElementDef
1596        {
1597                public Property()
1598                {
1599                }
1600
1601                public Property(org.eigenbase.xom.DOMWrapper _def)
1602                        throws org.eigenbase.xom.XOMException
1603                {
1604                        try {
1605                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
1606                                name = (String)_parser.getAttribute("name", "String", null, null, false);
1607                                column = (String)_parser.getAttribute("column", "String", null, null, false);
1608                                type = (String)_parser.getAttribute("type", "String", "String", _type_values, false);
1609                                formatter = (String)_parser.getAttribute("formatter", "String", null, null, false);
1610                                caption = (String)_parser.getAttribute("caption", "String", null, null, false);
1611                                description = (String)_parser.getAttribute("description", "String", null, null, false);
1612                                dependsOnLevelValue = (Boolean)_parser.getAttribute("dependsOnLevelValue", "Boolean", null, null, false);
1613                                propertyFormatter = (PropertyFormatter)_parser.getElement(PropertyFormatter.class, false);
1614                        } catch(org.eigenbase.xom.XOMException _ex) {
1615                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
1616                        }
1617                }
1618
1619                public String name;  // optional attribute
1620                public String column;  // optional attribute
1621                /** Allowable values for {@link #type}. */
1622                public static final String[] _type_values = {"String", "Numeric", "Integer", "Boolean", "Date", "Time", "Timestamp"};
1623                public String type;  // attribute default: String
1624                public String formatter;  // optional attribute
1625                public String caption;  // optional attribute
1626                public String description;  // optional attribute
1627                public Boolean dependsOnLevelValue;  // optional attribute
1628
1629                /**
1630                 * Property formatter.
1631                 */
1632                public PropertyFormatter propertyFormatter;  //optional element
1633
1634                public String getName()
1635                {
1636                        return "Property";
1637                }
1638
1639                public void display(java.io.PrintWriter _out, int _indent)
1640                {
1641                        _out.println(getName());
1642                        displayAttribute(_out, "name", name, _indent+1);
1643                        displayAttribute(_out, "column", column, _indent+1);
1644                        displayAttribute(_out, "type", type, _indent+1);
1645                        displayAttribute(_out, "formatter", formatter, _indent+1);
1646                        displayAttribute(_out, "caption", caption, _indent+1);
1647                        displayAttribute(_out, "description", description, _indent+1);
1648                        displayAttribute(_out, "dependsOnLevelValue", dependsOnLevelValue, _indent+1);
1649                        displayElement(_out, "propertyFormatter", (org.eigenbase.xom.ElementDef) propertyFormatter, _indent+1);
1650                }
1651                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
1652                {
1653                        _out.beginTag("Property", new org.eigenbase.xom.XMLAttrVector()
1654                                .add("name", name)
1655                                .add("column", column)
1656                                .add("type", type)
1657                                .add("formatter", formatter)
1658                                .add("caption", caption)
1659                                .add("description", description)
1660                                .add("dependsOnLevelValue", dependsOnLevelValue)
1661                                );
1662                        displayXMLElement(_out, (org.eigenbase.xom.ElementDef) propertyFormatter);
1663                        _out.endTag("Property");
1664                }
1665                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
1666                {
1667                        Property _cother = (Property)_other;
1668                        boolean _diff = displayAttributeDiff("name", name, _cother.name, _out, _indent+1);
1669                        _diff = _diff && displayAttributeDiff("column", column, _cother.column, _out, _indent+1);
1670                        _diff = _diff && displayAttributeDiff("type", type, _cother.type, _out, _indent+1);
1671                        _diff = _diff && displayAttributeDiff("formatter", formatter, _cother.formatter, _out, _indent+1);
1672                        _diff = _diff && displayAttributeDiff("caption", caption, _cother.caption, _out, _indent+1);
1673                        _diff = _diff && displayAttributeDiff("description", description, _cother.description, _out, _indent+1);
1674                        _diff = _diff && displayAttributeDiff("dependsOnLevelValue", dependsOnLevelValue, _cother.dependsOnLevelValue, _out, _indent+1);
1675                        _diff = _diff && displayElementDiff("propertyFormatter", propertyFormatter, _cother.propertyFormatter, _out, _indent+1);
1676                        return _diff;
1677                }
1678        }
1679
1680        public static class Measure extends org.eigenbase.xom.ElementDef
1681        {
1682                public Measure()
1683                {
1684                }
1685
1686                public Measure(org.eigenbase.xom.DOMWrapper _def)
1687                        throws org.eigenbase.xom.XOMException
1688                {
1689                        try {
1690                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
1691                                org.eigenbase.xom.NodeDef[] _tempArray;
1692                                name = (String)_parser.getAttribute("name", "String", null, null, true);
1693                                column = (String)_parser.getAttribute("column", "String", null, null, false);
1694                                datatype = (String)_parser.getAttribute("datatype", "String", null, _datatype_values, false);
1695                                formatString = (String)_parser.getAttribute("formatString", "String", null, null, false);
1696                                aggregator = (String)_parser.getAttribute("aggregator", "String", null, null, true);
1697                                formatter = (String)_parser.getAttribute("formatter", "String", null, null, false);
1698                                caption = (String)_parser.getAttribute("caption", "String", null, null, false);
1699                                description = (String)_parser.getAttribute("description", "String", null, null, false);
1700                                visible = (Boolean)_parser.getAttribute("visible", "Boolean", null, null, false);
1701                                annotations = (Annotations)_parser.getElement(Annotations.class, false);
1702                                measureExp = (MeasureExpression)_parser.getElement(MeasureExpression.class, false);
1703                                cellFormatter = (CellFormatter)_parser.getElement(CellFormatter.class, false);
1704                                _tempArray = _parser.getArray(CalculatedMemberProperty.class, 0, 0);
1705                                memberProperties = new CalculatedMemberProperty[_tempArray.length];
1706                                for (int _i = 0; _i < memberProperties.length; _i++)
1707                                        memberProperties[_i] = (CalculatedMemberProperty)_tempArray[_i];
1708                        } catch(org.eigenbase.xom.XOMException _ex) {
1709                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
1710                        }
1711                }
1712
1713                public String name;  // required attribute
1714                public String column;  // optional attribute
1715                /** Allowable values for {@link #datatype}. */
1716                public static final String[] _datatype_values = {"String", "Numeric", "Integer", "Boolean", "Date", "Time", "Timestamp"};
1717                public String datatype;  // optional attribute
1718                public String formatString;  // optional attribute
1719                public String aggregator;  // required attribute
1720                public String formatter;  // optional attribute
1721                public String caption;  // optional attribute
1722                public String description;  // optional attribute
1723                public Boolean visible;  // optional attribute
1724
1725                /**
1726                 * Contains values of user-defined properties.
1727                 */
1728                public Annotations annotations;  //optional element
1729                /**
1730                 * The SQL expression used to calculate a measure.
1731                 * Must be specified if a source column is not specified.
1732                 */
1733                public MeasureExpression measureExp;  //optional element
1734                /**
1735                 * Cell formatter.
1736                 */
1737                public CellFormatter cellFormatter;  //optional element
1738                public CalculatedMemberProperty[] memberProperties;  //optional array
1739
1740                public String getName()
1741                {
1742                        return "Measure";
1743                }
1744
1745                public void display(java.io.PrintWriter _out, int _indent)
1746                {
1747                        _out.println(getName());
1748                        displayAttribute(_out, "name", name, _indent+1);
1749                        displayAttribute(_out, "column", column, _indent+1);
1750                        displayAttribute(_out, "datatype", datatype, _indent+1);
1751                        displayAttribute(_out, "formatString", formatString, _indent+1);
1752                        displayAttribute(_out, "aggregator", aggregator, _indent+1);
1753                        displayAttribute(_out, "formatter", formatter, _indent+1);
1754                        displayAttribute(_out, "caption", caption, _indent+1);
1755                        displayAttribute(_out, "description", description, _indent+1);
1756                        displayAttribute(_out, "visible", visible, _indent+1);
1757                        displayElement(_out, "annotations", (org.eigenbase.xom.ElementDef) annotations, _indent+1);
1758                        displayElement(_out, "measureExp", (org.eigenbase.xom.ElementDef) measureExp, _indent+1);
1759                        displayElement(_out, "cellFormatter", (org.eigenbase.xom.ElementDef) cellFormatter, _indent+1);
1760                        displayElementArray(_out, "memberProperties", memberProperties, _indent+1);
1761                }
1762                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
1763                {
1764                        _out.beginTag("Measure", new org.eigenbase.xom.XMLAttrVector()
1765                                .add("name", name)
1766                                .add("column", column)
1767                                .add("datatype", datatype)
1768                                .add("formatString", formatString)
1769                                .add("aggregator", aggregator)
1770                                .add("formatter", formatter)
1771                                .add("caption", caption)
1772                                .add("description", description)
1773                                .add("visible", visible)
1774                                );
1775                        displayXMLElement(_out, (org.eigenbase.xom.ElementDef) annotations);
1776                        displayXMLElement(_out, (org.eigenbase.xom.ElementDef) measureExp);
1777                        displayXMLElement(_out, (org.eigenbase.xom.ElementDef) cellFormatter);
1778                        displayXMLElementArray(_out, memberProperties);
1779                        _out.endTag("Measure");
1780                }
1781                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
1782                {
1783                        Measure _cother = (Measure)_other;
1784                        boolean _diff = displayAttributeDiff("name", name, _cother.name, _out, _indent+1);
1785                        _diff = _diff && displayAttributeDiff("column", column, _cother.column, _out, _indent+1);
1786                        _diff = _diff && displayAttributeDiff("datatype", datatype, _cother.datatype, _out, _indent+1);
1787                        _diff = _diff && displayAttributeDiff("formatString", formatString, _cother.formatString, _out, _indent+1);
1788                        _diff = _diff && displayAttributeDiff("aggregator", aggregator, _cother.aggregator, _out, _indent+1);
1789                        _diff = _diff && displayAttributeDiff("formatter", formatter, _cother.formatter, _out, _indent+1);
1790                        _diff = _diff && displayAttributeDiff("caption", caption, _cother.caption, _out, _indent+1);
1791                        _diff = _diff && displayAttributeDiff("description", description, _cother.description, _out, _indent+1);
1792                        _diff = _diff && displayAttributeDiff("visible", visible, _cother.visible, _out, _indent+1);
1793                        _diff = _diff && displayElementDiff("annotations", annotations, _cother.annotations, _out, _indent+1);
1794                        _diff = _diff && displayElementDiff("measureExp", measureExp, _cother.measureExp, _out, _indent+1);
1795                        _diff = _diff && displayElementDiff("cellFormatter", cellFormatter, _cother.cellFormatter, _out, _indent+1);
1796                        _diff = _diff && displayElementArrayDiff("memberProperties", memberProperties, _cother.memberProperties, _out, _indent+1);
1797                        return _diff;
1798                }
1799        }
1800
1801        public static class CalculatedMember extends org.eigenbase.xom.ElementDef
1802        {
1803                public CalculatedMember()
1804                {
1805                }
1806
1807                public CalculatedMember(org.eigenbase.xom.DOMWrapper _def)
1808                        throws org.eigenbase.xom.XOMException
1809                {
1810                        try {
1811                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
1812                                org.eigenbase.xom.NodeDef[] _tempArray;
1813                                name = (String)_parser.getAttribute("name", "String", null, null, true);
1814                                formatString = (String)_parser.getAttribute("formatString", "String", null, null, false);
1815                                caption = (String)_parser.getAttribute("caption", "String", null, null, false);
1816                                description = (String)_parser.getAttribute("description", "String", null, null, false);
1817                                formula = (String)_parser.getAttribute("formula", "String", null, null, false);
1818                                dimension = (String)_parser.getAttribute("dimension", "String", null, null, false);
1819                                hierarchy = (String)_parser.getAttribute("hierarchy", "String", null, null, false);
1820                                parent = (String)_parser.getAttribute("parent", "String", null, null, false);
1821                                visible = (Boolean)_parser.getAttribute("visible", "Boolean", null, null, false);
1822                                annotations = (Annotations)_parser.getElement(Annotations.class, false);
1823                                formulaElement = (Formula)_parser.getElement(Formula.class, false);
1824                                cellFormatter = (CellFormatter)_parser.getElement(CellFormatter.class, false);
1825                                _tempArray = _parser.getArray(CalculatedMemberProperty.class, 0, 0);
1826                                memberProperties = new CalculatedMemberProperty[_tempArray.length];
1827                                for (int _i = 0; _i < memberProperties.length; _i++)
1828                                        memberProperties[_i] = (CalculatedMemberProperty)_tempArray[_i];
1829                        } catch(org.eigenbase.xom.XOMException _ex) {
1830                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
1831                        }
1832                }
1833
1834                public String name;  // required attribute
1835                public String formatString;  // optional attribute
1836                public String caption;  // optional attribute
1837                public String description;  // optional attribute
1838                public String formula;  // optional attribute
1839                public String dimension;  // optional attribute
1840                public String hierarchy;  // optional attribute
1841                public String parent;  // optional attribute
1842                public Boolean visible;  // optional attribute
1843
1844                /**
1845                 * Contains values of user-defined properties.
1846                 */
1847                public Annotations annotations;  //optional element
1848                /**
1849                 * MDX expression which gives the value of this member.
1850                 */
1851                public Formula formulaElement;  //optional element
1852                /**
1853                 * Cell formatter.
1854                 */
1855                public CellFormatter cellFormatter;  //optional element
1856                public CalculatedMemberProperty[] memberProperties;  //optional array
1857
1858                public String getName()
1859                {
1860                        return "CalculatedMember";
1861                }
1862
1863                public void display(java.io.PrintWriter _out, int _indent)
1864                {
1865                        _out.println(getName());
1866                        displayAttribute(_out, "name", name, _indent+1);
1867                        displayAttribute(_out, "formatString", formatString, _indent+1);
1868                        displayAttribute(_out, "caption", caption, _indent+1);
1869                        displayAttribute(_out, "description", description, _indent+1);
1870                        displayAttribute(_out, "formula", formula, _indent+1);
1871                        displayAttribute(_out, "dimension", dimension, _indent+1);
1872                        displayAttribute(_out, "hierarchy", hierarchy, _indent+1);
1873                        displayAttribute(_out, "parent", parent, _indent+1);
1874                        displayAttribute(_out, "visible", visible, _indent+1);
1875                        displayElement(_out, "annotations", (org.eigenbase.xom.ElementDef) annotations, _indent+1);
1876                        displayElement(_out, "formulaElement", (org.eigenbase.xom.ElementDef) formulaElement, _indent+1);
1877                        displayElement(_out, "cellFormatter", (org.eigenbase.xom.ElementDef) cellFormatter, _indent+1);
1878                        displayElementArray(_out, "memberProperties", memberProperties, _indent+1);
1879                }
1880                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
1881                {
1882                        _out.beginTag("CalculatedMember", new org.eigenbase.xom.XMLAttrVector()
1883                                .add("name", name)
1884                                .add("formatString", formatString)
1885                                .add("caption", caption)
1886                                .add("description", description)
1887                                .add("formula", formula)
1888                                .add("dimension", dimension)
1889                                .add("hierarchy", hierarchy)
1890                                .add("parent", parent)
1891                                .add("visible", visible)
1892                                );
1893                        displayXMLElement(_out, (org.eigenbase.xom.ElementDef) annotations);
1894                        displayXMLElement(_out, (org.eigenbase.xom.ElementDef) formulaElement);
1895                        displayXMLElement(_out, (org.eigenbase.xom.ElementDef) cellFormatter);
1896                        displayXMLElementArray(_out, memberProperties);
1897                        _out.endTag("CalculatedMember");
1898                }
1899                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
1900                {
1901                        CalculatedMember _cother = (CalculatedMember)_other;
1902                        boolean _diff = displayAttributeDiff("name", name, _cother.name, _out, _indent+1);
1903                        _diff = _diff && displayAttributeDiff("formatString", formatString, _cother.formatString, _out, _indent+1);
1904                        _diff = _diff && displayAttributeDiff("caption", caption, _cother.caption, _out, _indent+1);
1905                        _diff = _diff && displayAttributeDiff("description", description, _cother.description, _out, _indent+1);
1906                        _diff = _diff && displayAttributeDiff("formula", formula, _cother.formula, _out, _indent+1);
1907                        _diff = _diff && displayAttributeDiff("dimension", dimension, _cother.dimension, _out, _indent+1);
1908                        _diff = _diff && displayAttributeDiff("hierarchy", hierarchy, _cother.hierarchy, _out, _indent+1);
1909                        _diff = _diff && displayAttributeDiff("parent", parent, _cother.parent, _out, _indent+1);
1910                        _diff = _diff && displayAttributeDiff("visible", visible, _cother.visible, _out, _indent+1);
1911                        _diff = _diff && displayElementDiff("annotations", annotations, _cother.annotations, _out, _indent+1);
1912                        _diff = _diff && displayElementDiff("formulaElement", formulaElement, _cother.formulaElement, _out, _indent+1);
1913                        _diff = _diff && displayElementDiff("cellFormatter", cellFormatter, _cother.cellFormatter, _out, _indent+1);
1914                        _diff = _diff && displayElementArrayDiff("memberProperties", memberProperties, _cother.memberProperties, _out, _indent+1);
1915                        return _diff;
1916                }
1917                // BEGIN pass-through code block ---
1918/**
1919              * Returns the formula, looking for a sub-element called
1920              * "Formula" first, then looking for an attribute called
1921              * "formula".
1922              */
1923            public String getFormula() {
1924                if (formulaElement != null) {
1925                    return formulaElement.cdata;
1926                } else {
1927                    return formula;
1928                }
1929            }
1930            /**
1931              * Returns the format string, looking for a property called
1932              * "FORMAT_STRING" first, then looking for an attribute called
1933              * "formatString".
1934              */
1935            public String getFormatString() {
1936                for (CalculatedMemberProperty prop : memberProperties) {
1937                    if (prop.name.equals(
1938                        mondrian.olap.Property.FORMAT_STRING.name))
1939                    {
1940                        return prop.value;
1941                    }
1942                }
1943                return formatString;
1944            }
1945                // END pass-through code block ---
1946        }
1947
1948        /**
1949         * Property of a calculated member defined against a cube.
1950         * It must have either an expression or a value.
1951         */
1952        public static class CalculatedMemberProperty extends org.eigenbase.xom.ElementDef
1953        {
1954                public CalculatedMemberProperty()
1955                {
1956                }
1957
1958                public CalculatedMemberProperty(org.eigenbase.xom.DOMWrapper _def)
1959                        throws org.eigenbase.xom.XOMException
1960                {
1961                        try {
1962                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
1963                                name = (String)_parser.getAttribute("name", "String", null, null, true);
1964                                caption = (String)_parser.getAttribute("caption", "String", null, null, false);
1965                                description = (String)_parser.getAttribute("description", "String", null, null, false);
1966                                expression = (String)_parser.getAttribute("expression", "String", null, null, false);
1967                                value = (String)_parser.getAttribute("value", "String", null, null, false);
1968                        } catch(org.eigenbase.xom.XOMException _ex) {
1969                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
1970                        }
1971                }
1972
1973                public String name;  // required attribute
1974                public String caption;  // optional attribute
1975                public String description;  // optional attribute
1976                public String expression;  // optional attribute
1977                public String value;  // optional attribute
1978
1979
1980                public String getName()
1981                {
1982                        return "CalculatedMemberProperty";
1983                }
1984
1985                public void display(java.io.PrintWriter _out, int _indent)
1986                {
1987                        _out.println(getName());
1988                        displayAttribute(_out, "name", name, _indent+1);
1989                        displayAttribute(_out, "caption", caption, _indent+1);
1990                        displayAttribute(_out, "description", description, _indent+1);
1991                        displayAttribute(_out, "expression", expression, _indent+1);
1992                        displayAttribute(_out, "value", value, _indent+1);
1993                }
1994                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
1995                {
1996                        _out.beginTag("CalculatedMemberProperty", new org.eigenbase.xom.XMLAttrVector()
1997                                .add("name", name)
1998                                .add("caption", caption)
1999                                .add("description", description)
2000                                .add("expression", expression)
2001                                .add("value", value)
2002                                );
2003                        _out.endTag("CalculatedMemberProperty");
2004                }
2005                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
2006                {
2007                        CalculatedMemberProperty _cother = (CalculatedMemberProperty)_other;
2008                        boolean _diff = displayAttributeDiff("name", name, _cother.name, _out, _indent+1);
2009                        _diff = _diff && displayAttributeDiff("caption", caption, _cother.caption, _out, _indent+1);
2010                        _diff = _diff && displayAttributeDiff("description", description, _cother.description, _out, _indent+1);
2011                        _diff = _diff && displayAttributeDiff("expression", expression, _cother.expression, _out, _indent+1);
2012                        _diff = _diff && displayAttributeDiff("value", value, _cother.value, _out, _indent+1);
2013                        return _diff;
2014                }
2015        }
2016
2017        /**
2018         * <p>Defines a named set which can be used in queries in the
2019         * same way as a set defined using a WITH SET clause.</p>
2020         * <p>A named set can be defined against a particular cube,
2021         * or can be global to a schema. If it is defined against a
2022         * cube, it is only available to queries which use that cube.</p>
2023         * <p>A named set defined against a cube is not inherited by
2024         * a virtual cubes defined against that cube. (But you can
2025         * define a named set against a virtual cube.)</p>
2026         * <p>A named set defined against a schema is available in
2027         * all cubes and virtual cubes in that schema. However, it is
2028         * only valid if the cube contains dimensions with the names
2029         * required to make the formula valid.</p>
2030         */
2031        public static class NamedSet extends org.eigenbase.xom.ElementDef
2032        {
2033                public NamedSet()
2034                {
2035                }
2036
2037                public NamedSet(org.eigenbase.xom.DOMWrapper _def)
2038                        throws org.eigenbase.xom.XOMException
2039                {
2040                        try {
2041                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
2042                                name = (String)_parser.getAttribute("name", "String", null, null, true);
2043                                caption = (String)_parser.getAttribute("caption", "String", null, null, false);
2044                                description = (String)_parser.getAttribute("description", "String", null, null, false);
2045                                formula = (String)_parser.getAttribute("formula", "String", null, null, false);
2046                                annotations = (Annotations)_parser.getElement(Annotations.class, false);
2047                                formulaElement = (Formula)_parser.getElement(Formula.class, false);
2048                        } catch(org.eigenbase.xom.XOMException _ex) {
2049                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
2050                        }
2051                }
2052
2053                public String name;  // required attribute
2054                public String caption;  // optional attribute
2055                public String description;  // optional attribute
2056                public String formula;  // optional attribute
2057
2058                /**
2059                 * Contains values of user-defined properties.
2060                 */
2061                public Annotations annotations;  //optional element
2062                /**
2063                 * MDX expression which gives the value of this set.
2064                 */
2065                public Formula formulaElement;  //optional element
2066
2067                public String getName()
2068                {
2069                        return "NamedSet";
2070                }
2071
2072                public void display(java.io.PrintWriter _out, int _indent)
2073                {
2074                        _out.println(getName());
2075                        displayAttribute(_out, "name", name, _indent+1);
2076                        displayAttribute(_out, "caption", caption, _indent+1);
2077                        displayAttribute(_out, "description", description, _indent+1);
2078                        displayAttribute(_out, "formula", formula, _indent+1);
2079                        displayElement(_out, "annotations", (org.eigenbase.xom.ElementDef) annotations, _indent+1);
2080                        displayElement(_out, "formulaElement", (org.eigenbase.xom.ElementDef) formulaElement, _indent+1);
2081                }
2082                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
2083                {
2084                        _out.beginTag("NamedSet", new org.eigenbase.xom.XMLAttrVector()
2085                                .add("name", name)
2086                                .add("caption", caption)
2087                                .add("description", description)
2088                                .add("formula", formula)
2089                                );
2090                        displayXMLElement(_out, (org.eigenbase.xom.ElementDef) annotations);
2091                        displayXMLElement(_out, (org.eigenbase.xom.ElementDef) formulaElement);
2092                        _out.endTag("NamedSet");
2093                }
2094                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
2095                {
2096                        NamedSet _cother = (NamedSet)_other;
2097                        boolean _diff = displayAttributeDiff("name", name, _cother.name, _out, _indent+1);
2098                        _diff = _diff && displayAttributeDiff("caption", caption, _cother.caption, _out, _indent+1);
2099                        _diff = _diff && displayAttributeDiff("description", description, _cother.description, _out, _indent+1);
2100                        _diff = _diff && displayAttributeDiff("formula", formula, _cother.formula, _out, _indent+1);
2101                        _diff = _diff && displayElementDiff("annotations", annotations, _cother.annotations, _out, _indent+1);
2102                        _diff = _diff && displayElementDiff("formulaElement", formulaElement, _cother.formulaElement, _out, _indent+1);
2103                        return _diff;
2104                }
2105                // BEGIN pass-through code block ---
2106/**
2107              * Returns the formula, looking for a sub-element called
2108              * "Formula" first, then looking for an attribute called
2109              * "formula".
2110              */
2111            public String getFormula() {
2112                if (formulaElement != null) {
2113                    return formulaElement.cdata;
2114                } else {
2115                    return formula;
2116                }
2117            }
2118                // END pass-through code block ---
2119        }
2120
2121        public static class Formula extends org.eigenbase.xom.ElementDef
2122        {
2123                public Formula()
2124                {
2125                }
2126
2127                public Formula(org.eigenbase.xom.DOMWrapper _def)
2128                        throws org.eigenbase.xom.XOMException
2129                {
2130                        try {
2131                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
2132                                cdata = _parser.getText();
2133                        } catch(org.eigenbase.xom.XOMException _ex) {
2134                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
2135                        }
2136                }
2137
2138
2139                public String cdata;  // All text goes here
2140                public String getName()
2141                {
2142                        return "Formula";
2143                }
2144
2145                public void display(java.io.PrintWriter _out, int _indent)
2146                {
2147                        _out.println(getName());
2148                        displayString(_out, "cdata", cdata, _indent+1);
2149                }
2150                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
2151                {
2152                        _out.beginTag("Formula", new org.eigenbase.xom.XMLAttrVector()
2153                                );
2154                        _out.cdata(cdata);
2155                        _out.endTag("Formula");
2156                }
2157                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
2158                {
2159                        Formula _cother = (Formula)_other;
2160                        boolean _diff = displayStringDiff("cdata", cdata, _cother.cdata, _out, _indent+1);
2161                        return _diff;
2162                }
2163        }
2164
2165        /**
2166         * Not used
2167         */
2168        public static class MemberReaderParameter extends org.eigenbase.xom.ElementDef
2169        {
2170                public MemberReaderParameter()
2171                {
2172                }
2173
2174                public MemberReaderParameter(org.eigenbase.xom.DOMWrapper _def)
2175                        throws org.eigenbase.xom.XOMException
2176                {
2177                        try {
2178                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
2179                                name = (String)_parser.getAttribute("name", "String", null, null, false);
2180                                value = (String)_parser.getAttribute("value", "String", null, null, false);
2181                        } catch(org.eigenbase.xom.XOMException _ex) {
2182                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
2183                        }
2184                }
2185
2186                public String name;  // optional attribute
2187                public String value;  // optional attribute
2188
2189
2190                public String getName()
2191                {
2192                        return "MemberReaderParameter";
2193                }
2194
2195                public void display(java.io.PrintWriter _out, int _indent)
2196                {
2197                        _out.println(getName());
2198                        displayAttribute(_out, "name", name, _indent+1);
2199                        displayAttribute(_out, "value", value, _indent+1);
2200                }
2201                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
2202                {
2203                        _out.beginTag("MemberReaderParameter", new org.eigenbase.xom.XMLAttrVector()
2204                                .add("name", name)
2205                                .add("value", value)
2206                                );
2207                        _out.endTag("MemberReaderParameter");
2208                }
2209                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
2210                {
2211                        MemberReaderParameter _cother = (MemberReaderParameter)_other;
2212                        boolean _diff = displayAttributeDiff("name", name, _cother.name, _out, _indent+1);
2213                        _diff = _diff && displayAttributeDiff("value", value, _cother.value, _out, _indent+1);
2214                        return _diff;
2215                }
2216        }
2217
2218        /**
2219         * A table or a join
2220         */
2221        public static abstract class RelationOrJoin extends org.eigenbase.xom.ElementDef
2222        {
2223                public RelationOrJoin()
2224                {
2225                }
2226
2227                public RelationOrJoin(org.eigenbase.xom.DOMWrapper _def)
2228                        throws org.eigenbase.xom.XOMException
2229                {
2230                }
2231
2232
2233
2234                public String getName()
2235                {
2236                        return "RelationOrJoin";
2237                }
2238
2239                public void display(java.io.PrintWriter _out, int _indent)
2240                {
2241                        _out.println(getName());
2242                }
2243                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
2244                {
2245                        _out.beginTag("RelationOrJoin", new org.eigenbase.xom.XMLAttrVector()
2246                                );
2247                        _out.endTag("RelationOrJoin");
2248                }
2249                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
2250                {
2251                        return true;
2252                }
2253                // BEGIN pass-through code block ---
2254public abstract Relation find(String seekAlias);
2255            public boolean equals(Object o) {
2256                return this == o;
2257            }
2258            public int hashCode() {
2259                return System.identityHashCode(this);
2260            }
2261                // END pass-through code block ---
2262        }
2263
2264        /**
2265         * A table, inline table or view
2266         */
2267        public static abstract class Relation extends RelationOrJoin
2268        {
2269                public Relation()
2270                {
2271                }
2272
2273                public Relation(org.eigenbase.xom.DOMWrapper _def)
2274                        throws org.eigenbase.xom.XOMException
2275                {
2276                }
2277
2278
2279
2280                public String getName()
2281                {
2282                        return "Relation";
2283                }
2284
2285                public void display(java.io.PrintWriter _out, int _indent)
2286                {
2287                        _out.println(getName());
2288                }
2289                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
2290                {
2291                        _out.beginTag("Relation", new org.eigenbase.xom.XMLAttrVector()
2292                                );
2293                        _out.endTag("Relation");
2294                }
2295                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
2296                {
2297                        return true;
2298                }
2299                // BEGIN pass-through code block ---
2300public abstract String getAlias();
2301                // END pass-through code block ---
2302        }
2303
2304        /**
2305         * A collection of SQL statements, one per dialect.
2306         */
2307        public static class View extends Relation
2308        {
2309                public View()
2310                {
2311                }
2312
2313                public View(org.eigenbase.xom.DOMWrapper _def)
2314                        throws org.eigenbase.xom.XOMException
2315                {
2316                        try {
2317                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
2318                                org.eigenbase.xom.NodeDef[] _tempArray;
2319                                alias = (String)_parser.getAttribute("alias", "String", null, null, true);
2320                                _tempArray = _parser.getArray(SQL.class, 1, 0);
2321                                selects = new SQL[_tempArray.length];
2322                                for (int _i = 0; _i < selects.length; _i++)
2323                                        selects[_i] = (SQL)_tempArray[_i];
2324                        } catch(org.eigenbase.xom.XOMException _ex) {
2325                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
2326                        }
2327                }
2328
2329                public String alias;  // required attribute
2330
2331                public SQL[] selects;  //min 1
2332
2333                public String getName()
2334                {
2335                        return "View";
2336                }
2337
2338                public void display(java.io.PrintWriter _out, int _indent)
2339                {
2340                        _out.println(getName());
2341                        displayAttribute(_out, "alias", alias, _indent+1);
2342                        displayElementArray(_out, "selects", selects, _indent+1);
2343                }
2344                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
2345                {
2346                        _out.beginTag("View", new org.eigenbase.xom.XMLAttrVector()
2347                                .add("alias", alias)
2348                                );
2349                        displayXMLElementArray(_out, selects);
2350                        _out.endTag("View");
2351                }
2352                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
2353                {
2354                        View _cother = (View)_other;
2355                        boolean _diff = displayAttributeDiff("alias", alias, _cother.alias, _out, _indent+1);
2356                        _diff = _diff && displayElementArrayDiff("selects", selects, _cother.selects, _out, _indent+1);
2357                        return _diff;
2358                }
2359                // BEGIN pass-through code block ---
2360/**
2361             * Copy constructor.
2362             */
2363            public View(View view) {
2364                this.alias = view.alias;
2365                this.selects = view.selects.clone();
2366            }
2367            public String toString() {
2368                return selects[0].cdata;
2369            }
2370
2371            public View find(String seekAlias) {
2372                if (seekAlias.equals(alias)) {
2373                    return this;
2374                } else {
2375                    return null;
2376                }
2377            }
2378
2379            public String getAlias() {
2380                return alias;
2381            }
2382
2383            public SqlQuery.CodeSet getCodeSet() {
2384                return SQL.toCodeSet(selects);
2385            }
2386
2387            public void addCode(String dialect, String code) {
2388                if (selects == null) {
2389                    selects = new SQL[1];
2390                } else {
2391                    SQL[] olds = selects;
2392                    selects = new SQL[olds.length + 1];
2393                    System.arraycopy(olds, 0, selects, 0, olds.length);
2394                }
2395                SQL sql = new SQL();
2396                sql.dialect = dialect;
2397                sql.cdata = code;
2398                selects[selects.length - 1] = sql;
2399            }
2400
2401            public boolean equals(Object o) {
2402                if (o instanceof View) {
2403                    View that = (View) o;
2404                    if (!this.alias.equals(that.alias)) {
2405                        return false;
2406                    }
2407                    if (this.selects == null || that.selects == null || this.selects.length != that.selects.length) {
2408                        return false;
2409                    }
2410                    for (int i = 0; i < selects.length; i++) {
2411                        if (!Util.equals(this.selects[i].dialect, that.selects[i].dialect)
2412                            || !Util.equals(this.selects[i].cdata, that.selects[i].cdata))
2413                        {
2414                            return false;
2415                        }
2416                    }
2417                    return true;
2418                } else {
2419                    return false;
2420                }
2421            }
2422                // END pass-through code block ---
2423        }
2424
2425        public static class SQL extends org.eigenbase.xom.ElementDef
2426        {
2427                public SQL()
2428                {
2429                }
2430
2431                public SQL(org.eigenbase.xom.DOMWrapper _def)
2432                        throws org.eigenbase.xom.XOMException
2433                {
2434                        try {
2435                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
2436                                dialect = (String)_parser.getAttribute("dialect", "String", "generic", null, true);
2437                                cdata = _parser.getText();
2438                        } catch(org.eigenbase.xom.XOMException _ex) {
2439                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
2440                        }
2441                }
2442
2443                public String dialect;  // attribute default: generic
2444
2445                public String cdata;  // All text goes here
2446                public String getName()
2447                {
2448                        return "SQL";
2449                }
2450
2451                public void display(java.io.PrintWriter _out, int _indent)
2452                {
2453                        _out.println(getName());
2454                        displayAttribute(_out, "dialect", dialect, _indent+1);
2455                        displayString(_out, "cdata", cdata, _indent+1);
2456                }
2457                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
2458                {
2459                        _out.beginTag("SQL", new org.eigenbase.xom.XMLAttrVector()
2460                                .add("dialect", dialect)
2461                                );
2462                        _out.cdata(cdata);
2463                        _out.endTag("SQL");
2464                }
2465                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
2466                {
2467                        SQL _cother = (SQL)_other;
2468                        boolean _diff = displayAttributeDiff("dialect", dialect, _cother.dialect, _out, _indent+1);
2469                        _diff = _diff && displayStringDiff("cdata", cdata, _cother.cdata, _out, _indent+1);
2470                        return _diff;
2471                }
2472                // BEGIN pass-through code block ---
2473public int hashCode() {
2474                return dialect.hashCode();
2475            }
2476
2477            public boolean equals(Object obj) {
2478                if (!(obj instanceof SQL)) {
2479                    return false;
2480                }
2481                SQL that = (SQL) obj;
2482                return this.dialect.equals(that.dialect) &&
2483                        Util.equals(this.cdata, that.cdata);
2484            }
2485
2486            /**
2487             * Converts an array of SQL to a
2488             * {@link mondrian.rolap.sql.SqlQuery.CodeSet} object.
2489             */
2490            public static SqlQuery.CodeSet toCodeSet(SQL[] sqls) {
2491                SqlQuery.CodeSet codeSet = new SqlQuery.CodeSet();
2492                for (SQL sql : sqls) {
2493                    codeSet.put(sql.dialect, sql.cdata);
2494                }
2495                return codeSet;
2496            }
2497                // END pass-through code block ---
2498        }
2499
2500        public static class Join extends RelationOrJoin
2501        {
2502                public Join()
2503                {
2504                }
2505
2506                public Join(org.eigenbase.xom.DOMWrapper _def)
2507                        throws org.eigenbase.xom.XOMException
2508                {
2509                        try {
2510                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
2511                                leftAlias = (String)_parser.getAttribute("leftAlias", "String", null, null, false);
2512                                leftKey = (String)_parser.getAttribute("leftKey", "String", null, null, true);
2513                                rightAlias = (String)_parser.getAttribute("rightAlias", "String", null, null, false);
2514                                rightKey = (String)_parser.getAttribute("rightKey", "String", null, null, true);
2515                                left = (RelationOrJoin)_parser.getElement(RelationOrJoin.class, true);
2516                                right = (RelationOrJoin)_parser.getElement(RelationOrJoin.class, true);
2517                        } catch(org.eigenbase.xom.XOMException _ex) {
2518                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
2519                        }
2520                }
2521
2522                public String leftAlias;  // optional attribute
2523                public String leftKey;  // required attribute
2524                public String rightAlias;  // optional attribute
2525                public String rightKey;  // required attribute
2526
2527                public RelationOrJoin left;  //required element
2528                public RelationOrJoin right;  //required element
2529
2530                public String getName()
2531                {
2532                        return "Join";
2533                }
2534
2535                public void display(java.io.PrintWriter _out, int _indent)
2536                {
2537                        _out.println(getName());
2538                        displayAttribute(_out, "leftAlias", leftAlias, _indent+1);
2539                        displayAttribute(_out, "leftKey", leftKey, _indent+1);
2540                        displayAttribute(_out, "rightAlias", rightAlias, _indent+1);
2541                        displayAttribute(_out, "rightKey", rightKey, _indent+1);
2542                        displayElement(_out, "left", (org.eigenbase.xom.ElementDef) left, _indent+1);
2543                        displayElement(_out, "right", (org.eigenbase.xom.ElementDef) right, _indent+1);
2544                }
2545                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
2546                {
2547                        _out.beginTag("Join", new org.eigenbase.xom.XMLAttrVector()
2548                                .add("leftAlias", leftAlias)
2549                                .add("leftKey", leftKey)
2550                                .add("rightAlias", rightAlias)
2551                                .add("rightKey", rightKey)
2552                                );
2553                        displayXMLElement(_out, (org.eigenbase.xom.ElementDef) left);
2554                        displayXMLElement(_out, (org.eigenbase.xom.ElementDef) right);
2555                        _out.endTag("Join");
2556                }
2557                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
2558                {
2559                        Join _cother = (Join)_other;
2560                        boolean _diff = displayAttributeDiff("leftAlias", leftAlias, _cother.leftAlias, _out, _indent+1);
2561                        _diff = _diff && displayAttributeDiff("leftKey", leftKey, _cother.leftKey, _out, _indent+1);
2562                        _diff = _diff && displayAttributeDiff("rightAlias", rightAlias, _cother.rightAlias, _out, _indent+1);
2563                        _diff = _diff && displayAttributeDiff("rightKey", rightKey, _cother.rightKey, _out, _indent+1);
2564                        _diff = _diff && displayElementDiff("left", left, _cother.left, _out, _indent+1);
2565                        _diff = _diff && displayElementDiff("right", right, _cother.right, _out, _indent+1);
2566                        return _diff;
2567                }
2568                // BEGIN pass-through code block ---
2569/** Convenience constructor. */
2570            public Join(
2571                String leftAlias,
2572                String leftKey,
2573                RelationOrJoin left,
2574                String rightAlias, 
2575                String rightKey,
2576                RelationOrJoin right)
2577            {
2578                this.leftAlias = leftAlias;
2579                this.leftKey = leftKey;
2580                this.left = left;
2581                this.rightAlias = rightAlias;
2582                this.rightKey = rightKey;
2583                this.right = right;
2584            }
2585            /**
2586              * Returns the alias of the left join key, defaulting to left's
2587              * alias if left is a table.
2588              */
2589            public String getLeftAlias() {
2590                if (leftAlias != null) {
2591                    return leftAlias;
2592                }
2593                if (left instanceof Relation) {
2594                    return ((Relation) left).getAlias();
2595                }
2596                throw Util.newInternal(
2597                    "alias is required because " + left + " is not a table");
2598            }
2599            /**
2600              * Returns the alias of the right join key, defaulting to right's
2601              * alias if right is a table.
2602              */
2603            public String getRightAlias() {
2604                if (rightAlias != null) {
2605                    return rightAlias;
2606                }
2607                if (right instanceof Relation) {
2608                    return ((Relation) right).getAlias();
2609                }
2610                if (right instanceof Join) {
2611                    return ((Join) right).getLeftAlias();
2612                }
2613                throw Util.newInternal(
2614                    "alias is required because " + right + " is not a table");
2615            }
2616            public String toString() {
2617                return "(" + left + ") join (" + right + ") on " +
2618                    leftAlias + "." + leftKey + " = " +
2619                    rightAlias + "." + rightKey;
2620            }
2621            public Relation find(String seekAlias) {
2622                Relation relation = left.find(seekAlias);
2623                if (relation == null) {
2624                    relation = right.find(seekAlias);
2625                }
2626                return relation;
2627            }
2628                // END pass-through code block ---
2629        }
2630
2631        public static class Table extends Relation
2632        {
2633                public Table()
2634                {
2635                }
2636
2637                public Table(org.eigenbase.xom.DOMWrapper _def)
2638                        throws org.eigenbase.xom.XOMException
2639                {
2640                        try {
2641                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
2642                                org.eigenbase.xom.NodeDef[] _tempArray;
2643                                name = (String)_parser.getAttribute("name", "String", null, null, true);
2644                                schema = (String)_parser.getAttribute("schema", "String", null, null, false);
2645                                alias = (String)_parser.getAttribute("alias", "String", null, null, false);
2646                                filter = (SQL)_parser.getElement(SQL.class, false);
2647                                _tempArray = _parser.getArray(AggExclude.class, 0, 0);
2648                                aggExcludes = new AggExclude[_tempArray.length];
2649                                for (int _i = 0; _i < aggExcludes.length; _i++)
2650                                        aggExcludes[_i] = (AggExclude)_tempArray[_i];
2651                                _tempArray = _parser.getArray(AggTable.class, 0, 0);
2652                                aggTables = new AggTable[_tempArray.length];
2653                                for (int _i = 0; _i < aggTables.length; _i++)
2654                                        aggTables[_i] = (AggTable)_tempArray[_i];
2655                                _tempArray = _parser.getArray(Hint.class, 0, 0);
2656                                tableHints = new Hint[_tempArray.length];
2657                                for (int _i = 0; _i < tableHints.length; _i++)
2658                                        tableHints[_i] = (Hint)_tempArray[_i];
2659                        } catch(org.eigenbase.xom.XOMException _ex) {
2660                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
2661                        }
2662                }
2663
2664                public String name;  // required attribute
2665                public String schema;  // optional attribute
2666                public String alias;  // optional attribute
2667
2668                /**
2669                 * The SQL WHERE clause expression to be appended to any select statement
2670                 */
2671                public SQL filter;  //optional element
2672                public AggExclude[] aggExcludes;  //optional array
2673                public AggTable[] aggTables;  //optional array
2674                /**
2675                 * Table optimization hints; may be ignored by dialect.
2676                 */
2677                public Hint[] tableHints;  //optional array
2678
2679                public String getName()
2680                {
2681                        return "Table";
2682                }
2683
2684                public void display(java.io.PrintWriter _out, int _indent)
2685                {
2686                        _out.println(getName());
2687                        displayAttribute(_out, "name", name, _indent+1);
2688                        displayAttribute(_out, "schema", schema, _indent+1);
2689                        displayAttribute(_out, "alias", alias, _indent+1);
2690                        displayElement(_out, "filter", (org.eigenbase.xom.ElementDef) filter, _indent+1);
2691                        displayElementArray(_out, "aggExcludes", aggExcludes, _indent+1);
2692                        displayElementArray(_out, "aggTables", aggTables, _indent+1);
2693                        displayElementArray(_out, "tableHints", tableHints, _indent+1);
2694                }
2695                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
2696                {
2697                        _out.beginTag("Table", new org.eigenbase.xom.XMLAttrVector()
2698                                .add("name", name)
2699                                .add("schema", schema)
2700                                .add("alias", alias)
2701                                );
2702                        displayXMLElement(_out, (org.eigenbase.xom.ElementDef) filter);
2703                        displayXMLElementArray(_out, aggExcludes);
2704                        displayXMLElementArray(_out, aggTables);
2705                        displayXMLElementArray(_out, tableHints);
2706                        _out.endTag("Table");
2707                }
2708                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
2709                {
2710                        Table _cother = (Table)_other;
2711                        boolean _diff = displayAttributeDiff("name", name, _cother.name, _out, _indent+1);
2712                        _diff = _diff && displayAttributeDiff("schema", schema, _cother.schema, _out, _indent+1);
2713                        _diff = _diff && displayAttributeDiff("alias", alias, _cother.alias, _out, _indent+1);
2714                        _diff = _diff && displayElementDiff("filter", filter, _cother.filter, _out, _indent+1);
2715                        _diff = _diff && displayElementArrayDiff("aggExcludes", aggExcludes, _cother.aggExcludes, _out, _indent+1);
2716                        _diff = _diff && displayElementArrayDiff("aggTables", aggTables, _cother.aggTables, _out, _indent+1);
2717                        _diff = _diff && displayElementArrayDiff("tableHints", tableHints, _cother.tableHints, _out, _indent+1);
2718                        return _diff;
2719                }
2720                // BEGIN pass-through code block ---
2721private java.util.Map<String,String> hintMap;
2722            /** Convenience constructor. */
2723            public Table(Table table) {
2724                this(table.schema, table.name, table.alias, table.tableHints);
2725            }
2726            public Table(String schema, String name, String alias, Hint[] tablehints) {
2727                this();
2728                this.schema = schema;
2729                this.name = name;
2730                this.alias = alias;
2731                this.hintMap = buildHintMap(tablehints);
2732            }
2733
2734            public Table(Table tbl, String possibleName) {
2735                this(tbl.schema, tbl.name, possibleName, tbl.tableHints);
2736                
2737                // Remake the filter with the new alias
2738                if (tbl.filter != null) {
2739                    this.filter = new SQL();
2740                    this.filter.dialect = tbl.filter.dialect;
2741                     if (tbl.filter.cdata != null) {
2742                        this.filter.cdata =
2743                            tbl.filter.cdata.replace(
2744                                tbl.alias == null
2745                                    ? tbl.name
2746                                    : tbl.alias,
2747                                possibleName);
2748                    }
2749                }
2750            }
2751            
2752            private java.util.Map<String,String> buildHintMap(Hint[] th) {
2753                java.util.Map<String,String> h =
2754                    new java.util.HashMap<String,String>();
2755                if (th != null) {
2756                    for (int i = 0; i < th.length; i++) {
2757                        h.put(th[i].type, th[i].cdata);
2758                    }
2759                }
2760                return h;
2761            }
2762            /** Returns the alias or, if it is null, the table name. */
2763            public String getAlias() {
2764                return (alias != null) ? alias : name;
2765            }
2766            public String toString() {
2767                return (schema == null) ?
2768                    name :
2769                    schema + "." + name;
2770            }
2771            public Table find(String seekAlias) {
2772                return seekAlias.equals(name) ? this :
2773                    (alias != null) && seekAlias.equals(alias) ? this :
2774                    null;
2775            }
2776            public boolean equals(Object o) {
2777                if (o instanceof Table) {
2778                    Table that = (Table) o;
2779                    return this.name.equals(that.name) &&
2780                        Util.equals(this.alias, that.alias) &&
2781                        Util.equals(this.schema, that.schema);
2782                } else {
2783                    return false;
2784                }
2785            }
2786            public int hashCode() {
2787                return toString().hashCode();
2788            }
2789            public String getFilter() {
2790                return (filter == null) ? null : filter.cdata;
2791            }
2792            public AggExclude[] getAggExcludes() {
2793                return aggExcludes;
2794            }
2795            public AggTable[] getAggTables() {
2796                return aggTables;
2797            }
2798            public java.util.Map<String,String> getHintMap() {
2799                if (hintMap == null) {
2800                    hintMap = buildHintMap(this.tableHints);
2801                }
2802                return hintMap;
2803            }
2804                // END pass-through code block ---
2805        }
2806
2807        /**
2808         * Dialect-specific table optimization hints.
2809         */
2810        public static class Hint extends org.eigenbase.xom.ElementDef
2811        {
2812                public Hint()
2813                {
2814                }
2815
2816                public Hint(org.eigenbase.xom.DOMWrapper _def)
2817                        throws org.eigenbase.xom.XOMException
2818                {
2819                        try {
2820                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
2821                                type = (String)_parser.getAttribute("type", "String", null, null, true);
2822                                cdata = _parser.getText();
2823                        } catch(org.eigenbase.xom.XOMException _ex) {
2824                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
2825                        }
2826                }
2827
2828                public String type;  // required attribute
2829
2830                public String cdata;  // All text goes here
2831                public String getName()
2832                {
2833                        return "Hint";
2834                }
2835
2836                public void display(java.io.PrintWriter _out, int _indent)
2837                {
2838                        _out.println(getName());
2839                        displayAttribute(_out, "type", type, _indent+1);
2840                        displayString(_out, "cdata", cdata, _indent+1);
2841                }
2842                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
2843                {
2844                        _out.beginTag("Hint", new org.eigenbase.xom.XMLAttrVector()
2845                                .add("type", type)
2846                                );
2847                        _out.cdata(cdata);
2848                        _out.endTag("Hint");
2849                }
2850                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
2851                {
2852                        Hint _cother = (Hint)_other;
2853                        boolean _diff = displayAttributeDiff("type", type, _cother.type, _out, _indent+1);
2854                        _diff = _diff && displayStringDiff("cdata", cdata, _cother.cdata, _out, _indent+1);
2855                        return _diff;
2856                }
2857        }
2858
2859        public static class InlineTable extends Relation
2860        {
2861                public InlineTable()
2862                {
2863                }
2864
2865                public InlineTable(org.eigenbase.xom.DOMWrapper _def)
2866                        throws org.eigenbase.xom.XOMException
2867                {
2868                        try {
2869                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
2870                                alias = (String)_parser.getAttribute("alias", "String", null, null, false);
2871                                columnDefs = (ColumnDefs)_parser.getElement(ColumnDefs.class, true);
2872                                rows = (Rows)_parser.getElement(Rows.class, true);
2873                        } catch(org.eigenbase.xom.XOMException _ex) {
2874                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
2875                        }
2876                }
2877
2878                public String alias;  // optional attribute
2879
2880                public ColumnDefs columnDefs;  //required element
2881                public Rows rows;  //required element
2882
2883                public String getName()
2884                {
2885                        return "InlineTable";
2886                }
2887
2888                public void display(java.io.PrintWriter _out, int _indent)
2889                {
2890                        _out.println(getName());
2891                        displayAttribute(_out, "alias", alias, _indent+1);
2892                        displayElement(_out, "columnDefs", (org.eigenbase.xom.ElementDef) columnDefs, _indent+1);
2893                        displayElement(_out, "rows", (org.eigenbase.xom.ElementDef) rows, _indent+1);
2894                }
2895                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
2896                {
2897                        _out.beginTag("InlineTable", new org.eigenbase.xom.XMLAttrVector()
2898                                .add("alias", alias)
2899                                );
2900                        displayXMLElement(_out, (org.eigenbase.xom.ElementDef) columnDefs);
2901                        displayXMLElement(_out, (org.eigenbase.xom.ElementDef) rows);
2902                        _out.endTag("InlineTable");
2903                }
2904                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
2905                {
2906                        InlineTable _cother = (InlineTable)_other;
2907                        boolean _diff = displayAttributeDiff("alias", alias, _cother.alias, _out, _indent+1);
2908                        _diff = _diff && displayElementDiff("columnDefs", columnDefs, _cother.columnDefs, _out, _indent+1);
2909                        _diff = _diff && displayElementDiff("rows", rows, _cother.rows, _out, _indent+1);
2910                        return _diff;
2911                }
2912                // BEGIN pass-through code block ---
2913/** Convenience constructor. */
2914            public InlineTable(InlineTable inlineTable) {
2915                this.alias = inlineTable.alias;
2916                this.columnDefs = new ColumnDefs();
2917                this.columnDefs.array = inlineTable.columnDefs.array.clone();
2918                this.rows = new Rows();
2919                this.rows.array = inlineTable.rows.array.clone();
2920            }
2921            public String getAlias() {
2922                return alias;
2923            }
2924            public String toString() {
2925                return "<inline data>";
2926            }
2927            public InlineTable find(String seekAlias) {
2928                return seekAlias.equals(this.alias) ? this : null;
2929            }
2930            public boolean equals(Object o) {
2931                if (o instanceof InlineTable) {
2932                    InlineTable that = (InlineTable) o;
2933                    return this.alias.equals(that.alias);
2934                } else {
2935                    return false;
2936                }
2937            }
2938            public int hashCode() {
2939                return toString().hashCode();
2940            }
2941                // END pass-through code block ---
2942        }
2943
2944        /**
2945         * Holder for an array of ColumnDef elements
2946         */
2947        public static class ColumnDefs extends org.eigenbase.xom.ElementDef
2948        {
2949                public ColumnDefs()
2950                {
2951                }
2952
2953                public ColumnDefs(org.eigenbase.xom.DOMWrapper _def)
2954                        throws org.eigenbase.xom.XOMException
2955                {
2956                        try {
2957                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
2958                                org.eigenbase.xom.NodeDef[] _tempArray;
2959                                _tempArray = _parser.getArray(ColumnDef.class, 0, 0);
2960                                array = new ColumnDef[_tempArray.length];
2961                                for (int _i = 0; _i < array.length; _i++)
2962                                        array[_i] = (ColumnDef)_tempArray[_i];
2963                        } catch(org.eigenbase.xom.XOMException _ex) {
2964                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
2965                        }
2966                }
2967
2968
2969                public ColumnDef[] array;  //optional array
2970
2971                public String getName()
2972                {
2973                        return "ColumnDefs";
2974                }
2975
2976                public void display(java.io.PrintWriter _out, int _indent)
2977                {
2978                        _out.println(getName());
2979                        displayElementArray(_out, "array", array, _indent+1);
2980                }
2981                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
2982                {
2983                        _out.beginTag("ColumnDefs", new org.eigenbase.xom.XMLAttrVector()
2984                                );
2985                        displayXMLElementArray(_out, array);
2986                        _out.endTag("ColumnDefs");
2987                }
2988                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
2989                {
2990                        ColumnDefs _cother = (ColumnDefs)_other;
2991                        boolean _diff = displayElementArrayDiff("array", array, _cother.array, _out, _indent+1);
2992                        return _diff;
2993                }
2994        }
2995
2996        /**
2997         * Column definition for an inline table.
2998         */
2999        public static class ColumnDef extends org.eigenbase.xom.ElementDef
3000        {
3001                public ColumnDef()
3002                {
3003                }
3004
3005                public ColumnDef(org.eigenbase.xom.DOMWrapper _def)
3006                        throws org.eigenbase.xom.XOMException
3007                {
3008                        try {
3009                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
3010                                name = (String)_parser.getAttribute("name", "String", null, null, true);
3011                                type = (String)_parser.getAttribute("type", "String", null, _type_values, true);
3012                        } catch(org.eigenbase.xom.XOMException _ex) {
3013                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
3014                        }
3015                }
3016
3017                public String name;  // required attribute
3018                /** Allowable values for {@link #type}. */
3019                public static final String[] _type_values = {"String", "Numeric", "Integer", "Boolean", "Date", "Time", "Timestamp"};
3020                public String type;  // required attribute
3021
3022
3023                public String getName()
3024                {
3025                        return "ColumnDef";
3026                }
3027
3028                public void display(java.io.PrintWriter _out, int _indent)
3029                {
3030                        _out.println(getName());
3031                        displayAttribute(_out, "name", name, _indent+1);
3032                        displayAttribute(_out, "type", type, _indent+1);
3033                }
3034                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
3035                {
3036                        _out.beginTag("ColumnDef", new org.eigenbase.xom.XMLAttrVector()
3037                                .add("name", name)
3038                                .add("type", type)
3039                                );
3040                        _out.endTag("ColumnDef");
3041                }
3042                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
3043                {
3044                        ColumnDef _cother = (ColumnDef)_other;
3045                        boolean _diff = displayAttributeDiff("name", name, _cother.name, _out, _indent+1);
3046                        _diff = _diff && displayAttributeDiff("type", type, _cother.type, _out, _indent+1);
3047                        return _diff;
3048                }
3049        }
3050
3051        /**
3052         * Holder for an array of Row elements
3053         */
3054        public static class Rows extends org.eigenbase.xom.ElementDef
3055        {
3056                public Rows()
3057                {
3058                }
3059
3060                public Rows(org.eigenbase.xom.DOMWrapper _def)
3061                        throws org.eigenbase.xom.XOMException
3062                {
3063                        try {
3064                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
3065                                org.eigenbase.xom.NodeDef[] _tempArray;
3066                                _tempArray = _parser.getArray(Row.class, 0, 0);
3067                                array = new Row[_tempArray.length];
3068                                for (int _i = 0; _i < array.length; _i++)
3069                                        array[_i] = (Row)_tempArray[_i];
3070                        } catch(org.eigenbase.xom.XOMException _ex) {
3071                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
3072                        }
3073                }
3074
3075
3076                public Row[] array;  //optional array
3077
3078                public String getName()
3079                {
3080                        return "Rows";
3081                }
3082
3083                public void display(java.io.PrintWriter _out, int _indent)
3084                {
3085                        _out.println(getName());
3086                        displayElementArray(_out, "array", array, _indent+1);
3087                }
3088                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
3089                {
3090                        _out.beginTag("Rows", new org.eigenbase.xom.XMLAttrVector()
3091                                );
3092                        displayXMLElementArray(_out, array);
3093                        _out.endTag("Rows");
3094                }
3095                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
3096                {
3097                        Rows _cother = (Rows)_other;
3098                        boolean _diff = displayElementArrayDiff("array", array, _cother.array, _out, _indent+1);
3099                        return _diff;
3100                }
3101        }
3102
3103        /**
3104         * Row definition for an inline table.
3105         * Must have one Column for each ColumnDef in the InlineTable.
3106         */
3107        public static class Row extends org.eigenbase.xom.ElementDef
3108        {
3109                public Row()
3110                {
3111                }
3112
3113                public Row(org.eigenbase.xom.DOMWrapper _def)
3114                        throws org.eigenbase.xom.XOMException
3115                {
3116                        try {
3117                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
3118                                org.eigenbase.xom.NodeDef[] _tempArray;
3119                                _tempArray = _parser.getArray(Value.class, 0, 0);
3120                                values = new Value[_tempArray.length];
3121                                for (int _i = 0; _i < values.length; _i++)
3122                                        values[_i] = (Value)_tempArray[_i];
3123                        } catch(org.eigenbase.xom.XOMException _ex) {
3124                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
3125                        }
3126                }
3127
3128
3129                public Value[] values;  //optional array
3130
3131                public String getName()
3132                {
3133                        return "Row";
3134                }
3135
3136                public void display(java.io.PrintWriter _out, int _indent)
3137                {
3138                        _out.println(getName());
3139                        displayElementArray(_out, "values", values, _indent+1);
3140                }
3141                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
3142                {
3143                        _out.beginTag("Row", new org.eigenbase.xom.XMLAttrVector()
3144                                );
3145                        displayXMLElementArray(_out, values);
3146                        _out.endTag("Row");
3147                }
3148                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
3149                {
3150                        Row _cother = (Row)_other;
3151                        boolean _diff = displayElementArrayDiff("values", values, _cother.values, _out, _indent+1);
3152                        return _diff;
3153                }
3154        }
3155
3156        /**
3157         * Column value for an inline table.
3158         * The CDATA holds the value of the column.
3159         */
3160        public static class Value extends org.eigenbase.xom.ElementDef
3161        {
3162                public Value()
3163                {
3164                }
3165
3166                public Value(org.eigenbase.xom.DOMWrapper _def)
3167                        throws org.eigenbase.xom.XOMException
3168                {
3169                        try {
3170                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
3171                                column = (String)_parser.getAttribute("column", "String", null, null, true);
3172                                cdata = _parser.getText();
3173                        } catch(org.eigenbase.xom.XOMException _ex) {
3174                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
3175                        }
3176                }
3177
3178                public String column;  // required attribute
3179
3180                public String cdata;  // All text goes here
3181                public String getName()
3182                {
3183                        return "Value";
3184                }
3185
3186                public void display(java.io.PrintWriter _out, int _indent)
3187                {
3188                        _out.println(getName());
3189                        displayAttribute(_out, "column", column, _indent+1);
3190                        displayString(_out, "cdata", cdata, _indent+1);
3191                }
3192                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
3193                {
3194                        _out.beginTag("Value", new org.eigenbase.xom.XMLAttrVector()
3195                                .add("column", column)
3196                                );
3197                        _out.cdata(cdata);
3198                        _out.endTag("Value");
3199                }
3200                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
3201                {
3202                        Value _cother = (Value)_other;
3203                        boolean _diff = displayAttributeDiff("column", column, _cother.column, _out, _indent+1);
3204                        _diff = _diff && displayStringDiff("cdata", cdata, _cother.cdata, _out, _indent+1);
3205                        return _diff;
3206                }
3207        }
3208
3209        /**
3210         * A definition of an aggregate table for a base fact table.
3211         * This aggregate table must be in the same schema as the
3212         * base fact table.
3213         */
3214        public static abstract class AggTable extends org.eigenbase.xom.ElementDef
3215        {
3216                public AggTable()
3217                {
3218                }
3219
3220                public AggTable(org.eigenbase.xom.DOMWrapper _def)
3221                        throws org.eigenbase.xom.XOMException
3222                {
3223                        try {
3224                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
3225                                org.eigenbase.xom.NodeDef[] _tempArray;
3226                                ignorecase = (Boolean)_parser.getAttribute("ignorecase", "Boolean", "true", null, false);
3227                                factcount = (AggFactCount)_parser.getElement(AggFactCount.class, true);
3228                                _tempArray = _parser.getArray(AggIgnoreColumn.class, 0, 0);
3229                                ignoreColumns = new AggIgnoreColumn[_tempArray.length];
3230                                for (int _i = 0; _i < ignoreColumns.length; _i++)
3231                                        ignoreColumns[_i] = (AggIgnoreColumn)_tempArray[_i];
3232                                _tempArray = _parser.getArray(AggForeignKey.class, 0, 0);
3233                                foreignKeys = new AggForeignKey[_tempArray.length];
3234                                for (int _i = 0; _i < foreignKeys.length; _i++)
3235                                        foreignKeys[_i] = (AggForeignKey)_tempArray[_i];
3236                                _tempArray = _parser.getArray(AggMeasure.class, 0, 0);
3237                                measures = new AggMeasure[_tempArray.length];
3238                                for (int _i = 0; _i < measures.length; _i++)
3239                                        measures[_i] = (AggMeasure)_tempArray[_i];
3240                                _tempArray = _parser.getArray(AggLevel.class, 0, 0);
3241                                levels = new AggLevel[_tempArray.length];
3242                                for (int _i = 0; _i < levels.length; _i++)
3243                                        levels[_i] = (AggLevel)_tempArray[_i];
3244                        } catch(org.eigenbase.xom.XOMException _ex) {
3245                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
3246                        }
3247                }
3248
3249                public Boolean ignorecase;  // attribute default: true
3250
3251                /**
3252                 * What does the fact_count column look like.
3253                 */
3254                public AggFactCount factcount;  //required element
3255                public AggIgnoreColumn[] ignoreColumns;  //optional array
3256                public AggForeignKey[] foreignKeys;  //optional array
3257                public AggMeasure[] measures;  //optional array
3258                public AggLevel[] levels;  //optional array
3259
3260                public String getName()
3261                {
3262                        return "AggTable";
3263                }
3264
3265                public void display(java.io.PrintWriter _out, int _indent)
3266                {
3267                        _out.println(getName());
3268                        displayAttribute(_out, "ignorecase", ignorecase, _indent+1);
3269                        displayElement(_out, "factcount", (org.eigenbase.xom.ElementDef) factcount, _indent+1);
3270                        displayElementArray(_out, "ignoreColumns", ignoreColumns, _indent+1);
3271                        displayElementArray(_out, "foreignKeys", foreignKeys, _indent+1);
3272                        displayElementArray(_out, "measures", measures, _indent+1);
3273                        displayElementArray(_out, "levels", levels, _indent+1);
3274                }
3275                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
3276                {
3277                        _out.beginTag("AggTable", new org.eigenbase.xom.XMLAttrVector()
3278                                .add("ignorecase", ignorecase)
3279                                );
3280                        displayXMLElement(_out, (org.eigenbase.xom.ElementDef) factcount);
3281                        displayXMLElementArray(_out, ignoreColumns);
3282                        displayXMLElementArray(_out, foreignKeys);
3283                        displayXMLElementArray(_out, measures);
3284                        displayXMLElementArray(_out, levels);
3285                        _out.endTag("AggTable");
3286                }
3287                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
3288                {
3289                        AggTable _cother = (AggTable)_other;
3290                        boolean _diff = displayAttributeDiff("ignorecase", ignorecase, _cother.ignorecase, _out, _indent+1);
3291                        _diff = _diff && displayElementDiff("factcount", factcount, _cother.factcount, _out, _indent+1);
3292                        _diff = _diff && displayElementArrayDiff("ignoreColumns", ignoreColumns, _cother.ignoreColumns, _out, _indent+1);
3293                        _diff = _diff && displayElementArrayDiff("foreignKeys", foreignKeys, _cother.foreignKeys, _out, _indent+1);
3294                        _diff = _diff && displayElementArrayDiff("measures", measures, _cother.measures, _out, _indent+1);
3295                        _diff = _diff && displayElementArrayDiff("levels", levels, _cother.levels, _out, _indent+1);
3296                        return _diff;
3297                }
3298                // BEGIN pass-through code block ---
3299public boolean isIgnoreCase() {
3300                return ignorecase.booleanValue();
3301            }
3302            public AggFactCount getAggFactCount() {
3303                return factcount;
3304            }
3305            public AggIgnoreColumn[] getAggIgnoreColumns() {
3306                return ignoreColumns;
3307            }
3308            public AggForeignKey[] getAggForeignKeys() {
3309                return foreignKeys;
3310            }
3311            public AggMeasure[] getAggMeasures() {
3312                return measures;
3313            }
3314            public AggLevel[] getAggLevels() {
3315                return levels;
3316            }
3317                // END pass-through code block ---
3318        }
3319
3320        public static class AggName extends AggTable
3321        {
3322                public AggName()
3323                {
3324                }
3325
3326                public AggName(org.eigenbase.xom.DOMWrapper _def)
3327                        throws org.eigenbase.xom.XOMException
3328                {
3329                        try {
3330                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
3331                                org.eigenbase.xom.NodeDef[] _tempArray;
3332                                name = (String)_parser.getAttribute("name", "String", null, null, true);
3333                                approxRowCount = (String)_parser.getAttribute("approxRowCount", "String", null, null, false);
3334                                ignorecase = (Boolean)_parser.getAttribute("ignorecase", "Boolean", "true", null, false);
3335                                factcount = (AggFactCount)_parser.getElement(AggFactCount.class, true);
3336                                _tempArray = _parser.getArray(AggIgnoreColumn.class, 0, 0);
3337                                ignoreColumns = new AggIgnoreColumn[_tempArray.length];
3338                                for (int _i = 0; _i < ignoreColumns.length; _i++)
3339                                        ignoreColumns[_i] = (AggIgnoreColumn)_tempArray[_i];
3340                                _tempArray = _parser.getArray(AggForeignKey.class, 0, 0);
3341                                foreignKeys = new AggForeignKey[_tempArray.length];
3342                                for (int _i = 0; _i < foreignKeys.length; _i++)
3343                                        foreignKeys[_i] = (AggForeignKey)_tempArray[_i];
3344                                _tempArray = _parser.getArray(AggMeasure.class, 0, 0);
3345                                measures = new AggMeasure[_tempArray.length];
3346                                for (int _i = 0; _i < measures.length; _i++)
3347                                        measures[_i] = (AggMeasure)_tempArray[_i];
3348                                _tempArray = _parser.getArray(AggLevel.class, 0, 0);
3349                                levels = new AggLevel[_tempArray.length];
3350                                for (int _i = 0; _i < levels.length; _i++)
3351                                        levels[_i] = (AggLevel)_tempArray[_i];
3352                        } catch(org.eigenbase.xom.XOMException _ex) {
3353                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
3354                        }
3355                }
3356
3357                public String name;  // required attribute
3358                public String approxRowCount;  // optional attribute
3359
3360
3361                public String getName()
3362                {
3363                        return "AggName";
3364                }
3365
3366                public void display(java.io.PrintWriter _out, int _indent)
3367                {
3368                        _out.println(getName());
3369                        displayAttribute(_out, "name", name, _indent+1);
3370                        displayAttribute(_out, "approxRowCount", approxRowCount, _indent+1);
3371                        displayAttribute(_out, "ignorecase", ignorecase, _indent+1);
3372                        displayElement(_out, "factcount", (org.eigenbase.xom.ElementDef) factcount, _indent+1);
3373                        displayElementArray(_out, "ignoreColumns", ignoreColumns, _indent+1);
3374                        displayElementArray(_out, "foreignKeys", foreignKeys, _indent+1);
3375                        displayElementArray(_out, "measures", measures, _indent+1);
3376                        displayElementArray(_out, "levels", levels, _indent+1);
3377                }
3378                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
3379                {
3380                        _out.beginTag("AggName", new org.eigenbase.xom.XMLAttrVector()
3381                                .add("name", name)
3382                                .add("approxRowCount", approxRowCount)
3383                                .add("ignorecase", ignorecase)
3384                                );
3385                        displayXMLElement(_out, (org.eigenbase.xom.ElementDef) factcount);
3386                        displayXMLElementArray(_out, ignoreColumns);
3387                        displayXMLElementArray(_out, foreignKeys);
3388                        displayXMLElementArray(_out, measures);
3389                        displayXMLElementArray(_out, levels);
3390                        _out.endTag("AggName");
3391                }
3392                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
3393                {
3394                        AggName _cother = (AggName)_other;
3395                        boolean _diff = displayAttributeDiff("name", name, _cother.name, _out, _indent+1);
3396                        _diff = _diff && displayAttributeDiff("approxRowCount", approxRowCount, _cother.approxRowCount, _out, _indent+1);
3397                        _diff = _diff && displayElementDiff("factcount", factcount, _cother.factcount, _out, _indent+1);
3398                        _diff = _diff && displayElementArrayDiff("ignoreColumns", ignoreColumns, _cother.ignoreColumns, _out, _indent+1);
3399                        _diff = _diff && displayElementArrayDiff("foreignKeys", foreignKeys, _cother.foreignKeys, _out, _indent+1);
3400                        _diff = _diff && displayElementArrayDiff("measures", measures, _cother.measures, _out, _indent+1);
3401                        _diff = _diff && displayElementArrayDiff("levels", levels, _cother.levels, _out, _indent+1);
3402                        return _diff;
3403                }
3404                // BEGIN pass-through code block ---
3405public String getNameAttribute() {
3406                return name;
3407            }
3408            public String getApproxRowCountAttribute() {
3409                return approxRowCount;
3410            }
3411                // END pass-through code block ---
3412        }
3413
3414        public static class AggPattern extends AggTable
3415        {
3416                public AggPattern()
3417                {
3418                }
3419
3420                public AggPattern(org.eigenbase.xom.DOMWrapper _def)
3421                        throws org.eigenbase.xom.XOMException
3422                {
3423                        try {
3424                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
3425                                org.eigenbase.xom.NodeDef[] _tempArray;
3426                                pattern = (String)_parser.getAttribute("pattern", "String", null, null, true);
3427                                ignorecase = (Boolean)_parser.getAttribute("ignorecase", "Boolean", "true", null, false);
3428                                factcount = (AggFactCount)_parser.getElement(AggFactCount.class, true);
3429                                _tempArray = _parser.getArray(AggIgnoreColumn.class, 0, 0);
3430                                ignoreColumns = new AggIgnoreColumn[_tempArray.length];
3431                                for (int _i = 0; _i < ignoreColumns.length; _i++)
3432                                        ignoreColumns[_i] = (AggIgnoreColumn)_tempArray[_i];
3433                                _tempArray = _parser.getArray(AggForeignKey.class, 0, 0);
3434                                foreignKeys = new AggForeignKey[_tempArray.length];
3435                                for (int _i = 0; _i < foreignKeys.length; _i++)
3436                                        foreignKeys[_i] = (AggForeignKey)_tempArray[_i];
3437                                _tempArray = _parser.getArray(AggMeasure.class, 0, 0);
3438                                measures = new AggMeasure[_tempArray.length];
3439                                for (int _i = 0; _i < measures.length; _i++)
3440                                        measures[_i] = (AggMeasure)_tempArray[_i];
3441                                _tempArray = _parser.getArray(AggLevel.class, 0, 0);
3442                                levels = new AggLevel[_tempArray.length];
3443                                for (int _i = 0; _i < levels.length; _i++)
3444                                        levels[_i] = (AggLevel)_tempArray[_i];
3445                                _tempArray = _parser.getArray(AggExclude.class, 0, 0);
3446                                excludes = new AggExclude[_tempArray.length];
3447                                for (int _i = 0; _i < excludes.length; _i++)
3448                                        excludes[_i] = (AggExclude)_tempArray[_i];
3449                        } catch(org.eigenbase.xom.XOMException _ex) {
3450                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
3451                        }
3452                }
3453
3454                public String pattern;  // required attribute
3455
3456                public AggExclude[] excludes;  //optional array
3457
3458                public String getName()
3459                {
3460                        return "AggPattern";
3461                }
3462
3463                public void display(java.io.PrintWriter _out, int _indent)
3464                {
3465                        _out.println(getName());
3466                        displayAttribute(_out, "pattern", pattern, _indent+1);
3467                        displayAttribute(_out, "ignorecase", ignorecase, _indent+1);
3468                        displayElement(_out, "factcount", (org.eigenbase.xom.ElementDef) factcount, _indent+1);
3469                        displayElementArray(_out, "ignoreColumns", ignoreColumns, _indent+1);
3470                        displayElementArray(_out, "foreignKeys", foreignKeys, _indent+1);
3471                        displayElementArray(_out, "measures", measures, _indent+1);
3472                        displayElementArray(_out, "levels", levels, _indent+1);
3473                        displayElementArray(_out, "excludes", excludes, _indent+1);
3474                }
3475                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
3476                {
3477                        _out.beginTag("AggPattern", new org.eigenbase.xom.XMLAttrVector()
3478                                .add("pattern", pattern)
3479                                .add("ignorecase", ignorecase)
3480                                );
3481                        displayXMLElement(_out, (org.eigenbase.xom.ElementDef) factcount);
3482                        displayXMLElementArray(_out, ignoreColumns);
3483                        displayXMLElementArray(_out, foreignKeys);
3484                        displayXMLElementArray(_out, measures);
3485                        displayXMLElementArray(_out, levels);
3486                        displayXMLElementArray(_out, excludes);
3487                        _out.endTag("AggPattern");
3488                }
3489                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
3490                {
3491                        AggPattern _cother = (AggPattern)_other;
3492                        boolean _diff = displayAttributeDiff("pattern", pattern, _cother.pattern, _out, _indent+1);
3493                        _diff = _diff && displayElementDiff("factcount", factcount, _cother.factcount, _out, _indent+1);
3494                        _diff = _diff && displayElementArrayDiff("ignoreColumns", ignoreColumns, _cother.ignoreColumns, _out, _indent+1);
3495                        _diff = _diff && displayElementArrayDiff("foreignKeys", foreignKeys, _cother.foreignKeys, _out, _indent+1);
3496                        _diff = _diff && displayElementArrayDiff("measures", measures, _cother.measures, _out, _indent+1);
3497                        _diff = _diff && displayElementArrayDiff("levels", levels, _cother.levels, _out, _indent+1);
3498                        _diff = _diff && displayElementArrayDiff("excludes", excludes, _cother.excludes, _out, _indent+1);
3499                        return _diff;
3500                }
3501                // BEGIN pass-through code block ---
3502public String getPattern() {
3503                return pattern;
3504            }
3505            public AggExclude[] getAggExcludes() {
3506                return excludes;
3507            }
3508                // END pass-through code block ---
3509        }
3510
3511        public static class AggExclude extends org.eigenbase.xom.ElementDef
3512        {
3513                public AggExclude()
3514                {
3515                }
3516
3517                public AggExclude(org.eigenbase.xom.DOMWrapper _def)
3518                        throws org.eigenbase.xom.XOMException
3519                {
3520                        try {
3521                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
3522                                pattern = (String)_parser.getAttribute("pattern", "String", null, null, false);
3523                                name = (String)_parser.getAttribute("name", "String", null, null, false);
3524                                ignorecase = (Boolean)_parser.getAttribute("ignorecase", "Boolean", "true", null, false);
3525                        } catch(org.eigenbase.xom.XOMException _ex) {
3526                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
3527                        }
3528                }
3529
3530                public String pattern;  // optional attribute
3531                public String name;  // optional attribute
3532                public Boolean ignorecase;  // attribute default: true
3533
3534
3535                public String getName()
3536                {
3537                        return "AggExclude";
3538                }
3539
3540                public void display(java.io.PrintWriter _out, int _indent)
3541                {
3542                        _out.println(getName());
3543                        displayAttribute(_out, "pattern", pattern, _indent+1);
3544                        displayAttribute(_out, "name", name, _indent+1);
3545                        displayAttribute(_out, "ignorecase", ignorecase, _indent+1);
3546                }
3547                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
3548                {
3549                        _out.beginTag("AggExclude", new org.eigenbase.xom.XMLAttrVector()
3550                                .add("pattern", pattern)
3551                                .add("name", name)
3552                                .add("ignorecase", ignorecase)
3553                                );
3554                        _out.endTag("AggExclude");
3555                }
3556                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
3557                {
3558                        AggExclude _cother = (AggExclude)_other;
3559                        boolean _diff = displayAttributeDiff("pattern", pattern, _cother.pattern, _out, _indent+1);
3560                        _diff = _diff && displayAttributeDiff("name", name, _cother.name, _out, _indent+1);
3561                        _diff = _diff && displayAttributeDiff("ignorecase", ignorecase, _cother.ignorecase, _out, _indent+1);
3562                        return _diff;
3563                }
3564                // BEGIN pass-through code block ---
3565public String getNameAttribute() {
3566                return name;
3567            }
3568            public String getPattern() {
3569                return pattern;
3570            }
3571            public boolean isIgnoreCase() {
3572                return ignorecase.booleanValue();
3573            }
3574                // END pass-through code block ---
3575        }
3576
3577        public static abstract class AggColumnName extends org.eigenbase.xom.ElementDef
3578        {
3579                public AggColumnName()
3580                {
3581                }
3582
3583                public AggColumnName(org.eigenbase.xom.DOMWrapper _def)
3584                        throws org.eigenbase.xom.XOMException
3585                {
3586                        try {
3587                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
3588                                column = (String)_parser.getAttribute("column", "String", null, null, true);
3589                        } catch(org.eigenbase.xom.XOMException _ex) {
3590                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
3591                        }
3592                }
3593
3594                public String column;  // required attribute
3595
3596
3597                public String getName()
3598                {
3599                        return "AggColumnName";
3600                }
3601
3602                public void display(java.io.PrintWriter _out, int _indent)
3603                {
3604                        _out.println(getName());
3605                        displayAttribute(_out, "column", column, _indent+1);
3606                }
3607                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
3608                {
3609                        _out.beginTag("AggColumnName", new org.eigenbase.xom.XMLAttrVector()
3610                                .add("column", column)
3611                                );
3612                        _out.endTag("AggColumnName");
3613                }
3614                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
3615                {
3616                        AggColumnName _cother = (AggColumnName)_other;
3617                        boolean _diff = displayAttributeDiff("column", column, _cother.column, _out, _indent+1);
3618                        return _diff;
3619                }
3620                // BEGIN pass-through code block ---
3621public String getColumnName() {
3622                return column;
3623            }
3624                // END pass-through code block ---
3625        }
3626
3627        public static class AggFactCount extends AggColumnName
3628        {
3629                public AggFactCount()
3630                {
3631                }
3632
3633                public AggFactCount(org.eigenbase.xom.DOMWrapper _def)
3634                        throws org.eigenbase.xom.XOMException
3635                {
3636                        try {
3637                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
3638                                column = (String)_parser.getAttribute("column", "String", null, null, true);
3639                        } catch(org.eigenbase.xom.XOMException _ex) {
3640                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
3641                        }
3642                }
3643
3644
3645
3646                public String getName()
3647                {
3648                        return "AggFactCount";
3649                }
3650
3651                public void display(java.io.PrintWriter _out, int _indent)
3652                {
3653                        _out.println(getName());
3654                        displayAttribute(_out, "column", column, _indent+1);
3655                }
3656                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
3657                {
3658                        _out.beginTag("AggFactCount", new org.eigenbase.xom.XMLAttrVector()
3659                                .add("column", column)
3660                                );
3661                        _out.endTag("AggFactCount");
3662                }
3663                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
3664                {
3665                        AggFactCount _cother = (AggFactCount)_other;
3666                        return true;
3667                }
3668        }
3669
3670        public static class AggIgnoreColumn extends AggColumnName
3671        {
3672                public AggIgnoreColumn()
3673                {
3674                }
3675
3676                public AggIgnoreColumn(org.eigenbase.xom.DOMWrapper _def)
3677                        throws org.eigenbase.xom.XOMException
3678                {
3679                        try {
3680                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
3681                                column = (String)_parser.getAttribute("column", "String", null, null, true);
3682                        } catch(org.eigenbase.xom.XOMException _ex) {
3683                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
3684                        }
3685                }
3686
3687
3688
3689                public String getName()
3690                {
3691                        return "AggIgnoreColumn";
3692                }
3693
3694                public void display(java.io.PrintWriter _out, int _indent)
3695                {
3696                        _out.println(getName());
3697                        displayAttribute(_out, "column", column, _indent+1);
3698                }
3699                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
3700                {
3701                        _out.beginTag("AggIgnoreColumn", new org.eigenbase.xom.XMLAttrVector()
3702                                .add("column", column)
3703                                );
3704                        _out.endTag("AggIgnoreColumn");
3705                }
3706                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
3707                {
3708                        AggIgnoreColumn _cother = (AggIgnoreColumn)_other;
3709                        return true;
3710                }
3711        }
3712
3713        /**
3714         * The name of the column mapping from base fact table foreign key
3715         * to aggregate table foreign key.
3716         */
3717        public static class AggForeignKey extends org.eigenbase.xom.ElementDef
3718        {
3719                public AggForeignKey()
3720                {
3721                }
3722
3723                public AggForeignKey(org.eigenbase.xom.DOMWrapper _def)
3724                        throws org.eigenbase.xom.XOMException
3725                {
3726                        try {
3727                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
3728                                factColumn = (String)_parser.getAttribute("factColumn", "String", null, null, true);
3729                                aggColumn = (String)_parser.getAttribute("aggColumn", "String", null, null, true);
3730                        } catch(org.eigenbase.xom.XOMException _ex) {
3731                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
3732                        }
3733                }
3734
3735                public String factColumn;  // required attribute
3736                public String aggColumn;  // required attribute
3737
3738
3739                public String getName()
3740                {
3741                        return "AggForeignKey";
3742                }
3743
3744                public void display(java.io.PrintWriter _out, int _indent)
3745                {
3746                        _out.println(getName());
3747                        displayAttribute(_out, "factColumn", factColumn, _indent+1);
3748                        displayAttribute(_out, "aggColumn", aggColumn, _indent+1);
3749                }
3750                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
3751                {
3752                        _out.beginTag("AggForeignKey", new org.eigenbase.xom.XMLAttrVector()
3753                                .add("factColumn", factColumn)
3754                                .add("aggColumn", aggColumn)
3755                                );
3756                        _out.endTag("AggForeignKey");
3757                }
3758                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
3759                {
3760                        AggForeignKey _cother = (AggForeignKey)_other;
3761                        boolean _diff = displayAttributeDiff("factColumn", factColumn, _cother.factColumn, _out, _indent+1);
3762                        _diff = _diff && displayAttributeDiff("aggColumn", aggColumn, _cother.aggColumn, _out, _indent+1);
3763                        return _diff;
3764                }
3765                // BEGIN pass-through code block ---
3766public String getFactFKColumnName() {
3767                return factColumn;
3768            }
3769            public String getAggregateFKColumnName() {
3770                return aggColumn;
3771            }
3772                // END pass-through code block ---
3773        }
3774
3775        public static class AggLevel extends org.eigenbase.xom.ElementDef
3776        {
3777                public AggLevel()
3778                {
3779                }
3780
3781                public AggLevel(org.eigenbase.xom.DOMWrapper _def)
3782                        throws org.eigenbase.xom.XOMException
3783                {
3784                        try {
3785                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
3786                                column = (String)_parser.getAttribute("column", "String", null, null, true);
3787                                name = (String)_parser.getAttribute("name", "String", null, null, true);
3788                                collapsed = (Boolean)_parser.getAttribute("collapsed", "Boolean", "true", null, false);
3789                        } catch(org.eigenbase.xom.XOMException _ex) {
3790                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
3791                        }
3792                }
3793
3794                public String column;  // required attribute
3795                public String name;  // required attribute
3796                public Boolean collapsed;  // attribute default: true
3797
3798
3799                public String getName()
3800                {
3801                        return "AggLevel";
3802                }
3803
3804                public void display(java.io.PrintWriter _out, int _indent)
3805                {
3806                        _out.println(getName());
3807                        displayAttribute(_out, "column", column, _indent+1);
3808                        displayAttribute(_out, "name", name, _indent+1);
3809                        displayAttribute(_out, "collapsed", collapsed, _indent+1);
3810                }
3811                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
3812                {
3813                        _out.beginTag("AggLevel", new org.eigenbase.xom.XMLAttrVector()
3814                                .add("column", column)
3815                                .add("name", name)
3816                                .add("collapsed", collapsed)
3817                                );
3818                        _out.endTag("AggLevel");
3819                }
3820                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
3821                {
3822                        AggLevel _cother = (AggLevel)_other;
3823                        boolean _diff = displayAttributeDiff("column", column, _cother.column, _out, _indent+1);
3824                        _diff = _diff && displayAttributeDiff("name", name, _cother.name, _out, _indent+1);
3825                        _diff = _diff && displayAttributeDiff("collapsed", collapsed, _cother.collapsed, _out, _indent+1);
3826                        return _diff;
3827                }
3828                // BEGIN pass-through code block ---
3829public String getNameAttribute() {
3830                return name;
3831            }
3832            public String getColumnName() {
3833                return column;
3834            }
3835            public boolean isCollapsed() {
3836                return collapsed;
3837            }
3838                // END pass-through code block ---
3839        }
3840
3841        public static class AggMeasure extends org.eigenbase.xom.ElementDef
3842        {
3843                public AggMeasure()
3844                {
3845                }
3846
3847                public AggMeasure(org.eigenbase.xom.DOMWrapper _def)
3848                        throws org.eigenbase.xom.XOMException
3849                {
3850                        try {
3851                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
3852                                column = (String)_parser.getAttribute("column", "String", null, null, true);
3853                                name = (String)_parser.getAttribute("name", "String", null, null, true);
3854                        } catch(org.eigenbase.xom.XOMException _ex) {
3855                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
3856                        }
3857                }
3858
3859                public String column;  // required attribute
3860                public String name;  // required attribute
3861
3862
3863                public String getName()
3864                {
3865                        return "AggMeasure";
3866                }
3867
3868                public void display(java.io.PrintWriter _out, int _indent)
3869                {
3870                        _out.println(getName());
3871                        displayAttribute(_out, "column", column, _indent+1);
3872                        displayAttribute(_out, "name", name, _indent+1);
3873                }
3874                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
3875                {
3876                        _out.beginTag("AggMeasure", new org.eigenbase.xom.XMLAttrVector()
3877                                .add("column", column)
3878                                .add("name", name)
3879                                );
3880                        _out.endTag("AggMeasure");
3881                }
3882                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
3883                {
3884                        AggMeasure _cother = (AggMeasure)_other;
3885                        boolean _diff = displayAttributeDiff("column", column, _cother.column, _out, _indent+1);
3886                        _diff = _diff && displayAttributeDiff("name", name, _cother.name, _out, _indent+1);
3887                        return _diff;
3888                }
3889                // BEGIN pass-through code block ---
3890public String getNameAttribute() {
3891                return name;
3892            }
3893            public String getColumn() {
3894                return column;
3895            }
3896                // END pass-through code block ---
3897        }
3898
3899        public interface Expression extends org.eigenbase.xom.NodeDef
3900        {
3901                // BEGIN pass-through code block ---
3902public abstract String getExpression(SqlQuery query);
3903            public abstract String getGenericExpression();
3904            public abstract String getTableAlias();
3905                // END pass-through code block ---
3906        }
3907
3908        public static class Column extends org.eigenbase.xom.ElementDef implements Expression
3909        {
3910                public Column()
3911                {
3912                }
3913
3914                public Column(org.eigenbase.xom.DOMWrapper _def)
3915                        throws org.eigenbase.xom.XOMException
3916                {
3917                        try {
3918                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
3919                                table = (String)_parser.getAttribute("table", "String", null, null, false);
3920                                name = (String)_parser.getAttribute("name", "String", null, null, true);
3921                        } catch(org.eigenbase.xom.XOMException _ex) {
3922                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
3923                        }
3924                }
3925
3926                public String table;  // optional attribute
3927                public String name;  // required attribute
3928
3929
3930                public String getName()
3931                {
3932                        return "Column";
3933                }
3934
3935                public void display(java.io.PrintWriter _out, int _indent)
3936                {
3937                        _out.println(getName());
3938                        displayAttribute(_out, "table", table, _indent+1);
3939                        displayAttribute(_out, "name", name, _indent+1);
3940                }
3941                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
3942                {
3943                        _out.beginTag("Column", new org.eigenbase.xom.XMLAttrVector()
3944                                .add("table", table)
3945                                .add("name", name)
3946                                );
3947                        _out.endTag("Column");
3948                }
3949                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
3950                {
3951                        Column _cother = (Column)_other;
3952                        boolean _diff = displayAttributeDiff("table", table, _cother.table, _out, _indent+1);
3953                        _diff = _diff && displayAttributeDiff("name", name, _cother.name, _out, _indent+1);
3954                        return _diff;
3955                }
3956                // BEGIN pass-through code block ---
3957private String genericExpression;
3958
3959            /** Convenience constructor. */
3960            public Column(String table, String name) {
3961                this();
3962                Util.assertTrue(name != null);
3963                this.table = table;
3964                this.name = name;
3965                this.genericExpression = table == null ? name : (table + "." + name);
3966            }
3967
3968            public String getExpression(SqlQuery query) {
3969                return query.getDialect().quoteIdentifier(table, name);
3970            }
3971
3972            public String getGenericExpression() {
3973                return genericExpression;
3974            }
3975
3976            public String getColumnName() {
3977                return name;
3978            }
3979            public String getTableAlias() {
3980                return table;
3981            }
3982            public int hashCode() {
3983                return name.hashCode() ^ (table==null ? 0 : table.hashCode());
3984            }
3985
3986            public boolean equals(Object obj) {
3987                if (!(obj instanceof Column)) {
3988                    return false;
3989                }
3990                Column that = (Column) obj;
3991                return this.name.equals(that.name) &&
3992                        Util.equals(this.table, that.table);
3993            }
3994                // END pass-through code block ---
3995        }
3996
3997        /**
3998         * A collection of SQL expressions, one per dialect.
3999         */
4000        public static abstract class ExpressionView extends org.eigenbase.xom.ElementDef implements Expression
4001        {
4002                public ExpressionView()
4003                {
4004                }
4005
4006                public ExpressionView(org.eigenbase.xom.DOMWrapper _def)
4007                        throws org.eigenbase.xom.XOMException
4008                {
4009                        try {
4010                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
4011                                org.eigenbase.xom.NodeDef[] _tempArray;
4012                                _tempArray = _parser.getArray(SQL.class, 1, 0);
4013                                expressions = new SQL[_tempArray.length];
4014                                for (int _i = 0; _i < expressions.length; _i++)
4015                                        expressions[_i] = (SQL)_tempArray[_i];
4016                        } catch(org.eigenbase.xom.XOMException _ex) {
4017                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
4018                        }
4019                }
4020
4021
4022                public SQL[] expressions;  //min 1
4023
4024                public String getName()
4025                {
4026                        return "ExpressionView";
4027                }
4028
4029                public void display(java.io.PrintWriter _out, int _indent)
4030                {
4031                        _out.println(getName());
4032                        displayElementArray(_out, "expressions", expressions, _indent+1);
4033                }
4034                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
4035                {
4036                        _out.beginTag("ExpressionView", new org.eigenbase.xom.XMLAttrVector()
4037                                );
4038                        displayXMLElementArray(_out, expressions);
4039                        _out.endTag("ExpressionView");
4040                }
4041                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
4042                {
4043                        ExpressionView _cother = (ExpressionView)_other;
4044                        boolean _diff = displayElementArrayDiff("expressions", expressions, _cother.expressions, _out, _indent+1);
4045                        return _diff;
4046                }
4047                // BEGIN pass-through code block ---
4048public String toString() {
4049                return expressions[0].cdata;
4050            }
4051
4052            public String getExpression(SqlQuery query) {
4053                return SQL.toCodeSet(expressions).chooseQuery(query.getDialect());
4054            }
4055
4056            public String getGenericExpression() {
4057                for (int i = 0; i < expressions.length; i++) {
4058                    if (expressions[i].dialect.equals("generic")) {
4059                        return expressions[i].cdata;
4060                    }
4061                }
4062                return expressions[0].cdata;
4063            }
4064
4065            public String getTableAlias() {
4066                return null;
4067            }
4068
4069            public int hashCode() {
4070                int h = 17;
4071                for (int i = 0; i < expressions.length; i++) {
4072                    h = 37 * h + expressions[i].hashCode();
4073                }
4074                return h;
4075            }
4076
4077            public boolean equals(Object obj) {
4078                if (!(obj instanceof ExpressionView)) {
4079                    return false;
4080                }
4081                ExpressionView that = (ExpressionView) obj;
4082                if (this.expressions.length != that.expressions.length) {
4083                    return false;
4084                }
4085                for (int i = 0; i < expressions.length; i++) {
4086                    if (! this.expressions[i].equals(that.expressions[i])) {
4087                        return false;
4088                    }
4089                }
4090                return true;
4091            }
4092                // END pass-through code block ---
4093        }
4094
4095        public static class KeyExpression extends ExpressionView
4096        {
4097                public KeyExpression()
4098                {
4099                }
4100
4101                public KeyExpression(org.eigenbase.xom.DOMWrapper _def)
4102                        throws org.eigenbase.xom.XOMException
4103                {
4104                        try {
4105                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
4106                                org.eigenbase.xom.NodeDef[] _tempArray;
4107                                _tempArray = _parser.getArray(SQL.class, 1, 0);
4108                                expressions = new SQL[_tempArray.length];
4109                                for (int _i = 0; _i < expressions.length; _i++)
4110                                        expressions[_i] = (SQL)_tempArray[_i];
4111                        } catch(org.eigenbase.xom.XOMException _ex) {
4112                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
4113                        }
4114                }
4115
4116
4117
4118                public String getName()
4119                {
4120                        return "KeyExpression";
4121                }
4122
4123                public void display(java.io.PrintWriter _out, int _indent)
4124                {
4125                        _out.println(getName());
4126                        displayElementArray(_out, "expressions", expressions, _indent+1);
4127                }
4128                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
4129                {
4130                        _out.beginTag("KeyExpression", new org.eigenbase.xom.XMLAttrVector()
4131                                );
4132                        displayXMLElementArray(_out, expressions);
4133                        _out.endTag("KeyExpression");
4134                }
4135                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
4136                {
4137                        KeyExpression _cother = (KeyExpression)_other;
4138                        boolean _diff = displayElementArrayDiff("expressions", expressions, _cother.expressions, _out, _indent+1);
4139                        return _diff;
4140                }
4141        }
4142
4143        public static class ParentExpression extends ExpressionView
4144        {
4145                public ParentExpression()
4146                {
4147                }
4148
4149                public ParentExpression(org.eigenbase.xom.DOMWrapper _def)
4150                        throws org.eigenbase.xom.XOMException
4151                {
4152                        try {
4153                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
4154                                org.eigenbase.xom.NodeDef[] _tempArray;
4155                                _tempArray = _parser.getArray(SQL.class, 1, 0);
4156                                expressions = new SQL[_tempArray.length];
4157                                for (int _i = 0; _i < expressions.length; _i++)
4158                                        expressions[_i] = (SQL)_tempArray[_i];
4159                        } catch(org.eigenbase.xom.XOMException _ex) {
4160                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
4161                        }
4162                }
4163
4164
4165
4166                public String getName()
4167                {
4168                        return "ParentExpression";
4169                }
4170
4171                public void display(java.io.PrintWriter _out, int _indent)
4172                {
4173                        _out.println(getName());
4174                        displayElementArray(_out, "expressions", expressions, _indent+1);
4175                }
4176                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
4177                {
4178                        _out.beginTag("ParentExpression", new org.eigenbase.xom.XMLAttrVector()
4179                                );
4180                        displayXMLElementArray(_out, expressions);
4181                        _out.endTag("ParentExpression");
4182                }
4183                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
4184                {
4185                        ParentExpression _cother = (ParentExpression)_other;
4186                        boolean _diff = displayElementArrayDiff("expressions", expressions, _cother.expressions, _out, _indent+1);
4187                        return _diff;
4188                }
4189        }
4190
4191        public static class OrdinalExpression extends ExpressionView
4192        {
4193                public OrdinalExpression()
4194                {
4195                }
4196
4197                public OrdinalExpression(org.eigenbase.xom.DOMWrapper _def)
4198                        throws org.eigenbase.xom.XOMException
4199                {
4200                        try {
4201                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
4202                                org.eigenbase.xom.NodeDef[] _tempArray;
4203                                _tempArray = _parser.getArray(SQL.class, 1, 0);
4204                                expressions = new SQL[_tempArray.length];
4205                                for (int _i = 0; _i < expressions.length; _i++)
4206                                        expressions[_i] = (SQL)_tempArray[_i];
4207                        } catch(org.eigenbase.xom.XOMException _ex) {
4208                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
4209                        }
4210                }
4211
4212
4213
4214                public String getName()
4215                {
4216                        return "OrdinalExpression";
4217                }
4218
4219                public void display(java.io.PrintWriter _out, int _indent)
4220                {
4221                        _out.println(getName());
4222                        displayElementArray(_out, "expressions", expressions, _indent+1);
4223                }
4224                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
4225                {
4226                        _out.beginTag("OrdinalExpression", new org.eigenbase.xom.XMLAttrVector()
4227                                );
4228                        displayXMLElementArray(_out, expressions);
4229                        _out.endTag("OrdinalExpression");
4230                }
4231                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
4232                {
4233                        OrdinalExpression _cother = (OrdinalExpression)_other;
4234                        boolean _diff = displayElementArrayDiff("expressions", expressions, _cother.expressions, _out, _indent+1);
4235                        return _diff;
4236                }
4237        }
4238
4239        public static class NameExpression extends ExpressionView
4240        {
4241                public NameExpression()
4242                {
4243                }
4244
4245                public NameExpression(org.eigenbase.xom.DOMWrapper _def)
4246                        throws org.eigenbase.xom.XOMException
4247                {
4248                        try {
4249                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
4250                                org.eigenbase.xom.NodeDef[] _tempArray;
4251                                _tempArray = _parser.getArray(SQL.class, 1, 0);
4252                                expressions = new SQL[_tempArray.length];
4253                                for (int _i = 0; _i < expressions.length; _i++)
4254                                        expressions[_i] = (SQL)_tempArray[_i];
4255                        } catch(org.eigenbase.xom.XOMException _ex) {
4256                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
4257                        }
4258                }
4259
4260
4261
4262                public String getName()
4263                {
4264                        return "NameExpression";
4265                }
4266
4267                public void display(java.io.PrintWriter _out, int _indent)
4268                {
4269                        _out.println(getName());
4270                        displayElementArray(_out, "expressions", expressions, _indent+1);
4271                }
4272                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
4273                {
4274                        _out.beginTag("NameExpression", new org.eigenbase.xom.XMLAttrVector()
4275                                );
4276                        displayXMLElementArray(_out, expressions);
4277                        _out.endTag("NameExpression");
4278                }
4279                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
4280                {
4281                        NameExpression _cother = (NameExpression)_other;
4282                        boolean _diff = displayElementArrayDiff("expressions", expressions, _cother.expressions, _out, _indent+1);
4283                        return _diff;
4284                }
4285        }
4286
4287        public static class CaptionExpression extends ExpressionView
4288        {
4289                public CaptionExpression()
4290                {
4291                }
4292
4293                public CaptionExpression(org.eigenbase.xom.DOMWrapper _def)
4294                        throws org.eigenbase.xom.XOMException
4295                {
4296                        try {
4297                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
4298                                org.eigenbase.xom.NodeDef[] _tempArray;
4299                                _tempArray = _parser.getArray(SQL.class, 1, 0);
4300                                expressions = new SQL[_tempArray.length];
4301                                for (int _i = 0; _i < expressions.length; _i++)
4302                                        expressions[_i] = (SQL)_tempArray[_i];
4303                        } catch(org.eigenbase.xom.XOMException _ex) {
4304                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
4305                        }
4306                }
4307
4308
4309
4310                public String getName()
4311                {
4312                        return "CaptionExpression";
4313                }
4314
4315                public void display(java.io.PrintWriter _out, int _indent)
4316                {
4317                        _out.println(getName());
4318                        displayElementArray(_out, "expressions", expressions, _indent+1);
4319                }
4320                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
4321                {
4322                        _out.beginTag("CaptionExpression", new org.eigenbase.xom.XMLAttrVector()
4323                                );
4324                        displayXMLElementArray(_out, expressions);
4325                        _out.endTag("CaptionExpression");
4326                }
4327                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
4328                {
4329                        CaptionExpression _cother = (CaptionExpression)_other;
4330                        boolean _diff = displayElementArrayDiff("expressions", expressions, _cother.expressions, _out, _indent+1);
4331                        return _diff;
4332                }
4333        }
4334
4335        public static class MeasureExpression extends ExpressionView
4336        {
4337                public MeasureExpression()
4338                {
4339                }
4340
4341                public MeasureExpression(org.eigenbase.xom.DOMWrapper _def)
4342                        throws org.eigenbase.xom.XOMException
4343                {
4344                        try {
4345                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
4346                                org.eigenbase.xom.NodeDef[] _tempArray;
4347                                _tempArray = _parser.getArray(SQL.class, 1, 0);
4348                                expressions = new SQL[_tempArray.length];
4349                                for (int _i = 0; _i < expressions.length; _i++)
4350                                        expressions[_i] = (SQL)_tempArray[_i];
4351                        } catch(org.eigenbase.xom.XOMException _ex) {
4352                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
4353                        }
4354                }
4355
4356
4357
4358                public String getName()
4359                {
4360                        return "MeasureExpression";
4361                }
4362
4363                public void display(java.io.PrintWriter _out, int _indent)
4364                {
4365                        _out.println(getName());
4366                        displayElementArray(_out, "expressions", expressions, _indent+1);
4367                }
4368                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
4369                {
4370                        _out.beginTag("MeasureExpression", new org.eigenbase.xom.XMLAttrVector()
4371                                );
4372                        displayXMLElementArray(_out, expressions);
4373                        _out.endTag("MeasureExpression");
4374                }
4375                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
4376                {
4377                        MeasureExpression _cother = (MeasureExpression)_other;
4378                        boolean _diff = displayElementArrayDiff("expressions", expressions, _cother.expressions, _out, _indent+1);
4379                        return _diff;
4380                }
4381        }
4382
4383        /**
4384         * A role defines an access-control profile. It has a series of grants
4385         * (or denials) for schema elements.
4386         */
4387        public static class Role extends org.eigenbase.xom.ElementDef
4388        {
4389                public Role()
4390                {
4391                }
4392
4393                public Role(org.eigenbase.xom.DOMWrapper _def)
4394                        throws org.eigenbase.xom.XOMException
4395                {
4396                        try {
4397                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
4398                                org.eigenbase.xom.NodeDef[] _tempArray;
4399                                name = (String)_parser.getAttribute("name", "String", null, null, true);
4400                                annotations = (Annotations)_parser.getElement(Annotations.class, false);
4401                                _tempArray = _parser.getArray(SchemaGrant.class, 0, 0);
4402                                schemaGrants = new SchemaGrant[_tempArray.length];
4403                                for (int _i = 0; _i < schemaGrants.length; _i++)
4404                                        schemaGrants[_i] = (SchemaGrant)_tempArray[_i];
4405                                union = (Union)_parser.getElement(Union.class, false);
4406                        } catch(org.eigenbase.xom.XOMException _ex) {
4407                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
4408                        }
4409                }
4410
4411                public String name;  // required attribute
4412
4413                /**
4414                 * Contains values of user-defined properties.
4415                 */
4416                public Annotations annotations;  //optional element
4417                public SchemaGrant[] schemaGrants;  //optional array
4418                public Union union;  //optional element
4419
4420                public String getName()
4421                {
4422                        return "Role";
4423                }
4424
4425                public void display(java.io.PrintWriter _out, int _indent)
4426                {
4427                        _out.println(getName());
4428                        displayAttribute(_out, "name", name, _indent+1);
4429                        displayElement(_out, "annotations", (org.eigenbase.xom.ElementDef) annotations, _indent+1);
4430                        displayElementArray(_out, "schemaGrants", schemaGrants, _indent+1);
4431                        displayElement(_out, "union", (org.eigenbase.xom.ElementDef) union, _indent+1);
4432                }
4433                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
4434                {
4435                        _out.beginTag("Role", new org.eigenbase.xom.XMLAttrVector()
4436                                .add("name", name)
4437                                );
4438                        displayXMLElement(_out, (org.eigenbase.xom.ElementDef) annotations);
4439                        displayXMLElementArray(_out, schemaGrants);
4440                        displayXMLElement(_out, (org.eigenbase.xom.ElementDef) union);
4441                        _out.endTag("Role");
4442                }
4443                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
4444                {
4445                        Role _cother = (Role)_other;
4446                        boolean _diff = displayAttributeDiff("name", name, _cother.name, _out, _indent+1);
4447                        _diff = _diff && displayElementDiff("annotations", annotations, _cother.annotations, _out, _indent+1);
4448                        _diff = _diff && displayElementArrayDiff("schemaGrants", schemaGrants, _cother.schemaGrants, _out, _indent+1);
4449                        _diff = _diff && displayElementDiff("union", union, _cother.union, _out, _indent+1);
4450                        return _diff;
4451                }
4452        }
4453
4454        public interface Grant extends org.eigenbase.xom.NodeDef
4455        {
4456        }
4457
4458        /**
4459         * Grants (or denies) this role access to this schema.
4460         * access may be "all", "all_dimensions", "custom"
4461         * or "none".
4462         * If access is "all_dimensions", the role has access
4463         * to all dimensions but still needs explicit access to cubes.
4464         * If access is "custom", no access will be inherited by
4465         * cubes for which no explicit rule is set.
4466         * If access is "all_dimensions", an implicut access is
4467         * given to all dimensions of the schema's cubes, provided the cube's
4468         * access attribute is either "custom" or "all".
4469         * See mondrian.olap.Role#grant(mondrian.olap.Schema,int).
4470         */
4471        public static class SchemaGrant extends org.eigenbase.xom.ElementDef implements Grant
4472        {
4473                public SchemaGrant()
4474                {
4475                }
4476
4477                public SchemaGrant(org.eigenbase.xom.DOMWrapper _def)
4478                        throws org.eigenbase.xom.XOMException
4479                {
4480                        try {
4481                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
4482                                org.eigenbase.xom.NodeDef[] _tempArray;
4483                                access = (String)_parser.getAttribute("access", "String", null, _access_values, true);
4484                                _tempArray = _parser.getArray(CubeGrant.class, 0, 0);
4485                                cubeGrants = new CubeGrant[_tempArray.length];
4486                                for (int _i = 0; _i < cubeGrants.length; _i++)
4487                                        cubeGrants[_i] = (CubeGrant)_tempArray[_i];
4488                        } catch(org.eigenbase.xom.XOMException _ex) {
4489                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
4490                        }
4491                }
4492
4493                /** Allowable values for {@link #access}. */
4494                public static final String[] _access_values = {"all", "custom", "none", "all_dimensions"};
4495                public String access;  // required attribute
4496
4497                public CubeGrant[] cubeGrants;  //optional array
4498
4499                public String getName()
4500                {
4501                        return "SchemaGrant";
4502                }
4503
4504                public void display(java.io.PrintWriter _out, int _indent)
4505                {
4506                        _out.println(getName());
4507                        displayAttribute(_out, "access", access, _indent+1);
4508                        displayElementArray(_out, "cubeGrants", cubeGrants, _indent+1);
4509                }
4510                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
4511                {
4512                        _out.beginTag("SchemaGrant", new org.eigenbase.xom.XMLAttrVector()
4513                                .add("access", access)
4514                                );
4515                        displayXMLElementArray(_out, cubeGrants);
4516                        _out.endTag("SchemaGrant");
4517                }
4518                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
4519                {
4520                        SchemaGrant _cother = (SchemaGrant)_other;
4521                        boolean _diff = displayElementArrayDiff("cubeGrants", cubeGrants, _cother.cubeGrants, _out, _indent+1);
4522                        return _diff;
4523                }
4524        }
4525
4526        /**
4527         * Grants (or denies) this role access to a cube.
4528         * access may be "all", "custom", or "none".
4529         * If access is "custom", no access will be inherited
4530         * by the dimensions of this cube, unless the parent SchemaGrant is
4531         * set to "ALL_DIMENSIONS".
4532         * See mondrian.olap.Role#grant(mondrian.olap.Cube,int).
4533         */
4534        public static class CubeGrant extends org.eigenbase.xom.ElementDef implements Grant
4535        {
4536                public CubeGrant()
4537                {
4538                }
4539
4540                public CubeGrant(org.eigenbase.xom.DOMWrapper _def)
4541                        throws org.eigenbase.xom.XOMException
4542                {
4543                        try {
4544                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
4545                                org.eigenbase.xom.NodeDef[] _tempArray;
4546                                cube = (String)_parser.getAttribute("cube", "String", null, null, true);
4547                                access = (String)_parser.getAttribute("access", "String", null, _access_values, true);
4548                                _tempArray = _parser.getArray(DimensionGrant.class, 0, 0);
4549                                dimensionGrants = new DimensionGrant[_tempArray.length];
4550                                for (int _i = 0; _i < dimensionGrants.length; _i++)
4551                                        dimensionGrants[_i] = (DimensionGrant)_tempArray[_i];
4552                                _tempArray = _parser.getArray(HierarchyGrant.class, 0, 0);
4553                                hierarchyGrants = new HierarchyGrant[_tempArray.length];
4554                                for (int _i = 0; _i < hierarchyGrants.length; _i++)
4555                                        hierarchyGrants[_i] = (HierarchyGrant)_tempArray[_i];
4556                        } catch(org.eigenbase.xom.XOMException _ex) {
4557                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
4558                        }
4559                }
4560
4561                /** Allowable values for {@link #access}. */
4562                public static final String[] _access_values = {"all", "custom", "none", "all_dimensions"};
4563                public String access;  // required attribute
4564                public String cube;  // required attribute
4565
4566                public DimensionGrant[] dimensionGrants;  //optional array
4567                public HierarchyGrant[] hierarchyGrants;  //optional array
4568
4569                public String getName()
4570                {
4571                        return "CubeGrant";
4572                }
4573
4574                public void display(java.io.PrintWriter _out, int _indent)
4575                {
4576                        _out.println(getName());
4577                        displayAttribute(_out, "cube", cube, _indent+1);
4578                        displayAttribute(_out, "access", access, _indent+1);
4579                        displayElementArray(_out, "dimensionGrants", dimensionGrants, _indent+1);
4580                        displayElementArray(_out, "hierarchyGrants", hierarchyGrants, _indent+1);
4581                }
4582                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
4583                {
4584                        _out.beginTag("CubeGrant", new org.eigenbase.xom.XMLAttrVector()
4585                                .add("cube", cube)
4586                                .add("access", access)
4587                                );
4588                        displayXMLElementArray(_out, dimensionGrants);
4589                        displayXMLElementArray(_out, hierarchyGrants);
4590                        _out.endTag("CubeGrant");
4591                }
4592                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
4593                {
4594                        CubeGrant _cother = (CubeGrant)_other;
4595                        boolean _diff = displayAttributeDiff("cube", cube, _cother.cube, _out, _indent+1);
4596                        _diff = _diff && displayElementArrayDiff("dimensionGrants", dimensionGrants, _cother.dimensionGrants, _out, _indent+1);
4597                        _diff = _diff && displayElementArrayDiff("hierarchyGrants", hierarchyGrants, _cother.hierarchyGrants, _out, _indent+1);
4598                        return _diff;
4599                }
4600        }
4601
4602        /**
4603         * Grants (or denies) this role access to a dimension.
4604         * access may be "all", "custom" or "none".
4605         * Note that a role is implicitly given access to a dimension when it
4606         * is given "ALL" acess to a cube.
4607         * If access is "custom", no access will be inherited
4608         * by the hierarchies of this dimension.
4609         * If the parent schema access is "ALL_DIMENSIONS",
4610         * this timension will inherit access "ALL".
4611         * See also the "all_dimensions" option of the "SchemaGrant" element.
4612         * See mondrian.olap.Role#grant(mondrian.olap.Dimension,int).
4613         */
4614        public static class DimensionGrant extends org.eigenbase.xom.ElementDef implements Grant
4615        {
4616                public DimensionGrant()
4617                {
4618                }
4619
4620                public DimensionGrant(org.eigenbase.xom.DOMWrapper _def)
4621                        throws org.eigenbase.xom.XOMException
4622                {
4623                        try {
4624                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
4625                                dimension = (String)_parser.getAttribute("dimension", "String", null, null, true);
4626                                access = (String)_parser.getAttribute("access", "String", null, _access_values, true);
4627                        } catch(org.eigenbase.xom.XOMException _ex) {
4628                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
4629                        }
4630                }
4631
4632                /** Allowable values for {@link #access}. */
4633                public static final String[] _access_values = {"all", "custom", "none", "all_dimensions"};
4634                public String access;  // required attribute
4635                public String dimension;  // required attribute
4636
4637
4638                public String getName()
4639                {
4640                        return "DimensionGrant";
4641                }
4642
4643                public void display(java.io.PrintWriter _out, int _indent)
4644                {
4645                        _out.println(getName());
4646                        displayAttribute(_out, "dimension", dimension, _indent+1);
4647                        displayAttribute(_out, "access", access, _indent+1);
4648                }
4649                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
4650                {
4651                        _out.beginTag("DimensionGrant", new org.eigenbase.xom.XMLAttrVector()
4652                                .add("dimension", dimension)
4653                                .add("access", access)
4654                                );
4655                        _out.endTag("DimensionGrant");
4656                }
4657                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
4658                {
4659                        DimensionGrant _cother = (DimensionGrant)_other;
4660                        boolean _diff = displayAttributeDiff("dimension", dimension, _cother.dimension, _out, _indent+1);
4661                        return _diff;
4662                }
4663        }
4664
4665        /**
4666         * Grants (or denies) this role access to a hierarchy.
4667         * access may be "all", "custom" or "none".
4668         * If access is "custom", you may also specify the
4669         * attributes topLevel, bottomLevel, and
4670         * the member grants.
4671         * If access is "custom", the child levels of this
4672         * hierarchy will not inherit access rights from this hierarchy,
4673         * should there be no explicit rules defined for the said child level.
4674         * See mondrian.olap.Role#grant(mondrian.olap.Hierarchy, int, mondrian.olap.Level).
4675         */
4676        public static class HierarchyGrant extends org.eigenbase.xom.ElementDef implements Grant
4677        {
4678                public HierarchyGrant()
4679                {
4680                }
4681
4682                public HierarchyGrant(org.eigenbase.xom.DOMWrapper _def)
4683                        throws org.eigenbase.xom.XOMException
4684                {
4685                        try {
4686                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
4687                                org.eigenbase.xom.NodeDef[] _tempArray;
4688                                hierarchy = (String)_parser.getAttribute("hierarchy", "String", null, null, true);
4689                                topLevel = (String)_parser.getAttribute("topLevel", "String", null, null, false);
4690                                bottomLevel = (String)_parser.getAttribute("bottomLevel", "String", null, null, false);
4691                                rollupPolicy = (String)_parser.getAttribute("rollupPolicy", "String", null, null, false);
4692                                access = (String)_parser.getAttribute("access", "String", null, _access_values, true);
4693                                _tempArray = _parser.getArray(MemberGrant.class, 0, 0);
4694                                memberGrants = new MemberGrant[_tempArray.length];
4695                                for (int _i = 0; _i < memberGrants.length; _i++)
4696                                        memberGrants[_i] = (MemberGrant)_tempArray[_i];
4697                        } catch(org.eigenbase.xom.XOMException _ex) {
4698                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
4699                        }
4700                }
4701
4702                /** Allowable values for {@link #access}. */
4703                public static final String[] _access_values = {"all", "custom", "none", "all_dimensions"};
4704                public String access;  // required attribute
4705                public String hierarchy;  // required attribute
4706                public String topLevel;  // optional attribute
4707                public String bottomLevel;  // optional attribute
4708                public String rollupPolicy;  // optional attribute
4709
4710                public MemberGrant[] memberGrants;  //optional array
4711
4712                public String getName()
4713                {
4714                        return "HierarchyGrant";
4715                }
4716
4717                public void display(java.io.PrintWriter _out, int _indent)
4718                {
4719                        _out.println(getName());
4720                        displayAttribute(_out, "hierarchy", hierarchy, _indent+1);
4721                        displayAttribute(_out, "topLevel", topLevel, _indent+1);
4722                        displayAttribute(_out, "bottomLevel", bottomLevel, _indent+1);
4723                        displayAttribute(_out, "rollupPolicy", rollupPolicy, _indent+1);
4724                        displayAttribute(_out, "access", access, _indent+1);
4725                        displayElementArray(_out, "memberGrants", memberGrants, _indent+1);
4726                }
4727                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
4728                {
4729                        _out.beginTag("HierarchyGrant", new org.eigenbase.xom.XMLAttrVector()
4730                                .add("hierarchy", hierarchy)
4731                                .add("topLevel", topLevel)
4732                                .add("bottomLevel", bottomLevel)
4733                                .add("rollupPolicy", rollupPolicy)
4734                                .add("access", access)
4735                                );
4736                        displayXMLElementArray(_out, memberGrants);
4737                        _out.endTag("HierarchyGrant");
4738                }
4739                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
4740                {
4741                        HierarchyGrant _cother = (HierarchyGrant)_other;
4742                        boolean _diff = displayAttributeDiff("hierarchy", hierarchy, _cother.hierarchy, _out, _indent+1);
4743                        _diff = _diff && displayAttributeDiff("topLevel", topLevel, _cother.topLevel, _out, _indent+1);
4744                        _diff = _diff && displayAttributeDiff("bottomLevel", bottomLevel, _cother.bottomLevel, _out, _indent+1);
4745                        _diff = _diff && displayAttributeDiff("rollupPolicy", rollupPolicy, _cother.rollupPolicy, _out, _indent+1);
4746                        _diff = _diff && displayElementArrayDiff("memberGrants", memberGrants, _cother.memberGrants, _out, _indent+1);
4747                        return _diff;
4748                }
4749        }
4750
4751        /**
4752         * Grants (or denies) this role access to a member.
4753         * The children of this member inherit that access.
4754         * You can implicitly see a member if you can see any of its children.
4755         * See mondrian.olap.Role#grant(mondrian.olap.Member,int).
4756         */
4757        public static class MemberGrant extends org.eigenbase.xom.ElementDef
4758        {
4759                public MemberGrant()
4760                {
4761                }
4762
4763                public MemberGrant(org.eigenbase.xom.DOMWrapper _def)
4764                        throws org.eigenbase.xom.XOMException
4765                {
4766                        try {
4767                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
4768                                member = (String)_parser.getAttribute("member", "String", null, null, true);
4769                                access = (String)_parser.getAttribute("access", "String", null, _access_values, true);
4770                        } catch(org.eigenbase.xom.XOMException _ex) {
4771                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
4772                        }
4773                }
4774
4775                public String member;  // required attribute
4776                /** Allowable values for {@link #access}. */
4777                public static final String[] _access_values = {"all", "none"};
4778                public String access;  // required attribute
4779
4780
4781                public String getName()
4782                {
4783                        return "MemberGrant";
4784                }
4785
4786                public void display(java.io.PrintWriter _out, int _indent)
4787                {
4788                        _out.println(getName());
4789                        displayAttribute(_out, "member", member, _indent+1);
4790                        displayAttribute(_out, "access", access, _indent+1);
4791                }
4792                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
4793                {
4794                        _out.beginTag("MemberGrant", new org.eigenbase.xom.XMLAttrVector()
4795                                .add("member", member)
4796                                .add("access", access)
4797                                );
4798                        _out.endTag("MemberGrant");
4799                }
4800                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
4801                {
4802                        MemberGrant _cother = (MemberGrant)_other;
4803                        boolean _diff = displayAttributeDiff("member", member, _cother.member, _out, _indent+1);
4804                        _diff = _diff && displayAttributeDiff("access", access, _cother.access, _out, _indent+1);
4805                        return _diff;
4806                }
4807        }
4808
4809        /**
4810         * Body of a Role definition which defines a Role to be the union
4811         * of several Roles. The RoleUsage elements must refer to Roles that
4812         * have been declared earlier in this schema file.
4813         */
4814        public static class Union extends org.eigenbase.xom.ElementDef
4815        {
4816                public Union()
4817                {
4818                }
4819
4820                public Union(org.eigenbase.xom.DOMWrapper _def)
4821                        throws org.eigenbase.xom.XOMException
4822                {
4823                        try {
4824                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
4825                                org.eigenbase.xom.NodeDef[] _tempArray;
4826                                _tempArray = _parser.getArray(RoleUsage.class, 0, 0);
4827                                roleUsages = new RoleUsage[_tempArray.length];
4828                                for (int _i = 0; _i < roleUsages.length; _i++)
4829                                        roleUsages[_i] = (RoleUsage)_tempArray[_i];
4830                        } catch(org.eigenbase.xom.XOMException _ex) {
4831                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
4832                        }
4833                }
4834
4835
4836                public RoleUsage[] roleUsages;  //optional array
4837
4838                public String getName()
4839                {
4840                        return "Union";
4841                }
4842
4843                public void display(java.io.PrintWriter _out, int _indent)
4844                {
4845                        _out.println(getName());
4846                        displayElementArray(_out, "roleUsages", roleUsages, _indent+1);
4847                }
4848                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
4849                {
4850                        _out.beginTag("Union", new org.eigenbase.xom.XMLAttrVector()
4851                                );
4852                        displayXMLElementArray(_out, roleUsages);
4853                        _out.endTag("Union");
4854                }
4855                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
4856                {
4857                        Union _cother = (Union)_other;
4858                        boolean _diff = displayElementArrayDiff("roleUsages", roleUsages, _cother.roleUsages, _out, _indent+1);
4859                        return _diff;
4860                }
4861        }
4862
4863        /**
4864         * Usage of a Role in a union Role.
4865         */
4866        public static class RoleUsage extends org.eigenbase.xom.ElementDef
4867        {
4868                public RoleUsage()
4869                {
4870                }
4871
4872                public RoleUsage(org.eigenbase.xom.DOMWrapper _def)
4873                        throws org.eigenbase.xom.XOMException
4874                {
4875                        try {
4876                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
4877                                roleName = (String)_parser.getAttribute("roleName", "String", null, null, true);
4878                        } catch(org.eigenbase.xom.XOMException _ex) {
4879                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
4880                        }
4881                }
4882
4883                public String roleName;  // required attribute
4884
4885
4886                public String getName()
4887                {
4888                        return "RoleUsage";
4889                }
4890
4891                public void display(java.io.PrintWriter _out, int _indent)
4892                {
4893                        _out.println(getName());
4894                        displayAttribute(_out, "roleName", roleName, _indent+1);
4895                }
4896                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
4897                {
4898                        _out.beginTag("RoleUsage", new org.eigenbase.xom.XMLAttrVector()
4899                                .add("roleName", roleName)
4900                                );
4901                        _out.endTag("RoleUsage");
4902                }
4903                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
4904                {
4905                        RoleUsage _cother = (RoleUsage)_other;
4906                        boolean _diff = displayAttributeDiff("roleName", roleName, _cother.roleName, _out, _indent+1);
4907                        return _diff;
4908                }
4909        }
4910
4911        /**
4912         * A UserDefinedFunction is a function which
4913         * extends the MDX language. It must be implemented by a Java
4914         * class which implements the interface
4915         * mondrian.spi.UserDefinedFunction.
4916         */
4917        public static class UserDefinedFunction extends org.eigenbase.xom.ElementDef
4918        {
4919                public UserDefinedFunction()
4920                {
4921                }
4922
4923                public UserDefinedFunction(org.eigenbase.xom.DOMWrapper _def)
4924                        throws org.eigenbase.xom.XOMException
4925                {
4926                        try {
4927                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
4928                                name = (String)_parser.getAttribute("name", "String", null, null, true);
4929                                className = (String)_parser.getAttribute("className", "String", null, null, false);
4930                                script = (Script)_parser.getElement(Script.class, false);
4931                        } catch(org.eigenbase.xom.XOMException _ex) {
4932                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
4933                        }
4934                }
4935
4936                public String name;  // required attribute
4937                public String className;  // optional attribute
4938
4939                /**
4940                 * Script to implement this user-defined function.
4941                 * Either the "Script" element or the "className" attribute
4942                 * must be specified.
4943                 */
4944                public Script script;  //optional element
4945
4946                public String getName()
4947                {
4948                        return "UserDefinedFunction";
4949                }
4950
4951                public void display(java.io.PrintWriter _out, int _indent)
4952                {
4953                        _out.println(getName());
4954                        displayAttribute(_out, "name", name, _indent+1);
4955                        displayAttribute(_out, "className", className, _indent+1);
4956                        displayElement(_out, "script", (org.eigenbase.xom.ElementDef) script, _indent+1);
4957                }
4958                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
4959                {
4960                        _out.beginTag("UserDefinedFunction", new org.eigenbase.xom.XMLAttrVector()
4961                                .add("name", name)
4962                                .add("className", className)
4963                                );
4964                        displayXMLElement(_out, (org.eigenbase.xom.ElementDef) script);
4965                        _out.endTag("UserDefinedFunction");
4966                }
4967                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
4968                {
4969                        UserDefinedFunction _cother = (UserDefinedFunction)_other;
4970                        boolean _diff = displayAttributeDiff("name", name, _cother.name, _out, _indent+1);
4971                        _diff = _diff && displayAttributeDiff("className", className, _cother.className, _out, _indent+1);
4972                        _diff = _diff && displayElementDiff("script", script, _cother.script, _out, _indent+1);
4973                        return _diff;
4974                }
4975        }
4976
4977        /**
4978         * A Parameter defines a schema parameter.
4979         * It can be referenced from an MDX statement using the ParamRef
4980         * function and, if not final, its value can be overridden.
4981         */
4982        public static class Parameter extends org.eigenbase.xom.ElementDef
4983        {
4984                public Parameter()
4985                {
4986                }
4987
4988                public Parameter(org.eigenbase.xom.DOMWrapper _def)
4989                        throws org.eigenbase.xom.XOMException
4990                {
4991                        try {
4992                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
4993                                name = (String)_parser.getAttribute("name", "String", null, null, true);
4994                                description = (String)_parser.getAttribute("description", "String", null, null, false);
4995                                type = (String)_parser.getAttribute("type", "String", "String", _type_values, true);
4996                                modifiable = (Boolean)_parser.getAttribute("modifiable", "Boolean", "true", null, false);
4997                                defaultValue = (String)_parser.getAttribute("defaultValue", "String", null, null, false);
4998                        } catch(org.eigenbase.xom.XOMException _ex) {
4999                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
5000                        }
5001                }
5002
5003                public String name;  // required attribute
5004                public String description;  // optional attribute
5005                /** Allowable values for {@link #type}. */
5006                public static final String[] _type_values = {"String", "Numeric", "Integer", "Boolean", "Date", "Time", "Timestamp", "Member"};
5007                public String type;  // attribute default: String
5008                public Boolean modifiable;  // attribute default: true
5009                public String defaultValue;  // optional attribute
5010
5011
5012                public String getName()
5013                {
5014                        return "Parameter";
5015                }
5016
5017                public void display(java.io.PrintWriter _out, int _indent)
5018                {
5019                        _out.println(getName());
5020                        displayAttribute(_out, "name", name, _indent+1);
5021                        displayAttribute(_out, "description", description, _indent+1);
5022                        displayAttribute(_out, "type", type, _indent+1);
5023                        displayAttribute(_out, "modifiable", modifiable, _indent+1);
5024                        displayAttribute(_out, "defaultValue", defaultValue, _indent+1);
5025                }
5026                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
5027                {
5028                        _out.beginTag("Parameter", new org.eigenbase.xom.XMLAttrVector()
5029                                .add("name", name)
5030                                .add("description", description)
5031                                .add("type", type)
5032                                .add("modifiable", modifiable)
5033                                .add("defaultValue", defaultValue)
5034                                );
5035                        _out.endTag("Parameter");
5036                }
5037                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
5038                {
5039                        Parameter _cother = (Parameter)_other;
5040                        boolean _diff = displayAttributeDiff("name", name, _cother.name, _out, _indent+1);
5041                        _diff = _diff && displayAttributeDiff("description", description, _cother.description, _out, _indent+1);
5042                        _diff = _diff && displayAttributeDiff("type", type, _cother.type, _out, _indent+1);
5043                        _diff = _diff && displayAttributeDiff("modifiable", modifiable, _cother.modifiable, _out, _indent+1);
5044                        _diff = _diff && displayAttributeDiff("defaultValue", defaultValue, _cother.defaultValue, _out, _indent+1);
5045                        return _diff;
5046                }
5047        }
5048
5049        /**
5050         * Holder for an array of Annotation elements
5051         */
5052        public static class Annotations extends org.eigenbase.xom.ElementDef
5053        {
5054                public Annotations()
5055                {
5056                }
5057
5058                public Annotations(org.eigenbase.xom.DOMWrapper _def)
5059                        throws org.eigenbase.xom.XOMException
5060                {
5061                        try {
5062                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
5063                                org.eigenbase.xom.NodeDef[] _tempArray;
5064                                _tempArray = _parser.getArray(Annotation.class, 0, 0);
5065                                array = new Annotation[_tempArray.length];
5066                                for (int _i = 0; _i < array.length; _i++)
5067                                        array[_i] = (Annotation)_tempArray[_i];
5068                        } catch(org.eigenbase.xom.XOMException _ex) {
5069                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
5070                        }
5071                }
5072
5073
5074                public Annotation[] array;  //optional array
5075
5076                public String getName()
5077                {
5078                        return "Annotations";
5079                }
5080
5081                public void display(java.io.PrintWriter _out, int _indent)
5082                {
5083                        _out.println(getName());
5084                        displayElementArray(_out, "array", array, _indent+1);
5085                }
5086                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
5087                {
5088                        _out.beginTag("Annotations", new org.eigenbase.xom.XMLAttrVector()
5089                                );
5090                        displayXMLElementArray(_out, array);
5091                        _out.endTag("Annotations");
5092                }
5093                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
5094                {
5095                        Annotations _cother = (Annotations)_other;
5096                        boolean _diff = displayElementArrayDiff("array", array, _cother.array, _out, _indent+1);
5097                        return _diff;
5098                }
5099        }
5100
5101        /**
5102         * User-defined property value.
5103         */
5104        public static class Annotation extends org.eigenbase.xom.ElementDef
5105        {
5106                public Annotation()
5107                {
5108                }
5109
5110                public Annotation(org.eigenbase.xom.DOMWrapper _def)
5111                        throws org.eigenbase.xom.XOMException
5112                {
5113                        try {
5114                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
5115                                name = (String)_parser.getAttribute("name", "String", null, null, true);
5116                                cdata = _parser.getText();
5117                        } catch(org.eigenbase.xom.XOMException _ex) {
5118                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
5119                        }
5120                }
5121
5122                public String name;  // required attribute
5123
5124                public String cdata;  // All text goes here
5125                public String getName()
5126                {
5127                        return "Annotation";
5128                }
5129
5130                public void display(java.io.PrintWriter _out, int _indent)
5131                {
5132                        _out.println(getName());
5133                        displayAttribute(_out, "name", name, _indent+1);
5134                        displayString(_out, "cdata", cdata, _indent+1);
5135                }
5136                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
5137                {
5138                        _out.beginTag("Annotation", new org.eigenbase.xom.XMLAttrVector()
5139                                .add("name", name)
5140                                );
5141                        _out.cdata(cdata);
5142                        _out.endTag("Annotation");
5143                }
5144                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
5145                {
5146                        Annotation _cother = (Annotation)_other;
5147                        boolean _diff = displayAttributeDiff("name", name, _cother.name, _out, _indent+1);
5148                        _diff = _diff && displayStringDiff("cdata", cdata, _cother.cdata, _out, _indent+1);
5149                        return _diff;
5150                }
5151        }
5152
5153        /**
5154         * Script fragment to implement an SPI such as user-defined function,
5155         * member formatter, cell formatter.
5156         */
5157        public static class Script extends org.eigenbase.xom.ElementDef
5158        {
5159                public Script()
5160                {
5161                }
5162
5163                public Script(org.eigenbase.xom.DOMWrapper _def)
5164                        throws org.eigenbase.xom.XOMException
5165                {
5166                        try {
5167                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
5168                                language = (String)_parser.getAttribute("language", "String", "JavaScript", null, false);
5169                                cdata = _parser.getText();
5170                        } catch(org.eigenbase.xom.XOMException _ex) {
5171                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
5172                        }
5173                }
5174
5175                public String language;  // attribute default: JavaScript
5176
5177                public String cdata;  // All text goes here
5178                public String getName()
5179                {
5180                        return "Script";
5181                }
5182
5183                public void display(java.io.PrintWriter _out, int _indent)
5184                {
5185                        _out.println(getName());
5186                        displayAttribute(_out, "language", language, _indent+1);
5187                        displayString(_out, "cdata", cdata, _indent+1);
5188                }
5189                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
5190                {
5191                        _out.beginTag("Script", new org.eigenbase.xom.XMLAttrVector()
5192                                .add("language", language)
5193                                );
5194                        _out.cdata(cdata);
5195                        _out.endTag("Script");
5196                }
5197                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
5198                {
5199                        Script _cother = (Script)_other;
5200                        boolean _diff = displayAttributeDiff("language", language, _cother.language, _out, _indent+1);
5201                        _diff = _diff && displayStringDiff("cdata", cdata, _cother.cdata, _out, _indent+1);
5202                        return _diff;
5203                }
5204        }
5205
5206        /**
5207         * Plugin that formats the values of cells.
5208         * It must be implemented by a Java
5209         * class which implements the interface
5210         * mondrian.spi.CellFormatter,
5211         * or by a script.
5212         */
5213        public static class CellFormatter extends org.eigenbase.xom.ElementDef
5214        {
5215                public CellFormatter()
5216                {
5217                }
5218
5219                public CellFormatter(org.eigenbase.xom.DOMWrapper _def)
5220                        throws org.eigenbase.xom.XOMException
5221                {
5222                        try {
5223                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
5224                                className = (String)_parser.getAttribute("className", "String", null, null, false);
5225                                script = (Script)_parser.getElement(Script.class, false);
5226                        } catch(org.eigenbase.xom.XOMException _ex) {
5227                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
5228                        }
5229                }
5230
5231                public String className;  // optional attribute
5232
5233                /**
5234                 * Script to implement this cell formatter.
5235                 * Either the "Script" element or the "className" attribute
5236                 * must be specified.
5237                 */
5238                public Script script;  //optional element
5239
5240                public String getName()
5241                {
5242                        return "CellFormatter";
5243                }
5244
5245                public void display(java.io.PrintWriter _out, int _indent)
5246                {
5247                        _out.println(getName());
5248                        displayAttribute(_out, "className", className, _indent+1);
5249                        displayElement(_out, "script", (org.eigenbase.xom.ElementDef) script, _indent+1);
5250                }
5251                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
5252                {
5253                        _out.beginTag("CellFormatter", new org.eigenbase.xom.XMLAttrVector()
5254                                .add("className", className)
5255                                );
5256                        displayXMLElement(_out, (org.eigenbase.xom.ElementDef) script);
5257                        _out.endTag("CellFormatter");
5258                }
5259                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
5260                {
5261                        CellFormatter _cother = (CellFormatter)_other;
5262                        boolean _diff = displayAttributeDiff("className", className, _cother.className, _out, _indent+1);
5263                        _diff = _diff && displayElementDiff("script", script, _cother.script, _out, _indent+1);
5264                        return _diff;
5265                }
5266        }
5267
5268        /**
5269         * Plugin that formats members.
5270         * It must be implemented by a Java
5271         * class which implements the interface
5272         * mondrian.spi.MemberFormatter,
5273         * or by a script.
5274         */
5275        public static class MemberFormatter extends org.eigenbase.xom.ElementDef
5276        {
5277                public MemberFormatter()
5278                {
5279                }
5280
5281                public MemberFormatter(org.eigenbase.xom.DOMWrapper _def)
5282                        throws org.eigenbase.xom.XOMException
5283                {
5284                        try {
5285                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
5286                                className = (String)_parser.getAttribute("className", "String", null, null, false);
5287                                script = (Script)_parser.getElement(Script.class, false);
5288                        } catch(org.eigenbase.xom.XOMException _ex) {
5289                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
5290                        }
5291                }
5292
5293                public String className;  // optional attribute
5294
5295                /**
5296                 * Script to implement this member formatter.
5297                 * Either the "Script" element or the "className" attribute
5298                 * must be specified.
5299                 */
5300                public Script script;  //optional element
5301
5302                public String getName()
5303                {
5304                        return "MemberFormatter";
5305                }
5306
5307                public void display(java.io.PrintWriter _out, int _indent)
5308                {
5309                        _out.println(getName());
5310                        displayAttribute(_out, "className", className, _indent+1);
5311                        displayElement(_out, "script", (org.eigenbase.xom.ElementDef) script, _indent+1);
5312                }
5313                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
5314                {
5315                        _out.beginTag("MemberFormatter", new org.eigenbase.xom.XMLAttrVector()
5316                                .add("className", className)
5317                                );
5318                        displayXMLElement(_out, (org.eigenbase.xom.ElementDef) script);
5319                        _out.endTag("MemberFormatter");
5320                }
5321                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
5322                {
5323                        MemberFormatter _cother = (MemberFormatter)_other;
5324                        boolean _diff = displayAttributeDiff("className", className, _cother.className, _out, _indent+1);
5325                        _diff = _diff && displayElementDiff("script", script, _cother.script, _out, _indent+1);
5326                        return _diff;
5327                }
5328        }
5329
5330        /**
5331         * Plugin that formats properties.
5332         * It must be implemented by a Java
5333         * class which implements the interface
5334         * mondrian.spi.PropertyFormatter,
5335         * or by a script.
5336         */
5337        public static class PropertyFormatter extends org.eigenbase.xom.ElementDef
5338        {
5339                public PropertyFormatter()
5340                {
5341                }
5342
5343                public PropertyFormatter(org.eigenbase.xom.DOMWrapper _def)
5344                        throws org.eigenbase.xom.XOMException
5345                {
5346                        try {
5347                                org.eigenbase.xom.DOMElementParser _parser = new org.eigenbase.xom.DOMElementParser(_def, "", MondrianDef.class);
5348                                className = (String)_parser.getAttribute("className", "String", null, null, false);
5349                                script = (Script)_parser.getElement(Script.class, false);
5350                        } catch(org.eigenbase.xom.XOMException _ex) {
5351                                throw new org.eigenbase.xom.XOMException("In " + getName() + ": " + _ex.getMessage());
5352                        }
5353                }
5354
5355                public String className;  // optional attribute
5356
5357                /**
5358                 * Script to implement this property formatter.
5359                 * Either the "Script" element or the "className" attribute
5360                 * must be specified.
5361                 */
5362                public Script script;  //optional element
5363
5364                public String getName()
5365                {
5366                        return "PropertyFormatter";
5367                }
5368
5369                public void display(java.io.PrintWriter _out, int _indent)
5370                {
5371                        _out.println(getName());
5372                        displayAttribute(_out, "className", className, _indent+1);
5373                        displayElement(_out, "script", (org.eigenbase.xom.ElementDef) script, _indent+1);
5374                }
5375                public void displayXML(org.eigenbase.xom.XMLOutput _out, int _indent)
5376                {
5377                        _out.beginTag("PropertyFormatter", new org.eigenbase.xom.XMLAttrVector()
5378                                .add("className", className)
5379                                );
5380                        displayXMLElement(_out, (org.eigenbase.xom.ElementDef) script);
5381                        _out.endTag("PropertyFormatter");
5382                }
5383                public boolean displayDiff(org.eigenbase.xom.ElementDef _other, java.io.PrintWriter _out, int _indent)
5384                {
5385                        PropertyFormatter _cother = (PropertyFormatter)_other;
5386                        boolean _diff = displayAttributeDiff("className", className, _cother.className, _out, _indent+1);
5387                        _diff = _diff && displayElementDiff("script", script, _cother.script, _out, _indent+1);
5388                        return _diff;
5389                }
5390        }
5391
5392
5393}