/* * 文件名称: MsgParameter.java * 版权信息: Copyright 2013-2014 chunchen technology Co., LTD. All right reserved. * ---------------------------------------------------------------------------------------------- * 修改历史: * ---------------------------------------------------------------------------------------------- * 修改原因: 新增 * 修改人员: zhangyz * 修改日期: 2014-10-13 * 修改内容: */ package com.mfh.comn.bean.msg; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.annotation.JSONField; import java.io.Serializable; import java.util.HashMap; import java.util.Map; /** * 消息内容,包括一系列消息头属性和一个消息体属性。 * <T> 其中泛型是指消息体的类型 * @author zhangyz created on 2014-10-13 */ @SuppressWarnings("serial") public class MsgParameter implements Serializable { private final static String TAG_ORIGION_ID = "msg_origionId:"; private FromInfo from;//发送方信息 private DestInfo to;//接收方信息 private MsgData msgBean;//消息内容 //private String tagOne;//消息标签1,备用 //private String tagTwo; //消息标签2,备用 //private String tagThree; //消息标签3,备用 private Map<String, String> meta = new HashMap<String, String>(); /** * 无参构造函数,反序列化时需要 */ public MsgParameter() { super(); } public MsgParameter(MsgData msgBean) { super(); this.msgBean = msgBean; } /** * 检查并返回真正的消息发送方Id * @return * @author zhangyz created on 2014-11-20 */ public Long checkOrigionId() { String tagOne = this.getTagOne(); if (tagOne == null) return null; else if (tagOne.startsWith(TAG_ORIGION_ID)) { Long oId = Long.parseLong(tagOne.substring(TAG_ORIGION_ID.length())); this.setTagOne(null); return oId; } else return null; } /** * 附加上真正的消息发送方Id * @param origionId * @author zhangyz created on 2014-11-20 */ public void attachOrigionId(Long origionId) { this.setTagOne(TAG_ORIGION_ID + origionId); } @Override public String toString(){ return JSON.toJSONString(this); } public MsgData getMsgBean() { return msgBean; } public void setMsgBean(MsgData msgBean) { this.msgBean = msgBean; } @JSONField(serialize=false) public String getTagOne() { return meta.get("tagOne"); } @JSONField(serialize=false) public void setTagOne(String tagOne) { meta.put("tagOne", tagOne); } @JSONField(serialize=false) public String getTagTwo() { return meta.get("tagTwo"); } @JSONField(serialize=false) public void setTagTwo(String tagTwo) { meta.put("tagTwo", tagTwo); } @JSONField(serialize=false) public String getTagThree() { return meta.get("tagThree"); } @JSONField(serialize=false) public void setTagThree(String tagThree) { meta.put("tagThree", tagThree); } @JSONField(serialize=false) public Long getSid() { return getTo().getSid(); } @JSONField(serialize=false) public void setSessionId(Long sid) { this.getTo().setSid(sid); } @JSONField(serialize=false) public PhysicalPoint getFromPhysicalPoint() { return this.getFrom().getPp(); } @JSONField(serialize=false) public Long getFromGuid() { return this.getFrom().getGuid(); } /** * 填充tag信息 * @param tagInfo * @author zhangyz created on 2014-10-23 */ public void fillTagInfo(String... tagInfo) { if (tagInfo != null) { if (tagInfo.length > 0) setTagOne(tagInfo[0]); if (tagInfo.length > 1) setTagTwo(tagInfo[1]); if (tagInfo.length > 2) setTagThree(tagInfo[2]); } } /** * 是否来源者信息都具备,物理和逻辑端点都有. * 其实业务层借此想判断是否已经绑定过 * @return * @author zhangyz created on 2014-10-29 */ public boolean haveAllFrom() { if (from != null) return from.haveAllFrom(); else return false; } public FromInfo getFrom() { if (from == null) from = new FromInfo(); return from; } public void setFrom(FromInfo from) { this.from = from; } public DestInfo getTo() { if (to == null) to = new DestInfo(); return to; } public Map<String, String> getMeta() { return meta; } public void setMeta(Map<String, String> meta) { this.meta = meta; } /** * 添加一个元数据 * @param metaName * @param metaValue * @author zhangyz created on 2015-3-20 */ public void addMeta(String metaName, String metaValue) { meta.put(metaName, metaValue); } /** * 设置目标信息 * @param to * @author zhangyz created on 2015-3-20 */ public void setTo(DestInfo to) { this.to = to; } /** * 返回是否是模板消息 * @return * @author jguo created on 2014-11-19 */ @JSONField(serialize=false) public boolean isTemplateMsg(){ return msgBean != null && MsgConstant.MSG_TECHTYPE_TEMP.equals(msgBean.getType()); } @JSONField(serialize=false) public Integer getBind() { if(getFromGuid() == null || getFromGuid() < 0){ return 0; } else return 1; } }