package org.springframework.roo.addon.dbre.addon.model;
import java.util.LinkedHashSet;
import java.util.Set;
import org.apache.commons.lang3.Validate;
/**
* Represents an index definition for a table which may be either unique or
* non-unique.
*
* @author Alan Stewart
* @since 1.1
*/
public class Index {
private final Set<IndexColumn> columns = new LinkedHashSet<IndexColumn>();
private String name;
private boolean unique;
/**
* Constructor
*
* @param name
*/
Index(final String name) {
this.name = name;
}
public boolean addColumn(final IndexColumn indexColumn) {
Validate.notNull(indexColumn, "Column required");
return columns.add(indexColumn);
}
@Override
public boolean equals(final Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (!(obj instanceof Index)) {
return false;
}
final Index other = (Index) obj;
if (name == null) {
if (other.name != null) {
return false;
}
} else if (!name.equals(other.name)) {
return false;
}
return true;
}
public Set<IndexColumn> getColumns() {
return columns;
}
public String getName() {
return name;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + (name == null ? 0 : name.hashCode());
return result;
}
public boolean isUnique() {
return unique;
}
public void setName(final String name) {
this.name = name;
}
public void setUnique(final boolean unique) {
this.unique = unique;
}
@Override
public String toString() {
return String.format("Index [name=%s, unique=%s, columns=%s]", name, unique, columns);
}
}