001 /* 002 // $Id: IdentifierSegment.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 java.util.List; 023 024 /** 025 * Component in a compound identifier. It is described by its name and how 026 * the name is quoted. 027 * 028 * <p>For example, the identifier 029 * <code>[Store].USA.[New Mexico].&[45]</code> has four segments:<ul> 030 * <li>"Store", {@link Quoting#QUOTED}</li> 031 * <li>"USA", {@link Quoting#UNQUOTED}</li> 032 * <li>"New Mexico", {@link Quoting#QUOTED}</li> 033 * <li>"45", {@link Quoting#KEY}</li> 034 * </ul> 035 * 036 * <p>QUOTED and UNQUOTED segments are represented using a 037 * {@link NameSegment NameSegment}; 038 * KEY segments are represented using a 039 * {@link KeySegment KeySegment}. 040 * 041 * <p>To parse an identifier into a list of segments, use the method 042 * {@link org.olap4j.mdx.IdentifierNode#parseIdentifier(String)} and then call 043 * {@link org.olap4j.mdx.IdentifierNode#getSegmentList()} on the resulting 044 * node.</p> 045 * 046 * @version $Id: IdentifierSegment.java 482 2012-01-05 23:27:27Z jhyde $ 047 * @author jhyde 048 */ 049 public interface IdentifierSegment { 050 051 /** 052 * Returns a string representation of this Segment. 053 * 054 * <p>For example, "[Foo]", "&[123]", "Abc". 055 * 056 * @return String representation of this Segment 057 */ 058 String toString(); 059 060 /** 061 * Appends a string representation of this Segment to a StringBuffer. 062 * 063 * @param buf StringBuffer 064 */ 065 void toString(StringBuilder buf); 066 067 /** 068 * Returns the region of the source code which this Segment was created 069 * from, if it was created by parsing. 070 * 071 * @return region of source code 072 */ 073 ParseRegion getRegion(); 074 075 /** 076 * Returns how this Segment is quoted. 077 * 078 * @return how this Segment is quoted 079 */ 080 Quoting getQuoting(); 081 082 /** 083 * Returns the name of this IdentifierSegment. 084 * Returns {@code null} if this IdentifierSegment represents a key. 085 * 086 * @return name of this Segment 087 */ 088 String getName(); 089 090 /** 091 * Returns the key components, if this IdentifierSegment is a key. (That is, 092 * if {@link #getQuoting()} returns 093 * {@link Quoting#KEY}.) 094 * 095 * Returns null otherwise. 096 * 097 * @return Components of key, or null if this IdentifierSegment is not a key 098 */ 099 List<NameSegment> getKeyParts(); 100 } 101 102 // End IdentifierSegment.java