org.olap4j.mdx
Class IdentifierNode

java.lang.Object
  extended by org.olap4j.mdx.IdentifierNode
All Implemented Interfaces:
ParseTreeNode

public class IdentifierNode
extends Object
implements ParseTreeNode

Multi-part identifier.

An identifier is immutable.

An identifer consists of one or more IdentifierSegments. A segment is either:

Segment types are indicated by the Quoting enumeration.

A key segment is of type Quoting.KEY, and has one or more component parts accessed via the IdentifierSegment.getKeyParts() method. The parts are of type Quoting.UNQUOTED or Quoting.QUOTED.

A simple example is the identifier Measures.[Unit Sales]. It has two segments:

A more complex example illustrates a compound key. The identifier [Customers].[City].&[San Francisco]&CA&USA.&[cust1234] contains four segments as follows:

Version:
$Id: IdentifierNode.java 482 2012-01-05 23:27:27Z jhyde $
Author:
jhyde

Constructor Summary
IdentifierNode(IdentifierSegment... segments)
          Creates an identifier containing one or more segments.
IdentifierNode(List<IdentifierSegment> segments)
          Creates an identifier containing a list of segments.
 
Method Summary
<T> T
accept(ParseTreeVisitor<T> visitor)
          Accepts a visitor to this MDX parse tree node.
 IdentifierNode append(IdentifierSegment segment)
          Returns a new Identifier consisting of this one with another segment appended.
 IdentifierNode deepCopy()
          Creates a deep copy of this ParseTreeNode object.
 ParseRegion getRegion()
          Returns the region of the source code which this node was created from, if it was created by parsing.
 List<IdentifierSegment> getSegmentList()
          Returns the list of segments which consistitute this identifier.
 Type getType()
          Returns the type of this expression.
static IdentifierNode ofNames(String... names)
          Converts an array of quoted name segments into an identifier.
static IdentifierNode parseIdentifier(String identifier)
          Parses an MDX identifier string into an IdentifierNode.
 String toString()
           
 void unparse(ParseTreeWriter writer)
          Converts this node into MDX text.
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

IdentifierNode

public IdentifierNode(IdentifierSegment... segments)
Creates an identifier containing one or more segments.

Parameters:
segments - Array of Segments, each consisting of a name and quoting style

IdentifierNode

public IdentifierNode(List<IdentifierSegment> segments)
Creates an identifier containing a list of segments.

Parameters:
segments - List of segments
Method Detail

getType

public Type getType()
Description copied from interface: ParseTreeNode
Returns the type of this expression.

Returns null if this node is not an expression, for instance a SELECT node.

Specified by:
getType in interface ParseTreeNode
Returns:
type of this expression

getSegmentList

public List<IdentifierSegment> getSegmentList()
Returns the list of segments which consistitute this identifier.

Returns:
list of constituent segments

getRegion

public ParseRegion getRegion()
Description copied from interface: ParseTreeNode
Returns the region of the source code which this node was created from, if it was created by parsing.

A non-leaf node's region will encompass the regions of all of its children. For example, a the region of a function call node Crossjoin([Gender], {[Store].[USA]}) stretches from the first character of the function name to the closing parenthesis.

Region may be null, if the node was created programmatically, not from a piece of source code.

Specified by:
getRegion in interface ParseTreeNode
Returns:
Region of the source code this node was created from, if it was created by parsing

append

public IdentifierNode append(IdentifierSegment segment)
Returns a new Identifier consisting of this one with another segment appended. Does not modify this Identifier.

Parameters:
segment - Name of segment
Returns:
New identifier

accept

public <T> T accept(ParseTreeVisitor<T> visitor)
Description copied from interface: ParseTreeNode
Accepts a visitor to this MDX parse tree node.

The implementation should generally dispatches to the ParseTreeVisitor.visit(org.olap4j.mdx.SelectNode) method appropriate to the type of expression.

Specified by:
accept in interface ParseTreeNode
Parameters:
visitor - Visitor
Returns:
T, the specific return type of the visitor

unparse

public void unparse(ParseTreeWriter writer)
Description copied from interface: ParseTreeNode
Converts this node into MDX text.

Specified by:
unparse in interface ParseTreeNode
Parameters:
writer - Parse tree writer

toString

public String toString()
Overrides:
toString in class Object

deepCopy

public IdentifierNode deepCopy()
Description copied from interface: ParseTreeNode
Creates a deep copy of this ParseTreeNode object.

Note: implementing classes can return the concrete type instead of ParseTreeNode (using Java 1.5 covariant return types)

Specified by:
deepCopy in interface ParseTreeNode
Returns:
The deep copy of this ParseTreeNode

parseIdentifier

public static IdentifierNode parseIdentifier(String identifier)
Parses an MDX identifier string into an IdentifierNode.

It contains a list of segments, each of which is a name combined with a description of how the name was quoted. For example,

parseIdentifier( "[Customers].USA.[South Dakota].[Sioux Falls].&[1245]")
returns an IdentifierNode consisting of the following segments:
  • NameSegment("Customers", quoted=true),
  • NameSegment("USA", quoted=false),
  • NameSegment("South Dakota", quoted=true),
  • NameSegment("Sioux Falls", quoted=true),
  • KeySegment( { NameSegment("1245", quoted=true) } )

Parameters:
identifier - MDX identifier string
Returns:
Identifier parse tree node
Throws:
IllegalArgumentException - if the format of the identifier is invalid
See Also:
ofNames(String...)

ofNames

public static IdentifierNode ofNames(String... names)
Converts an array of quoted name segments into an identifier.

For example,

IdentifierNode.ofNames("Store", "USA", "CA")
returns an IdentifierNode consisting of the following segments:
  • NameSegment("Customers", quoted=true),
  • NameSegment("USA", quoted=false),
  • NameSegment("South Dakota", quoted=true),
  • NameSegment("Sioux Falls", quoted=true),
  • KeySegment( { NameSegment("1245", quoted=true) } )

Parameters:
names - Array of names
Returns:
Identifier parse tree node
See Also:
parseIdentifier(String)

SourceForge.net_Logo