diff --git a/main/plugins/org.talend.designer.rowgenerator/src/main/java/org/talend/designer/rowgenerator/data/FunctionManagerExt.java b/main/plugins/org.talend.designer.rowgenerator/src/main/java/org/talend/designer/rowgenerator/data/FunctionManagerExt.java index 278475a5063..03db5d91177 100644 --- a/main/plugins/org.talend.designer.rowgenerator/src/main/java/org/talend/designer/rowgenerator/data/FunctionManagerExt.java +++ b/main/plugins/org.talend.designer.rowgenerator/src/main/java/org/talend/designer/rowgenerator/data/FunctionManagerExt.java @@ -20,9 +20,13 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.regex.PatternSyntaxException; +import org.talend.commons.exception.ExceptionHandler; import org.talend.designer.rowgenerator.RowGeneratorComponent; import org.talend.designer.rowgenerator.managers.UIManager; import org.talend.designer.rowgenerator.ui.editor.MetadataColumnExt; +import org.talend.utils.json.JSONArray; +import org.talend.utils.json.JSONException; +import org.talend.utils.json.JSONObject; /** * class global comment. Detailled comment
@@ -112,6 +116,35 @@ public class FunctionManagerExt extends FunctionManager { return arrayTalendFunctions2; } + public Function getFunctionFromColumn(MetadataColumnExt column) { + Function function = null; + String functionInfo = column.getFunctionInfo(); + if (functionInfo != null) { + try { + JSONObject functionObj = new JSONObject(functionInfo); + String functionName = functionObj.getString(Function.NAME); + int functionSize = 0; + JSONArray parametersArray = functionObj.getJSONArray(Function.PARAMETERS); + if (parametersArray != null) { + functionSize = parametersArray.length(); + } + List funcs = getFunctionsByType(column.getTalendType()); + for (Function func : funcs) { + if (func.getName().equals(functionName) && func.getParameters().size() == functionSize) { + function = func; + break; + } + } + if (function != null) { + function = function.clone(parametersArray); + } + } catch (JSONException e) { + ExceptionHandler.process(e); + } + } + return function; + } + public Function getFuntionFromArray(MetadataColumnExt bean, RowGeneratorComponent externalNode, int index) { String value = externalNode.getColumnValue(bean, index); List functions = getFunctionsByType(bean.getTalendType()); diff --git a/main/plugins/org.talend.designer.rowgenerator/src/main/java/org/talend/designer/rowgenerator/managers/UIManager.java b/main/plugins/org.talend.designer.rowgenerator/src/main/java/org/talend/designer/rowgenerator/managers/UIManager.java index 0459e8bb58d..0f93fb3ac69 100644 --- a/main/plugins/org.talend.designer.rowgenerator/src/main/java/org/talend/designer/rowgenerator/managers/UIManager.java +++ b/main/plugins/org.talend.designer.rowgenerator/src/main/java/org/talend/designer/rowgenerator/managers/UIManager.java @@ -240,7 +240,11 @@ public class UIManager { List funs = functionManager.getFunctionsByType(ext.getTalendType()); ext.setArrayFunctions(functionManager.getFunctionArrays(funs)); if (!funs.isEmpty()) { - ext.setFunction(functionManager.getFuntionFromArray(ext, externalNode, j)); + Function funtion = functionManager.getFunctionFromColumn(ext); + if (funtion == null) { + funtion = functionManager.getFuntionFromArray(ext, externalNode, j); + } + ext.setFunction(funtion); } exts.add(ext); } diff --git a/main/plugins/org.talend.designer.rowgenerator/src/main/java/org/talend/designer/rowgenerator/ui/editor/MetadataColumnExt.java b/main/plugins/org.talend.designer.rowgenerator/src/main/java/org/talend/designer/rowgenerator/ui/editor/MetadataColumnExt.java index a0f1c9373ee..e09971a06c9 100644 --- a/main/plugins/org.talend.designer.rowgenerator/src/main/java/org/talend/designer/rowgenerator/ui/editor/MetadataColumnExt.java +++ b/main/plugins/org.talend.designer.rowgenerator/src/main/java/org/talend/designer/rowgenerator/ui/editor/MetadataColumnExt.java @@ -14,10 +14,12 @@ package org.talend.designer.rowgenerator.ui.editor; import java.util.List; +import org.talend.commons.exception.ExceptionHandler; import org.talend.core.model.metadata.IMetadataColumn; import org.talend.core.model.metadata.MetadataColumn; import org.talend.designer.rowgenerator.data.Function; import org.talend.designer.rowgenerator.data.Parameter; +import org.talend.utils.json.JSONException; /** * qzhang class global comment. Detailled comment
@@ -27,6 +29,8 @@ import org.talend.designer.rowgenerator.data.Parameter; */ public class MetadataColumnExt extends MetadataColumn { + public static final String FUNCTION_INFO = "FUNCTION_INFO"; //$NON-NLS-1$ + private boolean isChanged; /** @@ -51,9 +55,25 @@ public class MetadataColumnExt extends MetadataColumn { public void setFunction(Function function) { this.function = function; + updateFunctionInfo(); } - @SuppressWarnings("unchecked")//$NON-NLS-1$ + private void updateFunctionInfo() { + if (function != null) { + try { + String serializedFunction = function.toSerialized(); + this.getAdditionalField().put(FUNCTION_INFO, serializedFunction); + } catch (JSONException e) { + ExceptionHandler.process(e); + } + } + } + + public String getFunctionInfo() { + return this.getAdditionalField().get(FUNCTION_INFO); + } + + @SuppressWarnings("unchecked") public String getParameter() { String currentPara = ""; //$NON-NLS-1$ if (this.function != null) { diff --git a/test/plugins/org.talend.designer.rowgenerator.test/src/org/talend/designer/rowgenerator/data/FunctionManagerExtTest.java b/test/plugins/org.talend.designer.rowgenerator.test/src/org/talend/designer/rowgenerator/data/FunctionManagerExtTest.java index f4889e67674..fcc810c6657 100644 --- a/test/plugins/org.talend.designer.rowgenerator.test/src/org/talend/designer/rowgenerator/data/FunctionManagerExtTest.java +++ b/test/plugins/org.talend.designer.rowgenerator.test/src/org/talend/designer/rowgenerator/data/FunctionManagerExtTest.java @@ -12,9 +12,8 @@ // ============================================================================ package org.talend.designer.rowgenerator.data; -import static org.junit.Assert.assertEquals; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; +import static org.junit.Assert.*; +import static org.mockito.Mockito.*; import java.lang.reflect.Method; import java.util.ArrayList; @@ -24,6 +23,8 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; import org.talend.core.i18n.Messages; +import org.talend.core.model.metadata.MetadataColumn; +import org.talend.core.model.metadata.types.JavaTypesManager; import org.talend.designer.rowgenerator.ui.editor.MetadataColumnExt; /** @@ -104,4 +105,21 @@ public class FunctionManagerExtTest { return function; } + @Test + public void testGetFuntionFromColumn() { + FunctionManagerExt functionManagerExt = new FunctionManagerExt(); + MetadataColumn newColumn = new MetadataColumn(); + newColumn.setLabel("newColumn"); //$NON-NLS-1$ + newColumn.setTalendType(JavaTypesManager.STRING.getId()); + MetadataColumnExt columnExt = new MetadataColumnExt(newColumn); + List funcs = functionManagerExt.getFunctionsByType(newColumn.getTalendType()); + if (funcs.size() > 0) { + Function func = funcs.get(0); + columnExt.setFunction(func); + Function function = functionManagerExt.getFunctionFromColumn(columnExt); + assertEquals(func.getName(), function.getName()); + assertEquals(func.getParameters().size(), function.getParameters().size()); + } + } + } diff --git a/test/plugins/org.talend.designer.rowgenerator.test/src/org/talend/designer/rowgenerator/ui/editor/MetadataColumnExtTest.java b/test/plugins/org.talend.designer.rowgenerator.test/src/org/talend/designer/rowgenerator/ui/editor/MetadataColumnExtTest.java new file mode 100644 index 00000000000..dd321ec950f --- /dev/null +++ b/test/plugins/org.talend.designer.rowgenerator.test/src/org/talend/designer/rowgenerator/ui/editor/MetadataColumnExtTest.java @@ -0,0 +1,35 @@ +// ============================================================================ +// +// Copyright (C) 2006-2015 Talend Inc. - www.talend.com +// +// This source code is available under agreement available at +// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt +// +// You should have received a copy of the agreement +// along with this program; if not, write to Talend SA +// 9 rue Pages 92150 Suresnes, France +// +// ============================================================================ +package org.talend.designer.rowgenerator.ui.editor; + +import static org.junit.Assert.*; + +import org.junit.Test; +import org.talend.designer.rowgenerator.data.Function; + +/** + * created by ycbai on 2016年10月28日 Detailled comment + * + */ +public class MetadataColumnExtTest { + + @Test + public void testSetFunction() { + MetadataColumnExt column = new MetadataColumnExt(); + Function func = new Function(); + func.setName("testFunc"); //$NON-NLS-1$ + column.setFunction(func); + assertNotNull(column.getAdditionalField().get(MetadataColumnExt.FUNCTION_INFO)); + } + +}