package com.braintreegateway.util; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.*; public abstract class NodeWrapper { public static final String DATE_FORMAT = "yyyy-MM-dd"; public static final String DATE_TIME_FORMAT = "yyyy-MM-dd'T'HH:mm:ss'Z'"; public static final String UTC_DESCRIPTOR = "UTC"; public abstract List<NodeWrapper> findAll(String expression); public List<String> findAllStrings(String expression) { List<String> strings = new ArrayList<String>(); for (NodeWrapper node : findAll(expression)) { strings.add(node.findString(".")); } return strings; } public BigDecimal findBigDecimal(String expression) { String value = findString(expression); return value == null ? null : new BigDecimal(value); } public boolean findBoolean(String expression) { String value = findString(expression); return Boolean.valueOf(value); } public Calendar findDate(String expression) { try { String dateString = findString(expression); if (dateString == null) { return null; } SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT); dateFormat.setTimeZone(TimeZone.getTimeZone(UTC_DESCRIPTOR)); Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone(UTC_DESCRIPTOR)); calendar.setTime(dateFormat.parse(dateString)); return calendar; } catch (Exception e) { throw new RuntimeException(e); } } public Calendar findDateTime(String expression) { try { String dateString = findString(expression); if (dateString == null) { return null; } SimpleDateFormat dateTimeFormat = new SimpleDateFormat(DATE_TIME_FORMAT); dateTimeFormat.setTimeZone(TimeZone.getTimeZone(UTC_DESCRIPTOR)); Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone(UTC_DESCRIPTOR)); calendar.setTime(dateTimeFormat.parse(dateString)); return calendar; } catch (Exception e) { throw new RuntimeException(e); } } public Integer findInteger(String expression) { String value = findString(expression); return value == null ? null : Integer.valueOf(value); } public abstract NodeWrapper findFirst(String expression); public abstract String findString(String expression); public abstract String getElementName(); //TODO MDM Rename to getName public boolean isSuccess() { return !(getElementName().equals("api-error-response")); } public Map<String, String> findMap(String expression) { Map<String, String> map = new HashMap<String, String>(); for (NodeWrapper mapNode : findAll(expression)) { map.put(StringUtils.underscore(mapNode.getElementName()), mapNode.findString(".")); } return map; } public abstract Map<String, String> getFormParameters(); public abstract boolean isBlank(); }