redis数据集插件。
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

78 lines
3.2 KiB

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<RedisTableData> {
@Override
public Class<RedisTableData> 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;
}
}