Package mondrian.olap

Class Util

  • Direct Known Subclasses:
    FunUtil

    public class Util
    extends org.eigenbase.xom.XOMUtil
    Utility functions used throughout mondrian. All methods are static.
    Since:
    6 August, 2001
    Author:
    jhyde
    • Field Detail

      • nl

        public static final String nl
      • nullValue

        public static final Object nullValue
        Placeholder which indicates a value NULL.
      • EmptyValue

        public static final Object EmptyValue
        Placeholder which indicates an EMPTY value.
      • JVM_INSTANCE_UUID

        public static final UUID JVM_INSTANCE_UUID
        Unique id for this JVM instance. Part of a key that ensures that if two JVMs in the same cluster have a data-source with the same identity-hash-code, they will be treated as different data-sources, and therefore caches will not be incorrectly shared.
      • IBM_JVM

        public static final boolean IBM_JVM
        Whether this is an IBM JVM.
      • JdbcVersion

        public static final int JdbcVersion
        What version of JDBC? Returns:
        • 0x0401 in JDK 1.7 and higher
        • 0x0400 in JDK 1.6
        • 0x0300 otherwise
      • Retrowoven

        public static final boolean Retrowoven
        Whether the code base has re-engineered using retroweaver. If this is the case, some functionality is not available, but a lot of things are available via UtilCompatible. Retroweaver has some problems involving EnumSet.
      • DEBUG

        public static final boolean DEBUG
        Flag to control expensive debugging. (More expensive than merely enabling assertions: as we know, a lot of people run with assertions enabled.)
        See Also:
        Constant Field Values
    • Constructor Detail

      • Util

        public Util()
    • Method Detail

      • isNull

        public static boolean isNull​(Object o)
      • isSorted

        public static <T> boolean isSorted​(List<T> list)
        Returns whether a list is strictly sorted.
        Parameters:
        list - List
        Returns:
        whether list is sorted
      • digestSha256

        public static byte[] digestSha256​(String value)
        Parses a string and returns a SHA-256 checksum of it.
        Parameters:
        value - The source string to parse.
        Returns:
        A checksum of the source string.
      • digestMd5

        public static byte[] digestMd5​(String value)
        Creates an MD5 hash of a String.
        Parameters:
        value - String to create one way hash upon.
        Returns:
        MD5 hash.
      • getExecutorService

        public static ExecutorService getExecutorService​(int maximumPoolSize,
                                                         int corePoolSize,
                                                         long keepAliveTime,
                                                         String name,
                                                         RejectedExecutionHandler rejectionPolicy)
        Creates an ExecutorService object backed by a thread pool.
        Parameters:
        maximumPoolSize - Maximum number of concurrent threads.
        corePoolSize - Minimum number of concurrent threads to maintain in the pool, even if they are idle.
        keepAliveTime - Time, in seconds, for which to keep alive unused threads.
        name - The name of the threads.
        rejectionPolicy - The rejection policy to enforce.
        Returns:
        An executor service preconfigured.
      • getScheduledExecutorService

        public static ScheduledExecutorService getScheduledExecutorService​(int maxNbThreads,
                                                                           String name)
        Creates an ScheduledExecutorService object backed by a thread pool with a fixed number of threads..
        Parameters:
        maxNbThreads - Maximum number of concurrent threads.
        name - The name of the threads.
        Returns:
        An scheduled executor service preconfigured.
      • mdxEncodeString

        public static String mdxEncodeString​(String st)
        Deprecated.
        Will be removed in 4.0
        Encodes string for MDX (escapes ] as ]] inside a name).
      • quoteForMdx

        public static String quoteForMdx​(String val)
        Converts a string into a double-quoted string.
      • quoteMdxIdentifier

        public static String quoteMdxIdentifier​(String id)
        Return string quoted in [...]. For example, "San Francisco" becomes "[San Francisco]"; "a [bracketed] string" becomes "[a [bracketed]] string]".
      • quoteMdxIdentifier

        public static void quoteMdxIdentifier​(String id,
                                              StringBuilder buf)
      • quoteMdxIdentifier

        public static String quoteMdxIdentifier​(List<Id.Segment> ids)
        Return identifiers quoted in [...].[...]. For example, {"Store", "USA", "California"} becomes "[Store].[USA].[California]".
      • quoteJavaString

        public static String quoteJavaString​(String s)
        Quotes a string literal for Java or JavaScript.
        Parameters:
        s - Unquoted literal
        Returns:
        Quoted string literal
      • equals

        public static boolean equals​(Object s,
                                     Object t)
        Returns true if two objects are equal, or are both null.
        Parameters:
        s - First object
        t - Second object
        Returns:
        Whether objects are equal or both null
      • equalName

        public static boolean equalName​(String s,
                                        String t)
        Returns whether two names are equal. Takes into account the case sensitive option. Names may be null.
      • equal

        public static boolean equal​(String s,
                                    String t,
                                    boolean matchCase)
        Tests two strings for equality, optionally ignoring case.
        Parameters:
        s - First string
        t - Second string
        matchCase - Whether to perform case-sensitive match
        Returns:
        Whether strings are equal
      • caseSensitiveCompareName

        public static int caseSensitiveCompareName​(String s,
                                                   String t)
        Compares two names. if case sensitive flag is false, apply finer grain difference with case sensitive Takes into account the case sensitive option. Names must not be null.
      • normalizeName

        public static String normalizeName​(String s)
        Generates a normalized form of a name, for use as a key into a map. Returns the upper case name if MondrianProperties.CaseSensitive is true, the name unchanged otherwise.
      • compareKey

        public static int compareKey​(Object k1,
                                     Object k2)
        Returns the result of ((Comparable) k1).compareTo(k2), with special-casing for the fact that Boolean only became comparable in JDK 1.5.
        See Also:
        Comparable.compareTo(T)
      • compare

        public static int compare​(int i0,
                                  int i1)
        Compares integer values.
        Parameters:
        i0 - First integer
        i1 - Second integer
        Returns:
        Comparison of integers
      • replace

        public static String replace​(String s,
                                     String find,
                                     String replace)
        Returns a string with every occurrence of a seek string replaced with another.
      • replace

        public static StringBuilder replace​(StringBuilder buf,
                                            int start,
                                            String find,
                                            String replace)
        Replaces all occurrences of a string in a buffer with another.
        Parameters:
        buf - String buffer to act on
        start - Ordinal within find to start searching
        find - String to find
        replace - String to replace it with
        Returns:
        The string buffer
      • parseIdentifier

        public static List<Id.Segment> parseIdentifier​(String s)
        Parses an MDX identifier such as [Foo].[Bar].Baz.&Key&Key2 and returns the result as a list of segments.
        Parameters:
        s - MDX identifier
        Returns:
        List of segments
      • implode

        public static String implode​(List<Id.Segment> names)
        Converts an array of name parts {"part1", "part2"} into a single string "[part1].[part2]". If the names contain "]" they are escaped as "]]".
      • makeFqName

        public static String makeFqName​(String name)
      • lookupCompound

        public static OlapElement lookupCompound​(SchemaReader schemaReader,
                                                 OlapElement parent,
                                                 List<Id.Segment> names,
                                                 boolean failIfNotFound,
                                                 int category,
                                                 MatchType matchType)
        Resolves a name such as '[Products].[Product Department].[Produce]' by resolving the components ('Products', and so forth) one at a time.
        Parameters:
        schemaReader - Schema reader, supplies access-control context
        parent - Parent element to search in
        names - Exploded compound name, such as {"Products", "Product Department", "Produce"}
        failIfNotFound - If the element is not found, determines whether to return null or throw an error
        category - Type of returned element, a Category value; Category.Unknown if it doesn't matter.
        See Also:
        parseIdentifier(String)
      • lookup

        public static Exp lookup​(Query q,
                                 List<Id.Segment> nameParts,
                                 boolean allowProp)
        Converts an identifier into an expression by resolving its parts into an OLAP object (dimension, hierarchy, level or member) within the context of a query.

        If allowProp is true, also allows property references from valid members, for example [Measures].[Unit Sales].FORMATTED_VALUE. In this case, the result will be a ResolvedFunCall.

        Parameters:
        q - Query expression belongs to
        nameParts - Parts of the identifier
        allowProp - Whether to allow property references
        Returns:
        OLAP object or property reference
      • lookup

        public static Exp lookup​(Query q,
                                 SchemaReader schemaReader,
                                 List<Id.Segment> segments,
                                 boolean allowProp)
        Converts an identifier into an expression by resolving its parts into an OLAP object (dimension, hierarchy, level or member) within the context of a query.

        If allowProp is true, also allows property references from valid members, for example [Measures].[Unit Sales].FORMATTED_VALUE. In this case, the result will be a ResolvedFunCall.

        Parameters:
        q - Query expression belongs to
        schemaReader - Schema reader
        segments - Parts of the identifier
        allowProp - Whether to allow property references
        Returns:
        OLAP object or property reference
      • createExpr

        public static Exp createExpr​(OlapElement element)
        Converts an olap element (dimension, hierarchy, level or member) into an expression representing a usage of that element in an MDX statement.
      • lookupHierarchyRootMember

        public static Member lookupHierarchyRootMember​(SchemaReader reader,
                                                       Hierarchy hierarchy,
                                                       Id.NameSegment memberName,
                                                       MatchType matchType)
        Finds a root member of a hierarchy with a given name.
        Parameters:
        hierarchy - Hierarchy
        memberName - Name of root member
        Returns:
        Member, or null if not found
      • lookupHierarchyLevel

        public static Level lookupHierarchyLevel​(Hierarchy hierarchy,
                                                 String s)
        Finds a named level in this hierarchy. Returns null if there is no such level.
      • getMemberOrdinalInParent

        public static int getMemberOrdinalInParent​(SchemaReader reader,
                                                   Member member)
        Finds the zero based ordinal of a Member among its siblings.
      • getFirstDescendantOnLevel

        public static Member getFirstDescendantOnLevel​(SchemaReader reader,
                                                       Member parent,
                                                       Level level)
        returns the first descendant on the level underneath parent. If parent = [Time].[1997] and level = [Time].[Month], then the member [Time].[1997].[Q1].[1] will be returned
      • isEmpty

        public static boolean isEmpty​(String s)
        Returns whether a string is null or empty.
      • singleQuoteString

        public static String singleQuoteString​(String val)
        Encloses a value in single-quotes, to make a SQL string value. Examples: singleQuoteForSql(null) yields NULL; singleQuoteForSql("don't") yields 'don''t'.
      • singleQuoteString

        public static void singleQuoteString​(String val,
                                             StringBuilder buf)
        Encloses a value in single-quotes, to make a SQL string value. Examples: singleQuoteForSql(null) yields NULL; singleQuoteForSql("don't") yields 'don''t'.
      • createRandom

        public static Random createRandom​(long seed)
        Creates a random number generator.
        Parameters:
        seed - Seed for random number generator. If 0, generate a seed from the system clock and print the value chosen. (This is effectively non-deterministic.) If -1, generate a seed from an internal random number generator. (This is deterministic, but ensures that different tests have different seeds.)
        Returns:
        A random number generator.
      • isValidProperty

        public static boolean isValidProperty​(String propertyName,
                                              Level level)
        Returns whether a property is valid for a member of a given level. It is valid if the property is defined at the level or at an ancestor level, or if the property is a standard property such as "FORMATTED_VALUE".
        Parameters:
        propertyName - Property name
        level - Level
        Returns:
        Whether property is valid
      • lookupProperty

        public static Property lookupProperty​(Level level,
                                              String propertyName)
        Finds a member property called propertyName at, or above, level.
      • deprecated

        public static <T> T deprecated​(T reason)
        Deprecated.
        Insert a call to this method if you want to flag a piece of undesirable code.
      • deprecated

        public static <T> T deprecated​(T reason,
                                       boolean fail)
        Deprecated.
        Insert a call to this method if you want to flag a piece of undesirable code.
      • needToImplement

        public static RuntimeException needToImplement​(Object o)
        Returns an exception which indicates that a particular piece of functionality should work, but a developer has not implemented it yet.
      • badValue

        public static <T extends Enum<T>> RuntimeException badValue​(Enum<T> anEnum)
        Returns an exception indicating that we didn't expect to find this value here.
      • wildcardToRegexp

        public static String wildcardToRegexp​(List<String> wildcards)
        Converts a list of SQL-style patterns into a Java regular expression.

        For example, {"Foo_", "Bar%BAZ"} becomes "Foo.|Bar.*BAZ".

        Parameters:
        wildcards - List of SQL-style wildcard expressions
        Returns:
        Regular expression
      • camelToUpper

        public static String camelToUpper​(String s)
        Converts a camel-case name to an upper-case name with underscores.

        For example, camelToUpper("FooBar") returns "FOO_BAR".

        Parameters:
        s - Camel-case string
        Returns:
        Upper-case string
      • parseCommaList

        public static List<String> parseCommaList​(String nameCommaList)
        Parses a comma-separated list.

        If a value contains a comma, escape it with a second comma. For example, parseCommaList("x,y,,z") returns {"x", "y,z"}.

        Parameters:
        nameCommaList - List of names separated by commas
        Returns:
        List of names
      • getAnnotation

        public static <T> T getAnnotation​(Method method,
                                          String annotationClassName,
                                          T defaultValue)
        Returns an annotation of a particular class on a method. Returns the default value if the annotation is not present, or in JDK 1.4.
        Parameters:
        method - Method containing annotation
        annotationClassName - Name of annotation class to find
        defaultValue - Value to return if annotation is not present
        Returns:
        value of annotation
      • cancelStatement

        public static void cancelStatement​(Statement stmt)
        Closes and cancels a Statement using the correct methods available on the current Java runtime.

        If errors are encountered while canceling a statement, the message is logged in Util.

        Parameters:
        stmt - The statement to cancel.
      • commaList

        public static <T> String commaList​(String s,
                                           List<T> list)
        Converts a list of a string. For example, commaList("foo", Arrays.asList({"a", "b"})) returns "foo(a, b)".
        Parameters:
        s - Prefix
        list - List
        Returns:
        String representation of string
      • uniquify

        public static String uniquify​(String name,
                                      int maxLength,
                                      Collection<String> nameList)
        Makes a name distinct from other names which have already been used and shorter than a length limit, adds it to the list, and returns it.
        Parameters:
        name - Suggested name, may not be unique
        maxLength - Maximum length of generated name
        nameList - Collection of names already used
        Returns:
        Unique name
      • areOccurencesEqual

        public static <T> boolean areOccurencesEqual​(Collection<T> collection)
        Returns whether a collection contains precisely one distinct element. Returns false if the collection is empty, or if it contains elements that are not the same as each other.
        Parameters:
        collection - Collection
        Returns:
        boolean true if all values are same
      • flatList

        public static <T> List<T> flatList​(T... t)
        Creates a memory-, CPU- and cache-efficient immutable list.
        Type Parameters:
        T - Element type
        Parameters:
        t - Array of members of list
        Returns:
        List containing the given members
      • flatListCopy

        public static <T> List<T> flatListCopy​(T... t)
        Creates a memory-, CPU- and cache-efficient immutable list, always copying the contents.
        Type Parameters:
        T - Element type
        Parameters:
        t - Array of members of list
        Returns:
        List containing the given members
      • flatList

        public static <T> List<T> flatList​(List<T> t)
        Creates a memory-, CPU- and cache-efficient immutable list from an existing list. The list is always copied.
        Type Parameters:
        T - Element type
        Parameters:
        t - Array of members of list
        Returns:
        List containing the given members
      • parseLocale

        public static Locale parseLocale​(String localeString)
        Parses a locale string.

        The inverse operation of Locale.toString().

        Parameters:
        localeString - Locale string, e.g. "en" or "en_US"
        Returns:
        Java locale object
      • parseInterval

        public static Pair<Long,​TimeUnit> parseInterval​(String s,
                                                              TimeUnit unit)
                                                       throws NumberFormatException
        Parses an interval.

        For example, "30s" becomes (30, TimeUnit.SECONDS); "2us" becomes (2, TimeUnit.MICROSECONDS).

        Units m (minutes), h (hours) and d (days) are only available in JDK 1.6 or later, because the corresponding constants are missing from TimeUnit in JDK 1.5.

        Parameters:
        s - String to parse
        unit - Default time unit; may be null
        Returns:
        Pair of value and time unit. Neither pair or its components are null
        Throws:
        NumberFormatException - if unit is not present and there is no default, or if number is not valid
      • convert

        public static List<Id.Segment> convert​(List<org.olap4j.mdx.IdentifierSegment> olap4jSegmentList)
        Converts a list of olap4j-style segments to a list of mondrian-style segments.
        Parameters:
        olap4jSegmentList - List of olap4j segments
        Returns:
        List of mondrian segments
      • convert

        public static Id.Segment convert​(org.olap4j.mdx.IdentifierSegment olap4jSegment)
        Converts an olap4j-style segment to a mondrian-style segment.
        Parameters:
        olap4jSegment - olap4j segment
        Returns:
        mondrian segment
      • filter

        public static <T> Iterable<T> filter​(Iterable<T> iterable,
                                             Util.Functor1<Boolean,​T>... conds)
        Applies a collection of filters to an iterable.
        Type Parameters:
        T -
        Parameters:
        iterable - Iterable
        conds - Zero or more conditions
        Returns:
        Iterable that returns only members of underlying iterable for for which all conditions evaluate to true
      • sort

        public static <T extends ComparableList<T> sort​(Collection<T> collection)
        Sorts a collection of Comparable objects and returns a list.
        Type Parameters:
        T - Element type
        Parameters:
        collection - Collection
        Returns:
        Sorted list
      • sort

        public static <T> List<T> sort​(Collection<T> collection,
                                       Comparator<T> comparator)
        Sorts a collection of objects using a Comparator and returns a list.
        Type Parameters:
        T - Element type
        Parameters:
        collection - Collection
        comparator - Comparator
        Returns:
        Sorted list
      • toOlap4j

        public static List<org.olap4j.mdx.IdentifierSegment> toOlap4j​(List<Id.Segment> segments)
      • toOlap4j

        public static org.olap4j.mdx.IdentifierSegment toOlap4j​(Id.Segment segment)
      • toOlap4j

        public static org.olap4j.mdx.Quoting toOlap4j​(Id.Quoting quoting)
      • matches

        public static boolean matches​(org.olap4j.mdx.IdentifierSegment segment,
                                      String name)
      • newElementNotFoundException

        public static RuntimeException newElementNotFoundException​(int category,
                                                                   org.olap4j.mdx.IdentifierNode identifierNode)
      • safeGet

        public static <T> T safeGet​(Future<T> future,
                                    String message)
        Calls Future.get() and converts any throwable into a non-checked exception.
        Type Parameters:
        T - Result type
        Parameters:
        future - Future
        message - Message to qualify wrapped exception
        Returns:
        Result
      • newIdentityHashSetFake

        public static <T> Set<T> newIdentityHashSetFake()
      • newTimer

        public static Timer newTimer​(String name,
                                     boolean isDaemon)
        Equivalent to Timer(String, boolean). (Introduced in JDK 1.5.)
        Parameters:
        name - the name of the associated thread
        isDaemon - true if the associated thread should run as a daemon
        Returns:
        timer
      • binarySearch

        public static <T extends Comparable<T>> int binarySearch​(T[] ts,
                                                                 int start,
                                                                 int end,
                                                                 T t)
        As Arrays#binarySearch(Object[], int, int, Object), but available pre-JDK 1.6.
      • intersect

        public static <E extends ComparableSortedSet<E> intersect​(SortedSet<E> set1,
                                                                    SortedSet<E> set2)
        Returns the intersection of two sorted sets. Does not modify either set.

        Optimized for the case that both sets are ArraySortedSet.

        Parameters:
        set1 - First set
        set2 - Second set
        Returns:
        Intersection of the sets
      • compareIntegers

        public static int compareIntegers​(int i0,
                                          int i1)
        Compares two integers using the same algorithm as Integer.compareTo(Integer).
        Parameters:
        i0 - First integer
        i1 - Second integer
        Returns:
        Comparison
      • last

        public static <T> T last​(List<T> list)
        Returns the last item in a list.
        Type Parameters:
        T - Element type
        Parameters:
        list - List
        Returns:
        Last item in the list
        Throws:
        IndexOutOfBoundsException - if list is empty
      • only

        public static <T> T only​(List<T> list)
        Returns the sole item in a list.

        If the list has 0 or more than one element, throws.

        Type Parameters:
        T - Element type
        Parameters:
        list - List
        Returns:
        Sole item in the list
        Throws:
        IndexOutOfBoundsException - if list is empty or has more than 1 elt
      • close

        public static SQLException close​(ResultSet resultSet,
                                         Statement statement,
                                         Connection connection)
        Closes a JDBC result set, statement, and connection, ignoring any errors. If any of them are null, that's fine.

        If any of them throws a SQLException, returns the first such exception, but always executes all closes.

        Parameters:
        resultSet - Result set
        statement - Statement
        connection - Connection
      • bitSetBetween

        public static BitSet bitSetBetween​(int fromIndex,
                                           int toIndex)
        Creates a bitset with bits from fromIndex (inclusive) to specified toIndex (exclusive) set to true.

        For example, bitSetBetween(0, 3) returns a bit set with bits {0, 1, 2} set.

        Parameters:
        fromIndex - Index of the first bit to be set.
        toIndex - Index after the last bit to be set.
        Returns:
        Bit set
      • genericArray

        public static <T> T[] genericArray​(Class<T> clazz,
                                           int size)
      • assertTrue

        public static void assertTrue​(boolean b)
        Throws an internal error if condition is not true. It would be called assert, but that is a keyword as of JDK 1.4.
      • assertTrue

        public static void assertTrue​(boolean b,
                                      String message)
        Throws an internal error with the given messagee if condition is not true. It would be called assert, but that is a keyword as of JDK 1.4.
      • newInternal

        public static RuntimeException newInternal​(String message)
        Creates an internal error with a given message.
      • newError

        public static RuntimeException newError​(String message)
        Creates a non-internal error. Currently implemented in terms of internal errors, but later we will create resourced messages.
      • newError

        public static RuntimeException newError​(Throwable e,
                                                String message)
        Creates a non-internal error. Currently implemented in terms of internal errors, but later we will create resourced messages.
      • unexpected

        public static RuntimeException unexpected​(Enum value)
        Returns an exception indicating that we didn't expect to find this value here.
        Parameters:
        value - Value
      • assertPrecondition

        public static void assertPrecondition​(boolean b)
        Checks that a precondition (declared using the javadoc @pre tag) is satisfied.
        Parameters:
        b - The value of executing the condition
      • assertPrecondition

        public static void assertPrecondition​(boolean b,
                                              String condition)
        Checks that a precondition (declared using the javadoc @pre tag) is satisfied. For example,
        void f(String s) {
            Util.assertPrecondition(s != null, "s != null");
            ...
         }
        Parameters:
        b - The value of executing the condition
        condition - The text of the condition
      • assertPostcondition

        public static void assertPostcondition​(boolean b)
        Checks that a postcondition (declared using the javadoc @post tag) is satisfied.
        Parameters:
        b - The value of executing the condition
      • assertPostcondition

        public static void assertPostcondition​(boolean b,
                                               String condition)
        Checks that a postcondition (declared using the javadoc @post tag) is satisfied.
        Parameters:
        b - The value of executing the condition
      • convertStackToString

        public static String[] convertStackToString​(Throwable e)
        Converts an error into an array of strings, the most recent error first.
        Parameters:
        e - the error; may be null. Errors are chained according to their cause.
      • getErrorMessage

        public static String getErrorMessage​(Throwable err,
                                             boolean prependClassName)
        Constructs the message associated with an arbitrary Java error, making up one based on the stack trace if there is none.
        Parameters:
        err - the error
        prependClassName - should the error be preceded by the class name of the Java exception? defaults to false, unless the error is derived from SQLException or is exactly a Exception
      • getMatchingCause

        public static <T extends Throwable> T getMatchingCause​(Throwable e,
                                                               Class<T> clazz)
        If one of the causes of an exception is of a particular class, returns that cause. Otherwise returns null.
        Type Parameters:
        T - Class
        Parameters:
        e - Exception
        clazz - Desired class
        Returns:
        Cause of given class, or null
      • unparse

        public static String unparse​(Exp exp)
        Converts an expression to a string.
      • unparse

        public static String unparse​(Query query)
        Converts an query to a string.
      • parseConnectString

        public static Util.PropertyList parseConnectString​(String s)
        Converts an OLE DB connect string into a Util.PropertyList.

        For example, "Provider=MSOLAP; DataSource=LOCALHOST;" becomes the set of (key, value) pairs {("Provider","MSOLAP"), ("DataSource", "LOCALHOST")}. Another example is Provider='sqloledb';Data Source='MySqlServer';Initial Catalog='Pubs';Integrated Security='SSPI';.

        This method implements as much as possible of the OLE DB connect string syntax specification. To find what it actually does, take a look at the mondrian.olap.UtilTestCase test case.

      • hash

        public static int hash​(int i,
                               int j)
        Combines two integers into a hash code.
      • hash

        public static int hash​(int h,
                               Object o)
        Computes a hash code from an existing hash code and an object (which may be null).
      • hashArray

        public static int hashArray​(int h,
                                    Object[] a)
        Computes a hash code from an existing hash code and an array of objects (which may be null).
      • appendArrays

        public static <T> T[] appendArrays​(T[] a0,
                                           T[]... as)
        Concatenates one or more arrays.

        Resulting array has same element type as first array. Each arrays may be empty, but must not be null.

        Parameters:
        a0 - First array
        as - Zero or more subsequent arrays
        Returns:
        Array containing all elements
      • append

        public static <T> T[] append​(T[] a,
                                     T o)
        Adds an object to the end of an array. The resulting array is of the same type (e.g. String[]) as the input array.
        Parameters:
        a - Array
        o - Element
        Returns:
        New array containing original array plus element
        See Also:
        appendArrays(T[], T[]...)
      • copyOf

        public static double[] copyOf​(double[] original,
                                      int newLength)
        Like Arrays.copyOf(double[], int), but exists prior to JDK 1.6.
        Parameters:
        original - the array to be copied
        newLength - the length of the copy to be returned
        Returns:
        a copy of the original array, truncated or padded with zeros to obtain the specified length
      • copyOf

        public static int[] copyOf​(int[] original,
                                   int newLength)
        Like Arrays.copyOf(int[], int), but exists prior to JDK 1.6.
        Parameters:
        original - the array to be copied
        newLength - the length of the copy to be returned
        Returns:
        a copy of the original array, truncated or padded with zeros to obtain the specified length
      • copyOf

        public static long[] copyOf​(long[] original,
                                    int newLength)
        Like Arrays.copyOf(long[], int), but exists prior to JDK 1.6.
        Parameters:
        original - the array to be copied
        newLength - the length of the copy to be returned
        Returns:
        a copy of the original array, truncated or padded with zeros to obtain the specified length
      • copyOf

        public static <T> T[] copyOf​(T[] original,
                                     int newLength)
        Like Arrays.copyOf(Object[], int), but exists prior to JDK 1.6.
        Parameters:
        original - the array to be copied
        newLength - the length of the copy to be returned
        Returns:
        a copy of the original array, truncated or padded with zeros to obtain the specified length
      • copyOf

        public static <T,​U> T[] copyOf​(U[] original,
                                             int newLength,
                                             Class<? extends T[]> newType)
        Copies the specified array.
        Parameters:
        original - the array to be copied
        newLength - the length of the copy to be returned
        newType - the class of the copy to be returned
        Returns:
        a copy of the original array, truncated or padded with nulls to obtain the specified length
      • addDatabaseTime

        public static void addDatabaseTime​(long millis)
        Deprecated.
        Will be removed in 4.0.
        Adds to the cumulative amount of time spent accessing the database.
      • nonDbTimeMillis

        public static long nonDbTimeMillis()
        Deprecated.
        Will be removed in 4.0.
        Returns the system time less the time spent accessing the database. Use this method to figure out how long an operation took: call this method before an operation and after an operation, and the difference is the amount of non-database time spent.
      • createSimpleValidator

        public static Validator createSimpleValidator​(FunTable funTable)
        Creates a very simple implementation of Validator. (Only useful for resolving trivial expressions.)
      • readFully

        public static String readFully​(Reader rdr,
                                       int bufferSize)
                                throws IOException
        Reads a Reader until it returns EOF and returns the contents as a String.
        Parameters:
        rdr - Reader to Read.
        bufferSize - size of buffer to allocate for reading.
        Returns:
        content of Reader as String
        Throws:
        IOException - on I/O error
      • readFully

        public static byte[] readFully​(InputStream in,
                                       int bufferSize)
                                throws IOException
        Reads an input stream until it returns EOF and returns the contents as an array of bytes.
        Parameters:
        in - Input stream
        bufferSize - size of buffer to allocate for reading.
        Returns:
        content of stream as an array of bytes
        Throws:
        IOException - on I/O error
      • readURL

        public static String readURL​(String urlStr,
                                     Map<String,​String> map)
                              throws IOException
        Returns the contents of a URL, substituting tokens.

        Replaces the tokens "${key}" if the map is not null and "key" occurs in the key-value map.

        If the URL string starts with "inline:" the contents are the rest of the URL.

        Parameters:
        urlStr - URL string
        map - Key/value map
        Returns:
        Contents of URL with tokens substituted
        Throws:
        IOException - on I/O error
      • readURL

        public static String readURL​(URL url)
                              throws IOException
        Returns the contents of a URL.
        Parameters:
        url - URL
        Returns:
        Contents of URL
        Throws:
        IOException - on I/O error
      • readURL

        public static String readURL​(URL url,
                                     Map<String,​String> map)
                              throws IOException
        Returns the contents of a URL, substituting tokens.

        Replaces the tokens "${key}" if the map is not null and "key" occurs in the key-value map.

        Parameters:
        url - URL
        map - Key/value map
        Returns:
        Contents of URL with tokens substituted
        Throws:
        IOException - on I/O error
      • readVirtualFile

        public static InputStream readVirtualFile​(String url)
                                           throws org.apache.commons.vfs2.FileSystemException
        Gets content via Apache VFS. File must exist and have content
        Parameters:
        url - String
        Returns:
        Apache VFS FileContent for further processing
        Throws:
        org.apache.commons.vfs2.FileSystemException - on error
      • toMap

        public static Map<String,​String> toMap​(Properties properties)
        Converts a Properties object to a string-to-string Map.
        Parameters:
        properties - Properties
        Returns:
        String-to-string map
      • replaceProperties

        public static String replaceProperties​(String text,
                                               Map<String,​String> env)
        Replaces tokens in a string.

        Replaces the tokens "${key}" if "key" occurs in the key-value map. Otherwise "${key}" is left in the string unchanged.

        Parameters:
        text - Source string
        env - Map of key-value pairs
        Returns:
        String with tokens substituted
      • printMemory

        public static String printMemory()
      • printMemory

        public static String printMemory​(String msg)
      • cast

        public static <T> Set<T> cast​(Set<?> set)
        Casts a Set to a Set with a different element type.
        Parameters:
        set - Set
        Returns:
        Set of desired type
      • cast

        public static <T> List<T> cast​(List<?> list)
        Casts a List to a List with a different element type.
        Parameters:
        list - List
        Returns:
        List of desired type
      • canCast

        public static <T> boolean canCast​(Collection<?> collection,
                                          Class<T> clazz)
        Returns whether it is safe to cast a collection to a collection with a given element type.
        Type Parameters:
        T - Element type
        Parameters:
        collection - Collection
        clazz - Target element type
        Returns:
        Whether all not-null elements of the collection are instances of element type
      • castToIterable

        public static <T> Iterable<T> castToIterable​(Object iterable)
        Casts a collection to iterable. Under JDK 1.4, Collection objects do not implement Iterable, so this method inserts a casting wrapper. (Since Iterable does not exist under JDK 1.4, they will have been compiled under JDK 1.5 or later, then retrowoven to 1.4 class format. References to Iterable will have been replaced with references to com.rc.retroweaver.runtime.Retroweaver_.

        Under later JDKs this method is trivial. This method can be deleted when we discontinue support for JDK 1.4.

        Type Parameters:
        T - Element type
        Parameters:
        iterable - Object which ought to be iterable
        Returns:
        Object cast to Iterable
      • lookup

        public static <E extends Enum<E>> E lookup​(Class<E> clazz,
                                                   String name)
        Looks up an enumeration by name, returning null if null or not valid.
        Parameters:
        clazz - Enumerated type
        name - Name of constant
      • lookup

        public static <E extends Enum<E>> E lookup​(Class<E> clazz,
                                                   String name,
                                                   E defaultValue)
        Looks up an enumeration by name, returning a given default value if null or not valid.
        Parameters:
        clazz - Enumerated type
        name - Name of constant
        defaultValue - Default value if constant is not found
        Returns:
        Value, or null if name is null or value does not exist
      • makeBigDecimalFromDouble

        public static BigDecimal makeBigDecimalFromDouble​(double d)
        Make a BigDecimal from a double. On JDK 1.5 or later, the BigDecimal precision reflects the precision of the double while with JDK 1.4 this is not the case.
        Parameters:
        d - the input double
        Returns:
        the BigDecimal
      • quotePattern

        public static String quotePattern​(String s)
        Returns a literal pattern String for the specified String.

        Specification as for Pattern.quote(String), which was introduced in JDK 1.5.

        Parameters:
        s - The string to be literalized
        Returns:
        A literal string replacement
      • generateUuidString

        public static String generateUuidString()
        Generates a unique id.

        From JDK 1.5 onwards, uses a UUID.

        Returns:
        A unique id
      • compileScript

        public static <T> T compileScript​(Class<T> iface,
                                          String script,
                                          String engineName)
        Compiles a script to yield a Java interface.

        Only valid JDK 1.6 and higher; fails on JDK 1.5 and earlier.

        Type Parameters:
        T - Interface
        Parameters:
        iface - Interface script should implement
        script - Script code
        engineName - Name of engine (e.g. "JavaScript")
        Returns:
        Object that implements given interface
      • threadLocalRemove

        public static <T> void threadLocalRemove​(ThreadLocal<T> threadLocal)
        Removes a thread local from the current thread.

        From JDK 1.5 onwards, calls ThreadLocal.remove(); before that, no-ops.

        Type Parameters:
        T - Type
        Parameters:
        threadLocal - Thread local
      • newIdentityHashSet

        public static <T> Set<T> newIdentityHashSet()
        Creates a hash set that, like IdentityHashMap, compares keys using identity.
        Type Parameters:
        T - Element type
        Returns:
        Set
      • createUdf

        public static UserDefinedFunction createUdf​(Class<? extends UserDefinedFunction> udfClass,
                                                    String functionName)
        Creates a new udf instance from the given udf class.
        Parameters:
        udfClass - the class to create new instance for
        functionName - Function name, or null
        Returns:
        an instance of UserDefinedFunction
      • checkCJResultLimit

        public static void checkCJResultLimit​(long resultSize)
        Check the resultSize against the result limit setting. Throws LimitExceededDuringCrossjoin exception if limit exceeded. When it is called from RolapNativeSet.checkCrossJoin(), it is only possible to check the known input size, because the final CJ result will come from the DB(and will be checked against the limit when fetching from the JDBC result set, in SqlTupleReader.prepareTuples())
        Parameters:
        resultSize - Result limit
        Throws:
        ResourceLimitExceededException
      • convertOlap4jConnectStringToNativeMondrian

        public static String convertOlap4jConnectStringToNativeMondrian​(String url)
        Converts an olap4j connect string into a legacy mondrian connect string.

        For example, "jdbc:mondrian:Datasource=jdbc/SampleData;Catalog=foodmart/FoodMart.xml;" becomes "Provider=Mondrian; Datasource=jdbc/SampleData;Catalog=foodmart/FoodMart.xml;"

        This method is intended to allow legacy applications (such as JPivot and Mondrian's XMLA server) to continue to create connections using Mondrian's legacy connection API even when they are handed an olap4j connect string.

        Parameters:
        url - olap4j connect string
        Returns:
        mondrian connect string, or null if cannot be converted
      • isBlank

        public static boolean isBlank​(String str)
        Checks if a String is whitespace, empty ("") or null.

         StringUtils.isBlank(null) = true
         StringUtils.isBlank("") = true
         StringUtils.isBlank(" ") = true
         StringUtils.isBlank("bob") = false
         StringUtils.isBlank(" bob ") = false
         

        (Copied from commons-lang.)

        Parameters:
        str - the String to check, may be null
        Returns:
        true if the String is null, empty or whitespace
      • createRootRole

        public static Role createRootRole​(Schema schema)
        Returns a role which has access to everything.
        Parameters:
        schema - A schema to bind this role to.
        Returns:
        A role with root access to the schema.
      • getDimensionCube

        public static Cube getDimensionCube​(Dimension dimension)
        Tries to find the cube from which a dimension is taken. It considers private dimensions, shared dimensions and virtual dimensions. If it can't determine with certitude the origin of the dimension, it returns null.
      • getClosestResource

        public static URL getClosestResource​(ClassLoader classLoader,
                                             String name)
        Similar to ClassLoader.getResource(String), except the lookup is in reverse order.
        i.e. returns the resource from the supplied classLoader or the one closest to it in the hierarchy, instead of the closest to the root class loader
        Parameters:
        classLoader - The class loader to fetch from
        name - The resource name
        Returns:
        A URL object for reading the resource, or null if the resource could not be found or the invoker doesn't have adequate privileges to get the resource.
        See Also:
        ClassLoader.getResource(String), ClassLoader.getResources(String)
      • identityFunctor

        public static <T> Util.Functor1<T,​T> identityFunctor()
      • toNullValuesMap

        public static <K,​V> Map<K,​V> toNullValuesMap​(List<K> list)
        Transforms a list into a map for which all the keys return a null value associated to it.

        The list passed as an argument will be used to back the map returned and as many methods are overridden as possible to make sure that we don't iterate over the backing list when creating it and when performing operations like .size(), entrySet() and contains().

        The returned map is to be considered immutable. It will throw an UnsupportedOperationException if attempts to modify it are made.

      • explain

        public static void explain​(ProfileHandler handler,
                                   String title,
                                   Calc calc,
                                   QueryTiming timing)
        Called during major steps of executing a MDX query to provide insight into Calc calls/times and key function calls/times.
        Parameters:
        handler -
        title -
        calc -
        timing -
      • addAppender

        public static void addAppender​(org.apache.logging.log4j.core.Appender appender,
                                       org.apache.logging.log4j.Logger logger,
                                       org.apache.logging.log4j.Level level)
      • removeAppender

        public static void removeAppender​(org.apache.logging.log4j.core.Appender appender,
                                          org.apache.logging.log4j.Logger logger)
      • makeAppender

        public static org.apache.logging.log4j.core.Appender makeAppender​(String name,
                                                                          StringWriter sw,
                                                                          String layout)
      • setLevel

        public static void setLevel​(org.apache.logging.log4j.Logger logger,
                                    org.apache.logging.log4j.Level level)