package jef.database.annotation;
import java.lang.annotation.Annotation;
import jef.json.JSONCustom;
import jef.json.JsonTypeSerializer;
import jef.tools.StringUtils;
import org.apache.commons.lang.builder.ToStringBuilder;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.ObjectSerializer;
@JSONCustom(serializer=PartitionTableImpl.class)//,fieldAccess=true
@SuppressWarnings("all")
public class PartitionTableImpl implements PartitionTable {
private String appender="_";
private String keySeparator="";
private PartitionKeyImpl[] key;
private String dbPrefix="";
public Class<? extends Annotation> annotationType() {
return PartitionTable.class;
}
public String appender() {
return appender;
}
public String keySeparator() {
return keySeparator;
}
public PartitionKey[] key() {
return key;
}
public static PartitionTableImpl create(PartitionTable t){
if(t instanceof PartitionTableImpl){
return (PartitionTableImpl)t;
}
PartitionTableImpl impl=new PartitionTableImpl();
impl.appender=t.appender();
impl.keySeparator=t.keySeparator();
PartitionKey[] from=t.key();
PartitionKeyImpl[] keys=new PartitionKeyImpl[from.length];
for(int i=0;i<from.length;i++){
keys[i]=PartitionKeyImpl.create(from[i]);
}
impl.key=keys;
return impl;
}
public void setAppender(String appender) {
this.appender = appender;
}
public void setKeySeparator(String keySeparator) {
this.keySeparator = keySeparator;
}
public void setKey(PartitionKeyImpl[] key) {
this.key = key;
}
public void setDbPrefix(String dbPrefix) {
this.dbPrefix = dbPrefix;
}
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this);
}
public static ObjectSerializer getSerializer(){
return new Ser();
}
private static class Ser extends JsonTypeSerializer<PartitionTableImpl> {
@Override
protected Object processToJson(PartitionTableImpl src) {
JSONObject jo=new JSONObject();
jo.put("key", src.key);
if(!"_".equals(src.appender)){
jo.put("appender", src.appender);
}
if(StringUtils.isNotEmpty(src.keySeparator)){
jo.put("keySeparator", src.keySeparator);
}
return jo;
}
}
public String dbPrefix() {
return this.dbPrefix;
}
}