package org.springframework.roo.addon.dbre.addon.model;
import org.apache.commons.lang3.Validate;
/**
* Represents a reference between a column in the local table and a column in
* another table.
*
* @author Alan Stewart
* @since 1.1
*/
public class Reference {
/** The foreign column. */
private Column foreignColumn;
/** The name of the foreign column. */
private String foreignColumnName;
private boolean insertableOrUpdatable = true;
/** The local column. */
private Column localColumn;
/** The name of the local column. */
private String localColumnName;
/**
* Creates a new reference between the two given columns.
*
* @param localColumn The local column
* @param foreignColumn The remote column
*/
Reference(final Column localColumn, final Column foreignColumn) {
setLocalColumn(localColumn);
setForeignColumn(foreignColumn);
}
/**
* Creates a new reference between the two given columns.
*/
Reference(final String localColumnName, final String foreignColumnName) {
Validate.notBlank(localColumnName, "Foreign key reference local column name required");
Validate.notBlank(foreignColumnName, "Foreign key reference foreign column name required");
this.localColumnName = localColumnName;
this.foreignColumnName = foreignColumnName;
}
@Override
public boolean equals(final Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (!(obj instanceof Reference)) {
return false;
}
final Reference other = (Reference) obj;
if (foreignColumnName == null) {
if (other.foreignColumnName != null) {
return false;
}
} else if (!foreignColumnName.equals(other.foreignColumnName)) {
return false;
}
if (localColumnName == null) {
if (other.localColumnName != null) {
return false;
}
} else if (!localColumnName.equals(other.localColumnName)) {
return false;
}
return true;
}
public Column getForeignColumn() {
return foreignColumn;
}
public String getForeignColumnName() {
return foreignColumnName;
}
public Column getLocalColumn() {
return localColumn;
}
public String getLocalColumnName() {
return localColumnName;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + (foreignColumnName == null ? 0 : foreignColumnName.hashCode());
result = prime * result + (localColumnName == null ? 0 : localColumnName.hashCode());
return result;
}
public boolean isInsertableOrUpdatable() {
return insertableOrUpdatable;
}
public void setForeignColumn(final Column foreignColumn) {
this.foreignColumn = foreignColumn;
}
public void setInsertableOrUpdatable(final boolean insertableOrUpdatable) {
this.insertableOrUpdatable = insertableOrUpdatable;
}
public void setLocalColumn(final Column localColumn) {
this.localColumn = localColumn;
}
@Override
public String toString() {
return String.format(
"Reference [localColumnName=%s, foreignColumnName=%s, insertableOrUpdatable=%s]",
localColumnName, foreignColumnName, insertableOrUpdatable);
}
}