package jef.database.meta.def;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import jef.database.annotation.DateGenerateType;
import jef.tools.StringUtils;
/**
*
* @author publicxtgxrj10
*
*/
public class GenerateTypeDef {
private GenerationType geType;
private DateGenerateType dateGenerate;
public GenerateTypeDef(GenerationType strategy) {
this.geType = strategy;
}
public GenerateTypeDef(String generator) {
this.dateGenerate = getDateGenerateType(generator.toLowerCase());
}
private static DateGenerateType getDateGenerateType(String generated) {
if (generated != null) {
if ("created".equals(generated)) {
return DateGenerateType.created;
} else if ("modified".equals(generated)) {
return DateGenerateType.modified;
} else if ("created-sys".equals(generated) || "created_sys".equals(generated)) {
return DateGenerateType.created_sys;
} else if ("modified-sys".equals(generated) || "modified_sys".equals(generated)) {
return DateGenerateType.modified_sys;
} else if ("modified-nano".equals(generated) || "modified_nano".equals(generated)) {
return DateGenerateType.modified_nano;
} else if (generated.length() == 0) {
return DateGenerateType.created;
}
throw new IllegalArgumentException("Unknown date generator [" + generated + "]");
}
return null;
}
public GenerationType getGeType() {
return geType;
}
public void setGeType(GenerationType geType) {
this.geType = geType;
}
public DateGenerateType getDateGenerate() {
return dateGenerate;
}
public void setDateGenerate(DateGenerateType dateGenerate) {
this.dateGenerate = dateGenerate;
}
public boolean isDateTime() {
return dateGenerate != null;
}
public boolean isKeyGeneration() {
return geType != null;
}
public static GenerateTypeDef create(GeneratedValue gv) {
if (gv == null)
return null;
String generator = gv.generator();
if (StringUtils.isEmpty(generator)) {
return new GenerateTypeDef(gv.strategy());
} else {
return new GenerateTypeDef(generator);
}
}
}