/*
* Copyright (c) 2013-2015 Josef Hardi <josef.hardi@gmail.com>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.obidea.semantika.mapping.base.sql;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import com.obidea.semantika.database.base.IColumn;
import com.obidea.semantika.database.base.IContainDatabaseObject;
import com.obidea.semantika.database.base.ITable;
import com.obidea.semantika.database.sql.base.ISqlExpressionVisitor;
import com.obidea.semantika.database.sql.base.ISqlTable;
import com.obidea.semantika.knowledgebase.TermSubstitutionBinding;
import com.obidea.semantika.util.CollectionUtils;
import com.obidea.semantika.util.StringUtils;
public class SqlTable extends LogicalTable implements ISqlTable, IContainDatabaseObject<ITable>
{
private static final long serialVersionUID = 629451L;
private ITable mTable;
private String mSchemaName;
private String mTableName;
private String mAliasName;
private String[] mNameFragments;
private List<SqlColumn> mTableColumns = new ArrayList<SqlColumn>();
/**
* Constructs a SQL table atom with input <code>table</code> as its meta-information.
*
* @param table
* An instance of database object that stores information about a database table.
*/
public SqlTable(ITable table)
{
this(table, ""); //$NON-NLS-1$
}
/**
* Constructs a SQL table atom with input <code>table</code> as its meta-information and an alias
* name.
*
* @param table
* An instance of database object that stores information about a database table.
* @param alias
* An alias name.
*/
public SqlTable(ITable table, String alias)
{
super(table);
mTable = table;
mSchemaName = table.getSchemaName();
mTableName = table.getLocalName();
mAliasName = alias;
for (IColumn c : table.getColumns()) {
mTableColumns.add(new SqlColumn(c));
}
}
@Override
public ITable asDatabaseObject()
{
return mTable;
}
@Override
public String getTableName()
{
return mTableName;
}
@Override
public String[] getNameFragments()
{
if (mNameFragments == null) {
List<String> fragments = new ArrayList<String>();
if (!StringUtils.isEmpty(mSchemaName)) {
fragments.add(mSchemaName);
}
fragments.add(getTableName());
mNameFragments = CollectionUtils.toArray(fragments, String.class);
}
return mNameFragments;
}
@Override
public void setAliasName(String alias)
{
if (!StringUtils.isEmpty(alias)) {
mAliasName = alias;
}
}
@Override
public String getAliasName()
{
return mAliasName;
}
@Override
public boolean hasAliasName()
{
return StringUtils.isEmpty(mAliasName) ? false : true;
}
@Override
public List<SqlColumn> getColumns()
{
return Collections.unmodifiableList(mTableColumns);
}
public SqlColumn getColumn(int index)
{
return mTableColumns.get(index);
}
public int getColumnSize()
{
return mTableColumns.size();
}
@Override
public void apply(TermSubstitutionBinding binding)
{
// NO-OP
}
@Override
public void accept(ISqlExpressionVisitor visitor)
{
visitor.visit(this);
}
/**
* Use only for debugging purposes.
*/
@Override
public String toString()
{
if (hasAliasName()) {
return String.format("%s[%s]", getTableName(), getAliasName()); //$NON-NLS-1$
}
else {
return String.format("%s", getTableName()); //$NON-NLS-1$
}
}
}