From 2ccb0b7c14006748d5c6fc856ff8ac582e9db687 Mon Sep 17 00:00:00 2001 From: fujie <405295521@qq.com> Date: Mon, 13 Nov 2017 19:54:12 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9EDataSetInsertFunction?= =?UTF-8?q?=EF=BC=8C=E5=BA=8F=E8=A1=A8=E6=96=B0=E5=A2=9E=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E6=9D=A5=E8=87=AA=E5=88=AB=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../function/DataSetInsertFunction.java | 62 +++++++++++++++++++ .../src/main/resources/dataset.beans.xml | 5 +- .../impl/DefaultTinyScriptEngine.java | 2 + .../test/resources/dataSetExample/insert.tsf | 3 + 4 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/function/DataSetInsertFunction.java create mode 100644 org.tinygroup.tinyscript/src/test/resources/dataSetExample/insert.tsf diff --git a/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/function/DataSetInsertFunction.java b/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/function/DataSetInsertFunction.java new file mode 100644 index 0000000..05a4527 --- /dev/null +++ b/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/function/DataSetInsertFunction.java @@ -0,0 +1,62 @@ +package org.tinygroup.tinyscript.dataset.function; + +import org.tinygroup.tinyscript.ScriptContext; +import org.tinygroup.tinyscript.ScriptException; +import org.tinygroup.tinyscript.ScriptSegment; +import org.tinygroup.tinyscript.dataset.AbstractDataSet; +import org.tinygroup.tinyscript.dataset.DataSet; +import org.tinygroup.tinyscript.dataset.util.DataSetUtil; +import org.tinygroup.tinyscript.function.AbstractScriptFunction; +import org.tinygroup.tinyscript.interpret.ResourceBundleUtil; + +public class DataSetInsertFunction extends AbstractScriptFunction { + + @Override + public String getNames() { + return "insert"; + } + + @Override + public String getBindingTypes() { + return DataSet.class.getName(); + } + @Override + public Object execute(ScriptSegment segment, ScriptContext context, Object... parameters) throws ScriptException { + try { + if (parameters == null || parameters.length == 0) { + throw new ScriptException(ResourceBundleUtil.getDefaultMessage("function.parameter.empty", getNames())); + } else if (checkParameters(parameters, 2)) { + AbstractDataSet dataSet1 = (AbstractDataSet) getValue(parameters[0]); + AbstractDataSet dataSet2 = (AbstractDataSet) getValue(parameters[1]); + return insert(dataSet1, dataSet2); + } else { + throw new ScriptException(ResourceBundleUtil.getDefaultMessage("function.parameter.error", getNames())); + } + + } catch (ScriptException e) { + throw e; + } catch (Exception e) { + throw new ScriptException(ResourceBundleUtil.getDefaultMessage("function.run.error", getNames()), e); + } + } + + private DataSet insert(AbstractDataSet dataSet1, AbstractDataSet dataSet2) throws Exception { + Object[][] datas = new Object[dataSet1.getRows() + dataSet2.getRows()][dataSet1.getFields().size()]; + for (int i = 0; i < dataSet1.getRows(); i++) { + for (int j = 0; j < datas[i].length; j++) { + datas[i][j] = dataSet1.getData(dataSet1.getShowIndex(i), dataSet1.getShowIndex(j)); + } + } + for (int i = dataSet1.getRows(); i < dataSet2.getRows() + dataSet1.getRows(); i++) { + for (int j = 0; j < datas[i].length; j++) { + int rightFieldIndex = DataSetUtil.getFieldIndex(dataSet2, dataSet1.getFields().get(j).getName()); + if (rightFieldIndex > -1) { + datas[i][j] = dataSet2.getData(dataSet2.getShowIndex(i - dataSet1.getRows()), + dataSet2.getShowIndex(rightFieldIndex)); + } + } + } + return DataSetUtil.createDynamicDataSet(dataSet1.getFields(), datas, dataSet1.isIndexFromOne()); + } + +} diff --git a/org.tinygroup.tinyscript.dataset/src/main/resources/dataset.beans.xml b/org.tinygroup.tinyscript.dataset/src/main/resources/dataset.beans.xml index 664fe6d..b70847b 100644 --- a/org.tinygroup.tinyscript.dataset/src/main/resources/dataset.beans.xml +++ b/org.tinygroup.tinyscript.dataset/src/main/resources/dataset.beans.xml @@ -186,5 +186,8 @@ - + + + diff --git a/org.tinygroup.tinyscript/src/main/java/org/tinygroup/tinyscript/impl/DefaultTinyScriptEngine.java b/org.tinygroup.tinyscript/src/main/java/org/tinygroup/tinyscript/impl/DefaultTinyScriptEngine.java index 60ec205..78714ed 100644 --- a/org.tinygroup.tinyscript/src/main/java/org/tinygroup/tinyscript/impl/DefaultTinyScriptEngine.java +++ b/org.tinygroup.tinyscript/src/main/java/org/tinygroup/tinyscript/impl/DefaultTinyScriptEngine.java @@ -55,6 +55,7 @@ import org.tinygroup.tinyscript.dataset.function.DataSetFullJoinFunction; import org.tinygroup.tinyscript.dataset.function.DataSetGroupDynamicFunction; import org.tinygroup.tinyscript.dataset.function.DataSetGroupFunction; import org.tinygroup.tinyscript.dataset.function.DataSetGroupStagedFunction; +import org.tinygroup.tinyscript.dataset.function.DataSetInsertFunction; import org.tinygroup.tinyscript.dataset.function.DataSetIntersectionFunction; import org.tinygroup.tinyscript.dataset.function.DataSetJoinFunction; import org.tinygroup.tinyscript.dataset.function.DataSetLeftJoinFunction; @@ -209,6 +210,7 @@ public class DefaultTinyScriptEngine extends DefaultScriptEngine implements Scri addScriptFunction(new DataSetRightJoinFunction()); addScriptFunction(new DataSetLeftJoinFunction()); addScriptFunction(new DataSetFullJoinFunction()); + addScriptFunction(new DataSetInsertFunction()); addScriptFunction(new GroupDataSetFilterFunction()); addScriptFunction(new GroupDataSetSortFunction()); diff --git a/org.tinygroup.tinyscript/src/test/resources/dataSetExample/insert.tsf b/org.tinygroup.tinyscript/src/test/resources/dataSetExample/insert.tsf new file mode 100644 index 0000000..013a7a8 --- /dev/null +++ b/org.tinygroup.tinyscript/src/test/resources/dataSetExample/insert.tsf @@ -0,0 +1,3 @@ +dataSet1 = readTxt("/dataSetExample/data1.txt"); +dataSet2 = readTxt("/dataSetExample/data2.txt"); +println(dataSet1.insert(dataSet2)); \ No newline at end of file -- Gitee