/*
* Hibernate OGM, Domain model persistence for NoSQL datastores
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/
package org.hibernate.ogm.model.impl;
import org.hibernate.ogm.model.key.spi.IdSourceKeyMetadata;
/**
* Meta-data about an id sequence source. In the case of table-based generators, corresponds to the table used by one
* ore more generators. In the case of sequence-based generators, corresponds to one sequence.
*
* @author Gunnar Morling
*/
public class DefaultIdSourceKeyMetadata implements IdSourceKeyMetadata {
private final IdSourceType type;
private final String name;
private final String keyColumnName;
private final String valueColumnName;
private final int hashCode;
private DefaultIdSourceKeyMetadata(IdSourceType type, String name, String keyColumnName, String valueColumnName) {
this.type = type;
this.name = name;
this.keyColumnName = keyColumnName;
this.valueColumnName = valueColumnName;
this.hashCode = calculateHashCode();
}
public static DefaultIdSourceKeyMetadata forTable(String table, String keyColumnName, String valueColumnName) {
return new DefaultIdSourceKeyMetadata( IdSourceType.TABLE, table, keyColumnName, valueColumnName );
}
public static DefaultIdSourceKeyMetadata forSequence(String sequence) {
return new DefaultIdSourceKeyMetadata( IdSourceType.SEQUENCE, sequence, null, null );
}
/**
* Returns the type of the represented id source.
*/
@Override
public IdSourceType getType() {
return type;
}
/**
* Returns the table name for table-based sources, the sequence name otherwise.
*/
@Override
public String getName() {
return name;
}
/**
* Returns the key column name for table-based sources, {@code null} otherwise.
*/
@Override
public String getKeyColumnName() {
return keyColumnName;
}
/**
* Returns the value column name for table-based sources, {@code null} otherwise.
*/
@Override
public String getValueColumnName() {
return valueColumnName;
}
@Override
public int hashCode() {
return hashCode;
}
@Override
public boolean equals(Object obj) {
if ( this == obj ) {
return true;
}
if ( obj == null ) {
return false;
}
if ( getClass() != obj.getClass() ) {
return false;
}
DefaultIdSourceKeyMetadata other = (DefaultIdSourceKeyMetadata) obj;
if ( name == null ) {
if ( other.name != null ) {
return false;
}
}
else if ( !name.equals( other.name ) ) {
return false;
}
if ( type != other.type ) {
return false;
}
return true;
}
@Override
public String toString() {
return "DefaultIdSourceKeyMetadata [type=" + type + ", name=" + name + ", keyColumnName=" + keyColumnName + ", valueColumnName=" + valueColumnName + "]";
}
private int calculateHashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ( ( name == null ) ? 0 : name.hashCode() );
result = prime * result + ( ( type == null ) ? 0 : type.hashCode() );
return result;
}
}