package com.fr.plugin.db.redis.core; import com.fr.data.AbstractDataModel; import com.fr.plugin.db.redis.core.emb.Redis; import com.fr.plugin.db.redis.help.RedisClient; import com.fr.plugin.db.redis.help.RedisClientSelector; import com.fr.plugin.db.redis.help.client.SimpleDataModel; import java.util.ArrayList; import java.util.List; /** * @author richie * @version 10.0 * Created by richie on 2019-03-18 */ public class RedisScriptTableDataModel extends AbstractDataModel { private RedisDatabaseConnection mc; private String script; private int dbIndex; private int rowCount; private List> data = new ArrayList>(); private String[] columnNames = null; public RedisScriptTableDataModel(RedisDatabaseConnection mc, int dbIndex, String script, int rowCount) { this.mc = mc; this.script = script; this.dbIndex = dbIndex; this.rowCount = rowCount; } private void buildData() { if (columnNames != null) { return; } Redis redis = mc.createRedisClient(); redis.getClient().select(dbIndex); RedisClient redisClient = RedisClientSelector.select(redis); SimpleDataModel simple = redisClient.build(redis, script, rowCount); if (simple != null) { this.columnNames = simple.getColumnNames(); this.data = simple.getData(); this.rowCount = simple.getRowCount(); } } @Override public int getColumnCount() { buildData(); return columnNames == null ? 0 : columnNames.length; } @Override public String getColumnName(int i) { buildData(); return columnNames == null ? null : columnNames[i]; } @Override public int getRowCount() { buildData(); return data.size(); } @Override public Object getValueAt(int rowIndex, int columnIndex) { buildData(); if (data != null && data.size() > rowIndex) { List rowData = data.get(rowIndex); if (rowData != null && rowData.size() > columnIndex) { return rowData.get(columnIndex); } } return null; } @Override public void release() throws Exception { } }