📄 table.java
字号:
/**
* Returns the indices of this table.
*
* @return The indices
*/
public Index[] getIndices()
{
return (Index[])_indices.toArray(new Index[_indices.size()]);
}
/**
* Gets a list of non-unique indices on this table.
*
* @return The unique indices
*/
public Index[] getNonUniqueIndices()
{
Collection nonUniqueIndices = CollectionUtils.select(_indices, new Predicate() {
public boolean evaluate(Object input) {
return !((Index)input).isUnique();
}
});
return (Index[])nonUniqueIndices.toArray(new Index[nonUniqueIndices.size()]);
}
/**
* Gets a list of unique indices on this table.
*
* @return The unique indices
*/
public Index[] getUniqueIndices()
{
Collection uniqueIndices = CollectionUtils.select(_indices, new Predicate() {
public boolean evaluate(Object input) {
return ((Index)input).isUnique();
}
});
return (Index[])uniqueIndices.toArray(new Index[uniqueIndices.size()]);
}
/**
* Removes the given index.
*
* @param index The index to remove
*/
public void removeIndex(Index index)
{
if (index != null)
{
_indices.remove(index);
}
}
/**
* Removes the indicated index.
*
* @param idx The position of the index to remove
*/
public void removeIndex(int idx)
{
_indices.remove(idx);
}
// Helper methods
//-------------------------------------------------------------------------
/**
* Determines whether there is at least one primary key column on this table.
*
* @return <code>true</code> if there are one or more primary key columns
*/
public boolean hasPrimaryKey()
{
for (Iterator it = _columns.iterator(); it.hasNext(); )
{
Column column = (Column)it.next();
if (column.isPrimaryKey())
{
return true;
}
}
return false;
}
/**
* Finds the column with the specified name, using case insensitive matching.
* Note that this method is not called getColumn(String) to avoid introspection
* problems.
*
* @param name The name of the column
* @return The column or <code>null</code> if there is no such column
*/
public Column findColumn(String name)
{
return findColumn(name, false);
}
/**
* Finds the column with the specified name, using case insensitive matching.
* Note that this method is not called getColumn(String) to avoid introspection
* problems.
*
* @param name The name of the column
* @param caseSensitive Whether case matters for the names
* @return The column or <code>null</code> if there is no such column
*/
public Column findColumn(String name, boolean caseSensitive)
{
for (Iterator it = _columns.iterator(); it.hasNext(); )
{
Column column = (Column)it.next();
if (caseSensitive)
{
if (column.getName().equals(name))
{
return column;
}
}
else
{
if (column.getName().equalsIgnoreCase(name))
{
return column;
}
}
}
return null;
}
/**
* Determines the index of the given column.
*
* @param column The column
* @return The index or <code>-1</code> if it is no column of this table
*/
public int getColumnIndex(Column column)
{
int idx = 0;
for (Iterator it = _columns.iterator(); it.hasNext(); idx++)
{
if (column == it.next())
{
return idx;
}
}
return -1;
}
/**
* Finds the index with the specified name, using case insensitive matching.
* Note that this method is not called getIndex to avoid introspection
* problems.
*
* @param name The name of the index
* @return The index or <code>null</code> if there is no such index
*/
public Index findIndex(String name)
{
return findIndex(name, false);
}
/**
* Finds the index with the specified name, using case insensitive matching.
* Note that this method is not called getIndex to avoid introspection
* problems.
*
* @param name The name of the index
* @param caseSensitive Whether case matters for the names
* @return The index or <code>null</code> if there is no such index
*/
public Index findIndex(String name, boolean caseSensitive)
{
for (int idx = 0; idx < getIndexCount(); idx++)
{
Index index = getIndex(idx);
if (caseSensitive)
{
if (index.getName().equals(name))
{
return index;
}
}
else
{
if (index.getName().equalsIgnoreCase(name))
{
return index;
}
}
}
return null;
}
/**
* Finds the foreign key in this table that is equal to the supplied foreign key.
*
* @param key The foreign key to search for
* @return The found foreign key
*/
public ForeignKey findForeignKey(ForeignKey key)
{
for (int idx = 0; idx < getForeignKeyCount(); idx++)
{
ForeignKey fk = getForeignKey(idx);
if (fk.equals(key))
{
return fk;
}
}
return null;
}
/**
* Finds the foreign key in this table that is equal to the supplied foreign key.
*
* @param key The foreign key to search for
* @param caseSensitive Whether case matters for the names
* @return The found foreign key
*/
public ForeignKey findForeignKey(ForeignKey key, boolean caseSensitive)
{
for (int idx = 0; idx < getForeignKeyCount(); idx++)
{
ForeignKey fk = getForeignKey(idx);
if ((caseSensitive && fk.equals(key)) ||
(!caseSensitive && fk.equalsIgnoreCase(key)))
{
return fk;
}
}
return null;
}
/**
* Returns the foreign key referencing this table if it exists.
*
* @return The self-referencing foreign key if any
*/
public ForeignKey getSelfReferencingForeignKey()
{
for (int idx = 0; idx < getForeignKeyCount(); idx++)
{
ForeignKey fk = getForeignKey(idx);
if (this.equals(fk.getForeignTable()))
{
return fk;
}
}
return null;
}
/**
* Returns the primary key columns of this table.
*
* @return The primary key columns
*/
public Column[] getPrimaryKeyColumns()
{
Collection pkColumns = CollectionUtils.select(_columns, new Predicate() {
public boolean evaluate(Object input) {
return ((Column)input).isPrimaryKey();
}
});
return (Column[])pkColumns.toArray(new Column[pkColumns.size()]);
}
/**
* Returns the auto increment columns in this table. If no incrementcolumns
* are found, it will return an empty array.
*
* @return The columns
*/
public Column[] getAutoIncrementColumns()
{
Collection autoIncrColumns = CollectionUtils.select(_columns, new Predicate() {
public boolean evaluate(Object input) {
return ((Column)input).isAutoIncrement();
}
});
return (Column[])autoIncrColumns.toArray(new Column[autoIncrColumns.size()]);
}
/**
* Sorts the foreign keys alphabetically.
*
* @param caseSensitive Whether case matters
*/
public void sortForeignKeys(final boolean caseSensitive)
{
if (!_foreignKeys.isEmpty())
{
final Collator collator = Collator.getInstance();
Collections.sort(_foreignKeys, new Comparator() {
public int compare(Object obj1, Object obj2)
{
String fk1Name = ((ForeignKey)obj1).getName();
String fk2Name = ((ForeignKey)obj2).getName();
if (!caseSensitive)
{
fk1Name = (fk1Name != null ? fk1Name.toLowerCase() : null);
fk2Name = (fk2Name != null ? fk2Name.toLowerCase() : null);
}
return collator.compare(fk1Name, fk2Name);
}
});
}
}
/**
* {@inheritDoc}
*/
public Object clone() throws CloneNotSupportedException
{
Table result = (Table)super.clone();
result._catalog = _catalog;
result._schema = _schema;
result._name = _name;
result._type = _type;
result._columns = (ArrayList)_columns.clone();
result._foreignKeys = (ArrayList)_foreignKeys.clone();
result._indices = (ArrayList)_indices.clone();
return result;
}
/**
* {@inheritDoc}
*/
public boolean equals(Object obj)
{
if (obj instanceof Table)
{
Table other = (Table)obj;
// Note that this compares case sensitive
// TODO: For now we ignore catalog and schema (type should be irrelevant anyways)
return new EqualsBuilder().append(_name, other._name)
.append(_columns, other._columns)
.append(new HashSet(_foreignKeys), new HashSet(other._foreignKeys))
.append(new HashSet(_indices), new HashSet(other._indices))
.isEquals();
}
else
{
return false;
}
}
/**
* {@inheritDoc}
*/
public int hashCode()
{
// TODO: For now we ignore catalog and schema (type should be irrelevant anyways)
return new HashCodeBuilder(17, 37).append(_name)
.append(_columns)
.append(new HashSet(_foreignKeys))
.append(new HashSet(_indices))
.toHashCode();
}
/**
* {@inheritDoc}
*/
public String toString()
{
StringBuffer result = new StringBuffer();
result.append("Table [name=");
result.append(getName());
result.append("; ");
result.append(getColumnCount());
result.append(" columns]");
return result.toString();
}
/**
* Returns a verbose string representation of this table.
*
* @return The string representation
*/
public String toVerboseString()
{
StringBuffer result = new StringBuffer();
result.append("Table [name=");
result.append(getName());
result.append("; catalog=");
result.append(getCatalog());
result.append("; schema=");
result.append(getCatalog());
result.append("; type=");
result.append(getType());
result.append("] columns:");
for (int idx = 0; idx < getColumnCount(); idx++)
{
result.append(" ");
result.append(getColumn(idx).toVerboseString());
}
result.append("; indices:");
for (int idx = 0; idx < getIndexCount(); idx++)
{
result.append(" ");
result.append(getIndex(idx).toVerboseString());
}
result.append("; foreign keys:");
for (int idx = 0; idx < getForeignKeyCount(); idx++)
{
result.append(" ");
result.append(getForeignKey(idx).toVerboseString());
}
return result.toString();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -