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   import com.zone.weixin4j.response.WeixinResponse;
7   import com.zone.weixin4j.util.ClassUtil;
8   
9   import java.util.Set;
10  
11  /**
12   * 消息适配器:对于特定的消息类型进行适配,如text文本、voice语音消息
13   * 
14   * @className MessageHandlerAdapter
15   * @author jinyu(foxinmy@gmail.com)
16   * @date 2015年5月17日
17   * @since JDK 1.6
18   * @see com.foxinmy.weixin4j.request.WeixinMessage
19   */
20  @SuppressWarnings("unchecked")
21  public abstract class MessageHandlerAdapter<M extends WeixinMessage> implements
22  		WeixinMessageHandler {
23  
24  	@Override
25  	public boolean canHandle(WeixinRequest request, WeixinMessage message,
26  			Set<String> nodeNames) throws WeixinException {
27  		return message != null
28  				&& message.getClass() == ClassUtil.getGenericType(getClass())
29  				&& canHandle0(request, (M) message);
30  	}
31  
32  	/**
33  	 * 能否处理请求
34  	 * 
35  	 * @param request
36  	 *            微信请求
37  	 * @param message
38  	 *            微信消息
39  	 * @return true则执行doHandler0
40  	 * @throws WeixinException
41  	 */
42  	public boolean canHandle0(WeixinRequest request, M message)
43  			throws WeixinException {
44  		return true;
45  	}
46  
47  	@Override
48  	public WeixinResponse doHandle(WeixinRequest request,
49  			WeixinMessage message, Set<String> nodeNames)
50  			throws WeixinException {
51  		return doHandle0(request, (M) message);
52  	}
53  
54  	/**
55  	 * 处理请求
56  	 * 
57  	 * @param request
58  	 *            微信请求
59  	 * @param message
60  	 *            微信消息
61  	 * @return
62  	 */
63  	public abstract WeixinResponse doHandle0(WeixinRequest request, M message)
64  			throws WeixinException;
65  
66  	/**
67  	 * 缺省值为1,存在多个匹配到的MessageHandler则比较weight大小
68  	 */
69  	@Override
70  	public int weight() {
71  		return 1;
72  	}
73  }