From 28f4ee67a99510bc73d6fa3200c524d098e28b3f Mon Sep 17 00:00:00 2001 From: "Yuan.Wang" <1536296691@qq.com> Date: Tue, 11 Aug 2020 16:51:26 +0800 Subject: [PATCH 1/3] =?UTF-8?q?REPORT-36862=20=E6=96=B0=E5=A2=9E=E4=B8=80?= =?UTF-8?q?=E4=B8=AA=E4=BF=9D=E6=8C=81=E5=8E=9F=E5=8F=82=E6=95=B0=E7=9B=B8?= =?UTF-8?q?=E5=AF=B9=E9=A1=BA=E5=BA=8F=E7=9A=84=E5=8F=82=E6=95=B0=E9=9B=86?= =?UTF-8?q?=E5=90=88=E5=90=88=E5=B9=B6=E6=96=B9=E6=B3=95=E5=B9=B6=E8=B0=83?= =?UTF-8?q?=E7=94=A8=E8=AF=A5=E6=96=B9=E6=B3=95=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tabledatapane/DBTableDataPane.java | 48 ++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) 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 6f0e89ff45..a264877a76 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 @@ -59,6 +59,8 @@ import java.awt.event.FocusListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Iterator; import java.util.List; public class DBTableDataPane extends AbstractTableDataPane { @@ -219,7 +221,7 @@ public class DBTableDataPane extends AbstractTableDataPane { List existParameterList = editorPane.update(); Parameter[] ps = existParameterList == null ? new Parameter[0] : existParameterList.toArray(new Parameter[existParameterList.size()]); - editorPane.populate(ParameterHelper.analyzeAndUnionSameParameters(paramTexts, ps)); + editorPane.populate(analyzeAndUnionParameters(paramTexts, ps)); } private JToolBar createToolBar() { @@ -336,6 +338,50 @@ 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); 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 2/3] =?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 a264877a76..2a603a3202 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 0000000000..b50e9950e1 --- /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 0000000000..4ee52c7422 --- /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()); + } + + } +} From 4bedc432a8e2a856f2521b71d3daea3f7d8a811b Mon Sep 17 00:00:00 2001 From: "Yuan.Wang" <1536296691@qq.com> Date: Tue, 11 Aug 2020 18:24:16 +0800 Subject: [PATCH 3/3] =?UTF-8?q?REPORT-36862=20=E5=8E=BB=E6=8E=89=E6=97=A0?= =?UTF-8?q?=E6=95=88=E7=9A=84import?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/data/tabledata/tabledatapane/DBTableDataPane.java | 2 -- .../src/test/java/com/fr/design/utils/ParameterUtilsTest.java | 1 - 2 files changed, 3 deletions(-) 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 2a603a3202..23e6f46136 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 @@ -60,8 +60,6 @@ import java.awt.event.FocusListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.util.ArrayList; -import java.util.Arrays; -import java.util.Iterator; import java.util.List; public class DBTableDataPane extends AbstractTableDataPane { 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 index 4ee52c7422..26a470e34d 100644 --- a/designer-base/src/test/java/com/fr/design/utils/ParameterUtilsTest.java +++ b/designer-base/src/test/java/com/fr/design/utils/ParameterUtilsTest.java @@ -1,7 +1,6 @@ package com.fr.design.utils; import com.fr.base.Parameter; -import com.fr.base.ParameterHelper; import junit.framework.TestCase; /**