From 2268671509c38511987e727e9982e0cb04c8ac5b Mon Sep 17 00:00:00 2001 From: "Yuan.Wang" <1536296691@qq.com> Date: Tue, 11 Aug 2020 18:22:26 +0800 Subject: [PATCH] =?UTF-8?q?REPORT-36862=20=E6=96=B0=E5=8A=A0=E5=B7=A5?= =?UTF-8?q?=E5=85=B7=E7=B1=BB=EF=BC=8C=E6=8A=8A=E6=96=B9=E6=B3=95=E6=94=BE?= =?UTF-8?q?=E5=88=B0=E5=B7=A5=E5=85=B7=E7=B1=BB=E9=87=8C=E9=9D=A2=EF=BC=8C?= =?UTF-8?q?=E6=96=B0=E5=8A=A0=E5=8D=95=E5=85=83=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tabledatapane/DBTableDataPane.java | 48 +-------------- .../com/fr/design/utils/ParameterUtils.java | 61 +++++++++++++++++++ .../fr/design/utils/ParameterUtilsTest.java | 39 ++++++++++++ 3 files changed, 102 insertions(+), 46 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/utils/ParameterUtils.java create mode 100644 designer-base/src/test/java/com/fr/design/utils/ParameterUtilsTest.java diff --git a/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/DBTableDataPane.java b/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/DBTableDataPane.java index a264877a7..2a603a320 100644 --- a/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/DBTableDataPane.java +++ b/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/DBTableDataPane.java @@ -32,6 +32,7 @@ import com.fr.design.gui.syntax.ui.rtextarea.RTextScrollPane; import com.fr.design.mainframe.DesignerContext; import com.fr.design.menu.SeparatorDef; import com.fr.design.menu.ToolBarDef; +import com.fr.design.utils.ParameterUtils; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.general.ComparatorUtils; import com.fr.general.sql.SqlUtils; @@ -220,8 +221,7 @@ public class DBTableDataPane extends AbstractTableDataPane { paramTexts[1] = SqlUtils.tryPureSqlText(pageQuery); List existParameterList = editorPane.update(); Parameter[] ps = existParameterList == null ? new Parameter[0] : existParameterList.toArray(new Parameter[existParameterList.size()]); - - editorPane.populate(analyzeAndUnionParameters(paramTexts, ps)); + editorPane.populate(ParameterUtils.analyzeAndUnionParameters(paramTexts, ps)); } private JToolBar createToolBar() { @@ -338,50 +338,6 @@ public class DBTableDataPane extends AbstractTableDataPane { return dbTableData; } - /** - * 获得新的参数集合,返回的集合中的参数的顺序为:新增参数全部放在后面,以保证原有参数的相对顺序 - * - * @param paramTexts sql语句 - * @param oldParameters 旧的参数集合 - * @return 新参数集合 - */ - private Parameter[] analyzeAndUnionParameters(String[] paramTexts, Parameter[] oldParameters) { - Parameter[] newParameters = ParameterHelper.analyze4Parameters(paramTexts, false); - return unionParametersInRelativeOrder(oldParameters,newParameters); - } - - /** - * 合并新旧参数集合,新增参数全部放在后面,以保证原有参数的相对顺序 - * - * @param oldParameters 旧的参数集合 - * @param newParameters 新的参数集合 - * @return 新参数集合 - */ - private Parameter[] unionParametersInRelativeOrder(Parameter[] oldParameters, Parameter[] newParameters) { - if (ArrayUtils.isEmpty(newParameters) || ArrayUtils.isEmpty(oldParameters)) { - return newParameters; - } - - Parameter[] result = new Parameter[newParameters.length]; - List newParameterList = new ArrayList<>(Arrays.asList(newParameters)); - int i = 0; - //遍历旧参数数组中的参数,如果新参数list中存在同名参数,将该参数加入到result里,同时删除list中的同名参数 - for (Parameter oldParameter : oldParameters) { - Iterator iterator=newParameterList.listIterator(); - while(iterator.hasNext()) { - Parameter newParameter = iterator.next(); - if (ComparatorUtils.equals(oldParameter.getName(), newParameter.getName())) { - result[i++] = oldParameter; - iterator.remove(); - break; - } - } - } - //将新参数list中的剩余参数添加到result中 - System.arraycopy(newParameterList.toArray(new Parameter[0]), 0, result, i, newParameterList.size()); - return result; - } - protected class RefreshAction extends UITableEditAction { public RefreshAction() { this.setName(REFRESH_BUTTON); diff --git a/designer-base/src/main/java/com/fr/design/utils/ParameterUtils.java b/designer-base/src/main/java/com/fr/design/utils/ParameterUtils.java new file mode 100644 index 000000000..b50e9950e --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/utils/ParameterUtils.java @@ -0,0 +1,61 @@ +package com.fr.design.utils; + +import com.fr.base.Parameter; +import com.fr.base.ParameterHelper; +import com.fr.general.ComparatorUtils; +import com.fr.stable.ArrayUtils; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Iterator; +import java.util.List; + +/** + * @Author: Yuan.Wang + * @Date: 2020/8/11 + */ +public class ParameterUtils { + /** + * 获得新的参数集合,返回的集合中的参数的顺序为:新增参数全部放在后面,以保证原有参数的相对顺序 + * + * @param paramTexts sql语句 + * @param oldParameters 旧的参数集合 + * @return 新参数集合 + */ + public static Parameter[] analyzeAndUnionParameters(String[] paramTexts, Parameter[] oldParameters) { + Parameter[] newParameters = ParameterHelper.analyze4Parameters(paramTexts, false); + return unionParametersInRelativeOrder(oldParameters, newParameters); + } + + /** + * 合并新旧参数集合,新增参数全部放在后面,以保证原有参数的相对顺序 + * + * @param oldParameters 旧的参数集合 + * @param newParameters 新的参数集合 + * @return 新参数集合 + */ + private static Parameter[] unionParametersInRelativeOrder(Parameter[] oldParameters, Parameter[] newParameters) { + if (ArrayUtils.isEmpty(newParameters) || ArrayUtils.isEmpty(oldParameters)) { + return newParameters; + } + + Parameter[] result = new Parameter[newParameters.length]; + List newParameterList = new ArrayList<>(Arrays.asList(newParameters)); + int i = 0; + //遍历旧参数数组中的参数,如果新参数list中存在同名参数,将该参数加入到result里,同时删除list中的同名参数 + for (Parameter oldParameter : oldParameters) { + Iterator iterator = newParameterList.listIterator(); + while (iterator.hasNext()) { + Parameter newParameter = iterator.next(); + if (ComparatorUtils.equals(oldParameter.getName(), newParameter.getName())) { + result[i++] = oldParameter; + iterator.remove(); + break; + } + } + } + //将新参数list中的剩余参数添加到result中 + System.arraycopy(newParameterList.toArray(new Parameter[0]), 0, result, i, newParameterList.size()); + return result; + } +} diff --git a/designer-base/src/test/java/com/fr/design/utils/ParameterUtilsTest.java b/designer-base/src/test/java/com/fr/design/utils/ParameterUtilsTest.java new file mode 100644 index 000000000..4ee52c742 --- /dev/null +++ b/designer-base/src/test/java/com/fr/design/utils/ParameterUtilsTest.java @@ -0,0 +1,39 @@ +package com.fr.design.utils; + +import com.fr.base.Parameter; +import com.fr.base.ParameterHelper; +import junit.framework.TestCase; + +/** + * @Author: Yuan.Wang + * @Date: 2020/8/11 + */ +public class ParameterUtilsTest extends TestCase { + public void testAnalyzeAndUnionParameters() { + String[] paramTexts = {"${a}${b}${d}", ""}; + Parameter[] oldParameters = new Parameter[]{new Parameter("c"), new Parameter("b"), new Parameter("a")}; + Parameter[] rightResult = new Parameter[]{new Parameter("b"), new Parameter("a"), new Parameter("d")}; + Parameter[] result = ParameterUtils.analyzeAndUnionParameters(paramTexts, oldParameters); + assertEquals(result.length, rightResult.length); + for (int i = 0; i < rightResult.length; i++) { + assertEquals(rightResult[i].getName(), result[i].getName()); + } + + paramTexts = new String[]{"${a}${b}${d}", ""}; + oldParameters = new Parameter[]{}; + rightResult = new Parameter[]{new Parameter("a"), new Parameter("b"), new Parameter("d")}; + result = ParameterUtils.analyzeAndUnionParameters(paramTexts, oldParameters); + assertEquals(result.length,rightResult.length); + + paramTexts = new String[]{"${b}", ""}; + oldParameters = new Parameter[]{new Parameter("b"), new Parameter("a"), new Parameter("d")}; + rightResult = new Parameter[]{new Parameter("b")}; + result = ParameterUtils.analyzeAndUnionParameters(paramTexts, oldParameters); + assertEquals(result.length,rightResult.length); + assertEquals(result.length, rightResult.length); + for (int i = 0; i < rightResult.length; i++) { + assertEquals(rightResult[i].getName(), result[i].getName()); + } + + } +}