package com.fr.plugin.db.redis; import com.fanruan.api.cal.FormulaKit; import com.fanruan.api.data.ConnectionKit; import com.fanruan.api.util.StringKit; import com.fr.data.impl.Connection; import com.fr.decision.fun.impl.AbstractUniversalServerTableDataProvider; import com.fr.json.JSONObject; import com.fr.plugin.db.redis.bean.ParameterBean; import com.fr.plugin.db.redis.core.RedisConstants; import com.fr.plugin.db.redis.core.RedisTableData; import com.fr.plugin.db.redis.core.order.impl.FormulaOrderValue; import com.fr.plugin.db.redis.core.order.impl.NumberOrderValue; import com.fr.plugin.db.redis.util.RedisUtils; import com.fr.script.Calculator; import com.fr.stable.NameReference; import com.fr.web.struct.Atom; /** * @author Elijah * @version 10.0.4 * Created by Elijah on 2019/10/30 */ public class RedisUniversalTableDataImpl extends AbstractUniversalServerTableDataProvider { @Override public Class classForTableData() { return RedisTableData.class; } @Override public String nameForTableData() { return "Redis"; } @Override public JSONObject serialize(RedisTableData redisTableData) { JSONObject data = new JSONObject(); Connection database = redisTableData.getDatabase(); data.put(RedisConstants.DATABASE, database instanceof NameReference ? ((NameReference) database).getName() : StringKit.EMPTY); if (redisTableData.getOrderValue() instanceof FormulaOrderValue) { data.put(RedisConstants.ORDER, redisTableData.getOrderValue().toString()); } else { data.put(RedisConstants.ORDER, redisTableData.getOrderValue().getValue()); } data.put(RedisConstants.SCRIPT, redisTableData.getScript()); data.put(RedisConstants.QUERY, redisTableData.getQuery()); data.put(RedisConstants.PARAMETERS, ParameterBean.createParameterBeans(redisTableData.getParameters(Calculator.createCalculator()))); return data; } @Override public RedisTableData deserialize(RedisTableData oldTableData, JSONObject data) { RedisTableData newTableData = new RedisTableData(); String databaseName = data.getString(RedisConstants.DATABASE); String script = data.getString(RedisConstants.SCRIPT); String query = data.getString(RedisConstants.QUERY); if (StringKit.isNotEmpty(databaseName) && ConnectionKit.getConnection(databaseName) != null) { newTableData.setDatabase(ConnectionKit.createNameConnection(databaseName)); } newTableData.setScript(script); newTableData.setQuery(query); //与前台约定,数字说明是序号 Object order = data.get(RedisConstants.ORDER); if (order instanceof Integer) { newTableData.setOrderValue(new NumberOrderValue((Integer) order)); } else { newTableData.setOrderValue(new FormulaOrderValue(FormulaKit.newFormula(order))); } newTableData.setParameters(RedisUtils.analyzeParameter(data.getJSONArray(RedisConstants.PARAMETERS), newTableData.getOrderValue(), script, query)); return newTableData; } @Override public Atom client() { return RedisConnectionComponent.KEY; } }