View Javadoc
1   package com.zone.weixin4j.handler;
2   
3   import com.zone.weixin4j.exception.WeixinException;
4   import com.zone.weixin4j.request.WeixinMessage;
5   import com.zone.weixin4j.request.WeixinRequest;
6   
7   import java.util.HashSet;
8   import java.util.Set;
9   
10  /**
11   * 多个消息类型适配
12   * 
13   * @className MultipleMessageHandlerAdapter
14   * @author jinyu(foxinmy@gmail.com)
15   * @date 2016年3月12日
16   * @since JDK 1.6
17   * @see
18   */
19  public abstract class MultipleMessageHandlerAdapter implements WeixinMessageHandler {
20  
21  	private final Set<Class<? extends WeixinMessage>> messageClasses;
22  
23  	public MultipleMessageHandlerAdapter(Class<? extends WeixinMessage>... messageClasses) {
24  		if (messageClasses == null) {
25  			throw new IllegalArgumentException("messageClasses not be empty");
26  		}
27  		this.messageClasses = new HashSet<Class<? extends WeixinMessage>>(
28  				Math.max((int) (messageClasses.length / .75f) + 1, 16));
29  		for (Class<? extends WeixinMessage> clazz : messageClasses) {
30  			this.messageClasses.add(clazz);
31  		}
32  	}
33  
34  	@Override
35  	public boolean canHandle(WeixinRequest request, WeixinMessage message, Set<String> nodeNames)
36  			throws WeixinException {
37  		return message != null && messageClasses.contains(message.getClass()) && canHandle0(request, message);
38  	}
39  
40  	/**
41  	 * 能否处理请求
42  	 * 
43  	 * @param request
44  	 *            微信请求
45  	 * @param message
46  	 *            微信消息
47  	 * @return true则执行doHandler
48  	 * @throws WeixinException
49  	 */
50  	public boolean canHandle0(WeixinRequest request, WeixinMessage message) throws WeixinException {
51  		return true;
52  	}
53  
54  	@Override
55  	public int weight() {
56  		return 1;
57  	}
58  }