package com.sissi.pipeline.in.message.apply; import com.sissi.pipeline.in.ClassMatcher; import com.sissi.protocol.Protocol; import com.sissi.protocol.message.Message; import com.sissi.protocol.message.MessageType; /** * 匹配Message.type(normal, none), 匹配XData.type, 匹配XData包含指定XField(可选) * * @author kim 2014年3月18日 */ public class MessageApplyMatcher extends ClassMatcher { private final String type; private final String node; /** * @param type XDate.type */ public MessageApplyMatcher(String type) { this(type, null); } /** * @param type * @param node 是否包含指定XField */ public MessageApplyMatcher(String type, String node) { super(Message.class); this.type = type; this.node = node; } public boolean match(Protocol protocol) { return super.match(protocol) && this.support(protocol.cast(Message.class)); } private boolean support(Message message) { return message.type(MessageType.NORMAL, MessageType.NONE) && message.dataType(this.type) && (this.node != null ? message.data(this.node) : true); } }