001/*
002// This software is subject to the terms of the Eclipse Public License v1.0
003// Agreement, available at the following URL:
004// http://www.eclipse.org/legal/epl-v10.html.
005// You must accept the terms of that agreement to use this software.
006//
007// Copyright (C) 2007-2009 Pentaho
008// All Rights Reserved.
009*/
010package mondrian.calc;
011
012import java.util.Arrays;
013import java.util.List;
014
015/**
016 * Enumeration of ways that a compiled expression can return its result to
017 * its caller.
018 *
019 * @author jhyde
020 */
021public 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    public static final List<ResultStyle> ANY_ONLY =
124        Arrays.asList(
125            ANY);
126}
127
128// End ResultStyle.java