package com.fr.plugin.db.redis.core.visit; import com.fr.plugin.db.redis.core.DataWrapper; import com.fr.plugin.db.redis.core.visit.impl.GetVisitor; import com.fr.plugin.db.redis.core.visit.impl.HashGetVisitor; import com.fr.plugin.db.redis.core.visit.impl.HashKeysVisitor; import com.fr.plugin.db.redis.core.visit.impl.HashMGetVisitor; import com.fr.plugin.db.redis.core.visit.impl.HashVisitor; import com.fr.plugin.db.redis.core.visit.impl.KeysVisitor; import com.fr.plugin.db.redis.core.visit.impl.ListVisitor; import com.fr.plugin.db.redis.core.visit.impl.MGetVisitor; import com.fr.plugin.db.redis.core.visit.impl.SetVisitor; import com.fr.plugin.db.redis.core.visit.impl.ZRangeVisitor; import com.fr.stable.ParameterProvider; import com.fr.stable.script.CalculatorProvider; import redis.clients.jedis.Jedis; import java.util.ArrayList; import java.util.List; /** * Created by richie on 2017/5/2. */ public class VisitorFactory { private static List visitors = new ArrayList(); static { visitors.add(new GetVisitor()); visitors.add(new ListVisitor()); visitors.add(new HashVisitor()); visitors.add(new HashGetVisitor()); visitors.add(new HashMGetVisitor()); visitors.add(new HashKeysVisitor()); visitors.add(new SetVisitor()); visitors.add(new ZRangeVisitor()); visitors.add(new MGetVisitor()); visitors.add(new KeysVisitor()); } public static DataWrapper getKeyValueResult(CalculatorProvider calculator, ParameterProvider[] ps, Jedis client, String query, int rowCount) throws Exception { Visitor visitor = getMatchedVisitor(query); if (visitor == null) { return DataWrapper.EMPTY; } else { return visitor.buildData(calculator, ps, client, query, rowCount); } } private static Visitor getMatchedVisitor(String query) { for (Visitor visitor : visitors) { if (visitor.match(query)) { return visitor; } } return null; } }