001 /*
002 // $Id: Property.java 374 2010-12-03 02:29:37Z jhyde $
003 // This software is subject to the terms of the Eclipse Public License v1.0
004 // Agreement, available at the following URL:
005 // http://www.eclipse.org/legal/epl-v10.html.
006 // Copyright (C) 2006-2010 Julian Hyde
007 // All Rights Reserved.
008 // You must accept the terms of that agreement to use this software.
009 */
010 package org.olap4j.metadata;
011
012 import org.olap4j.impl.Olap4jUtil;
013
014 import java.util.*;
015
016 /**
017 * Definition of a property of a {@link Member} or
018 * {@link org.olap4j.Cell}.
019 *
020 * @author jhyde
021 * @version $Id: Property.java 374 2010-12-03 02:29:37Z jhyde $
022 * @since Aug 23, 2006
023 */
024 public interface Property extends MetadataElement {
025 /**
026 * Returns the datatype of this Property.
027 *
028 * @return datatype of this Property
029 */
030 Datatype getDatatype();
031
032 /**
033 * Returns a set of flags which describe the type of this Property.
034 *
035 * @return type of this Property
036 */
037 Set<TypeFlag> getType();
038
039 /**
040 * Returns the content type of this Property.
041 *
042 * @return content type
043 */
044 ContentType getContentType();
045
046 /**
047 * Enumeration of aspects of the type of a Property. In particular, whether
048 * it belongs to a member or a cell.
049 *
050 * <p>The values are as specified by XMLA for the PROPERTY_TYPE attribute
051 * of the MDSCHEMA_PROPERTIES data set.
052 * For example, XMLA specifies that the value 9 (0x1 | 0x8) means that a
053 * property belongs to a member and is a binary large object (BLOB).
054 * In this case, {@link Property#getType} will return the {@link Set}
055 * {{@link #MEMBER}, {@link #BLOB}}.
056 */
057 enum TypeFlag implements XmlaConstant {
058 /**
059 * Identifies a property of a member. This property can be used in the
060 * DIMENSION PROPERTIES clause of the SELECT statement.
061 */
062 MEMBER(1),
063
064 /**
065 * Identifies a property of a cell. This property can be used in the
066 * CELL PROPERTIES clause that occurs at the end of the SELECT
067 * statement.
068 */
069 CELL(2),
070
071 /**
072 * Identifies an internal property.
073 */
074 SYSTEM(4),
075
076 /**
077 * Identifies a property which contains a binary large object (blob).
078 */
079 BLOB(8);
080
081 private final int xmlaOrdinal;
082
083 public static final Set<TypeFlag> CELL_TYPE_FLAG =
084 Collections.unmodifiableSet(
085 Olap4jUtil.enumSetOf(TypeFlag.CELL));
086 public static final Set<TypeFlag> MEMBER_TYPE_FLAG =
087 Collections.unmodifiableSet(
088 Olap4jUtil.enumSetOf(TypeFlag.MEMBER));
089 private static final DictionaryImpl<TypeFlag> DICTIONARY =
090 DictionaryImpl.forClass(TypeFlag.class);
091
092 private TypeFlag(int xmlaOrdinal) {
093 this.xmlaOrdinal = xmlaOrdinal;
094 }
095
096 public String xmlaName() {
097 return "MDPROP_" + name();
098 }
099
100 public String getDescription() {
101 return null;
102 }
103
104 public int xmlaOrdinal() {
105 return xmlaOrdinal;
106 }
107
108 /**
109 * Per {@link org.olap4j.metadata.XmlaConstant}, returns a dictionary
110 * of all values of this enumeration.
111 *
112 * @return Dictionary of all values
113 */
114 public static Dictionary<TypeFlag> getDictionary() {
115 return DICTIONARY;
116 }
117 }
118
119 /**
120 * Enumeration of the system properties available for every {@link Member}.
121 *
122 * <p>The following properties are mandatory for members:<ul>
123 * <li>{@link #CATALOG_NAME}</li>
124 * <li>{@link #SCHEMA_NAME}</li>
125 * <li>{@link #CUBE_NAME}</li>
126 * <li>{@link #DIMENSION_UNIQUE_NAME}</li>
127 * <li>{@link #HIERARCHY_UNIQUE_NAME}</li>
128 * <li>{@link #LEVEL_UNIQUE_NAME}</li>
129 * <li>{@link #LEVEL_NUMBER}</li>
130 * <li>{@link #MEMBER_UNIQUE_NAME}</li>
131 * <li>{@link #MEMBER_NAME}</li>
132 * <li>{@link #MEMBER_TYPE}</li>
133 * <li>{@link #MEMBER_GUID}</li>
134 * <li>{@link #MEMBER_CAPTION}</li>
135 * <li>{@link #MEMBER_ORDINAL}</li>
136 * <li>{@link #CHILDREN_CARDINALITY}</li>
137 * <li>{@link #PARENT_LEVEL}</li>
138 * <li>{@link #PARENT_UNIQUE_NAME}</li>
139 * <li>{@link #PARENT_COUNT}</li>
140 * <li>{@link #DESCRIPTION}</li>
141 * </ul>
142 */
143 enum StandardMemberProperty implements Property {
144
145 /**
146 * Definition of the property which
147 * holds the name of the current catalog.
148 */
149 CATALOG_NAME(
150 Datatype.STRING,
151 10,
152 false,
153 null,
154 "Optional. The name of the catalog to which this member belongs. "
155 + "NULL if the provider does not support catalogs."),
156
157 /**
158 * Definition of the property which
159 * holds the name of the current schema.
160 */
161 SCHEMA_NAME(
162 Datatype.STRING,
163 11,
164 false,
165 null,
166 "Optional. The name of the schema to which this member belongs. "
167 + "NULL if the provider does not support schemas."),
168
169 /**
170 * Definition of the property which
171 * holds the name of the current cube.
172 */
173 CUBE_NAME(
174 Datatype.STRING,
175 12,
176 false,
177 null, "Required. Name of the cube to which this member belongs."),
178
179 /**
180 * Definition of the property which
181 * holds the unique name of the current dimension.
182 */
183 DIMENSION_UNIQUE_NAME(
184 Datatype.STRING,
185 13,
186 false,
187 null,
188 "Required. Unique name of the dimension to which this member "
189 + "belongs. For providers that generate unique names by "
190 + "qualification, each component of this name is delimited."),
191
192 /**
193 * Definition of the property which
194 * holds the unique name of the current hierarchy.
195 */
196 HIERARCHY_UNIQUE_NAME(
197 Datatype.STRING,
198 14,
199 false,
200 null,
201 "Required. Unique name of the hierarchy. If the member belongs to "
202 + "more than one hierarchy, there is one row for each hierarchy "
203 + "to which it belongs. For providers that generate unique names "
204 + "by qualification, each component of this name is delimited."),
205
206 /**
207 * Definition of the property which
208 * holds the unique name of the current level.
209 */
210 LEVEL_UNIQUE_NAME(
211 Datatype.STRING,
212 15,
213 false,
214 null,
215 "Required. Unique name of the level to which the member belongs. "
216 + "For providers that generate unique names by qualification, "
217 + "each component of this name is delimited."),
218
219 /**
220 * Definition of the property which
221 * holds the ordinal of the current level.
222 */
223 LEVEL_NUMBER(
224 Datatype.UNSIGNED_INTEGER,
225 16,
226 false,
227 null,
228 "Required. The distance of the member from the root of the "
229 + "hierarchy. The root level is zero."),
230
231 /**
232 * Definition of the property which
233 * holds the ordinal of the current member.
234 */
235 MEMBER_ORDINAL(
236 Datatype.UNSIGNED_INTEGER,
237 17,
238 false,
239 null,
240 "Required. Ordinal number of the member. Sort rank of the member "
241 + "when members of this dimension are sorted in their natural "
242 + "sort order. If providers do not have the concept of natural "
243 + "ordering, this should be the rank when sorted by MEMBER_NAME."),
244
245 /**
246 * Definition of the property which
247 * holds the name of the current member.
248 */
249 MEMBER_NAME(
250 Datatype.STRING,
251 18,
252 false,
253 null,
254 "Required. Name of the member."),
255
256 /**
257 * Definition of the property which
258 * holds the unique name of the current member.
259 */
260 MEMBER_UNIQUE_NAME(
261 Datatype.STRING,
262 19,
263 false,
264 null,
265 "Required. Unique name of the member. For providers that generate "
266 + "unique names by qualification, each component of this name is "
267 + "delimited."),
268
269 /**
270 * Definition of the property which
271 * holds the type of the member.
272 */
273 MEMBER_TYPE(
274 Datatype.STRING,
275 20,
276 false,
277 null,
278 "Required. Type of the member. Can be one of the following values: "
279 + "MDMEMBER_Datatype.TYPE_REGULAR, MDMEMBER_Datatype.TYPE_ALL, "
280 + "MDMEMBER_Datatype.TYPE_FORMULA, MDMEMBER_Datatype.TYPE_MEASURE, "
281 + "MDMEMBER_Datatype.TYPE_UNKNOWN. MDMEMBER_Datatype.TYPE_FORMULA "
282 + "takes precedence over MDMEMBER_Datatype.TYPE_MEASURE. "
283 + "Therefore, if there is a formula (calculated) member on the "
284 + "Measures dimension, it is listed as "
285 + "MDMEMBER_Datatype.TYPE_FORMULA."),
286
287 /**
288 * Definition of the property which
289 * holds the GUID of the member
290 */
291 MEMBER_GUID(
292 Datatype.STRING,
293 21,
294 false,
295 null,
296 "Optional. Member GUID. NULL if no GUID exists."),
297
298 /**
299 * Definition of the property which
300 * holds the label or caption associated with the member, or the
301 * member's name if no caption is defined.
302 */
303 MEMBER_CAPTION(
304 Datatype.STRING,
305 22,
306 false,
307 null,
308 "Required. A label or caption associated with the member. Used "
309 + "primarily for display purposes. If a caption does not exist, "
310 + "MEMBER_NAME is returned."),
311
312 /**
313 * Definition of the property which holds the
314 * number of children this member has.
315 */
316 CHILDREN_CARDINALITY(
317 Datatype.UNSIGNED_INTEGER,
318 23,
319 false,
320 null,
321 "Required. Number of children that the member has. This can be an "
322 + "estimate, so consumers should not rely on this to be the exact "
323 + "count. Providers should return the best estimate possible."),
324
325 /**
326 * Definition of the property which holds the
327 * distance from the root of the hierarchy of this member's parent.
328 */
329 PARENT_LEVEL(
330 Datatype.UNSIGNED_INTEGER,
331 24,
332 false,
333 null,
334 "Required. The distance of the member's parent from the root level "
335 + "of the hierarchy. The root level is zero."),
336
337 /**
338 * Definition of the property which holds the
339 * Name of the current catalog.
340 */
341 PARENT_UNIQUE_NAME(
342 Datatype.STRING,
343 25,
344 false,
345 null,
346 "Required. Unique name of the member's parent. NULL is returned "
347 + "for any members at the root level. For providers that generate "
348 + "unique names by qualification, each component of this name is "
349 + "delimited."),
350
351 /**
352 * Definition of the property which holds the
353 * number of parents that this member has. Generally 1, or 0
354 * for root members.
355 */
356 PARENT_COUNT(
357 Datatype.UNSIGNED_INTEGER,
358 26,
359 false,
360 null,
361 "Required. Number of parents that this member has."),
362
363 /**
364 * Definition of the property which holds the
365 * description of this member.
366 */
367 DESCRIPTION(
368 Datatype.STRING,
369 27,
370 false,
371 null,
372 "Optional. A human-readable description of the member."),
373
374 /**
375 * Definition of the internal property which holds the
376 * name of the system property which determines whether to show a member
377 * (especially a measure or calculated member) in a user interface such
378 * as JPivot.
379 */
380 $visible(
381 Datatype.BOOLEAN,
382 28,
383 true,
384 null,
385 null),
386
387 /**
388 * Definition of the internal property which holds the
389 * value of the member key in the original data type. MEMBER_KEY is for
390 * backward-compatibility. MEMBER_KEY has the same value as KEY0 for
391 * non-composite keys, and MEMBER_KEY property is null for composite
392 * keys.
393 */
394 MEMBER_KEY(
395 Datatype.VARIANT,
396 29,
397 true,
398 null,
399 "Optional. The value of the member key. Null for composite keys."),
400
401 /**
402 * Definition of the boolean property that indicates whether
403 * a member is a placeholder member for an empty position in a
404 * dimension hierarchy.
405 */
406 IS_PLACEHOLDERMEMBER(
407 Datatype.BOOLEAN,
408 30,
409 false,
410 null,
411 "Required. Whether the member is a placeholder member for an empty "
412 + "position in a dimension hierarchy."),
413
414 /**
415 * Definition of the property that indicates whether the member is a
416 * data member.
417 */
418 IS_DATAMEMBER(
419 Datatype.BOOLEAN,
420 31,
421 false,
422 null,
423 "Required. whether the member is a data member"),
424
425 /**
426 * Definition of the property which
427 * holds the level depth of a member.
428 *
429 * <p>Caution: Level depth of members in parent-child hierarchy isn't
430 * from their levels. It's calculated from the underlying data
431 * dynamically.
432 */
433 DEPTH(
434 Datatype.UNSIGNED_INTEGER,
435 43,
436 true,
437 null,
438 "The level depth of a member"),
439
440 /**
441 * Definition of the property which
442 * holds the DISPLAY_INFO required by XML/A.
443 *
444 * <p>Caution: This property's value is calculated based on a specified
445 * MDX query, so its value is dynamic at runtime.
446 */
447 DISPLAY_INFO(
448 Datatype.UNSIGNED_INTEGER,
449 44,
450 false,
451 null,
452 "Display instruction of a member for XML/A"),
453
454 /**
455 * Definition of the property which
456 * holds the value of a cell. Is usually numeric (since most measures
457 * are numeric) but is occasionally another type.
458 */
459 VALUE(
460 Datatype.VARIANT,
461 41,
462 false,
463 null,
464 "The unformatted value of the cell.");
465
466 private final Datatype type;
467 private final String description;
468 private final boolean internal;
469
470 private StandardMemberProperty(
471 Datatype type,
472 int ordinal,
473 boolean internal,
474 Class<? extends Enum> enumClazz,
475 String description)
476 {
477 // assert ordinal == ordinal();
478 this.internal = internal;
479 this.type = type;
480 this.description = description;
481 }
482
483 public String getName() {
484 return name();
485 }
486
487 public String getUniqueName() {
488 return name();
489 }
490
491 public String getCaption() {
492 // NOTE: This caption will be the same in all locales, since
493 // StandardMemberProperty has no way of deducing the current
494 // connection. Providers that wish to localize the caption of
495 // built-in properties should create a wrapper around
496 // StandardMemberProperty that is aware of the current connection or
497 // locale.
498 return name();
499 }
500
501 public String getDescription() {
502 // NOTE: This description will be the same in all locales, since
503 // StandardMemberProperty has no way of deducing the current
504 // connection. Providers that wish to localize the description of
505 // built-in properties should create a wrapper around
506 // StandardCellProperty that is aware of the current connection or
507 // locale.
508 return description;
509 }
510
511 public Datatype getDatatype() {
512 return type;
513 }
514
515 public Set<TypeFlag> getType() {
516 return TypeFlag.MEMBER_TYPE_FLAG;
517 }
518
519 public ContentType getContentType() {
520 return ContentType.REGULAR;
521 }
522
523 public boolean isInternal() {
524 return internal;
525 }
526
527 public boolean isVisible() {
528 return !internal;
529 }
530 }
531
532 /**
533 * Enumeration of the system properties available for every
534 * {@link org.olap4j.Cell}.
535 *
536 * <p>The following propertiess are mandatory for cells:<ul>
537 * <li>{@link #BACK_COLOR}</li>
538 * <li>{@link #CELL_EVALUATION_LIST}</li>
539 * <li>{@link #CELL_ORDINAL}</li>
540 * <li>{@link #FORE_COLOR}</li>
541 * <li>{@link #FONT_NAME}</li>
542 * <li>{@link #FONT_SIZE}</li>
543 * <li>{@link #FONT_FLAGS}</li>
544 * <li>{@link #FORMAT_STRING}</li>
545 * <li>{@link #FORMATTED_VALUE}</li>
546 * <li>{@link #NON_EMPTY_BEHAVIOR}</li>
547 * <li>{@link #SOLVE_ORDER}</li>
548 * <li>{@link #VALUE}</li>
549 * </ul>
550 */
551 enum StandardCellProperty implements Property {
552 BACK_COLOR(
553 Datatype.STRING,
554 30,
555 false,
556 null,
557 "The background color for displaying the VALUE or FORMATTED_VALUE "
558 + "property. For more information, see FORE_COLOR and BACK_COLOR "
559 + "Contents."),
560
561 CELL_EVALUATION_LIST(
562 Datatype.STRING,
563 31,
564 false,
565 null,
566 "The semicolon-delimited list of evaluated formulas applicable to "
567 + "the cell, in order from lowest to highest solve order. For more "
568 + "information about solve order, see Understanding Pass Order and "
569 + "Solve Order"),
570
571 CELL_ORDINAL(
572 Datatype.UNSIGNED_INTEGER,
573 32,
574 false,
575 null,
576 "The ordinal number of the cell in the dataset."),
577
578 FORE_COLOR(
579 Datatype.STRING,
580 33,
581 false,
582 null,
583 "The foreground color for displaying the VALUE or FORMATTED_VALUE "
584 + "property. For more information, see FORE_COLOR and BACK_COLOR "
585 + "Contents."),
586
587 FONT_NAME(
588 Datatype.STRING,
589 34,
590 false,
591 null,
592 "The font to be used to display the VALUE or FORMATTED_VALUE "
593 + "property."),
594
595 FONT_SIZE(
596 Datatype.STRING,
597 35,
598 false,
599 null,
600 "Font size to be used to display the VALUE or FORMATTED_VALUE "
601 + "property."),
602
603 FONT_FLAGS(
604 Datatype.UNSIGNED_INTEGER,
605 36,
606 false,
607 XmlaConstants.FontFlag.class,
608 "The bitmask detailing effects on the font. The value is the "
609 + "result of a bitwise OR operation of one or more of the "
610 + "following constants: MDFF_BOLD = 1, MDFF_ITALIC = 2, "
611 + "MDFF_UNDERLINE = 4, MDFF_STRIKEOUT = 8. For example, the value "
612 + "5 represents the combination of bold (MDFF_BOLD) and underline "
613 + "(MDFF_UNDERLINE) font effects."),
614
615 /**
616 * Definition of the property which
617 * holds the formatted value of a cell.
618 */
619 FORMATTED_VALUE(
620 Datatype.STRING,
621 37,
622 false,
623 null,
624 "The character string that represents a formatted display of the "
625 + "VALUE property."),
626
627 /**
628 * Definition of the property which
629 * holds the format string used to format cell values.
630 */
631 FORMAT_STRING(
632 Datatype.STRING,
633 38,
634 false,
635 null,
636 "The format string used to create the FORMATTED_VALUE property "
637 + "value. For more information, see FORMAT_STRING Contents."),
638
639 NON_EMPTY_BEHAVIOR(
640 Datatype.STRING,
641 39,
642 false,
643 null,
644 "The measure used to determine the behavior of calculated members "
645 + "when resolving empty cells."),
646
647 /**
648 * Definition of the property which
649 * determines the solve order of a calculated member with respect to
650 * other calculated members.
651 */
652 SOLVE_ORDER(
653 Datatype.INTEGER,
654 40,
655 false,
656 null,
657 "The solve order of the cell."),
658
659 /**
660 * Definition of the property which
661 * holds the value of a cell. Is usually numeric (since most measures
662 * are numeric) but is occasionally another type.
663 */
664 VALUE(
665 Datatype.VARIANT,
666 41,
667 false,
668 null,
669 "The unformatted value of the cell."),
670
671 /**
672 * Definition of the property which
673 * holds the datatype of a cell. Valid values are "String",
674 * "Numeric", "Integer". The property's value derives from the
675 * "datatype" attribute of the "Measure" element; if the
676 * datatype attribute is not specified, the datatype is
677 * "Numeric" by default, except measures whose aggregator is
678 * "Count", whose datatype is "Integer".
679 */
680 DATATYPE(
681 Datatype.STRING,
682 42,
683 false,
684 null,
685 "The datatype of the cell."),
686
687 LANGUAGE(
688 Datatype.UNSIGNED_INTEGER,
689 0,
690 false,
691 null,
692 "The locale where the FORMAT_STRING will be applied. LANGUAGE is "
693 + "usually used for currency conversion."),
694
695 ACTION_TYPE(
696 Datatype.UNSIGNED_INTEGER,
697 0,
698 false,
699 null,
700 "A bitmask that indicates which types of actions exist on the "
701 + "cell."),
702
703 UPDATEABLE(
704 Datatype.UNSIGNED_INTEGER,
705 0,
706 false,
707 XmlaConstants.Updateable.class,
708 "A value that indicates whether the cell can be updated.");
709
710 /**
711 * The datatype of the property.
712 */
713 private final Datatype type;
714 private final String description;
715 private final boolean internal;
716
717 private StandardCellProperty(
718 Datatype type,
719 int ordinal,
720 boolean internal,
721 Class<? extends Enum> enumClazz,
722 String description)
723 {
724 this.type = type;
725 this.internal = internal;
726 this.description = description;
727 }
728
729 public Datatype getDatatype() {
730 return type;
731 }
732
733 public Set<TypeFlag> getType() {
734 return TypeFlag.CELL_TYPE_FLAG;
735 }
736
737 public String getName() {
738 return name();
739 }
740
741 public String getUniqueName() {
742 return name();
743 }
744
745 public String getCaption() {
746 // NOTE: This caption will be the same in all locales, since
747 // StandardCellProperty has no way of deducing the current
748 // connection. Providers that wish to localize the caption of
749 // built-in properties should create a wrapper around
750 // StandardCellProperty that is aware of the current connection or
751 // locale.
752 return name();
753 }
754
755 public String getDescription() {
756 // NOTE: This description will be the same in all locales, since
757 // StandardCellProperty has no way of deducing the current
758 // connection. Providers that wish to localize the description of
759 // built-in properties should create a wrapper around
760 // StandardCellProperty that is aware of the current connection or
761 // locale.
762 return description;
763 }
764
765 public boolean isInternal() {
766 return internal;
767 }
768
769 public boolean isVisible() {
770 return !internal;
771 }
772
773 public ContentType getContentType() {
774 return ContentType.REGULAR;
775 }
776 }
777
778 /**
779 * Enumeration of the types of a <code>Property</code>.
780 *
781 * <p>The values are as specified by XMLA.
782 * For example, XMLA specifies MD_PROPTYPE_CAPTION with ordinal 0x21,
783 * which corresponds to the value {@link #CAPTION},
784 * whose {@link #xmlaOrdinal} is 0x21.
785 */
786 enum ContentType implements XmlaConstant {
787 REGULAR(0x00),
788 ID(0x01),
789 RELATION_TO_PARENT(0x02),
790 ROLLUP_OPERATOR(0x03),
791 ORG_TITLE(0x11),
792 CAPTION(0x21),
793 CAPTION_SHORT(0x22),
794 CAPTION_DESCRIPTION(0x23),
795 CAPTION_ABREVIATION(0x24),
796 WEB_URL(0x31),
797 WEB_HTML(0x32),
798 WEB_XML_OR_XSL(0x33),
799 WEB_MAIL_ALIAS(0x34),
800 ADDRESS(0x41),
801 ADDRESS_STREET(0x42),
802 ADDRESS_HOUSE(0x43),
803 ADDRESS_CITY(0x44),
804 ADDRESS_STATE_OR_PROVINCE(0x45),
805 ADDRESS_ZIP(0x46),
806 ADDRESS_QUARTER(0x47),
807 ADDRESS_COUNTRY(0x48),
808 ADDRESS_BUILDING(0x49),
809 ADDRESS_ROOM(0x4A),
810 ADDRESS_FLOOR(0x4B),
811 ADDRESS_FAX(0x4C),
812 ADDRESS_PHONE(0x4D),
813 GEO_CENTROID_X(0x61),
814 GEO_CENTROID_Y(0x62),
815 GEO_CENTROID_Z(0x63),
816 GEO_BOUNDARY_TOP(0x64),
817 GEO_BOUNDARY_LEFT(0x65),
818 GEO_BOUNDARY_BOTTOM(0x66),
819 GEO_BOUNDARY_RIGHT(0x67),
820 GEO_BOUNDARY_FRONT(0x68),
821 GEO_BOUNDARY_REAR(0x69),
822 GEO_BOUNDARY_POLYGON(0x6A),
823 PHYSICAL_SIZE(0x71),
824 PHYSICAL_COLOR(0x72),
825 PHYSICAL_WEIGHT(0x73),
826 PHYSICAL_HEIGHT(0x74),
827 PHYSICAL_WIDTH(0x75),
828 PHYSICAL_DEPTH(0x76),
829 PHYSICAL_VOLUME(0x77),
830 PHYSICAL_DENSITY(0x78),
831 PERSON_FULL_NAME(0x82),
832 PERSON_FIRST_NAME(0x83),
833 PERSON_LAST_NAME(0x84),
834 PERSON_MIDDLE_NAME(0x85),
835 PERSON_DEMOGRAPHIC(0x86),
836 PERSON_CONTACT(0x87),
837 QTY_RANGE_LOW(0x91),
838 QTY_RANGE_HIGH(0x92),
839 FORMATTING_COLOR(0xA1),
840 FORMATTING_ORDER(0xA2),
841 FORMATTING_FONT(0xA3),
842 FORMATTING_FONT_EFFECTS(0xA4),
843 FORMATTING_FONT_SIZE(0xA5),
844 FORMATTING_SUB_TOTAL(0xA6),
845 DATE(0xB1),
846 DATE_START(0xB2),
847 DATE_ENDED(0xB3),
848 DATE_CANCELED(0xB4),
849 DATE_MODIFIED(0xB5),
850 DATE_DURATION(0xB6),
851 VERSION(0xC1);
852
853 private final int xmlaOrdinal;
854 private static final DictionaryImpl<ContentType> DICTIONARY =
855 DictionaryImpl.forClass(ContentType.class);
856
857 private ContentType(int xmlaOrdinal) {
858 this.xmlaOrdinal = xmlaOrdinal;
859 }
860
861 public String xmlaName() {
862 return "MD_PROPTYPE_" + name();
863 }
864
865 public String getDescription() {
866 return null;
867 }
868
869 public int xmlaOrdinal() {
870 return xmlaOrdinal;
871 }
872
873 /**
874 * Per {@link org.olap4j.metadata.XmlaConstant}, returns a dictionary
875 * of all values of this enumeration.
876 *
877 * @return Dictionary of all values
878 */
879 public static Dictionary<ContentType> getDictionary() {
880 return DICTIONARY;
881 }
882 }
883 }
884
885 // End Property.java