// Path: src/main/java/com/baidu/unbiz/multiengine/codec/common/JsonCodec.java
// public class JsonCodec implements MsgCodec {
//     /**
//      * 对象匹配映射
//      */
//     private final ObjectMapper mapper;
// 
//     public JsonCodec() {
//         mapper = new ObjectMapper();
//         // ignoring unknown properties makes us more robust to changes in the schema
//         mapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
//         // This will allow including type information all non-final types. This allows correct
//         // serialization/deserialization of generic collections, for example List<MyType>.
//         mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
//     }
// 
//     @Override
//     public byte[] encode(Object object) throws CodecException {
//         try {
//             return mapper.writeValueAsBytes(object);
//         } catch (Exception e) {
//             throw new CodecException(e);
//         }
//     }
// 
//     @Override
//     public <T> T decode(Class<T> clazz, byte[] bytes) throws CodecException {
//         try {
//             return mapper.readValue(bytes, clazz);
//         } catch (Exception e) {
//             throw new CodecException(e);
//         }
//     }
// 
// }
// 
// Path: src/main/java/com/baidu/unbiz/multiengine/codec/common/ProtostuffCodec.java
// public class ProtostuffCodec implements MsgCodec {
// 
//     /**
//      * 设置编码规则
//      */
//     static {
//         System.setProperty("protostuff.runtime.collection_schema_on_repeated_fields", "true");
//         System.setProperty("protostuff.runtime.morph_collection_interfaces", "true");
//         System.setProperty("protostuff.runtime.morph_map_interfaces", "true");
//     }
// 
//     /**
//      * 缓冲区
//      */
//     private ThreadLocal<LinkedBuffer> linkedBuffer = new ThreadLocal<LinkedBuffer>() {
//         @Override
//         protected LinkedBuffer initialValue() {
//             return LinkedBuffer.allocate(LinkedBuffer.DEFAULT_BUFFER_SIZE);
//         }
//     };
// 
//     @Override
//     public <T> T decode(final Class<T> clazz, byte[] data) throws CodecException {
//         Schema<T> schema = RuntimeSchema.getSchema(clazz);
// 
//         T content = ReflectionUtil.newInstance(clazz);
//         ProtobufIOUtil.mergeFrom(data, content, schema);
//         return content;
//     }
// 
//     @Override
//     public <T> byte[] encode(T object) throws CodecException {
//         try {
//             @SuppressWarnings("unchecked")
//             com.dyuproject.protostuff.Schema<T> schema =
//                     (com.dyuproject.protostuff.Schema<T>) RuntimeSchema.getSchema(object.getClass());
//             byte[] protostuff = ProtobufIOUtil.toByteArray(object, schema, linkedBuffer.get());
//             return protostuff;
//         } finally {
//             linkedBuffer.get().clear();
//         }
//     }
// 
// }
// 
// Path: src/main/java/com/baidu/unbiz/multiengine/transport/dto/Signal.java
// public class Signal<T> {
// 
//     protected long seqId;
//     protected T message;
//     protected SignalType type = SignalType.TASK_COMMOND;
// 
//     public Signal() {
//     }
// 
//     public Signal(T message) {
//         this.message = message;
//     }
// 
//     public T getMessage() {
//         return message;
//     }
// 
//     public void setMessage(T message) {
//         this.message = message;
//     }
// 
//     public long getSeqId() {
//         return seqId;
//     }
// 
//     public void setSeqId(long seqId) {
//         this.seqId = seqId;
//     }
// 
//     public String toString() {
//         return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
//     }
// 
//     public SignalType getType() {
//         return type;
//     }
// 
//     public void setType(SignalType type) {
//         this.type = type;
//     }
// }
// 
// Path: src/test/java/com/baidu/unbiz/multiengine/vo/DeviceViewItem.java
// public class DeviceViewItem {
// 
//     private static final long serialVersionUID = 6132709579470894604L;
// 
//     private int planId;
// 
//     private String planName;
// 
//     private Integer deviceId;
// 
//     private String deviceName ;
// 
//     // getter and setter
//     public int getPlanId() {
//         return planId;
//     }
// 
//     public void setPlanId(int planId) {
//         this.planId = planId;
//     }
// 
//     public Integer getDeviceId() {
//         return deviceId;
//     }
// 
//     public void setDeviceId(Integer deviceId) {
//         this.deviceId = deviceId;
//     }
// 
//     public String getPlanName() {
//         return planName;
//     }
// 
//     public void setPlanName(String planName) {
//         this.planName = planName;
//     }
// 
//     public String getDeviceName() {
//         return deviceName;
//     }
// 
//     public void setDeviceName(String deviceName) {
//         this.deviceName = deviceName;
//     }
// 
//     public String toString() {
//         return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
//     }
// }


import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import com.baidu.unbiz.multiengine.codec.common.JsonCodec;
import com.baidu.unbiz.multiengine.codec.common.ProtostuffCodec;
import com.baidu.unbiz.multiengine.transport.dto.Signal;
import com.baidu.unbiz.multiengine.vo.DeviceViewItem;
package com.baidu.unbiz.multiengine.codec;




/**
 * Created by wangchongjie on 16/4/5.
 */
public class CodecTest {

