@@ -106,6 +106,8 @@ public final class Expression {
|
||||
}
|
||||
}
|
||||
|
||||
private static final String CONTAINS = "CONTAINS"; //$NON-NLS-1$
|
||||
|
||||
private Expression(String expressionString) {
|
||||
this.expressionString = expressionString;
|
||||
}
|
||||
@@ -305,6 +307,10 @@ public final class Expression {
|
||||
if ((simpleExpression.contains("SPARK_VERSION["))) { //$NON-NLS-1$
|
||||
return evaluateSparkVersion(simpleExpression, listParam, currentParam);
|
||||
}
|
||||
|
||||
if ((simpleExpression.contains(CONTAINS))) { //$NON-NLS-1$
|
||||
return evaluateContains(simpleExpression, listParam);
|
||||
}
|
||||
|
||||
List<String> paraNames = getParaNamesFromIsShowFunc(simpleExpression);
|
||||
if (paraNames.size() > 0) {
|
||||
@@ -1063,5 +1069,28 @@ public final class Expression {
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static boolean evaluateContains(String simpleExpression, List<? extends IElementParameter> listParam) {
|
||||
//Split to get param name and param value to look after
|
||||
String[] splitted = simpleExpression.split(CONTAINS);
|
||||
if (splitted.length != 2) {
|
||||
return false;
|
||||
}
|
||||
String paramName = splitted[0].trim();
|
||||
String paramValue = splitted[1].trim();
|
||||
|
||||
//Look for the param name in list
|
||||
IElementParameter param = listParam.stream()
|
||||
.filter(p -> paramName.equals(p.getName()))
|
||||
.findAny()
|
||||
.orElse(null);
|
||||
if (param == null || ! EParameterFieldType.TABLE.equals(param.getFieldType())) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check if we can find paraValue among table lines
|
||||
return ((List<Map<String, Object>>) param.getValue()).stream()
|
||||
.anyMatch(line -> paramValue.equals(line.toString()));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -22,9 +22,14 @@ import static org.mockito.Mockito.when;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.talend.core.model.process.EParameterFieldType;
|
||||
import org.talend.core.model.process.IElement;
|
||||
import org.talend.core.model.process.IElementParameter;
|
||||
import org.talend.core.model.process.INode;
|
||||
@@ -147,6 +152,15 @@ public class ExpressionTest {
|
||||
}
|
||||
}
|
||||
|
||||
private ElementParameter createMockParameterWithLineInTable(String paramName, Map<String, Object> line) {
|
||||
ElementParameter param = mock(ElementParameter.class);
|
||||
when(param.getFieldType()).thenReturn(EParameterFieldType.TABLE);
|
||||
when(param.getName()).thenReturn(paramName);
|
||||
List<Map<String, Object>> list = Stream.of(line).collect(Collectors.toList());
|
||||
when(param.getValue()).thenReturn(list);
|
||||
return param;
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEvaluateDistrib_simplecase() {
|
||||
List<IElementParameter> params = new ArrayList<>();
|
||||
@@ -238,7 +252,19 @@ public class ExpressionTest {
|
||||
"!DISTRIB[#LINK@NODE.CONNECTION.DISTRIBUTION, #LINK@NODE.CONNECTION.HIVE_VERSION].doSupportUseDatanodeHostname[]",
|
||||
params, paramNode));
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testEvaluateContains() {
|
||||
List<IElementParameter> params = new ArrayList<>();
|
||||
Map<String, Object> line = new LinkedHashMap<String, Object>() {{
|
||||
put("ADDITIONAL_ARGUMENT", "'hive.import'");
|
||||
put("ADDITIONAL_VALUE", "'true'");
|
||||
}};
|
||||
ElementParameter param1 = createMockParameterWithLineInTable("ADDITIONAL_JAVA", line);
|
||||
params.add(param1);
|
||||
assertTrue(Expression.evaluateContains("ADDITIONAL_JAVA CONTAINS {ADDITIONAL_ARGUMENT='hive.import', ADDITIONAL_VALUE='true'}", params));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIsThereCondition() {
|
||||
assertTrue(Expression.isThereCondition("a=1 and b=2", "and"));
|
||||
@@ -255,5 +281,4 @@ public class ExpressionTest {
|
||||
assertFalse(Expression.isThereCondition("standard='aaa'", "and"));
|
||||
assertFalse(Expression.isThereCondition("story='aaa'", "or"));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user