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);