package org.hibernate.boot.model;
import java.io.Serializable;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import org.hibernate.internal.util.collections.CollectionHelper;
public class IdentifierGeneratorDefinition implements Serializable {
private final String name;
private final String strategy;
private final Map<String, String> parameters;
public IdentifierGeneratorDefinition(
final String name,
final String strategy,
final Map<String, String> parameters) {
this.name = name;
this.strategy = strategy;
if ( CollectionHelper.isEmpty( parameters ) ) {
this.parameters = Collections.emptyMap();
}
else {
this.parameters = Collections.unmodifiableMap( parameters );
}
}
public IdentifierGeneratorDefinition(
final String name,
final Map<String, String> parameters) {
this( name, name, parameters );
}
public IdentifierGeneratorDefinition(String name) {
this( name, name );
}
public IdentifierGeneratorDefinition(String name, String strategy) {
this.name = name;
this.strategy = strategy;
this.parameters = Collections.emptyMap();
}
public String getStrategy() {
return strategy;
}
public String getName() {
return name;
}
public Map<String, String> getParameters() {
return parameters;
}
@Override
public boolean equals(Object o) {
if ( this == o ) {
return true;
}
if ( !( o instanceof IdentifierGeneratorDefinition ) ) {
return false;
}
IdentifierGeneratorDefinition that = (IdentifierGeneratorDefinition) o;
if ( name != null ? !name.equals( that.name ) : that.name != null ) {
return false;
}
if ( parameters != null ? !parameters.equals( that.parameters ) : that.parameters != null ) {
return false;
}
if ( strategy != null ? !strategy.equals( that.strategy ) : that.strategy != null ) {
return false;
}
return true;
}
@Override
public int hashCode() {
int result = name != null ? name.hashCode() : 0;
result = 31 * result + ( strategy != null ? strategy.hashCode() : 0 );
result = 31 * result + ( parameters != null ? parameters.hashCode() : 0 );
return result;
}
@Override
public String toString() {
return "IdentifierGeneratorDefinition{" +
"name='" + name + '\'' +
", strategy='" + strategy + '\'' +
", parameters=" + parameters +
'}';
}
public static class Builder {
private String name;
private String strategy;
private Map<String, String> parameters;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getStrategy() {
return strategy;
}
public void setStrategy(String strategy) {
this.strategy = strategy;
}
public void addParam(String name, String value) {
parameters().put( name, value );
}
private Map<String, String> parameters() {
if ( parameters == null ) {
parameters = new HashMap<String, String>();
}
return parameters;
}
public void addParams(Map<String,String> parameters) {
parameters().putAll( parameters );
}
public IdentifierGeneratorDefinition build() {
return new IdentifierGeneratorDefinition( name, strategy, parameters );
}
}
}