de.instanttouch.messaging.protocol.translators.SnakeJsonMessageFormat.java Source code

Java tutorial

Introduction

Here is the source code for de.instanttouch.messaging.protocol.translators.SnakeJsonMessageFormat.java

Source

/*******************************************************************************
 * Copyright (c) 2014  Joachim Tessmer
 *
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    Joachim Tessmer - initial API and implementation
 *******************************************************************************/
package de.instanttouch.messaging.protocol.translators;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import org.json.simple.JSONObject;

import de.instantouch.model.base.SnakeType;
import de.instantouch.model.exception.SnakeWrongTypeException;
import de.instantouch.model.io.SnakeJSONReader;
import de.instantouch.model.io.SnakeJSONWriter;
import de.instanttouch.api.messaging.ISnakeMessage;
import de.instanttouch.api.model.ISnakeType;
import de.instanttouch.messaging.exception.SnakeMessagingException;
import de.instanttouch.messaging.model.message.SnakeMessage;
import de.instanttouch.messaging.model.message.SnakeRawMessage;
import de.instanttouch.messaging.protocol.SnakeMessageTranslator;

public class SnakeJsonMessageFormat extends SnakeMessageTranslator {

    public static final String JSON_MESSAGE_FORMAT = "de.instanttouch.messaging.protocol.translators.json.format";
    private static final long serialVersionUID = 1L;

    public SnakeJsonMessageFormat() {
        super(JSON_MESSAGE_FORMAT);
    }

    @Override
    public SnakeRawMessage readMessage(byte[] msg) throws IOException {

        SnakeRawMessage rawMessage = null;

        String text = new String(msg);
        SnakeJSONReader reader = null;
        try {
            reader = new SnakeJSONReader(text);
            rawMessage = readMessage(reader);

        } finally {
            if (reader != null) {
                reader.close();
            }
        }

        return rawMessage;
    }

    @Override
    public SnakeRawMessage readMessage(InputStream input) throws IOException {

        SnakeRawMessage rawMessage = null;
        SnakeJSONReader reader = null;
        try {
            reader = new SnakeJSONReader(input);
            rawMessage = readMessage(reader);

        } finally {
            if (reader != null) {
                reader.close();
            }
        }

        return rawMessage;
    }

    private SnakeRawMessage readMessage(SnakeJSONReader reader) throws IOException {

        SnakeRawMessage rawMessage = new SnakeRawMessage();

        JSONObject jsonObject = (JSONObject) reader.parse();
        JSONObject header = (JSONObject) jsonObject.get(SnakeMessage.HEADER);

        try {
            reader.readEntity(rawMessage.header(), header);
        } catch (Exception e) {
            throw new SnakeMessagingException(e);
        }

        JSONObject payload = (JSONObject) jsonObject.get(SnakeMessage.PAYLOAD);
        String payLoadStr = payload.toJSONString();

        rawMessage.setData(payLoadStr.getBytes());
        return rawMessage;
    }

    @Override
    public int translateData(byte[] rawdata, ISnakeType convertedData) throws IOException {

        if (!(convertedData instanceof SnakeType)) {
            throw new SnakeWrongTypeException(ISnakeMessage.class.getCanonicalName() + " expected, is: "
                    + convertedData.getClass().getCanonicalName());
        }

        String text = new String(rawdata);
        SnakeJSONReader reader = null;

        try {
            reader = new SnakeJSONReader(text);

            JSONObject jsonObject = (JSONObject) reader.parse();
            try {
                reader.read((SnakeType) convertedData, jsonObject);
            } catch (Exception e) {
                throw new SnakeMessagingException(e);
            }

        } finally {
            if (reader != null) {
                reader.close();
            }
        }

        return 0;
    }

    @Override
    public byte[] translateType(ISnakeType data) throws IOException {

        byte[] converted = null;

        SnakeJSONWriter writer = null;
        try {

            writer = new SnakeJSONWriter();
            writer.write((SnakeType) data);

            String asJson = writer.getContent();
            converted = asJson.getBytes();

        } finally {
            if (writer != null) {
                writer.close();
            }
        }
        return converted;
    }

    @Override
    public SnakeJsonMessageFormat writeMessage(SnakeMessage message, OutputStream output) throws IOException {

        SnakeJSONWriter writer = null;
        try {

            writer = new SnakeJSONWriter(output);
            writer.write(message);

        } finally {
            if (writer != null) {
                writer.close();
            }
        }

        return this;
    }

}