From 8aaba80292a1ef07240cff460a8872c43875e6b0 Mon Sep 17 00:00:00 2001 From: zjz1993 <1429595365@qq.com> Date: Wed, 28 Aug 2019 12:10:14 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=8F=92=E4=BB=B6=E5=86=85=E7=9A=84?= =?UTF-8?q?=E6=96=B9=E6=B3=95=E6=9B=BF=E6=8D=A2=E4=B8=BAfinekit=E4=B8=AD?= =?UTF-8?q?=E7=9A=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/finekit-10.0-20190828.jar | Bin 0 -> 55698 bytes .../plugin/db/redis/RedisConnectionImpl.java | 2 +- .../db/redis/RedisScriptTableDataDefine.java | 4 +- .../db/redis/conf/ShellConfigManager.java | 7 ++-- .../fr/plugin/db/redis/core/DataWrapper.java | 12 +++--- .../redis/core/RedisDatabaseConnection.java | 36 +++++++++--------- .../fr/plugin/db/redis/core/RedisNode.java | 14 +++---- .../fr/plugin/db/redis/core/RedisPool.java | 14 +++---- .../db/redis/core/RedisScriptTableData.java | 6 +-- .../plugin/db/redis/core/RedisTableData.java | 12 +++--- .../db/redis/core/RedisTableDataModel.java | 10 ++--- .../db/redis/core/order/OrderValue.java | 4 +- .../core/order/impl/FormulaOrderValue.java | 15 ++++---- .../core/pool/RedisConnectionProxyConfig.java | 16 ++++---- .../db/redis/core/visit/AbstractVisitor.java | 4 +- .../db/redis/core/visit/impl/MGetVisitor.java | 4 +- .../com/fr/plugin/db/redis/help/Console.java | 7 ++-- .../db/redis/help/client/BaseRedisClient.java | 7 ++-- .../redis/help/client/RedisNashornClient.java | 18 ++++----- .../db/redis/help/client/RedisV8Client.java | 16 ++++---- .../db/redis/ui/RedisBaseTableDataPane.java | 19 ++++----- .../redis/ui/RedisDBConnectionChosePane.java | 21 +++++----- .../fr/plugin/db/redis/ui/RedisQueryPane.java | 18 ++++----- .../plugin/db/redis/ui/RedisScriptPane.java | 12 +++--- .../db/redis/ui/RedisScriptTableDataPane.java | 4 +- .../db/redis/ui/RedisTableDataPane.java | 4 +- .../pool/RedisConnectionPoolConfigPane.java | 12 +++--- .../proxy/RedisConnectionProxyConfigPane.java | 17 ++++----- 28 files changed, 160 insertions(+), 155 deletions(-) create mode 100644 lib/finekit-10.0-20190828.jar diff --git a/lib/finekit-10.0-20190828.jar b/lib/finekit-10.0-20190828.jar new file mode 100644 index 0000000000000000000000000000000000000000..9928b19b01fb02159115ce306ec10ae3e3d7ff76 GIT binary patch literal 55698 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 { } public void transform(String script) throws ScriptException { - if (StringUtils.isBlank(script)) { + if (StringKit.isBlank(script)) { return; } String scriptText = null; @@ -55,7 +55,7 @@ public class DataWrapper { FileInputStream in = new FileInputStream(new File(readAndRenderScriptFile(script))); scriptText = IOUtils.inputStream2String(in); } catch (Exception e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); + LogKit.error(e.getMessage(), e); } } else { scriptText = String.format("(function(){%s})()", script); @@ -70,7 +70,7 @@ public class DataWrapper { Object vector = map.get("column"); List names = new ArrayList(); for (Object name : ((Map)vector).values()) { - names.add(GeneralUtils.objectToString(name)); + names.add(GeneralKit.objectToString(name)); } columnNames = names.toArray(new String[0]); Object content = map.get("content"); diff --git a/src/main/java/com/fr/plugin/db/redis/core/RedisDatabaseConnection.java b/src/main/java/com/fr/plugin/db/redis/core/RedisDatabaseConnection.java index 8a8e095..2404d32 100755 --- a/src/main/java/com/fr/plugin/db/redis/core/RedisDatabaseConnection.java +++ b/src/main/java/com/fr/plugin/db/redis/core/RedisDatabaseConnection.java @@ -5,12 +5,12 @@ import com.fr.config.holder.factory.Holders; import com.fr.config.holder.impl.ColConf; import com.fr.data.impl.AbstractDatabaseConnection; import com.fr.data.impl.Connection; -import com.fr.locale.InterProviderFactory; +import com.fanruan.api.i18n.I18nKit; import com.fr.plugin.db.redis.core.emb.Redis; -import com.fr.security.SecurityToolbox; -import com.fr.stable.ArrayUtils; -import com.fr.stable.StableUtils; -import com.fr.stable.StringUtils; +import com.fanruan.api.security.SecurityKit; +import com.fanruan.api.util.ArrayKit; +import com.fanruan.api.util.ReflectKit; +import com.fanruan.api.util.StringKit; import com.fr.stable.xml.XMLPrintWriter; import com.fr.stable.xml.XMLableReader; import com.fr.third.redis.clients.jedis.Jedis; @@ -24,9 +24,9 @@ public class RedisDatabaseConnection extends AbstractDatabaseConnection { private static final int DEFAULT_REDIS_PORT = 6379; - private Conf host = Holders.simple(StringUtils.EMPTY); + private Conf host = Holders.simple(StringKit.EMPTY); private Conf port = Holders.simple(DEFAULT_REDIS_PORT); - private Conf password = Holders.simple(StringUtils.EMPTY); + private Conf password = Holders.simple(StringKit.EMPTY); public RedisDatabaseConnection() { @@ -82,8 +82,8 @@ public class RedisDatabaseConnection extends AbstractDatabaseConnection { @Override public String[] summary(String... args) { - if (ArrayUtils.isEmpty(args)) { - return ArrayUtils.EMPTY_STRING_ARRAY; + if (ArrayKit.isEmpty(args)) { + return ArrayKit.EMPTY_STRING_ARRAY; } else { Redis redis = createRedisClient(); Set keys = redis.getClient().keys(args[0]); @@ -96,16 +96,16 @@ public class RedisDatabaseConnection extends AbstractDatabaseConnection { @Override public String connectMessage(boolean status) { if (status) { - return InterProviderFactory.getProvider().getLocText("Plugin-Redis_Connection_Successfully") + "!"; + return I18nKit.getLocText("Plugin-Redis_Connection_Successfully") + "!"; } else { - return InterProviderFactory.getProvider().getLocText("Plugin-Redis_Connection_Failed") + "!"; + return I18nKit.getLocText("Plugin-Redis_Connection_Failed") + "!"; } } @Override public void addConnection(List list, String connectionName, Class[] acceptTypes) { for (Class accept : acceptTypes) { - if (StableUtils.classInstanceOf(getClass(), accept)) { + if (ReflectKit.classInstanceOf(getClass(), accept)) { list.add(connectionName); break; } @@ -143,11 +143,11 @@ public class RedisDatabaseConnection extends AbstractDatabaseConnection { if (reader.isChildNode()) { String tagName = reader.getTagName(); if ("Attr".equals(tagName)) { - setHost(reader.getAttrAsString("host", StringUtils.EMPTY)); + setHost(reader.getAttrAsString("host", StringKit.EMPTY)); setPort(reader.getAttrAsInt("port", DEFAULT_REDIS_PORT)); - String pwd = reader.getAttrAsString("password", StringUtils.EMPTY); - if (StringUtils.isNotEmpty(pwd)) { - setPassword(SecurityToolbox.encrypt(pwd)); + String pwd = reader.getAttrAsString("password", StringKit.EMPTY); + if (StringKit.isNotEmpty(pwd)) { + setPassword(SecurityKit.encrypt(pwd)); } } } @@ -159,8 +159,8 @@ public class RedisDatabaseConnection extends AbstractDatabaseConnection { writer.startTAG("Attr"); writer.attr("host", getHost()); writer.attr("port", getPort()); - if (StringUtils.isNotEmpty(getPassword())) { - writer.attr("password", SecurityToolbox.decrypt(getPassword())); + if (StringKit.isNotEmpty(getPassword())) { + writer.attr("password", SecurityKit.decrypt(getPassword())); } writer.end(); } diff --git a/src/main/java/com/fr/plugin/db/redis/core/RedisNode.java b/src/main/java/com/fr/plugin/db/redis/core/RedisNode.java index 52cba15..bea617c 100644 --- a/src/main/java/com/fr/plugin/db/redis/core/RedisNode.java +++ b/src/main/java/com/fr/plugin/db/redis/core/RedisNode.java @@ -3,8 +3,8 @@ package com.fr.plugin.db.redis.core; import com.fr.config.holder.Conf; import com.fr.config.holder.factory.Holders; import com.fr.config.utils.UniqueKey; -import com.fr.stable.AssistUtils; -import com.fr.stable.StringUtils; +import com.fanruan.api.util.AssistKit; +import com.fanruan.api.util.StringKit; /** * @author richie @@ -15,9 +15,9 @@ public class RedisNode extends UniqueKey { public static final int DEFAULT_REDIS_PORT = 6379; - private Conf host = Holders.simple(StringUtils.EMPTY); + private Conf host = Holders.simple(StringKit.EMPTY); private Conf port = Holders.simple(DEFAULT_REDIS_PORT); - private Conf password = Holders.simple(StringUtils.EMPTY); + private Conf password = Holders.simple(StringKit.EMPTY); public RedisNode(String host, int port, String password) { this.setHost(host); @@ -52,14 +52,14 @@ public class RedisNode extends UniqueKey { @Override public boolean equals(Object obj) { return obj instanceof RedisNode - && AssistUtils.equals(((RedisNode) obj).getHost(), getHost()) + && AssistKit.equals(((RedisNode) obj).getHost(), getHost()) && ((RedisNode) obj).getPort() == getPort() - && AssistUtils.equals(((RedisNode) obj).getPassword(), getPassword()); + && AssistKit.equals(((RedisNode) obj).getPassword(), getPassword()); } @Override public int hashCode() { - return AssistUtils.hashCode(getHost(), getPort(), getPassword()); + return AssistKit.hashCode(getHost(), getPort(), getPassword()); } @Override diff --git a/src/main/java/com/fr/plugin/db/redis/core/RedisPool.java b/src/main/java/com/fr/plugin/db/redis/core/RedisPool.java index f4caebb..a210846 100644 --- a/src/main/java/com/fr/plugin/db/redis/core/RedisPool.java +++ b/src/main/java/com/fr/plugin/db/redis/core/RedisPool.java @@ -2,7 +2,7 @@ package com.fr.plugin.db.redis.core; import com.fr.config.Configuration; import com.fr.config.holder.ConfigChangeListener; -import com.fr.log.FineLoggerFactory; +import com.fanruan.api.log.LogKit; import com.fr.plugin.db.redis.core.emb.Redis; import com.fr.plugin.db.redis.core.emb.impl.ProxyRedis; import com.fr.plugin.db.redis.core.emb.impl.SimpleRedis; @@ -11,7 +11,7 @@ import com.fr.plugin.db.redis.core.pool.RedisConnectionProxyConfig; import com.fr.ssh.jsch.JSch; import com.fr.ssh.jsch.JSchException; import com.fr.ssh.jsch.Session; -import com.fr.stable.StringUtils; +import com.fanruan.api.util.StringKit; import com.fr.third.redis.clients.jedis.Jedis; import com.fr.third.redis.clients.jedis.JedisCluster; import com.fr.third.redis.clients.jedis.JedisPool; @@ -60,7 +60,7 @@ public class RedisPool { try { return createJedisBySSH(host, port, password); } catch (JSchException e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); + LogKit.error(e.getMessage(), e); } } else { String feature = host + ":" + port + "@" + password; @@ -109,7 +109,7 @@ public class RedisPool { config.setTestWhileIdle(false); //逐出扫描的时间间隔(毫秒) 如果为负数,则不运行逐出线程, 默认-1 config.setTimeBetweenEvictionRunsMillis(-1); - if (StringUtils.isNotBlank(password)) { + if (StringKit.isNotBlank(password)) { return new JedisPool(config, host, port, poolConfig.getTimeout(), password); } else { return new JedisPool(config, host, port, poolConfig.getTimeout()); @@ -119,11 +119,11 @@ public class RedisPool { private Redis createJedisBySSH(String host, int port, String password) throws JSchException { RedisConnectionProxyConfig proxyConfig = RedisConnectionProxyConfig.getInstance(); JSch jsch = new JSch(); - if (StringUtils.isNotBlank(proxyConfig.getPrivateKeyPath())) { + if (StringKit.isNotBlank(proxyConfig.getPrivateKeyPath())) { jsch.addIdentity(proxyConfig.getPrivateKeyPath()); } Session session = jsch.getSession(proxyConfig.getUsername(), proxyConfig.getHost(), proxyConfig.getPort()); - if (StringUtils.isNotBlank(proxyConfig.getPassword())) { + if (StringKit.isNotBlank(proxyConfig.getPassword())) { session.setPassword(proxyConfig.getPassword()); } session.setConfig("StrictHostKeyChecking", "no"); @@ -133,7 +133,7 @@ public class RedisPool { Jedis jedis = new Jedis(host, newPort); - if (StringUtils.isNotBlank(password)) { + if (StringKit.isNotBlank(password)) { jedis.auth(password); } return new ProxyRedis(session, jedis); diff --git a/src/main/java/com/fr/plugin/db/redis/core/RedisScriptTableData.java b/src/main/java/com/fr/plugin/db/redis/core/RedisScriptTableData.java index 25befc0..5851774 100644 --- a/src/main/java/com/fr/plugin/db/redis/core/RedisScriptTableData.java +++ b/src/main/java/com/fr/plugin/db/redis/core/RedisScriptTableData.java @@ -13,14 +13,14 @@ import com.fr.file.DatasourceManager; import com.fr.general.data.DataModel; import com.fr.general.xml.GeneralXMLTools; import com.fr.intelli.record.Focus; -import com.fr.log.FineLoggerFactory; +import com.fanruan.api.log.LogKit; import com.fr.plugin.db.redis.core.order.OrderValue; import com.fr.plugin.db.redis.core.order.impl.NumberOrderValue; import com.fr.plugin.db.redis.util.RedisUtils; import com.fr.record.analyzer.EnableMetrics; import com.fr.script.Calculator; import com.fr.stable.ParameterProvider; -import com.fr.stable.StringUtils; +import com.fanruan.api.util.StringKit; import com.fr.stable.xml.XMLPrintWriter; import com.fr.stable.xml.XMLableReader; @@ -36,7 +36,7 @@ public class RedisScriptTableData extends AbstractParameterTableData { private Conf database = Holders.obj(null, Connection.class); private Conf dbIndex = XmlHolders.obj(new NumberOrderValue(0), OrderValue.class, OrderValue.XML_TAG); - private Conf script = Holders.simple(StringUtils.EMPTY); + private Conf script = Holders.simple(StringKit.EMPTY); public void setDatabase(Connection c) { this.database.set(c); diff --git a/src/main/java/com/fr/plugin/db/redis/core/RedisTableData.java b/src/main/java/com/fr/plugin/db/redis/core/RedisTableData.java index 529b143..39db504 100644 --- a/src/main/java/com/fr/plugin/db/redis/core/RedisTableData.java +++ b/src/main/java/com/fr/plugin/db/redis/core/RedisTableData.java @@ -15,15 +15,15 @@ import com.fr.general.data.DataModel; import com.fr.general.xml.GeneralXMLTools; import com.fr.intelli.record.Focus; import com.fr.intelli.record.Original; -import com.fr.log.FineLoggerFactory; +import com.fanruan.api.log.LogKit; import com.fr.plugin.db.redis.core.order.OrderValue; import com.fr.plugin.db.redis.core.order.impl.NumberOrderValue; import com.fr.plugin.db.redis.util.RedisUtils; import com.fr.record.analyzer.EnableMetrics; import com.fr.script.Calculator; -import com.fr.stable.ArrayUtils; +import com.fanruan.api.util.ArrayKit; +import com.fanruan.api.util.StringKit; import com.fr.stable.ParameterProvider; -import com.fr.stable.StringUtils; import com.fr.stable.xml.XMLPrintWriter; import com.fr.stable.xml.XMLableReader; @@ -37,8 +37,8 @@ public class RedisTableData extends AbstractParameterTableData { private static final long serialVersionUID = 7017455818551800001L; private Conf database = Holders.obj(null, Connection.class); private Conf dbIndex = XmlHolders.obj(new NumberOrderValue(0), OrderValue.class, OrderValue.XML_TAG); - private Conf query = Holders.simple(StringUtils.EMPTY); - private Conf script = Holders.simple(StringUtils.EMPTY); + private Conf query = Holders.simple(StringKit.EMPTY); + private Conf script = Holders.simple(StringKit.EMPTY); public void setDatabase(Connection c) { this.database.set(c); @@ -97,7 +97,7 @@ public class RedisTableData extends AbstractParameterTableData { RedisUtils.calculateQuery(query.get(), ps), RedisUtils.calculateQuery(script.get(), ps), rowCount); - FineLoggerFactory.getLogger().info("Build data model spend time {} ms.", System.currentTimeMillis() - start); + LogKit.info("Build data model spend time {} ms.", System.currentTimeMillis() - start); return model; } } diff --git a/src/main/java/com/fr/plugin/db/redis/core/RedisTableDataModel.java b/src/main/java/com/fr/plugin/db/redis/core/RedisTableDataModel.java index f54dd9d..23cae45 100755 --- a/src/main/java/com/fr/plugin/db/redis/core/RedisTableDataModel.java +++ b/src/main/java/com/fr/plugin/db/redis/core/RedisTableDataModel.java @@ -2,14 +2,14 @@ package com.fr.plugin.db.redis.core; import com.fr.base.Parameter; import com.fr.data.AbstractDataModel; -import com.fr.log.FineLoggerFactory; +import com.fanruan.api.log.LogKit; import com.fr.plugin.PluginLicense; import com.fr.plugin.PluginLicenseManager; import com.fr.plugin.db.redis.core.emb.Redis; import com.fr.plugin.db.redis.core.visit.VisitorFactory; import com.fr.plugin.db.redis.util.RedisUtils; import com.fr.script.Calculator; -import com.fr.stable.StringUtils; +import com.fanruan.api.util.StringKit; import com.fr.third.redis.clients.jedis.Jedis; import java.util.List; @@ -28,16 +28,16 @@ public class RedisTableDataModel extends AbstractDataModel { } private synchronized void initRedisData(Calculator calculator, Parameter[] ps, RedisDatabaseConnection mc, int dbIndex, String query, String script, int rowCount) { - if (StringUtils.isEmpty(query)) { + if (StringKit.isEmpty(query)) { return; } Redis redis = mc.createRedisClient(); redis.getClient().select(dbIndex); - FineLoggerFactory.getLogger().info("Connect to redis and select database:" + dbIndex); + LogKit.info("Connect to redis and select database:" + dbIndex); try { long start = System.currentTimeMillis(); DataWrapper wrapper = VisitorFactory.getKeyValueResult(calculator, ps, redis.getClient(), query, rowCount); - FineLoggerFactory.getLogger().info("Fetch data from redis spend time {} ms.", System.currentTimeMillis() - start); + LogKit.info("Fetch data from redis spend time {} ms.", System.currentTimeMillis() - start); wrapper.transform(script); data = wrapper.getData(); columnNames = wrapper.getColumnNames(); diff --git a/src/main/java/com/fr/plugin/db/redis/core/order/OrderValue.java b/src/main/java/com/fr/plugin/db/redis/core/order/OrderValue.java index ff22369..f405485 100644 --- a/src/main/java/com/fr/plugin/db/redis/core/order/OrderValue.java +++ b/src/main/java/com/fr/plugin/db/redis/core/order/OrderValue.java @@ -2,7 +2,7 @@ package com.fr.plugin.db.redis.core.order; import com.fr.base.Parameter; import com.fr.config.utils.UniqueKey; -import com.fr.general.GeneralUtils; +import com.fanruan.api.util.GeneralKit; import com.fr.script.Calculator; import com.fr.stable.ParameterProvider; import com.fr.stable.xml.XMLPrintWriter; @@ -36,7 +36,7 @@ public abstract class OrderValue extends UniqueKey implements XMLable { @Override public void writeXML(XMLPrintWriter writer) { writer.startTAG("Attr"); - writer.attr("value", GeneralUtils.objectToString(getValue())); + writer.attr("value", GeneralKit.objectToString(getValue())); writer.end(); } diff --git a/src/main/java/com/fr/plugin/db/redis/core/order/impl/FormulaOrderValue.java b/src/main/java/com/fr/plugin/db/redis/core/order/impl/FormulaOrderValue.java index cb5c616..2fcd909 100644 --- a/src/main/java/com/fr/plugin/db/redis/core/order/impl/FormulaOrderValue.java +++ b/src/main/java/com/fr/plugin/db/redis/core/order/impl/FormulaOrderValue.java @@ -4,12 +4,13 @@ import com.fr.base.BaseFormula; import com.fr.base.Parameter; import com.fr.base.ParameterHelper; import com.fr.base.ParameterMapNameSpace; -import com.fr.general.GeneralUtils; -import com.fr.log.FineLoggerFactory; +import com.fanruan.api.util.GeneralKit; +import com.fanruan.api.log.LogKit; import com.fr.plugin.db.redis.core.order.OrderValue; import com.fr.script.Calculator; import com.fr.stable.ParameterProvider; -import com.fr.stable.StringUtils; +import com.fanruan.api.util.StringKit; +import com.fanruan.api.cal.ParameterKit; import com.fr.stable.UtilEvalError; import com.fr.stable.script.NameSpace; import com.fr.stable.xml.XMLableReader; @@ -40,9 +41,9 @@ public class FormulaOrderValue extends OrderValue { NameSpace nameSpace = ParameterMapNameSpace.create(ps); cal.pushNameSpace(nameSpace); try { - return GeneralUtils.objectToNumber(formula.eval(cal)).intValue(); + return GeneralKit.objectToNumber(formula.eval(cal)).intValue(); } catch (UtilEvalError u) { - FineLoggerFactory.getLogger().error(u.getMessage(), u); + LogKit.error(u.getMessage(), u); } finally { cal.removeNameSpace(nameSpace); } @@ -59,11 +60,11 @@ public class FormulaOrderValue extends OrderValue { @Override public void readValue(XMLableReader reader) { - this.formula = BaseFormula.createFormulaBuilder().build(reader.getAttrAsString("value", StringUtils.EMPTY)); + this.formula = BaseFormula.createFormulaBuilder().build(reader.getAttrAsString("value", StringKit.EMPTY)); } @Override public String toString() { - return formula == null ? StringUtils.EMPTY : formula.getPureContent(); + return formula == null ? StringKit.EMPTY : formula.getPureContent(); } } diff --git a/src/main/java/com/fr/plugin/db/redis/core/pool/RedisConnectionProxyConfig.java b/src/main/java/com/fr/plugin/db/redis/core/pool/RedisConnectionProxyConfig.java index 1406841..7aca745 100644 --- a/src/main/java/com/fr/plugin/db/redis/core/pool/RedisConnectionProxyConfig.java +++ b/src/main/java/com/fr/plugin/db/redis/core/pool/RedisConnectionProxyConfig.java @@ -4,8 +4,8 @@ import com.fr.config.ConfigContext; import com.fr.config.DefaultConfiguration; import com.fr.config.holder.Conf; import com.fr.config.holder.factory.Holders; -import com.fr.security.SecurityToolbox; -import com.fr.stable.StringUtils; +import com.fanruan.api.security.SecurityKit; +import com.fanruan.api.util.StringKit; /** * @author richie @@ -25,15 +25,15 @@ public class RedisConnectionProxyConfig extends DefaultConfiguration { private Conf open = Holders.simple(false); - private Conf host = Holders.simple(StringUtils.EMPTY); + private Conf host = Holders.simple(StringKit.EMPTY); private Conf port = Holders.simple(22); - private Conf username = Holders.simple(StringUtils.EMPTY); + private Conf username = Holders.simple(StringKit.EMPTY); - private Conf password = Holders.simple(StringUtils.EMPTY); + private Conf password = Holders.simple(StringKit.EMPTY); - private Conf privateKeyPath = Holders.simple(StringUtils.EMPTY); + private Conf privateKeyPath = Holders.simple(StringKit.EMPTY); public boolean isOpen() { @@ -70,11 +70,11 @@ public class RedisConnectionProxyConfig extends DefaultConfiguration { public String getPassword() { String text = password.get(); - return SecurityToolbox.decrypt(text); + return SecurityKit.decrypt(text); } public void setPassword(String password) { - this.password.set(SecurityToolbox.encrypt(password)); + this.password.set(SecurityKit.encrypt(password)); } public String getPrivateKeyPath() { diff --git a/src/main/java/com/fr/plugin/db/redis/core/visit/AbstractVisitor.java b/src/main/java/com/fr/plugin/db/redis/core/visit/AbstractVisitor.java index 4d1ab44..e0a2fc7 100644 --- a/src/main/java/com/fr/plugin/db/redis/core/visit/AbstractVisitor.java +++ b/src/main/java/com/fr/plugin/db/redis/core/visit/AbstractVisitor.java @@ -4,7 +4,7 @@ import com.fr.base.Parameter; import com.fr.plugin.db.redis.core.DataWrapper; import com.fr.plugin.db.redis.core.RedisConstants; import com.fr.script.Calculator; -import com.fr.stable.StringUtils; +import com.fanruan.api.util.StringKit; import com.fr.third.redis.clients.jedis.Jedis; /** @@ -23,6 +23,6 @@ public abstract class AbstractVisitor implements Visitor { } protected String trimCommand(String cmd) { - return StringUtils.trim(cmd); + return StringKit.trim(cmd); } } diff --git a/src/main/java/com/fr/plugin/db/redis/core/visit/impl/MGetVisitor.java b/src/main/java/com/fr/plugin/db/redis/core/visit/impl/MGetVisitor.java index fc25e2b..ba7e07b 100644 --- a/src/main/java/com/fr/plugin/db/redis/core/visit/impl/MGetVisitor.java +++ b/src/main/java/com/fr/plugin/db/redis/core/visit/impl/MGetVisitor.java @@ -3,7 +3,7 @@ package com.fr.plugin.db.redis.core.visit.impl; import com.fr.base.Parameter; import com.fr.plugin.db.redis.core.visit.AbstractVisitor; import com.fr.script.Calculator; -import com.fr.stable.ArrayUtils; +import com.fanruan.api.util.ArrayKit; import com.fr.third.redis.clients.jedis.Jedis; import java.util.ArrayList; @@ -19,7 +19,7 @@ public class MGetVisitor extends AbstractVisitor { if (arr.length < 2) { throw new IllegalArgumentException("Illegal query:" + query); } - String[] args = (String[]) ArrayUtils.remove(arr, 0); + String[] args = (String[]) ArrayKit.remove(arr, 0); List data = client.mget(args); List> result = new ArrayList>(); result.add(data); diff --git a/src/main/java/com/fr/plugin/db/redis/help/Console.java b/src/main/java/com/fr/plugin/db/redis/help/Console.java index ba3bbe7..998dc95 100644 --- a/src/main/java/com/fr/plugin/db/redis/help/Console.java +++ b/src/main/java/com/fr/plugin/db/redis/help/Console.java @@ -1,6 +1,7 @@ package com.fr.plugin.db.redis.help; -import com.fr.log.FineLoggerFactory; +import com.fanruan.api.log.LogKit; + /** * @author richie @@ -15,12 +16,12 @@ public class Console { @ScriptBridge public void log(Object message) { - FineLoggerFactory.getLogger().info(message == null ? null : message.toString()); + LogKit.info(message == null ? null : message.toString()); } @ScriptBridge public void error(Object message) { - FineLoggerFactory.getLogger().error(message == null ? null : message.toString()); + LogKit.error(message == null ? null : message.toString()); } @ScriptBridge diff --git a/src/main/java/com/fr/plugin/db/redis/help/client/BaseRedisClient.java b/src/main/java/com/fr/plugin/db/redis/help/client/BaseRedisClient.java index 16a82e8..632ba56 100644 --- a/src/main/java/com/fr/plugin/db/redis/help/client/BaseRedisClient.java +++ b/src/main/java/com/fr/plugin/db/redis/help/client/BaseRedisClient.java @@ -1,6 +1,7 @@ package com.fr.plugin.db.redis.help.client; -import com.fr.log.FineLoggerFactory; +import com.fanruan.api.log.LogKit; + import com.fr.plugin.db.redis.help.ScriptBridge; import com.fr.plugin.db.redis.help.RedisClient; import com.fr.third.redis.clients.jedis.Jedis; @@ -24,7 +25,7 @@ public abstract class BaseRedisClient implements RedisClient { try { return jedis.get(key); } finally { - FineLoggerFactory.getLogger().info("Fetch data from redis spend time {} ms.", System.currentTimeMillis() - start); + LogKit.info("Fetch data from redis spend time {} ms.", System.currentTimeMillis() - start); } } @@ -34,7 +35,7 @@ public abstract class BaseRedisClient implements RedisClient { try { return jedis.hget(key, field); } finally { - FineLoggerFactory.getLogger().info("Fetch data from redis spend time {} ms.", System.currentTimeMillis() - start); + LogKit.info("Fetch data from redis spend time {} ms.", System.currentTimeMillis() - start); } } diff --git a/src/main/java/com/fr/plugin/db/redis/help/client/RedisNashornClient.java b/src/main/java/com/fr/plugin/db/redis/help/client/RedisNashornClient.java index 89a02b4..94d6632 100644 --- a/src/main/java/com/fr/plugin/db/redis/help/client/RedisNashornClient.java +++ b/src/main/java/com/fr/plugin/db/redis/help/client/RedisNashornClient.java @@ -1,7 +1,7 @@ package com.fr.plugin.db.redis.help.client; import com.fr.base.TableData; -import com.fr.log.FineLoggerFactory; +import com.fanruan.api.log.LogKit; import com.fr.plugin.db.redis.core.emb.Redis; import com.fr.plugin.db.redis.help.Console; import com.fr.plugin.db.redis.help.ScriptBridge; @@ -42,7 +42,7 @@ public class RedisNashornClient extends BaseRedisClient set = jedis.keys(key); - FineLoggerFactory.getLogger().info("Fetch data from redis spend time {} ms.", System.currentTimeMillis() - start); + LogKit.info("Fetch data from redis spend time {} ms.", System.currentTimeMillis() - start); return set.toArray(new String[0]); } @@ -51,7 +51,7 @@ public class RedisNashornClient extends BaseRedisClient list = jedis.hmget(key, fields); - FineLoggerFactory.getLogger().info("Fetch data from redis spend time {} ms.", System.currentTimeMillis() - start); + LogKit.info("Fetch data from redis spend time {} ms.", System.currentTimeMillis() - start); return list.toArray(new String[0]); } @@ -60,7 +60,7 @@ public class RedisNashornClient extends BaseRedisClient hgetAll(String key) { long start = System.currentTimeMillis(); Map map = jedis.hgetAll(key); - FineLoggerFactory.getLogger().info("Fetch data from redis spend time {} ms.", System.currentTimeMillis() - start); + LogKit.info("Fetch data from redis spend time {} ms.", System.currentTimeMillis() - start); return new TreeMap(map); } @@ -69,7 +69,7 @@ public class RedisNashornClient extends BaseRedisClient set = jedis.keys(pattern); - FineLoggerFactory.getLogger().info("Fetch data from redis spend time {} ms.", System.currentTimeMillis() - start); + LogKit.info("Fetch data from redis spend time {} ms.", System.currentTimeMillis() - start); return set.toArray(new String[0]); } @@ -78,7 +78,7 @@ public class RedisNashornClient extends BaseRedisClient list = jedis.lrange(key, start, end); - FineLoggerFactory.getLogger().info("Fetch data from redis spend time {} ms.", System.currentTimeMillis() - start0); + LogKit.info("Fetch data from redis spend time {} ms.", System.currentTimeMillis() - start0); return list.toArray(new String[0]); } @@ -92,7 +92,7 @@ public class RedisNashornClient extends BaseRedisClient list = jedis.mget(parameters); - FineLoggerFactory.getLogger().info("Fetch data from redis spend time {} ms.", System.currentTimeMillis() - start); + LogKit.info("Fetch data from redis spend time {} ms.", System.currentTimeMillis() - start); return list.toArray(new String[0]); } @@ -101,7 +101,7 @@ public class RedisNashornClient extends BaseRedisClient set = jedis.smembers(key); - FineLoggerFactory.getLogger().info("Fetch data from redis spend time {} ms.", System.currentTimeMillis() - start); + LogKit.info("Fetch data from redis spend time {} ms.", System.currentTimeMillis() - start); return set.toArray(new String[0]); } @@ -150,7 +150,7 @@ public class RedisNashornClient extends BaseRedisClient { public V8Array hkeys(String key) { long start = System.currentTimeMillis(); Set set = jedis.keys(key); - FineLoggerFactory.getLogger().info("Fetch data from redis spend time {} ms.", System.currentTimeMillis() - start); + LogKit.info("Fetch data from redis spend time {} ms.", System.currentTimeMillis() - start); return V8ObjectUtils.toV8Array(v8, new ArrayList(set)); } @@ -46,7 +46,7 @@ public class RedisV8Client extends BaseRedisClient { public V8Array hmget(String key, String... fields) { long start = System.currentTimeMillis(); List list = jedis.hmget(key, fields); - FineLoggerFactory.getLogger().info("Fetch data from redis spend time {} ms.", System.currentTimeMillis() - start); + LogKit.info("Fetch data from redis spend time {} ms.", System.currentTimeMillis() - start); return V8ObjectUtils.toV8Array(v8, list); } @@ -55,7 +55,7 @@ public class RedisV8Client extends BaseRedisClient { public V8Object hgetAll(String key) { long start = System.currentTimeMillis(); Map map = jedis.hgetAll(key); - FineLoggerFactory.getLogger().info("Fetch data from redis spend time {} ms.", System.currentTimeMillis() - start); + LogKit.info("Fetch data from redis spend time {} ms.", System.currentTimeMillis() - start); return V8ObjectUtils.toV8Object(v8, map); } @@ -64,7 +64,7 @@ public class RedisV8Client extends BaseRedisClient { public V8Array keys(String pattern) { long start = System.currentTimeMillis(); Set set = jedis.keys(pattern); - FineLoggerFactory.getLogger().info("Fetch data from redis spend time {} ms.", System.currentTimeMillis() - start); + LogKit.info("Fetch data from redis spend time {} ms.", System.currentTimeMillis() - start); return V8ObjectUtils.toV8Array(v8, new ArrayList(set)); } @@ -73,7 +73,7 @@ public class RedisV8Client extends BaseRedisClient { public V8Array lrange(String key, long start, long end) { long start0 = System.currentTimeMillis(); List list = jedis.lrange(key, start, end); - FineLoggerFactory.getLogger().info("Fetch data from redis spend time {} ms.", System.currentTimeMillis() - start0); + LogKit.info("Fetch data from redis spend time {} ms.", System.currentTimeMillis() - start0); return V8ObjectUtils.toV8Array(v8, list); } @@ -87,7 +87,7 @@ public class RedisV8Client extends BaseRedisClient { parameters[i] = keys.getString(i); } List list = jedis.mget(parameters); - FineLoggerFactory.getLogger().info("Fetch data from redis spend time {} ms.", System.currentTimeMillis() - start); + LogKit.info("Fetch data from redis spend time {} ms.", System.currentTimeMillis() - start); keys.release(); return V8ObjectUtils.toV8Array(v8, list); } @@ -97,7 +97,7 @@ public class RedisV8Client extends BaseRedisClient { public V8Array smembers(String key) { long start = System.currentTimeMillis(); Set set = jedis.smembers(key); - FineLoggerFactory.getLogger().info("Fetch data from redis spend time {} ms.", System.currentTimeMillis() - start); + LogKit.info("Fetch data from redis spend time {} ms.", System.currentTimeMillis() - start); return V8ObjectUtils.toV8Array(v8, new ArrayList(set)); } diff --git a/src/main/java/com/fr/plugin/db/redis/ui/RedisBaseTableDataPane.java b/src/main/java/com/fr/plugin/db/redis/ui/RedisBaseTableDataPane.java index 1de93ad..7f7cab0 100644 --- a/src/main/java/com/fr/plugin/db/redis/ui/RedisBaseTableDataPane.java +++ b/src/main/java/com/fr/plugin/db/redis/ui/RedisBaseTableDataPane.java @@ -1,9 +1,10 @@ package com.fr.plugin.db.redis.ui; -import com.fr.base.BaseUtils; +import com.fanruan.api.util.IOKit; +import com.fanruan.api.cal.ParameterKit; +import com.fanruan.api.design.ui.action.UpdateAction; import com.fr.base.ParameterHelper; import com.fr.base.TableData; -import com.fr.design.actions.UpdateAction; import com.fr.design.data.datapane.preview.PreviewTablePane; import com.fr.design.data.tabledata.tabledatapane.AbstractTableDataPane; import com.fr.design.gui.itableeditorpane.ParameterTableModel; @@ -13,7 +14,7 @@ import com.fr.design.gui.itoolbar.UIToolbar; import com.fr.design.i18n.Toolkit; import com.fr.design.menu.ToolBarDef; import com.fr.plugin.db.redis.core.order.OrderValue; -import com.fr.stable.ArrayUtils; +import com.fanruan.api.util.ArrayKit; import com.fr.stable.ParameterProvider; import javax.swing.*; @@ -50,7 +51,7 @@ public abstract class RedisBaseTableDataPane extends Abstra ParameterTableModel model = new ParameterTableModel() { @Override public UITableEditAction[] createAction() { - return ArrayUtils.add(super.createDBTableAction(), new RedisBaseTableDataPane.RefreshAction()); + return ArrayKit.add(super.createDBTableAction(), new RedisBaseTableDataPane.RefreshAction()); } }; editorPane = new UITableEditorPane(model); @@ -94,11 +95,11 @@ public abstract class RedisBaseTableDataPane extends Abstra private void refresh() { String[] paramTexts = paramTexts(); - ParameterProvider[] parameters = ParameterHelper.analyze4Parameters(paramTexts, false); + ParameterProvider[] parameters = ParameterKit.analyze4Parameters(paramTexts, false); ParameterProvider[] providers = getOrderValue().analyze4Parameters(); - editorPane.populate(ArrayUtils.addAll(parameters, providers)); + editorPane.populate(ArrayKit.addAll(parameters, providers)); } @@ -106,7 +107,7 @@ public abstract class RedisBaseTableDataPane extends Abstra String[] paramTexts = paramTexts(); ParameterProvider[] parameters = ParameterHelper.analyze4Parameters(paramTexts, false); - parameters = ArrayUtils.addAll(parameters, getOrderValue().analyze4Parameters()); + parameters = ArrayKit.addAll(parameters, getOrderValue().analyze4Parameters()); if (parameters.length < 1 && editorPane.update().size() < 1) { return; @@ -134,7 +135,7 @@ public abstract class RedisBaseTableDataPane extends Abstra public PreviewAction() { this.setName(PREVIEW_BUTTON); this.setMnemonic('P'); - this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/m_file/preview.png")); + this.setSmallIcon(IOKit.readIcon("/com/fr/design/images/m_file/preview.png")); } public void actionPerformed(ActionEvent evt) { @@ -147,7 +148,7 @@ public abstract class RedisBaseTableDataPane extends Abstra protected class RefreshAction extends UITableEditAction { public RefreshAction() { this.setName(REFRESH_BUTTON); - this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/control/refresh.png")); + this.setSmallIcon(IOKit.readIcon("/com/fr/design/images/control/refresh.png")); } public void actionPerformed(ActionEvent e) { diff --git a/src/main/java/com/fr/plugin/db/redis/ui/RedisDBConnectionChosePane.java b/src/main/java/com/fr/plugin/db/redis/ui/RedisDBConnectionChosePane.java index fa83d2f..0265739 100755 --- a/src/main/java/com/fr/plugin/db/redis/ui/RedisDBConnectionChosePane.java +++ b/src/main/java/com/fr/plugin/db/redis/ui/RedisDBConnectionChosePane.java @@ -3,17 +3,18 @@ package com.fr.plugin.db.redis.ui; import com.fr.data.impl.Connection; import com.fr.data.operator.DataOperator; import com.fr.design.data.datapane.connect.ConnectionComboBoxPanel; -import com.fr.design.dialog.BasicPane; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.itextfield.PlaceholderTextField; import com.fr.design.i18n.Toolkit; -import com.fr.design.utils.gui.GUICoreUtils; import com.fr.file.DatasourceManager; import com.fr.log.FineLoggerFactory; import com.fr.plugin.db.redis.core.RedisDatabaseConnection; import com.fr.plugin.db.redis.ui.event.DataLoadedListener; -import com.fr.stable.ArrayUtils; -import com.fr.stable.StringUtils; +import com.fanruan.api.util.ArrayKit; +import com.fanruan.api.util.StringKit; +import com.fanruan.api.log.LogKit; +import com.fanruan.api.design.ui.container.BasicPane; +import com.fanruan.api.design.DesignKit; import javax.swing.*; import java.awt.*; @@ -61,7 +62,7 @@ public class RedisDBConnectionChosePane extends BasicPane { } }); - centerPane.add(GUICoreUtils.createBorderLayoutPane( + centerPane.add(DesignKit.createBorderLayoutPane( keysPatternTextField, BorderLayout.CENTER, searchButton, BorderLayout.EAST), BorderLayout.NORTH); @@ -72,9 +73,9 @@ public class RedisDBConnectionChosePane extends BasicPane { private void loadKeys() { String name = getSelectRedisConnectionName(); - if (StringUtils.isEmpty(name)) { + if (StringKit.isEmpty(name)) { clearList(); - fireDataLoaded(ArrayUtils.EMPTY_STRING_ARRAY); + fireDataLoaded(ArrayKit.EMPTY_STRING_ARRAY); return; } RedisDatabaseConnection connection = DatasourceManager.getProviderInstance().getConnection(name, RedisDatabaseConnection.class); @@ -94,8 +95,8 @@ public class RedisDBConnectionChosePane extends BasicPane { @Override protected String[] doInBackground() throws Exception { String keysPattern = keysPatternTextField.getText(); - if (StringUtils.isEmpty(keysPattern)) { - return ArrayUtils.EMPTY_STRING_ARRAY; + if (StringKit.isEmpty(keysPattern)) { + return ArrayKit.EMPTY_STRING_ARRAY; } else { return DataOperator.getInstance().getTableSummary(connection, keysPattern); } @@ -110,7 +111,7 @@ public class RedisDBConnectionChosePane extends BasicPane { } fireDataLoaded(keys); } catch (Exception e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); + LogKit.error(e.getMessage(), e); } } }.execute(); diff --git a/src/main/java/com/fr/plugin/db/redis/ui/RedisQueryPane.java b/src/main/java/com/fr/plugin/db/redis/ui/RedisQueryPane.java index c1f78f1..7d37181 100755 --- a/src/main/java/com/fr/plugin/db/redis/ui/RedisQueryPane.java +++ b/src/main/java/com/fr/plugin/db/redis/ui/RedisQueryPane.java @@ -1,7 +1,10 @@ package com.fr.plugin.db.redis.ui; +import com.fanruan.api.design.ui.container.BasicPane; +import com.fanruan.api.layout.LayoutKit; +import com.fanruan.api.design.DesignKit; +import com.fanruan.api.log.LogKit; import com.fr.design.data.datapane.sqlpane.SQLEditPane; -import com.fr.design.dialog.BasicPane; import com.fr.design.editor.ValueEditorPane; import com.fr.design.gui.ilable.ActionLabel; import com.fr.design.gui.ilable.UILabel; @@ -9,9 +12,6 @@ import com.fr.design.gui.itextarea.DescriptionTextArea; import com.fr.design.gui.syntax.ui.rsyntaxtextarea.RSyntaxTextArea; import com.fr.design.gui.syntax.ui.rsyntaxtextarea.SyntaxConstants; import com.fr.design.i18n.Toolkit; -import com.fr.design.layout.TableLayout; -import com.fr.design.layout.TableLayoutHelper; -import com.fr.design.utils.gui.GUICoreUtils; import com.fr.general.SiteCenter; import com.fr.log.FineLoggerFactory; import com.fr.plugin.db.redis.core.order.OrderValue; @@ -47,7 +47,7 @@ public class RedisQueryPane extends BasicPane { try { Desktop.getDesktop().browse(URI.create(SiteCenter.getInstance().acquireUrlByKind("help.redis"))); } catch (IOException e1) { - FineLoggerFactory.getLogger().error(e1.getMessage(), e1); + LogKit.error(e1.getMessage(), e1); } } }); @@ -60,7 +60,7 @@ public class RedisQueryPane extends BasicPane { Component[][] coms = new Component[][]{ {new UILabel(Toolkit.i18nText("Plugin-Redis_DB_Index") + ":"), dbIndexEditor}, - {GUICoreUtils.createBorderLayoutPane(new UILabel(Toolkit.i18nText("Plugin-Redis_Query_Condition") + ":"), BorderLayout.NORTH), + {DesignKit.createBorderLayoutPane(new UILabel(Toolkit.i18nText("Plugin-Redis_Query_Condition") + ":"), BorderLayout.NORTH), RedisDesignUtils.createConditionTextPane(sqlTextPane, SyntaxConstants.SYNTAX_STYLE_SQL, 300)} }; @@ -68,13 +68,13 @@ public class RedisQueryPane extends BasicPane { // RedisDesignUtils.createConditionTextPane(scriptTextPane, SyntaxConstants.SYNTAX_STYLE_JAVASCRIPT, 200) // } - double p = TableLayout.PREFERRED; - double f = TableLayout.FILL; + double p = LayoutKit.PREFERRED; + double f = LayoutKit.FILL; double[] rowSize = {p, p}; double[] columnSize = {p, f}; - add(TableLayoutHelper.createTableLayoutPane(coms, rowSize, columnSize)); + add(DesignKit.createTableLayoutPane(coms, rowSize, columnSize)); } diff --git a/src/main/java/com/fr/plugin/db/redis/ui/RedisScriptPane.java b/src/main/java/com/fr/plugin/db/redis/ui/RedisScriptPane.java index 4ee256b..e486f69 100644 --- a/src/main/java/com/fr/plugin/db/redis/ui/RedisScriptPane.java +++ b/src/main/java/com/fr/plugin/db/redis/ui/RedisScriptPane.java @@ -1,13 +1,13 @@ package com.fr.plugin.db.redis.ui; -import com.fr.design.dialog.BasicPane; +import com.fanruan.api.design.ui.container.BasicPane; +import com.fanruan.api.design.DesignKit; +import com.fanruan.api.layout.LayoutKit; import com.fr.design.editor.ValueEditorPane; import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.syntax.ui.rsyntaxtextarea.RSyntaxTextArea; import com.fr.design.gui.syntax.ui.rsyntaxtextarea.SyntaxConstants; import com.fr.design.i18n.Toolkit; -import com.fr.design.layout.TableLayout; -import com.fr.design.layout.TableLayoutHelper; import com.fr.plugin.db.redis.core.order.OrderValue; import com.fr.plugin.db.redis.ui.value.IndexValuePaneFactory; import com.fr.plugin.db.redis.util.RedisDesignUtils; @@ -38,13 +38,13 @@ public class RedisScriptPane extends BasicPane { RedisDesignUtils.createConditionTextPane(scriptTextPane, SyntaxConstants.SYNTAX_STYLE_JAVASCRIPT, 350)}, }; - double p = TableLayout.PREFERRED; - double f = TableLayout.FILL; + double p = LayoutKit.PREFERRED; + double f = LayoutKit.FILL; double[] rowSize = {p, p, p}; double[] columnSize = {p, f}; - add(TableLayoutHelper.createTableLayoutPane(coms, rowSize, columnSize)); + add(DesignKit.createTableLayoutPane(coms, rowSize, columnSize)); } diff --git a/src/main/java/com/fr/plugin/db/redis/ui/RedisScriptTableDataPane.java b/src/main/java/com/fr/plugin/db/redis/ui/RedisScriptTableDataPane.java index 1959e53..6b17c96 100644 --- a/src/main/java/com/fr/plugin/db/redis/ui/RedisScriptTableDataPane.java +++ b/src/main/java/com/fr/plugin/db/redis/ui/RedisScriptTableDataPane.java @@ -5,7 +5,7 @@ import com.fr.plugin.db.redis.core.RedisScriptTableData; import com.fr.plugin.db.redis.core.order.OrderValue; import com.fr.script.Calculator; import com.fr.stable.ParameterProvider; -import com.fr.stable.StringUtils; +import com.fanruan.api.util.StringKit; import javax.swing.*; import java.util.List; @@ -61,7 +61,7 @@ public class RedisScriptTableDataPane extends RedisBaseTableDataPane parameterList = editorPane.update(); diff --git a/src/main/java/com/fr/plugin/db/redis/ui/RedisTableDataPane.java b/src/main/java/com/fr/plugin/db/redis/ui/RedisTableDataPane.java index e8362c4..462bff4 100755 --- a/src/main/java/com/fr/plugin/db/redis/ui/RedisTableDataPane.java +++ b/src/main/java/com/fr/plugin/db/redis/ui/RedisTableDataPane.java @@ -6,7 +6,7 @@ import com.fr.plugin.db.redis.core.RedisTableData; import com.fr.plugin.db.redis.core.order.OrderValue; import com.fr.script.Calculator; import com.fr.stable.ParameterProvider; -import com.fr.stable.StringUtils; +import com.fanruan.api.util.StringKit; import javax.swing.*; import java.util.List; @@ -68,7 +68,7 @@ public class RedisTableDataPane extends RedisBaseTableDataPane { RedisTableData tableData = new RedisTableData(); String connectionName = chosePane.getSelectRedisConnectionName(); - if (StringUtils.isNotEmpty(connectionName)) { + if (StringKit.isNotEmpty(connectionName)) { tableData.setDatabase(new NameDatabaseConnection(connectionName)); } diff --git a/src/main/java/com/fr/plugin/db/redis/ui/pool/RedisConnectionPoolConfigPane.java b/src/main/java/com/fr/plugin/db/redis/ui/pool/RedisConnectionPoolConfigPane.java index f8b0274..c9b8da7 100644 --- a/src/main/java/com/fr/plugin/db/redis/ui/pool/RedisConnectionPoolConfigPane.java +++ b/src/main/java/com/fr/plugin/db/redis/ui/pool/RedisConnectionPoolConfigPane.java @@ -1,13 +1,13 @@ package com.fr.plugin.db.redis.ui.pool; -import com.fr.design.dialog.BasicPane; +import com.fanruan.api.design.ui.container.BasicPane; +import com.fanruan.api.layout.LayoutKit; +import com.fanruan.api.design.DesignKit; import com.fr.design.gui.icheckbox.UICheckBox; import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.itextfield.UIIntNumberField; import com.fr.design.gui.itextfield.UINumberField; import com.fr.design.i18n.Toolkit; -import com.fr.design.layout.TableLayout; -import com.fr.design.layout.TableLayoutHelper; import com.fr.plugin.db.redis.core.pool.RedisConnectionPoolConfig; import javax.swing.*; @@ -50,12 +50,12 @@ public class RedisConnectionPoolConfigPane extends BasicPane { {new UILabel(Toolkit.i18nText("Plugin-Redis_Pool_Lifo") + ":"), lifoCheckBox}, {new UILabel(Toolkit.i18nText("Plugin-Redis_Pool_Timeout") + ":"), timeoutNumberField} }; - double p = TableLayout.PREFERRED; - double f = TableLayout.FILL; + double p = LayoutKit.PREFERRED; + double f = LayoutKit.FILL; double[] rowSize = new double[]{p, p, p, p, p, p}; double[] columnSize = new double[]{p, f}; - add(TableLayoutHelper.createTableLayoutPane(comps, rowSize, columnSize), BorderLayout.CENTER); + add(DesignKit.createTableLayoutPane(comps, rowSize, columnSize), BorderLayout.CENTER); } @Override diff --git a/src/main/java/com/fr/plugin/db/redis/ui/proxy/RedisConnectionProxyConfigPane.java b/src/main/java/com/fr/plugin/db/redis/ui/proxy/RedisConnectionProxyConfigPane.java index 380868a..ef34e8a 100644 --- a/src/main/java/com/fr/plugin/db/redis/ui/proxy/RedisConnectionProxyConfigPane.java +++ b/src/main/java/com/fr/plugin/db/redis/ui/proxy/RedisConnectionProxyConfigPane.java @@ -1,6 +1,8 @@ package com.fr.plugin.db.redis.ui.proxy; -import com.fr.design.dialog.BasicPane; +import com.fanruan.api.design.ui.container.BasicPane; +import com.fanruan.api.layout.LayoutKit; +import com.fanruan.api.design.DesignKit; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.icheckbox.UICheckBox; import com.fr.design.gui.ilable.UILabel; @@ -8,9 +10,6 @@ import com.fr.design.gui.ipasswordfield.UIPassWordField; import com.fr.design.gui.itextfield.UIIntNumberField; import com.fr.design.gui.itextfield.UITextField; import com.fr.design.i18n.Toolkit; -import com.fr.design.layout.TableLayout; -import com.fr.design.layout.TableLayoutHelper; -import com.fr.design.utils.gui.GUICoreUtils; import com.fr.plugin.db.redis.core.pool.RedisConnectionProxyConfig; import javax.swing.*; @@ -54,7 +53,7 @@ public class RedisConnectionProxyConfigPane extends BasicPane { UILabel description = new UILabel(Toolkit.i18nText("Plugin-Redis_Proxy_Description"), SwingConstants.CENTER); JComponent[][] comps = new JComponent[][]{ - {new UILabel(Toolkit.i18nText("Plugin-Redis_Proxy_Open") + ":"), GUICoreUtils.createBorderLayoutPane( + {new UILabel(Toolkit.i18nText("Plugin-Redis_Proxy_Open") + ":"), DesignKit.createBorderLayoutPane( openCheckBox, BorderLayout.WEST, description, BorderLayout.CENTER )}, @@ -62,7 +61,7 @@ public class RedisConnectionProxyConfigPane extends BasicPane { {new UILabel(Toolkit.i18nText("Plugin-Redis_Proxy_Port") + ":"), portNumberField}, {new UILabel(Toolkit.i18nText("Plugin-Redis_Proxy_Username") + ":"), usernameTextField}, {new UILabel(Toolkit.i18nText("Plugin-Redis_Proxy_Password") + ":"), passwordTextField}, - {new UILabel(Toolkit.i18nText("Plugin-Redis_Proxy_Private_Key_Path") + ":"), GUICoreUtils.createBorderLayoutPane( + {new UILabel(Toolkit.i18nText("Plugin-Redis_Proxy_Private_Key_Path") + ":"), DesignKit.createBorderLayoutPane( privateKeyPathTextField, BorderLayout.CENTER, fileSelectButton, BorderLayout.EAST )}, @@ -79,12 +78,12 @@ public class RedisConnectionProxyConfigPane extends BasicPane { } }); - double p = TableLayout.PREFERRED; - double f = TableLayout.FILL; + double p = LayoutKit.PREFERRED; + double f = LayoutKit.FILL; double[] rowSize = new double[]{p, p, p, p, p, p}; double[] columnSize = new double[]{p, f}; - add(TableLayoutHelper.createTableLayoutPane(comps, rowSize, columnSize), BorderLayout.CENTER); + add(DesignKit.createTableLayoutPane(comps, rowSize, columnSize), BorderLayout.CENTER); }