001/*
002 * Copyright (c) 2006-2011 Nuxeo SA (http://nuxeo.com/) and others.
003 *
004 * All rights reserved. This program and the accompanying materials
005 * are made available under the terms of the Eclipse Public License v1.0
006 * which accompanies this distribution, and is available at
007 * http://www.eclipse.org/legal/epl-v10.html
008 *
009 * Contributors:
010 *     Nuxeo - initial API and implementation
011 *
012 * $Id$
013 */
014
015package org.nuxeo.ecm.core.query.sql.model;
016
017/**
018 * @author <a href="mailto:bs@nuxeo.com">Bogdan Stefanescu</a>
019 */
020public class FromClause extends Clause {
021
022    private static final long serialVersionUID = 3563271484181691679L;
023
024    public static final int DOCTYPE = 0;
025
026    public static final int LOCATION = 1;
027
028    public final FromList elements;
029
030    public final int type;
031
032    public FromClause() {
033        this(new FromList());
034    }
035
036    public FromClause(FromList elements) {
037        this(DOCTYPE, elements);
038    }
039
040    public FromClause(int type, FromList elements) {
041        super("FROM");
042        this.elements = elements;
043        this.type = type;
044    }
045
046    public void add(String alias, String element) {
047        elements.add(alias, element);
048    }
049
050    public void add(String element) {
051        elements.add(element, element);
052    }
053
054    public String get(int i) {
055        return elements.get(i);
056    }
057
058    public String get(String alias) {
059        return elements.get(alias);
060    }
061
062    public String getAlias(int i) {
063        return elements.getKey(i);
064    }
065
066    public int count() {
067        return elements.size();
068    }
069
070    public int getType() {
071        return type;
072    }
073
074    @Override
075    public void accept(IVisitor visitor) {
076        visitor.visitFromClause(this);
077    }
078
079    @Override
080    public boolean equals(Object obj) {
081        if (this == obj) {
082            return true;
083        }
084        if (obj instanceof FromClause) {
085            FromClause sc = (FromClause) obj;
086            return elements.equals(sc.elements);
087        }
088        return false;
089    }
090
091    @Override
092    public int hashCode() {
093        return elements.hashCode();
094    }
095
096    @Override
097    public String toString() {
098        return elements.toString();
099    }
100
101}