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] =?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);