PageRenderTime 47ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/src/main/java/com/cognitect/transit/impl/ReadHandlers.java

https://github.com/alexkit/transit-java
Java | 288 lines | 218 code | 68 blank | 2 comment | 6 complexity | 08f5970e2106217fcb5e2fb7ba3c1b27 MD5 | raw file
Possible License(s): Apache-2.0
  1. // Copyright (c) Cognitect, Inc.
  2. // All rights reserved.
  3. package com.cognitect.transit.impl;
  4. import com.cognitect.transit.*;
  5. import org.apache.commons.codec.binary.Base64;
  6. import java.math.BigDecimal;
  7. import java.math.BigInteger;
  8. import java.util.*;
  9. public class ReadHandlers {
  10. public static class BigDecimalReadHandler implements ReadHandler {
  11. @Override
  12. public Object fromRep(Object rep) {
  13. return new BigDecimal((String) rep);
  14. }
  15. }
  16. public static class BinaryReadHandler implements ReadHandler {
  17. @Override
  18. public Object fromRep(Object rep) {
  19. return Base64.decodeBase64(((String) rep).getBytes());
  20. }
  21. }
  22. public static class BooleanReadHandler implements ReadHandler {
  23. @Override
  24. public Object fromRep(Object rep) {
  25. return rep.equals("t");
  26. }
  27. }
  28. public static class CharacterReadHandler implements ReadHandler {
  29. @Override
  30. public Object fromRep(Object rep) {
  31. return ((String) rep).charAt(0);
  32. }
  33. }
  34. public static class CmapReadHandler implements ArrayReadHandler<Map,Map,Object> {
  35. @Override
  36. public Object fromRep(Object o) { throw new UnsupportedOperationException(); }
  37. @Override
  38. public ArrayReader<Map,Map,Object> arrayReader() {
  39. return new ArrayReader() {
  40. Map m = null;
  41. Object next_key = null;
  42. @Override
  43. public Object init() {
  44. m = new HashMap();
  45. return this;
  46. }
  47. @Override
  48. public Object init(int size) {
  49. m = new HashMap(size);
  50. return this;
  51. }
  52. @Override
  53. public Object add(Object ar, Object item) {
  54. if (next_key != null) {
  55. m.put(next_key, item);
  56. next_key = null;
  57. } else {
  58. next_key = item;
  59. }
  60. return this;
  61. }
  62. @Override
  63. public Object complete(Object ar) {
  64. return m;
  65. }
  66. };
  67. }
  68. }
  69. public static class DoubleReadHandler implements ReadHandler {
  70. @Override
  71. public Object fromRep(Object rep) {
  72. return new Double((String) rep);
  73. }
  74. }
  75. public static class IdentityReadHandler implements ReadHandler {
  76. @Override
  77. public Object fromRep(Object rep) {
  78. return rep;
  79. }
  80. }
  81. public static class IntegerReadHandler implements ReadHandler {
  82. @Override
  83. public Object fromRep(Object rep) {
  84. String enc = (String) rep;
  85. try {
  86. return Long.parseLong(enc);
  87. }catch(NumberFormatException e) {
  88. throw new RuntimeException(e);
  89. }
  90. }
  91. }
  92. public static class BigIntegerReadHandler implements ReadHandler {
  93. @Override
  94. public Object fromRep(Object rep) {
  95. return new BigInteger((String) rep);
  96. }
  97. }
  98. public static class KeywordReadHandler implements ReadHandler {
  99. @Override
  100. public Object fromRep(Object rep) {
  101. return TransitFactory.keyword((String) rep);
  102. }
  103. }
  104. public static class ListReadHandler implements ArrayReadHandler<List,List,Object> {
  105. @Override
  106. public Object fromRep(Object o) { throw new UnsupportedOperationException(); }
  107. @Override
  108. public ArrayReader arrayReader() {
  109. return new ArrayReader<List,List,Object>() {
  110. @Override
  111. public List init() {
  112. return new LinkedList();
  113. }
  114. @Override
  115. public List init(int size) {
  116. return init();
  117. }
  118. @Override
  119. public List add(List a, Object item) {
  120. a.add(item);
  121. return a;
  122. }
  123. @Override
  124. public List complete(List a) {
  125. return a;
  126. }
  127. };
  128. }
  129. }
  130. public static class NullReadHandler implements ReadHandler {
  131. @Override
  132. public Object fromRep(Object ignored) {
  133. return null;
  134. }
  135. }
  136. public static class RatioReadHandler implements ReadHandler {
  137. @Override
  138. public Object fromRep(Object rep) {
  139. List array = (List) rep;
  140. return new RatioImpl((BigInteger)array.get(0), (BigInteger)array.get(1));
  141. }
  142. }
  143. public static class SetReadHandler implements ArrayReadHandler<Set,Set,Object> {
  144. @Override
  145. public Object fromRep(Object o) { throw new UnsupportedOperationException();}
  146. @Override
  147. public ArrayReader arrayReader() {
  148. return new ArrayReader<Set,Set,Object>() {
  149. @Override
  150. public Set init() {
  151. return new HashSet();
  152. }
  153. @Override
  154. public Set init(int size) {
  155. return new HashSet(size);
  156. }
  157. @Override
  158. public Set add(Set a, Object item) {
  159. a.add(item);
  160. return a;
  161. }
  162. @Override
  163. public Set complete(Set a) {
  164. return a;
  165. }
  166. };
  167. }
  168. }
  169. public static class SymbolReadHandler implements ReadHandler {
  170. @Override
  171. public Object fromRep(Object rep) {
  172. return TransitFactory.symbol((String) rep);
  173. }
  174. }
  175. public static class VerboseTimeReadHandler implements ReadHandler {
  176. @Override
  177. public Object fromRep(Object rep) {
  178. Calendar t = javax.xml.bind.DatatypeConverter.parseDateTime((String) rep);
  179. t.setTimeZone(TimeZone.getTimeZone("Zulu"));
  180. return t.getTime();
  181. }
  182. }
  183. public static class TimeReadHandler implements ReadHandler {
  184. @Override
  185. public Object fromRep(Object rep) {
  186. Long n;
  187. if (rep instanceof Long)
  188. n = (Long) rep;
  189. else
  190. n = Long.decode((String) rep);
  191. Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("Zulu"));
  192. cal.setTimeInMillis(n);
  193. return cal.getTime();
  194. }
  195. }
  196. public static class URIReadHandler implements ReadHandler {
  197. @Override
  198. public Object fromRep(Object rep) {
  199. return new URIImpl((String) rep);
  200. }
  201. }
  202. public static class UUIDReadHandler implements ReadHandler {
  203. @Override
  204. public Object fromRep(Object rep) {
  205. if(rep instanceof String) {
  206. return UUID.fromString((String) rep);
  207. }
  208. else {
  209. List<Long> l = (List<Long>) rep;
  210. return new UUID(l.get(0), l.get(1));
  211. }
  212. }
  213. }
  214. public static class LinkReadHandler implements ReadHandler {
  215. @Override
  216. public Object fromRep(Object rep) {
  217. return new LinkImpl((Map) rep);
  218. }
  219. }
  220. }