package org.xenei.jdbc4sparql.sparql.items; import org.xenei.jdbc4sparql.iface.Column; import org.xenei.jdbc4sparql.iface.name.ColumnName; import org.xenei.jdbc4sparql.iface.name.NameSegments; import com.hp.hpl.jena.sparql.core.Var; /** * A column in a table in the query. This class maps the column to an alias * name. This may be a column in a base table or a function. */ public class QueryColumnInfo extends QueryItemInfo<Column, ColumnName> { private QueryColumnInfo aliasFor; private static Column checkColumn(final Column column) { if (column == null) { throw new IllegalArgumentException("Column may not be null"); } return column; } public static NameSegments createSegments(final NameSegments segments) { return NameSegments.getInstance(segments.isCatalog(), segments.isSchema(), segments.isSchema() || segments.isTable(), true); } public QueryColumnInfo(final Column column) { this(column, column.isOptional()); } /** * Create a QueryColumnInfo not associated with a QueryInfoSet * * @param tableInfo * @param column * @param alias * @param optional */ public QueryColumnInfo(final Column column, final boolean optional) { super(column, checkColumn(column).getName(), optional); aliasFor = null; } public QueryColumnInfo(final Column column, final ColumnName alias) { this(column, alias, column.isOptional()); } public QueryColumnInfo(final Column column, final ColumnName alias, final boolean optional) { super(column, alias, optional); aliasFor = null; } public QueryColumnInfo createAlias(final ColumnName alias) { final QueryColumnInfo retval = new QueryColumnInfo(this.getColumn(), alias); retval.aliasFor = this; return retval; } /** * Returns true if this ItemInfo is an alias for another ItemInfo * * @return true if alias, false otherwise. */ public boolean isAlias() { return aliasFor != null; } // public QueryColumnInfo getAliasFor() { // return aliasFor; // } public QueryColumnInfo getBaseColumnInfo() { return aliasFor != null? aliasFor.getBaseColumnInfo() : this; } /** * Get the GUID variable based on the name of this column. * * If this column is an alias for another column returns the GUIDVar for * that column. * * @return The var for is column. */ @Override public Var getGUIDVar() { return aliasFor != null ? aliasFor.getGUIDVar() : super.getGUIDVar(); } @Override public boolean equals(final Object o) { if ((o != null) && (o instanceof QueryColumnInfo)) { final QueryColumnInfo colInfo = (QueryColumnInfo) o; return getName().equals(colInfo.getName()) && getColumn().equals(colInfo.getColumn()); } return false; } public Column getColumn() { return getBaseObject(); } @Override public int hashCode() { return getName().hashCode(); } @Override public void setOptional(final boolean optional) { super.setOptional(optional); } @Override public void setSegments(final NameSegments segments) { super.setSegments(createSegments(segments)); } @Override public String toString() { return String.format("QueryColumnInfo[%s(%s)]", getColumn() .getSQLName(), getName()); } }