PageRenderTime 36ms CodeModel.GetById 9ms RepoModel.GetById 1ms app.codeStats 0ms

/src/com/braintreegateway/RequestBuilder.java

http://github.com/braintree/braintree_java
Java | 123 lines | 106 code | 17 blank | 0 comment | 22 complexity | f2731ac70ed170fce07ac10fb958cc2c MD5 | raw file
Possible License(s): MIT
  1. package com.braintreegateway;
  2. import java.net.URLEncoder;
  3. import java.text.SimpleDateFormat;
  4. import java.util.Calendar;
  5. import java.util.HashMap;
  6. import java.util.List;
  7. import java.util.Map;
  8. import java.util.TimeZone;
  9. import com.braintreegateway.util.QueryString;
  10. import com.braintreegateway.util.StringUtils;
  11. public class RequestBuilder {
  12. private String parent;
  13. private Map<String, String> topLevelElements;
  14. private Map<String, Object> elements;
  15. public RequestBuilder(String parent) {
  16. this.parent = parent;
  17. this.topLevelElements = new HashMap<String, String>();
  18. this.elements = new HashMap<String, Object>();
  19. }
  20. public RequestBuilder addTopLevelElement(String name, String value) {
  21. topLevelElements.put(name, value);
  22. return this;
  23. }
  24. public RequestBuilder addElement(String name, Object value) {
  25. elements.put(name, value);
  26. return this;
  27. }
  28. public String toQueryString() {
  29. QueryString queryString = new QueryString();
  30. for (Map.Entry<String, String> entry : topLevelElements.entrySet()) {
  31. queryString.append(StringUtils.underscore(entry.getKey()), entry.getValue());
  32. }
  33. for (Map.Entry<String, Object> entry : elements.entrySet()) {
  34. queryString.append(parentBracketChildString(StringUtils.underscore(parent), StringUtils.underscore(entry.getKey())), entry.getValue());
  35. }
  36. return queryString.toString();
  37. }
  38. public String toXML() {
  39. StringBuilder builder = new StringBuilder();
  40. builder.append(String.format("<%s>", parent));
  41. for (Map.Entry<String, Object> entry : elements.entrySet()) {
  42. builder.append(buildXMLElement(entry.getKey(), entry.getValue()));
  43. }
  44. builder.append(String.format("</%s>", parent));
  45. return builder.toString();
  46. }
  47. protected static String buildXMLElement(Object element) {
  48. return buildXMLElement("", element);
  49. }
  50. @SuppressWarnings("unchecked")
  51. protected static String buildXMLElement(String name, Object element) {
  52. if (element == null) {
  53. return "";
  54. } else if (element instanceof Request) {
  55. return ((Request) element).toXML();
  56. } else if (element instanceof Calendar) {
  57. SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
  58. dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
  59. return String.format("<%s type=\"datetime\">%s</%s>", name, dateFormat.format(((Calendar) element).getTime()), name);
  60. } else if (element instanceof Map<?, ?>) {
  61. return formatAsXML(name, (Map<String, Object>) element);
  62. } else if (element instanceof List<?>) {
  63. String xml = "";
  64. for (Object item : (List<Object>) element) {
  65. xml += buildXMLElement("item", item);
  66. }
  67. return wrapInXMLTag(name, xml, "array");
  68. } else {
  69. return String.format("<%s>%s</%s>", xmlEscape(name), element == null ? "" : xmlEscape(element.toString()), xmlEscape(name));
  70. }
  71. }
  72. protected static String formatAsXML(String name, Map<String, Object> map) {
  73. if (map == null)
  74. return "";
  75. String xml = "";
  76. xml += String.format("<%s>", name);
  77. for (Map.Entry<String, Object> entry : map.entrySet()) {
  78. xml += buildXMLElement(entry.getKey(), entry.getValue());
  79. }
  80. xml += String.format("</%s>", name);
  81. return xml;
  82. }
  83. protected static Object buildQueryStringElement(String name, String value) {
  84. if (value != null) {
  85. try {
  86. return String.format("%s=%s&", URLEncoder.encode(name, "UTF-8"), URLEncoder.encode(value, "UTF-8"));
  87. } catch (Exception e) {
  88. throw new RuntimeException(e);
  89. }
  90. } else {
  91. return "";
  92. }
  93. }
  94. protected static String parentBracketChildString(String parent, String child) {
  95. return String.format("%s[%s]", parent, child);
  96. }
  97. protected static String wrapInXMLTag(String tagName, String xml) {
  98. return String.format("<%s>%s</%s>", tagName, xml, tagName);
  99. }
  100. protected static String wrapInXMLTag(String tagName, String xml, String type) {
  101. return String.format("<%s type=\"%s\">%s</%s>", tagName, type, xml, tagName);
  102. }
  103. protected static String xmlEscape(String input) {
  104. return input.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll("'", "&apos;").replaceAll("\"", "&quot;");
  105. }
  106. }