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.
 
 
 
 
 
 

77 lines
3.3 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.RedisScriptTableData;
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.core.script.EngineType;
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 RedisScriptUniversalTableDataImpl extends AbstractUniversalServerTableDataProvider<RedisScriptTableData> {
@Override
public Class<RedisScriptTableData> classForTableData() {
return RedisScriptTableData.class;
}
@Override
public String nameForTableData() {
return "RedisScript";
}
@Override
public JSONObject serialize(RedisScriptTableData redisScriptTableData) {
JSONObject data = new JSONObject();
Connection database = redisScriptTableData.getDatabase();
data.put(RedisConstants.DATABASE, database instanceof NameReference ? ((NameReference) database).getName() : StringKit.EMPTY);
if (redisScriptTableData.getOrderValue() instanceof FormulaOrderValue) {
data.put(RedisConstants.ORDER, redisScriptTableData.getOrderValue().toString());
} else {
data.put(RedisConstants.ORDER, redisScriptTableData.getOrderValue().getValue());
}
data.put(RedisConstants.SCRIPT, redisScriptTableData.getScript());
data.put(RedisConstants.ENGINE, redisScriptTableData.getEngineType().getType());
data.put(RedisConstants.PARAMETERS, ParameterBean.createParameterBeans(redisScriptTableData.getParameters(Calculator.createCalculator())));
return data;
}
@Override
public RedisScriptTableData deserialize(RedisScriptTableData oldTableData, JSONObject data) {
RedisScriptTableData newTableData = new RedisScriptTableData();
String databaseName = data.getString(RedisConstants.DATABASE);
String script = data.getString(RedisConstants.SCRIPT);
if (StringKit.isNotEmpty(databaseName) && ConnectionKit.getConnection(databaseName) != null) {
newTableData.setDatabase(ConnectionKit.createNameConnection(databaseName));
}
newTableData.setEngineType(EngineType.parse(data.getInt(RedisConstants.ENGINE)));
newTableData.setScript(script);
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));
return newTableData;
}
@Override
public Atom client() {
return RedisConnectionComponent.KEY;
}
}