diff --git a/org.talend.librariesmanager/resources/java/routines/system/Document.java b/org.talend.librariesmanager/resources/java/routines/system/Document.java index 21bdfe707f..84249c32ce 100644 --- a/org.talend.librariesmanager/resources/java/routines/system/Document.java +++ b/org.talend.librariesmanager/resources/java/routines/system/Document.java @@ -43,15 +43,18 @@ public class Document { /** * lookup document action - * - * @param doc - * @param loopPath + * @param loopXPath * @param lookupInfo * @param xpathOfResults + * @param nsMapping + * @param xpathToTypeMap + * @param xpathToPatternMap + * @param matchingMode * @return */ public List> LookupDocument(String loopXPath, Map lookupInfo, - Map xpathOfResults, Map nsMapping,String matchingMode) { + Map xpathOfResults, Map nsMapping, + Map xpathToTypeMap,Map xpathToPatternMap,String matchingMode) { if (doc == null || lookupInfo == null) { return null; } @@ -68,12 +71,21 @@ public class Document { org.dom4j.XPath xpathObjectForLookup = node.createXPath(xpath); xpathObjectForLookup.setNamespaceURIs(nsMapping); Node nodeOfLookup = xpathObjectForLookup.selectSingleNode(node); - if(lookupValue == null && nodeOfLookup == null) { - //do nothing(null == null) - } else if (!xpathObjectForLookup.valueOf(node).equals(lookupValue)) { - reject = true; - break; - } + //parse action + String text = (nodeOfLookup == null ? null : xpathObjectForLookup.valueOf(node)); + String pattern = xpathToPatternMap.get(xpath); + String javaType = xpathToTypeMap.get(xpath); + Object value = ParserUtils.parse(text, javaType, pattern); + + if(lookupValue == null && value == null) { + //do nothing(null==null) + } else { + if(value == null || !value.equals(lookupValue)) { + reject = true; + break; + } + } + } // generate result action if (reject) { diff --git a/org.talend.librariesmanager/resources/java/routines/system/ParserUtils.java b/org.talend.librariesmanager/resources/java/routines/system/ParserUtils.java index a1b91969f2..a93535c0d5 100644 --- a/org.talend.librariesmanager/resources/java/routines/system/ParserUtils.java +++ b/org.talend.librariesmanager/resources/java/routines/system/ParserUtils.java @@ -13,11 +13,16 @@ package routines.system; import java.io.IOException; +import java.lang.reflect.Method; import java.math.BigDecimal; import java.text.DateFormat; import java.text.ParsePosition; import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; import java.util.List; +import java.util.Map; +import java.util.Set; import org.xml.sax.EntityResolver; import org.xml.sax.InputSource; @@ -263,4 +268,61 @@ public class ParserUtils { } return result; } + + private static final Set primitiveType = new HashSet(); + + private static final Map primitiveTypeToDefaultValueMap = new HashMap(); + + static { + primitiveType.add("boolean"); + primitiveType.add("int"); + primitiveType.add("byte"); + primitiveType.add("char"); + primitiveType.add("double"); + primitiveType.add("float"); + primitiveType.add("long"); + primitiveType.add("short"); + + primitiveTypeToDefaultValueMap.put("boolean", "false"); + primitiveTypeToDefaultValueMap.put("int", "0"); + primitiveTypeToDefaultValueMap.put("byte", "0"); + primitiveTypeToDefaultValueMap.put("char", " "); + primitiveTypeToDefaultValueMap.put("double", "0"); + primitiveTypeToDefaultValueMap.put("float", "0"); + primitiveTypeToDefaultValueMap.put("long", "0"); + primitiveTypeToDefaultValueMap.put("short", "0"); + } + + public static Object parse(String text,String javaType,String pattern) { + if("String".equals(javaType)) { + return text; + } + + if(text==null || text.length()==0){ + boolean isPrimitiveType = primitiveType.contains(javaType); + if(!isPrimitiveType) { + return null; + } else { + text = primitiveTypeToDefaultValueMap.get(javaType); + } + } else { + if("Date".equals(javaType)) { + return ParserUtils.parseTo_Date(text, pattern); + } + + if("byte[]".equals(javaType)) { + return text.getBytes(); + } + } + + try { + Method method = ParserUtils.class.getMethod("parseTo_" + javaType, String.class); + return method.invoke(null, text); + } catch (Exception e) { + e.printStackTrace(); + } + + return null; + } + }