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