001 /*
002 // $Id: HierarchyNode.java 229 2009-05-08 19:11:29Z jhyde $
003 // This software is subject to the terms of the Eclipse Public License v1.0
004 // Agreement, available at the following URL:
005 // http://www.eclipse.org/legal/epl-v10.html.
006 // Copyright (C) 2007-2008 Julian Hyde
007 // All Rights Reserved.
008 // You must accept the terms of that agreement to use this software.
009 */
010 package org.olap4j.mdx;
011
012 import org.olap4j.metadata.Hierarchy;
013 import org.olap4j.type.Type;
014 import org.olap4j.type.HierarchyType;
015
016 /**
017 * Usage of a {@link org.olap4j.metadata.Hierarchy} as an expression in an MDX
018 * parse tree.
019 *
020 * @author jhyde
021 * @version $Id: HierarchyNode.java 229 2009-05-08 19:11:29Z jhyde $
022 * @since Jun 4, 2007
023 */
024 public class HierarchyNode implements ParseTreeNode {
025 private final ParseRegion region;
026 private final Hierarchy hierarchy;
027
028 /**
029 * Creates a HierarchyNode.
030 *
031 * @param region Region of source code
032 * @param hierarchy Hierarchy which is used in the expression
033 */
034 public HierarchyNode(
035 ParseRegion region,
036 Hierarchy hierarchy)
037 {
038 this.region = region;
039 this.hierarchy = hierarchy;
040 }
041
042 public ParseRegion getRegion() {
043 return region;
044 }
045
046 /**
047 * Returns the Hierarchy used in this expression.
048 *
049 * @return hierarchy used in this expression
050 */
051 public Hierarchy getHierarchy() {
052 return hierarchy;
053 }
054
055 public <T> T accept(ParseTreeVisitor<T> visitor) {
056 return visitor.visit(this);
057 }
058
059 public Type getType() {
060 return new HierarchyType(
061 hierarchy.getDimension(),
062 hierarchy);
063 }
064
065 public void unparse(ParseTreeWriter writer) {
066 writer.getPrintWriter().print(hierarchy.getUniqueName());
067 }
068
069 public String toString() {
070 return hierarchy.getUniqueName();
071 }
072
073 public HierarchyNode deepCopy() {
074 // HierarchyNode is immutable
075 return this;
076 }
077 }
078
079 // End HierarchyNode.java