package io.ebeaninternal.server.deploy.meta;
import io.ebean.annotation.Identity;
import io.ebean.annotation.IdentityGenerated;
import io.ebean.annotation.IdentityType;
import io.ebean.config.dbplatform.IdType;
public class DeployIdentityMode {
public static DeployIdentityMode auto() {
return new DeployIdentityMode(IdType.AUTO);
}
private IdType type;
private IdentityGenerated generated;
private int start;
private int increment;
private int cache;
private String sequenceName;
private boolean platformDefault;
public DeployIdentityMode(Identity id) {
this.type = idType(id.type());
this.generated = id.generated();
this.start = id.start();
this.increment = id.increment();
this.cache = id.cache();
this.sequenceName = id.sequenceName();
}
private DeployIdentityMode(IdType type) {
this.type = type;
this.generated = IdentityGenerated.AUTO;
this.sequenceName = "";
this.start = 0;
this.increment = 0;
this.cache = 0;
}
public void setPlatformType(IdType type) {
this.type = type;
this.platformDefault = true;
}
public void setSequence(int initialValue, int allocationSize, String sequenceName) {
this.start = initialValue;
this.increment = allocationSize;
this.sequenceName = sequenceName;
}
public void setSequenceGenerator(String genName) {
if (sequenceName == null || sequenceName.isEmpty()) {
sequenceName = genName;
}
}
public int setSequenceBatchMode(boolean sequenceBatchMode) {
if (sequenceBatchMode) {
increment = 1;
} else if (increment == 0) {
increment = 50;
}
return increment;
}
public void setIdType(IdType type) {
this.type = type;
}
public void setStart(int start) {
this.start = start;
}
public void setIncrement(int increment) {
this.increment = increment;
}
public void setSequenceName(String sequenceName) {
this.sequenceName = sequenceName;
}
public boolean isPlatformDefault() {
return platformDefault;
}
public IdType getIdType() {
return type;
}
public IdentityGenerated getGenerated() {
return generated;
}
public int getStart() {
return start;
}
public int getIncrement() {
return increment;
}
public int getCache() {
return cache;
}
public String getSequenceName() {
return sequenceName;
}
public boolean isSequence() {
return type == IdType.SEQUENCE;
}
public boolean isIdentity() {
return type == IdType.IDENTITY;
}
public boolean isExternal() {
return type == IdType.EXTERNAL;
}
public boolean isAuto() {
return type == IdType.AUTO;
}
private static IdType idType(IdentityType type) {
switch (type) {
case AUTO:
return IdType.AUTO;
case SEQUENCE:
return IdType.SEQUENCE;
case IDENTITY:
return IdType.IDENTITY;
case APPLICATION:
return IdType.EXTERNAL;
default:
throw new IllegalStateException("type " + type + " not expected?");
}
}
}