package org.xenei.jdbc4sparql.iface.name;
import java.util.UUID;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.builder.CompareToBuilder;
/**
* A class that represents the Fully qualified name of a JDBC object.
*
* No segment of the FQName may be null.
*
* This is the name that included the Catalog, Schema, Table, and Column name
* segments.
*
*/
public interface FQName extends GUIDObject {
/**
* A helper class for comparing FQNames. Provides implementations of
* compare(), equals() and hashCode().
*
*/
public static class Comparator implements java.util.Comparator<FQName> {
@Override
public int compare(final FQName fqName1, final FQName fqName2) {
return new CompareToBuilder()
.append(fqName1.getCatalog(), fqName2.getCatalog())
.append(fqName1.getSchema(), fqName2.getSchema())
.append(fqName1.getTable(), fqName2.getTable())
.append(fqName1.getColumn(), fqName2.getColumn())
.toComparison();
}
/**
* Determines if 2 FQNames are equal. A FQName is equal if all the name
* segments are equal.
*
* @param fqName1
* the first FQName
* @param fqName2
* the second FQName
* @return true if equal, false if not
*/
public static boolean equals(final Object fqName1, final Object fqName2) {
if ((fqName1 instanceof FQName) && (fqName2 instanceof FQName)) {
return ((FQName) fqName1).getGUID().equals(
((FQName) fqName2).getGUID());
// FQName bn1 = (FQName) fqName1;
// FQName bn2 = (FQName) fqName2;
// return new EqualsBuilder()
// .append(bn1.getCatalog(), bn2.getCatalog())
// .append(bn1.getSchema(), bn2.getSchema())
// .append(bn1.getTable(), bn2.getTable())
// .append(bn1.getColumn(), bn2.getColumn()).isEquals();
}
return false;
}
/**
* Generates a common hash code for the FQName based on all the name
* segments.
*
* @param fqName
* @return
*/
public static int hashCode(final FQName fqName) {
return fqName.getGUID().hashCode();
// return new HashCodeBuilder().append(fqName.getCatalog())
// .append(fqName.getSchema()).append(fqName.getTable())
// .append(fqName.getColumn()).toHashCode();
}
public static String makeGUID(final String catalog,
final String schema, final String table, final String column) {
final String t = StringUtils.defaultString(catalog)
+ StringUtils.defaultString(schema)
+ StringUtils.defaultString(table)
+ StringUtils.defaultString(column);
return "v_"
+ (UUID.nameUUIDFromBytes(t.getBytes()).toString().replace(
"-", "_"));
}
}
/**
* Get the catalog name segment.
*
* @return The catalog name string.
*/
public String getCatalog();
/**
* Get the column name segment.
*
* @return the column name string
*/
public String getColumn();
/**
* Get the schema name segment.
*
* @return schema name string.
*/
public String getSchema();
/**
* Get the table name segment.
*
* @return the talbe name string.
*/
public String getTable();
}