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