MultipleMessageHandlerAdapter.java

package com.zone.weixin4j.handler;

import com.zone.weixin4j.exception.WeixinException;
import com.zone.weixin4j.request.WeixinMessage;
import com.zone.weixin4j.request.WeixinRequest;

import java.util.HashSet;
import java.util.Set;

/**
 * 多个消息类型适配
 * 
 * @className MultipleMessageHandlerAdapter
 * @author jinyu(foxinmy@gmail.com)
 * @date 2016年3月12日
 * @since JDK 1.6
 * @see
 */
public abstract class MultipleMessageHandlerAdapter implements WeixinMessageHandler {

	private final Set<Class<? extends WeixinMessage>> messageClasses;

	public MultipleMessageHandlerAdapter(Class<? extends WeixinMessage>... messageClasses) {
		if (messageClasses == null) {
			throw new IllegalArgumentException("messageClasses not be empty");
		}
		this.messageClasses = new HashSet<Class<? extends WeixinMessage>>(
				Math.max((int) (messageClasses.length / .75f) + 1, 16));
		for (Class<? extends WeixinMessage> clazz : messageClasses) {
			this.messageClasses.add(clazz);
		}
	}

	@Override
	public boolean canHandle(WeixinRequest request, WeixinMessage message, Set<String> nodeNames)
			throws WeixinException {
		return message != null && messageClasses.contains(message.getClass()) && canHandle0(request, message);
	}

	/**
	 * 能否处理请求
	 * 
	 * @param request
	 *            微信请求
	 * @param message
	 *            微信消息
	 * @return true则执行doHandler
	 * @throws WeixinException
	 */
	public boolean canHandle0(WeixinRequest request, WeixinMessage message) throws WeixinException {
		return true;
	}

	@Override
	public int weight() {
		return 1;
	}
}