All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.cognitect.transit.impl.ReadHandlers Maven / Gradle / Ivy

Go to download

Transit is a data format and a set of libraries for conveying values between applications written in different languages. This library provides support for marshalling Transit data to/from Java.

There is a newer version: 1.0.371
Show newest version
// Copyright (c) Cognitect, Inc.
// All rights reserved.

package com.cognitect.transit.impl;

import com.cognitect.transit.*;
import org.apache.commons.codec.binary.Base64;

import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.*;

public class ReadHandlers {

    public static class BigDecimalReadHandler implements ReadHandler {

        @Override
        public Object fromRep(Object rep) {
            return new BigDecimal((String)rep);
        }
    }

    public static class BinaryReadHandler implements ReadHandler {

        @Override
        public Object fromRep(String rep) {

            return Base64.decodeBase64(rep.getBytes());
        }
    }

    public static class BooleanReadHandler implements ReadHandler {

        @Override
        public Object fromRep(String rep) {
            return rep.equals("t");
        }
    }

    public static class CharacterReadHandler implements ReadHandler {

        @Override
        public Object fromRep(String rep) {

            return rep.charAt(0);
        }
    }

    public static class CmapReadHandler implements ArrayReadHandler, Object, Object> {

        @Override
        public Map fromRep(Object objects) {
            throw new UnsupportedOperationException();
        }

        @Override
        public ArrayReader,Object> arrayReader() {
            return new ArrayReader, Object>() {
                Map m = null;
                Object next_key = null;

                @Override
                public Object init() {
                    return init(16);
                }

                @Override
                public Object init(int size) {
                    m = new HashMap(size);
                    return this;
                }

                @Override
                public Object add(Object ar, Object item) {
                    if (next_key != null) {
                        m.put(next_key, item);
                        next_key = null;
                    } else {
                        next_key = item;
                    }
                    return this;
                }

                @Override
                public Map complete(Object ar) {
                    return m;
                }
            };
        }
    }

    public static class DoubleReadHandler implements ReadHandler {

        @Override
        public Object fromRep(String rep) {

            return new Double(rep);
        }
    }

    public static class SpecialNumberReadHandler implements ReadHandler {
        @Override
        public Double fromRep(String rep) {
            if (rep.equals("NaN")) {
                return Double.NaN;
            } else if (rep.equals("INF")) {
                return Double.POSITIVE_INFINITY;
            } else if (rep.equals("-INF")) {
                return Double.NEGATIVE_INFINITY;
            } else {
                throw new RuntimeException();
            }
        }
    }

    public static class IdentityReadHandler implements ReadHandler {

        @Override
        public Object fromRep(Object rep) {
            return rep;
        }
    }

    public static class IntegerReadHandler implements ReadHandler {

        @Override
        public Object fromRep(String rep) {
            try {
                return Long.parseLong(rep);
            }catch(NumberFormatException e) {
                throw new RuntimeException(e);
            }
        }
    }

    public static class BigIntegerReadHandler implements ReadHandler {

        @Override
        public Object fromRep(String rep) {
            return new BigInteger(rep);
        }
    }

    public static class KeywordReadHandler implements ReadHandler {

        @Override
        public Object fromRep(String rep) {
            return TransitFactory.keyword(rep);
        }
    }

    public static class ListReadHandler implements ArrayReadHandler,List, Object, Object> {

        @Override
        public List fromRep(Object objects) {
            throw new UnsupportedOperationException();
        }

        @Override
        public ArrayReader, List, Object> arrayReader() {
            return new ArrayReader,List,Object>() {
                @Override
                public List init() {
                    return new LinkedList();
                }

                @Override
                public List init(int size) {
                    return init();
                }

                @Override
                public List add(List a, Object item) {
                    a.add(item);
                    return a;
                }

                @Override
                public List complete(List a) {
                    return a;
                }
            };
        }

    }

    public static class NullReadHandler implements ReadHandler {

        @Override
        public Object fromRep(Object ignored) { return null; }
    }

    public static class RatioReadHandler implements ReadHandler> {

        @Override
        public Object fromRep(List rep) {
            return new RatioImpl(rep.get(0), rep.get(1));
        }
    }

    public static class SetReadHandler implements ArrayReadHandler,Set,Object, Object> {


        @Override
        public Set fromRep(Object objects) {
            throw new UnsupportedOperationException();
        }

        @Override
        public ArrayReader, Set, Object> arrayReader() {
            return new ArrayReader,Set,Object>() {
                @Override
                public Set init() {
                    return init(16);
                }

                @Override
                public Set init(int size) {
                    return new HashSet(size);
                }

                @Override
                public Set add(Set a, Object item) {
                    a.add(item);
                    return a;
                }

                @Override
                public Set complete(Set a) {
                    return a;
                }
            };
        }
    }

    public static class SymbolReadHandler implements ReadHandler {

        @Override
        public Object fromRep(String rep) {
            return TransitFactory.symbol(rep);
        }
    }

    public static class VerboseTimeReadHandler implements ReadHandler {

        @Override
        public Object fromRep(String rep) {
            Calendar t = javax.xml.bind.DatatypeConverter.parseDateTime(rep);
            t.setTimeZone(TimeZone.getTimeZone("Zulu"));
            return t.getTime();
        }
    }

    public static class TimeReadHandler implements ReadHandler {

        @Override
        public Object fromRep(Object rep) {
            Long n;
            if (rep instanceof Long)
                n = (Long) rep;
            else
                n = Long.decode((String) rep);

            Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("Zulu"));
            cal.setTimeInMillis(n);
            return cal.getTime();
        }
    }


    public static class URIReadHandler implements ReadHandler {

        @Override
        public Object fromRep(String rep) { return new URIImpl(rep); }
    }

    public static class UUIDReadHandler implements ReadHandler {

        @Override
        @SuppressWarnings("unchecked")
        public Object fromRep(Object rep) {

            if(rep instanceof String) {
                return UUID.fromString((String) rep);
            }
            else {
                List l = (List) rep;
                return new UUID(l.get(0), l.get(1));
            }
        }
    }

    public static class LinkReadHandler implements ReadHandler> {
        @Override
        public Object fromRep(Map rep) {
            return new LinkImpl(rep);
        }
    }
}