Package com.tinkerpop.rexster.protocol.serializer.msgpack.templates

Source Code of com.tinkerpop.rexster.protocol.serializer.msgpack.templates.MetaTemplate

package com.tinkerpop.rexster.protocol.serializer.msgpack.templates;

import com.tinkerpop.rexster.protocol.msg.RexProMessageMeta;
import org.msgpack.packer.Packer;
import org.msgpack.template.AbstractTemplate;
import org.msgpack.template.Templates;
import org.msgpack.type.Value;
import org.msgpack.unpacker.Unpacker;

import java.io.IOException;
import java.util.Map;

/**
* Serializer for message meta fields
*
* @author Blake Eggleston (bdeggleston.github.com)
*/
public class MetaTemplate extends AbstractTemplate<RexProMessageMeta> {

    @Override
    public void write(Packer pk, RexProMessageMeta v) throws IOException {
        write(pk, v, false);
    }

    public void write(final Packer pk, final RexProMessageMeta v, final boolean required) throws IOException {
        RexProMessageMeta meta = v;
        if (meta == null) {
            meta = new RexProMessageMeta();
        }
        pk.writeMapBegin(meta.size());
        for (Map.Entry pair : meta.entrySet()) {
            pk.write(pair.getKey());
            pk.write(pair.getValue());
        }
        pk.writeMapEnd();
    }

    @Override
    public RexProMessageMeta read(Unpacker u, RexProMessageMeta to) throws IOException {
        return read(u, to, false);
    }

    protected Object deserializeObject(Value v) {
        if (v == null) {
            return null;
        } else if (v.isBooleanValue()) {
            return v.asBooleanValue().getBoolean();
        } else if (v.isFloatValue()) {
            return v.asFloatValue().getDouble();
        } else if (v.isIntegerValue()) {
            return v.asIntegerValue().getInt();
        } else {
            return v.asRawValue().getString();
        }
    }

    public RexProMessageMeta read(final Unpacker u, final RexProMessageMeta to, final boolean required) throws IOException {
        if (!required && u.trySkipNil()) {
            return null;
        }

        RexProMessageMeta meta;
        if (to != null) {
            meta = to;
            meta.clear();
        } else {
            meta = new RexProMessageMeta();
        }

        int n = u.readMapBegin();
        for (int i=0; i<n; i++) {
            final String key = u.read(Templates.TString);
            final Object val = deserializeObject(u.read(Templates.TValue));
            meta.put(key, val);
        }
        u.readMapEnd();

        return meta;
    }


    public static MetaTemplate instance = new MetaTemplate();
    static public MetaTemplate getInstance() {
        return instance;
    }
}
TOP

Related Classes of com.tinkerpop.rexster.protocol.serializer.msgpack.templates.MetaTemplate

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.