001/* 002// $Id: NameSegment.java 482 2012-01-05 23:27:27Z jhyde $ 003// 004// Licensed to Julian Hyde under one or more contributor license 005// agreements. See the NOTICE file distributed with this work for 006// additional information regarding copyright ownership. 007// 008// Julian Hyde licenses this file to you under the Apache License, 009// Version 2.0 (the "License"); you may not use this file except in 010// compliance with the License. You may obtain a copy of the License at: 011// 012// http://www.apache.org/licenses/LICENSE-2.0 013// 014// Unless required by applicable law or agreed to in writing, software 015// distributed under the License is distributed on an "AS IS" BASIS, 016// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 017// See the License for the specific language governing permissions and 018// limitations under the License. 019*/ 020package org.olap4j.mdx; 021 022import org.olap4j.impl.Olap4jUtil; 023 024import java.util.List; 025 026/** 027 * Component in a compound identifier that describes the name of an object. 028 * Optionally, the name is quoted in brackets. 029 * 030 * @see KeySegment 031 * 032 * @version $Id: NameSegment.java 482 2012-01-05 23:27:27Z jhyde $ 033 * @author jhyde 034 */ 035public class NameSegment implements IdentifierSegment { 036 final String name; 037 final Quoting quoting; 038 private final ParseRegion region; 039 040 /** 041 * Creates a segment with the given quoting and region. 042 * 043 * @param region Region of source code 044 * @param name Name 045 * @param quoting Quoting style 046 */ 047 public NameSegment( 048 ParseRegion region, 049 String name, 050 Quoting quoting) 051 { 052 this.region = region; 053 this.name = name; 054 this.quoting = quoting; 055 if (name == null) { 056 throw new NullPointerException(); 057 } 058 if (!(quoting == Quoting.QUOTED || quoting == Quoting.UNQUOTED)) { 059 throw new IllegalArgumentException(); 060 } 061 } 062 063 /** 064 * Creates a quoted segment, "[name]". 065 * 066 * @param name Name of segment 067 */ 068 public NameSegment(String name) { 069 this(null, name, Quoting.QUOTED); 070 } 071 072 public String toString() { 073 switch (quoting) { 074 case UNQUOTED: 075 return name; 076 case QUOTED: 077 return IdentifierNode.quoteMdxIdentifier(name); 078 default: 079 throw Olap4jUtil.unexpected(quoting); 080 } 081 } 082 083 public void toString(StringBuilder buf) { 084 switch (quoting) { 085 case UNQUOTED: 086 buf.append(name); 087 return; 088 case QUOTED: 089 IdentifierNode.quoteMdxIdentifier(name, buf); 090 return; 091 default: 092 throw Olap4jUtil.unexpected(quoting); 093 } 094 } 095 public ParseRegion getRegion() { 096 return region; 097 } 098 099 public String getName() { 100 return name; 101 } 102 103 public Quoting getQuoting() { 104 return quoting; 105 } 106 107 public List<NameSegment> getKeyParts() { 108 return null; 109 } 110} 111 112// End NameSegment.java