Package mondrian.olap

Class Util

java.lang.Object
org.eigenbase.xom.XMLUtil
org.eigenbase.xom.XOMUtil
mondrian.olap.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 Details

    • 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:
  • Constructor Details

    • Util

      public Util()
  • Method Details

    • 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.
    • quoteForMdx

      public static StringBuilder quoteForMdx(StringBuilder buf, String val)
      Appends a double-quoted string to a string builder.
    • 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]".
    • quoteMdxIdentifier

      public static void quoteMdxIdentifier(List<Id.Segment> ids, StringBuilder sb)
    • 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
    • equals

      public static boolean equals(String s, String t)
      Returns true if two strings are equal, or are both null.

      The result is not affected by the case sensitive option; if you wish to compare names, use equalName(String, String).

    • 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.
    • compareName

      public static int compareName(String s, String t)
      Compares two names. 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:
    • 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)
    • makeFqName

      public static String makeFqName(OlapElement parent, String name)
    • makeFqName

      public static String makeFqName(String parentUniqueName, String name)
    • lookupCompound

      public static OlapElement lookupCompound(SchemaReader schemaReader, OlapElement parent, List<Id.Segment> names, boolean failIfNotFound, int category)
    • 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:
    • lookup

      public static OlapElement lookup(Query q, List<Id.Segment> nameParts)
    • 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)
    • 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.
    • addLevelCalculatedMembers

      public static List<Member> addLevelCalculatedMembers(SchemaReader reader, Level level, List<Member> members)
    • 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.
    • getMemoryInfo

      public static Util.MemoryInfo getMemoryInfo()
    • 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 Comparable> List<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)
    • matches

      public static boolean matches(Member member, List<Id.Segment> nameParts)
    • 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 Comparable> SortedSet<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.
    • newInternal

      public static RuntimeException newInternal(Throwable e, String message)
      Creates an internal error with a given message and cause.
    • 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)
      Constructs the message associated with an arbitrary Java error, making up one based on the stack trace if there is none. As getErrorMessage(Throwable,boolean), but does not print the class name if the exception is derived from SQLException or is exactly a Exception.
    • 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.
    • toURL

      public static URL toURL(File file) throws MalformedURLException
      Creates a file-protocol URL for the given file.
      Throws:
      MalformedURLException
    • 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:
    • 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
    • dbTimeMillis

      public static long dbTimeMillis()
      Deprecated.
      Returns the cumulative amount of time spent accessing the database.
    • 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
    • readVirtualFileAsString

      public static String readVirtualFileAsString(String catalogUrl) throws IOException
      Throws:
      IOException
    • 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:
    • identityFunctor

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

      public static <PT> Util.Functor1<Boolean,PT> trueFunctor()
    • falseFunctor

      public static <PT> Util.Functor1<Boolean,PT> falseFunctor()
    • 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)