package org.n3r.eql.convert.todb;
import com.google.common.collect.Lists;
import lombok.AllArgsConstructor;
import lombok.val;
import org.n3r.eql.convert.EqlConvertAnn;
import org.n3r.eql.util.Ob;
import java.lang.annotation.Annotation;
import java.util.List;
/**
* @author bingoohuang [bingoohuang@gmail.com] Created on 2017/2/10.
*/
@AllArgsConstructor
public class EqlerToDbConverter implements ToDbConverter {
Annotation annotation;
List<ToDbConverter> converters;
public EqlerToDbConverter() {
this(null, Lists.<ToDbConverter>newArrayList());
}
@Override public Object convert(Annotation ann, Object src) {
Object result = src;
for (ToDbConverter converter : converters) {
result = converter.convert(annotation, result);
}
return result;
}
public void addConvertAnn(EqlConvertAnn<ToDbConvert> eca) {
Class<? extends ToDbConverter>[] classes = eca.convert.value();
List<ToDbConverter> subConverters = Lists.newArrayListWithCapacity(classes.length);
for (val clazz : classes) {
val toDbConverter = (ToDbConverter) Ob.createInstance(clazz);
subConverters.add(toDbConverter);
}
converters.add(new EqlerToDbConverter(eca.annotation, subConverters));
}
}