package com.sissi.pipeline.in.presence; import java.util.HashSet; import java.util.Set; import com.sissi.pipeline.in.ClassMatcher; import com.sissi.protocol.Protocol; import com.sissi.protocol.presence.Presence; import com.sissi.protocol.presence.PresenceType; /** * <presence type=Xxx to=Xxx/></p> * * @author kim 2013-11-4 */ public class PresenceMatcher extends ClassMatcher { private final PresenceType[] types; private final boolean directed; /** * @param directed 是否为包含To的定向请求 * @param types */ public PresenceMatcher(boolean directed, Set<String> types) { super(Presence.class); this.directed = directed; Set<PresenceType> convert = new HashSet<PresenceType>(); for (String type : types) { convert.add(PresenceType.parse(type)); } this.types = convert.toArray(new PresenceType[] {}); } @Override public boolean match(Protocol protocol) { return super.match(protocol) && (!protocol.to() || this.directed) && PresenceType.parse(protocol.getType()).in(this.types); } }