package schemacrawler.build;
import schemacrawler.schema.Column;
import schemacrawler.schema.ColumnDataType;
import schemacrawler.schema.Index;
import schemacrawler.schema.IndexColumn;
import schemacrawler.schema.IndexColumnSortSequence;
import schemacrawler.schema.NamedObject;
import schemacrawler.schema.Privilege;
final class MutableIndexColumn
extends BaseDependantObjectMetadata
implements IndexColumn
{
public final static class IndexColumnBuilder
extends BaseDependantObjectBuilder
{
private static final long serialVersionUID = -6923211341742623556L;
private final Column column;
private final Index index;
private int indexOrdinalPosition;
private IndexColumnSortSequence sortSequence;
public IndexColumnBuilder(final Index index, final ColumnMetadata column)
{
super(column.getParent(), column.getName());
this.index = index;
this.column = column;
}
public IndexColumn build()
{
return new MutableIndexColumn(this);
}
public int getDecimalDigits()
{
return column.getDecimalDigits();
}
public String getDefaultValue()
{
return column.getDefaultValue();
}
public Index getIndex()
{
return index;
}
public int getIndexOrdinalPosition()
{
return indexOrdinalPosition;
}
public int getOrdinalPosition()
{
return column.getOrdinalPosition();
}
public Privilege getPrivilege(final String name)
{
return column.getPrivilege(name);
}
public Privilege[] getPrivileges()
{
return column.getPrivileges();
}
public Column getReferencedColumn()
{
return column.getReferencedColumn();
}
public int getSize()
{
return column.getSize();
}
public IndexColumnSortSequence getSortSequence()
{
return sortSequence;
}
public ColumnDataType getType()
{
return column.getType();
}
public String getWidth()
{
return column.getWidth();
}
public boolean isNullable()
{
return column.isNullable();
}
public void setIndexOrdinalPosition(final int indexOrdinalPosition)
{
this.indexOrdinalPosition = indexOrdinalPosition;
}
public void setSortSequence(final IndexColumnSortSequence sortSequence)
{
this.sortSequence = sortSequence;
}
}
private static final long serialVersionUID = -6923211341742623556L;
private final Column column;
private final Index index;
private final int indexOrdinalPosition;
private final IndexColumnSortSequence sortSequence;
private MutableIndexColumn(final IndexColumnBuilder builder)
{
super(builder);
index = builder.index;
column = builder.column;
indexOrdinalPosition = builder.indexOrdinalPosition;
sortSequence = builder.sortSequence;
}
/**
* {@inheritDoc}
*/
@Override
public int compareTo(final NamedObject obj)
{
if (obj == null)
{
return -1;
}
final MutableIndexColumn other = (MutableIndexColumn) obj;
int comparison = 0;
if (comparison == 0)
{
comparison = indexOrdinalPosition - other.indexOrdinalPosition;
}
if (comparison == 0)
{
comparison = super.compareTo(other);
}
return comparison;
}
/**
* {@inheritDoc}
*
* @see schemacrawler.schema.BaseColumn#getDecimalDigits()
*/
public int getDecimalDigits()
{
return column.getDecimalDigits();
}
/**
* {@inheritDoc}
*
* @see schemacrawler.schema.Column#getDefaultValue()
*/
public String getDefaultValue()
{
return column.getDefaultValue();
}
/**
* {@inheritDoc}
*
* @see schemacrawler.schema.IndexColumn#getIndex()
*/
public Index getIndex()
{
return index;
}
/**
* {@inheritDoc}
*
* @see schemacrawler.schema.IndexColumn#getIndexOrdinalPosition()
*/
public int getIndexOrdinalPosition()
{
return indexOrdinalPosition;
}
/**
* {@inheritDoc}
*
* @see schemacrawler.schema.BaseColumn#getOrdinalPosition()
*/
public int getOrdinalPosition()
{
return column.getOrdinalPosition();
}
/**
* {@inheritDoc}
*
* @see schemacrawler.schema.Column#getPrivilege(java.lang.String)
*/
public Privilege getPrivilege(final String name)
{
return column.getPrivilege(name);
}
/**
* {@inheritDoc}
*
* @see schemacrawler.schema.Column#getPrivileges()
*/
public Privilege[] getPrivileges()
{
return column.getPrivileges();
}
/**
* {@inheritDoc}
*
* @see schemacrawler.schema.Column#getReferencedColumn()
*/
public Column getReferencedColumn()
{
return column.getReferencedColumn();
}
/**
* {@inheritDoc}
*
* @see schemacrawler.schema.BaseColumn#getSize()
*/
public int getSize()
{
return column.getSize();
}
/**
* {@inheritDoc}
*
* @see schemacrawler.schema.IndexColumn#getSortSequence()
*/
public IndexColumnSortSequence getSortSequence()
{
return sortSequence;
}
public ColumnDataType getType()
{
return column.getType();
}
/**
* {@inheritDoc}
*
* @see schemacrawler.schema.BaseColumn#getWidth()
*/
public String getWidth()
{
return column.getWidth();
}
/**
* {@inheritDoc}
*
* @see schemacrawler.schema.BaseColumn#isNullable()
*/
public boolean isNullable()
{
return column.isNullable();
}
/**
* {@inheritDoc}
*
* @see schemacrawler.schema.Column#isPartOfForeignKey()
*/
public boolean isPartOfForeignKey()
{
return column.isPartOfForeignKey();
}
/**
* {@inheritDoc}
*
* @see schemacrawler.schema.Column#isPartOfPrimaryKey()
*/
public boolean isPartOfPrimaryKey()
{
return column.isPartOfPrimaryKey();
}
/**
* {@inheritDoc}
*
* @see schemacrawler.schema.Column#isPartOfUniqueIndex()
*/
public boolean isPartOfUniqueIndex()
{
return column.isPartOfUniqueIndex();
}
}