    @Test
    public void testProtostuffCodec() {
// Path: src/main/java/com/baidu/unbiz/multiengine/codec/common/JsonCodec.java
// public class JsonCodec implements MsgCodec {
//     /**
//      * 对象匹配映射
//      */
//     private final ObjectMapper mapper;
// 
//     public JsonCodec() {
//         mapper = new ObjectMapper();
//         // ignoring unknown properties makes us more robust to changes in the schema
//         mapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
//         // This will allow including type information all non-final types. This allows correct
//         // serialization/deserialization of generic collections, for example List<MyType>.
//         mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
//     }
// 
//     @Override
//     public byte[] encode(Object object) throws CodecException {
//         try {
//             return mapper.writeValueAsBytes(object);
//         } catch (Exception e) {
//             throw new CodecException(e);
//         }
//     }
// 
//     @Override
//     public <T> T decode(Class<T> clazz, byte[] bytes) throws CodecException {
//         try {
//             return mapper.readValue(bytes, clazz);
//         } catch (Exception e) {
//             throw new CodecException(e);
//         }
//     }
// 
// }
// 
// Path: src/main/java/com/baidu/unbiz/multiengine/codec/common/ProtostuffCodec.java
// public class ProtostuffCodec implements MsgCodec {
// 
//     /**
//      * 设置编码规则
//      */
//     static {
//         System.setProperty("protostuff.runtime.collection_schema_on_repeated_fields", "true");
//         System.setProperty("protostuff.runtime.morph_collection_interfaces", "true");
//         System.setProperty("protostuff.runtime.morph_map_interfaces", "true");
//     }
// 
//     /**
//      * 缓冲区
//      */
//     private ThreadLocal<LinkedBuffer> linkedBuffer = new ThreadLocal<LinkedBuffer>() {
//         @Override
//         protected LinkedBuffer initialValue() {
//             return LinkedBuffer.allocate(LinkedBuffer.DEFAULT_BUFFER_SIZE);
//         }
//     };
// 
//     @Override
//     public <T> T decode(final Class<T> clazz, byte[] data) throws CodecException {
//         Schema<T> schema = RuntimeSchema.getSchema(clazz);
// 
//         T content = ReflectionUtil.newInstance(clazz);
//         ProtobufIOUtil.mergeFrom(data, content, schema);
//         return content;
//     }
// 
//     @Override
//     public <T> byte[] encode(T object) throws CodecException {
//         try {
//             @SuppressWarnings("unchecked")
//             com.dyuproject.protostuff.Schema<T> schema =
//                     (com.dyuproject.protostuff.Schema<T>) RuntimeSchema.getSchema(object.getClass());
//             byte[] protostuff = ProtobufIOUtil.toByteArray(object, schema, linkedBuffer.get());
//             return protostuff;
//         } finally {
//             linkedBuffer.get().clear();
//         }
//     }
// 
// }
// 
// Path: src/main/java/com/baidu/unbiz/multiengine/transport/dto/Signal.java
// public class Signal<T> {
// 
//     protected long seqId;
//     protected T message;
//     protected SignalType type = SignalType.TASK_COMMOND;
// 
//     public Signal() {
//     }
// 
//     public Signal(T message) {
//         this.message = message;
//     }
// 
//     public T getMessage() {
//         return message;
//     }
// 
//     public void setMessage(T message) {
//         this.message = message;
//     }
// 
//     public long getSeqId() {
//         return seqId;
//     }
// 
//     public void setSeqId(long seqId) {
//         this.seqId = seqId;
//     }
// 
//     public String toString() {
//         return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
//     }
// 
//     public SignalType getType() {
//         return type;
//     }
// 
//     public void setType(SignalType type) {
//         this.type = type;
//     }
// }
// 
// Path: src/test/java/com/baidu/unbiz/multiengine/vo/DeviceViewItem.java
// public class DeviceViewItem {
// 
//     private static final long serialVersionUID = 6132709579470894604L;
// 
//     private int planId;
// 
//     private String planName;
// 
//     private Integer deviceId;
// 
//     private String deviceName ;
// 
//     // getter and setter
//     public int getPlanId() {
//         return planId;
//     }
// 
//     public void setPlanId(int planId) {
//         this.planId = planId;
//     }
// 
//     public Integer getDeviceId() {
//         return deviceId;
//     }
// 
//     public void setDeviceId(Integer deviceId) {
//         this.deviceId = deviceId;
//     }
// 
//     public String getPlanName() {
//         return planName;
//     }
// 
//     public void setPlanName(String planName) {
//         this.planName = planName;
//     }
// 
//     public String getDeviceName() {
//         return deviceName;
//     }
// 
//     public void setDeviceName(String deviceName) {
//         this.deviceName = deviceName;
//     }
// 
//     public String toString() {
//         return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
//     }
// }


// Path: src/test/java/com/baidu/unbiz/multiengine/codec/CodecTest.java
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import com.baidu.unbiz.multiengine.codec.common.JsonCodec;
import com.baidu.unbiz.multiengine.codec.common.ProtostuffCodec;
import com.baidu.unbiz.multiengine.transport.dto.Signal;
import com.baidu.unbiz.multiengine.vo.DeviceViewItem;

package com.baidu.unbiz.multiengine.codec;




/**
 * Created by wangchongjie on 16/4/5.
 */
public class CodecTest {

    @Test
    public void testProtostuffCodec() {
        MsgCodec codec = new ProtostuffCodec();