com.tesora.dve.sql.schema.QualifiedName.java Source code

Java tutorial

Introduction

Here is the source code for com.tesora.dve.sql.schema.QualifiedName.java

Source

package com.tesora.dve.sql.schema;

/*
 * #%L
 * Tesora Inc.
 * Database Virtualization Engine
 * %%
 * Copyright (C) 2011 - 2014 Tesora Inc.
 * %%
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License, version 3,
 * as published by the Free Software Foundation.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU Affero General Public License for more details.
 * 
 * You should have received a copy of the GNU Affero General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 * #L%
 */

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

import org.apache.commons.lang.StringUtils;

import com.tesora.dve.sql.util.Functional;
import com.tesora.dve.sql.util.UnaryFunction;
import com.tesora.dve.sql.util.UnaryPredicate;

public class QualifiedName extends Name {

    private static final long serialVersionUID = 1L;
    public static final String PART_SEPARATOR = ".";

    private List<UnqualifiedName> names;

    public QualifiedName(List<UnqualifiedName> parts) {
        names = parts;
    }

    public QualifiedName(UnqualifiedName... parts) {
        names = Arrays.asList(parts);
    }

    public QualifiedName(String name) {
        this(StringUtils.split(name, PART_SEPARATOR));
    }

    protected QualifiedName(String... parts) {
        names = new ArrayList<UnqualifiedName>(parts.length);
        for (final String part : parts) {
            names.add(new UnqualifiedName(part));
        }
    }

    @Override
    public String get() {
        return join(new UnaryFunction<String, UnqualifiedName>() {

            @Override
            public String evaluate(UnqualifiedName object) {
                return object.get();
            }

        });
    }

    @Override
    public String getQuoted() {
        return join(new UnaryFunction<String, UnqualifiedName>() {

            @Override
            public String evaluate(UnqualifiedName object) {
                return object.getQuoted();
            }

        });
    }

    @Override
    public boolean isQuoted() {
        return Functional.all(names, new UnaryPredicate<UnqualifiedName>() {

            @Override
            public boolean test(UnqualifiedName object) {
                return object.isQuoted();
            }

        });
    }

    @Override
    public boolean isQualified() {
        return true;
    }

    @Override
    public String getSQL() {
        return join(new UnaryFunction<String, UnqualifiedName>() {

            @Override
            public String evaluate(UnqualifiedName object) {
                return object.getSQL();
            }

        });
    }

    private String join(UnaryFunction<String, UnqualifiedName> proc) {
        StringBuilder buf = new StringBuilder();
        List<String> strs = Functional.apply(names, proc);
        Functional.join(strs, buf, PART_SEPARATOR);
        return buf.toString();
    }

    @Override
    public Name getCapitalized() {
        if (isQuoted())
            return null;
        return new QualifiedName(Functional.apply(names, new UnaryFunction<UnqualifiedName, UnqualifiedName>() {

            @Override
            public UnqualifiedName evaluate(UnqualifiedName object) {
                return (UnqualifiedName) object.getCapitalized();
            }

        }));
    }

    @Override
    public Name getQuotedName() {
        if (isQuoted())
            return this;
        return new QualifiedName(Functional.apply(names, new UnaryFunction<UnqualifiedName, UnqualifiedName>() {

            @Override
            public UnqualifiedName evaluate(UnqualifiedName object) {
                return (UnqualifiedName) object.getQuotedName();
            }

        }));
    }

    @Override
    public Name getUnquotedName() {
        return new QualifiedName(Functional.apply(names, new UnaryFunction<UnqualifiedName, UnqualifiedName>() {

            @Override
            public UnqualifiedName evaluate(UnqualifiedName object) {
                return object.getUnquotedName().getUnqualified();
            }

        }));
    }

    @Override
    public UnqualifiedName getUnqualified() {
        return names.get(names.size() - 1);
    }

    public int getQualifiedDepth() {
        return names.size();
    }

    public UnqualifiedName getNamespace() {
        if (names.size() > 1)
            return names.get(names.size() - 2);
        return null;
    }

    @Override
    public List<UnqualifiedName> getParts() {
        return Collections.unmodifiableList(names);
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((names == null) ? 0 : names.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        QualifiedName other = (QualifiedName) obj;
        if (names == null) {
            if (other.names != null)
                return false;
        } else if (!names.equals(other.names))
            return false;
        return true;
    }

    @Override
    public Name copy() {
        return new QualifiedName(new ArrayList<UnqualifiedName>(names));
    }

}