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 */ 020 package org.olap4j.mdx; 021 022 import org.olap4j.impl.Olap4jUtil; 023 024 import 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 */ 035 public 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