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

org.bdware.doip.codec.JsonDoipMessage Maven / Gradle / Ivy

The newest version!
package org.bdware.doip.codec;

import com.google.gson.JsonObject;
import org.apache.commons.codec.binary.Base64;
import org.bdware.doip.codec.doipMessage.DoipMessage;
import org.bdware.doip.codec.doipMessage.DoipMessageFactory;
import org.bdware.doip.codec.doipMessage.DoipResponseCode;
import org.bdware.sc.conn.ByteUtil;

import java.nio.charset.StandardCharsets;

public class JsonDoipMessage {
    String reqID;
    public JsonDoipHeader header;
    public String body;
    public JsonObject sm2KeyPair;

    public void disableBase64Encode() {
        if (header == null) header = new JsonDoipHeader();
        if (header.attributes == null)
            header.attributes = new JsonObject();
        header.attributes.addProperty("bodyBase64Encoded", false);
    }

    public static boolean needEncode(JsonObject attribute) {
        if (attribute.has("bodyBase64Encoded") && !attribute.get("bodyBase64Encoded").getAsBoolean()) {
            return false;
        }
        return true;
    }

    public static JsonDoipMessage fromDoipMessage(DoipMessage doipMessage) {
        JsonDoipMessage message = new JsonDoipMessage();
        //TODO 需要的按byte数组方式去读取!
        if (doipMessage.body != null && doipMessage.body.getEncodedData() != null) {
            if (doipMessage.header == null
                    || doipMessage.header.parameters == null
                    || doipMessage.header.parameters.attributes == null
                    || needEncode(doipMessage.header.parameters.attributes))
                message.body = ByteUtil.encodeBASE64(doipMessage.body.getEncodedData());
            else
                message.body = doipMessage.body.getDataAsJsonString();
        }
        if (doipMessage.credential != null) {
            message.sm2KeyPair = new JsonObject();
            message.sm2KeyPair.addProperty("publicKey", doipMessage.credential.getSigner());
        }
        if (doipMessage.header != null && doipMessage.header.parameters != null) {
            message.header = new JsonDoipHeader();
            message.header.identifier = doipMessage.header.parameters.id;
            message.header.operation = doipMessage.header.parameters.operation;
            message.header.attributes = doipMessage.header.parameters.attributes;
            if (doipMessage.header.parameters.response != null)
                message.header.response = doipMessage.header.parameters.response.getName();
        }
        return message;
    }

    public DoipMessage toResponseDoipMessage(DoipMessage request) {
        DoipMessageFactory.DoipMessageBuilder builder = new DoipMessageFactory.DoipMessageBuilder();
        builder.createResponse(DoipResponseCode.getDoResponse(header.response), request);
        appendHeaderAndBody(builder);
        return builder.create();
    }

    // use
    public DoipMessage toRequestDoipMessage() {
        DoipMessageFactory.DoipMessageBuilder builder = new DoipMessageFactory.DoipMessageBuilder();
        builder.createRequest(header.identifier, header.operation);
        appendHeaderAndBody(builder);
        return builder.create();
    }

    public void addAttribute(String key, String value) {
        if (header == null) header = new JsonDoipHeader();
        if (header.attributes == null) header.attributes = new JsonObject();
        header.attributes.addProperty(key, value);
    }

    public String getBodyAsStr() {
        return body;
    }

    private void appendHeaderAndBody(DoipMessageFactory.DoipMessageBuilder builder) {
        if (header.attributes != null) {
            for (String key : header.attributes.keySet()) {
                builder.addAttributes(key, header.attributes.get(key));
            }
        }
        if (body != null) {
            if (header == null || header.attributes == null || needEncode(header.attributes)) {
                if (Base64.isBase64(body)) {
                    builder.setBody(Base64.decodeBase64(body));
                } else
                    builder.setBody(body.getBytes(StandardCharsets.UTF_8));
            } else
                builder.setBody(body.getBytes(StandardCharsets.UTF_8));
        }
    }
}





© 2015 - 2025 Weber Informatics LLC | Privacy Policy