package org.n3r.eql.convert.todb; import com.google.common.base.Optional; import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; import com.google.common.collect.Lists; import lombok.val; import org.n3r.eql.convert.EqlConvertAnn; import org.n3r.eql.convert.EqlConverts; import java.lang.reflect.AccessibleObject; import java.util.List; /** * @author bingoohuang [bingoohuang@gmail.com] Created on 2017/2/10. */ public class EqlToDbConverts { static LoadingCache<AccessibleObject, Optional<EqlerToDbConverter>> toDbConverterCache = CacheBuilder.newBuilder().build(new CacheLoader<AccessibleObject, Optional<EqlerToDbConverter>>() { @Override public Optional<EqlerToDbConverter> load(AccessibleObject accessibleObject) throws Exception { List<EqlConvertAnn<ToDbConvert>> ecas = Lists.newArrayList(); EqlConverts.searchEqlConvertAnns(accessibleObject, ecas, ToDbConvert.class); if (ecas.isEmpty()) return Optional.absent(); val eqlerToDbConverter = new EqlerToDbConverter(); for(val eca : ecas) { eqlerToDbConverter.addConvertAnn(eca); } return Optional.of(eqlerToDbConverter); } }); public static Optional<EqlerToDbConverter> getConverter(AccessibleObject accessibleObject) { return toDbConverterCache.getUnchecked(accessibleObject); } }