/**
* HiveDB is an Open Source (LGPL) system for creating large, high-transaction-volume
* data storage systems.
*/
package org.hivedb.meta;
import org.hivedb.Hive;
import org.hivedb.meta.persistence.ColumnInfo;
import org.hivedb.util.HiveUtils;
/**
* An index of a value of a resource.
*
* @author Kevin Kelm (kkelm@fortress-consulting.com)
* @author Andy Likuski (alikuski@cafepress.com)
*/
public class SecondaryIndex implements Comparable<SecondaryIndex>, IdAndNameIdentifiable<Integer> {
private int id;
private Resource resource;
private ColumnInfo columnInfo;
/**
* Create constructor
*/
public SecondaryIndex(String name, int type) {
this(Hive.NEW_OBJECT_ID, name, type);
}
/**
* PERSISTENCE LOAD ONLY
* Reference to Resource will be loaded by the Resource constructor
*
* @param id
*/
public SecondaryIndex(int id, String name, int type) {
this.id = id;
this.columnInfo = new ColumnInfo(name, type);
}
public Integer getId() {
return id;
}
/**
* A secondary index's name is the compound form resource_name.column_name
*
* @return
*/
public String getName() {
return this.getColumnInfo().getName();
}
public String getTableName() {
return getTableName(this, this.getResource());
}
public ColumnInfo getColumnInfo() {
return columnInfo;
}
public void setColumnInfo(ColumnInfo columnInfo) {
this.columnInfo = columnInfo;
}
public Resource getResource() {
return resource;
}
public void setResource(Resource resource) {
this.resource = resource;
}
/**
* For use by persistence layer and unit tests. Otherwise, id should be considered immmutable.
*
* @param id Database-generated identifier with which this instance should be updated
*/
public void updateId(int id) {
this.id = id;
}
public boolean equals(Object obj) {
return obj.hashCode() == hashCode();
}
public int hashCode() {
return HiveUtils.makeHashCode(new Object[]{
columnInfo
});
}
public String toString() {
return HiveUtils.toDeepFormatedString(this,
"ColumnInfo", getColumnInfo());
}
public int compareTo(SecondaryIndex o) {
return getName().compareTo(o.getName());
}
public Object clone() {
return new SecondaryIndex(getColumnInfo().getName(), getColumnInfo().getColumnType());
}
public static String getTableName(SecondaryIndex secondaryIndex, Resource resource) {
return getTableName(secondaryIndex.getColumnInfo().getName(), resource.getName());
}
public static String getTableName(String index, String resource) {
return resource + "." + index;
}
public void setId(Integer field) {
this.id = field;
}
}