|
|
|
@ -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<DBTableData> { |
|
|
|
@ -219,7 +221,7 @@ public class DBTableDataPane extends AbstractTableDataPane<DBTableData> {
|
|
|
|
|
List<ParameterProvider> 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<DBTableData> {
|
|
|
|
|
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<Parameter> newParameterList = new ArrayList<>(Arrays.asList(newParameters)); |
|
|
|
|
int i = 0; |
|
|
|
|
//遍历旧参数数组中的参数,如果新参数list中存在同名参数,将该参数加入到result里,同时删除list中的同名参数
|
|
|
|
|
for (Parameter oldParameter : oldParameters) { |
|
|
|
|
Iterator<Parameter> 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); |
|
|
|
|