001 /*
002 // This software is subject to the terms of the Common Public License
003 // Agreement, available at the following URL:
004 // http://www.opensource.org/licenses/cpl.html.
005 // Copyright (C) 2007-2007 Julian Hyde
006 // All Rights Reserved.
007 // You must accept the terms of that agreement to use this software.
008 */
009 package mondrian.calc;
010
011 import java.util.List;
012 import java.util.Arrays;
013
014 /**
015 * Enumeration of ways that a compiled expression can return its result to
016 * its caller.
017 *
018 * @version $Id: //open/mondrian-release/3.0/src/main/mondrian/calc/ResultStyle.java#2 $
019 * @author jhyde
020 */
021 public enum ResultStyle {
022 /**
023 * Indicates that caller will accept any applicable style.
024 */
025 ANY,
026
027 /**
028 * Indicates that the expression returns its result as a list which may
029 * safely be modified by the caller.
030 */
031 MUTABLE_LIST,
032
033 /**
034 * Indicates that the expression returns its result as a list which must
035 * not be modified by the caller.
036 */
037 LIST,
038
039 /**
040 * Indicates that the expression returns its result as an Iterable
041 * which must not be modified by the caller.
042 */
043 ITERABLE,
044
045 /**
046 * Indicates that the expression results its result as an immutable
047 * value. This is typical for expressions which return string, datetime and
048 * numeric values.
049 */
050 VALUE,
051
052 /**
053 * Indicates that the expression results its result as an immutable
054 * value which will never be null. This is typical for expressions which
055 * return string, datetime and numeric values.
056 */
057 VALUE_NOT_NULL;
058
059 // ---------------------------------------------------------------
060 // There follow a set of convenience constants for commonly-used
061 // collections of result styles.
062
063 public static final List<ResultStyle> ANY_LIST =
064 Arrays.asList(
065 ANY);
066
067 public static final List<ResultStyle> ITERABLE_ONLY =
068 Arrays.asList(
069 ITERABLE);
070
071 public static final List<ResultStyle> MUTABLELIST_ONLY =
072 Arrays.asList(
073 MUTABLE_LIST);
074
075 public static final List<ResultStyle> LIST_ONLY =
076 Arrays.asList(
077 LIST);
078
079 public static final List<ResultStyle> ITERABLE_ANY =
080 Arrays.asList(
081 ITERABLE,
082 ANY);
083
084 public static final List<ResultStyle> ITERABLE_LIST =
085 Arrays.asList(
086 ITERABLE,
087 LIST);
088
089 public static final List<ResultStyle> ITERABLE_MUTABLELIST =
090 Arrays.asList(
091 ITERABLE,
092 MUTABLE_LIST);
093
094 public static final List<ResultStyle> ITERABLE_LIST_MUTABLELIST =
095 Arrays.asList(
096 ITERABLE,
097 LIST,
098 MUTABLE_LIST);
099
100 public static final List<ResultStyle> LIST_MUTABLELIST =
101 Arrays.asList(
102 LIST,
103 MUTABLE_LIST);
104
105 public static final List<ResultStyle> MUTABLELIST_LIST =
106 Arrays.asList(
107 MUTABLE_LIST,
108 LIST);
109
110 public static final List<ResultStyle> ITERABLE_LIST_MUTABLELIST_ANY =
111 Arrays.asList(
112 ITERABLE,
113 LIST,
114 MUTABLE_LIST,
115 ANY);
116
117 public static final List<ResultStyle> ITERABLE_MUTABLELIST_LIST =
118 Arrays.asList(
119 ITERABLE,
120 MUTABLE_LIST,
121 LIST);
122 }
123
124 // End ResultStyle.java