1 package com.foxinmy.weixin4j.tuple;
2
3 import java.util.Arrays;
4 import java.util.LinkedList;
5 import java.util.List;
6
7 import javax.xml.bind.annotation.XmlElement;
8 import javax.xml.bind.annotation.XmlTransient;
9
10 import com.alibaba.fastjson.annotation.JSONField;
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 public class MpNews implements MassTuple, NotifyTuple {
27
28 private static final long serialVersionUID = 8853054484809101524L;
29
30
31
32
33 private static final int MAX_ARTICLE_COUNT = 8;
34
35 @Override
36 public String getMessageType() {
37 return "mpnews";
38 }
39
40
41
42
43 @JSONField(name = "media_id")
44 @XmlElement(name = "MediaId")
45 private String mediaId;
46
47
48
49 @XmlTransient
50 private LinkedList<MpArticle> articles;
51
52
53
54
55
56
57
58 public MpNews(String mediaId) {
59 this.mediaId = mediaId;
60 this.articles = new LinkedList<MpArticle>();
61 }
62
63
64
65
66
67
68
69 public MpNews(MpArticle... articles) {
70 this.articles = new LinkedList<MpArticle>(Arrays.asList(articles));
71 }
72
73
74
75
76
77
78
79
80
81 public MpNews addArticle(String thumbMediaId, String title, String content) {
82 return addArticle(new MpArticle(thumbMediaId, title, content));
83 }
84
85 public MpNews addArticle(MpArticle... articles) {
86 for (MpArticle article : articles) {
87 this.articles.add(article);
88 }
89 return this;
90 }
91
92 public MpNews addFirstArticle(MpArticle article) {
93 articles.addFirst(article);
94 return this;
95 }
96
97 public MpNews addLastArticle(MpArticle article) {
98 articles.addLast(article);
99 return this;
100 }
101
102 public MpNews removeFirstArticle() {
103 articles.removeFirst();
104 return this;
105 }
106
107 public MpNews removeLastArticle() {
108 articles.removeLast();
109 return this;
110 }
111
112 @JSONField(serialize = false)
113 @XmlTransient
114 public boolean isMaxCount() {
115 return articles.size() == MAX_ARTICLE_COUNT;
116 }
117
118 public List<MpArticle> getArticles() {
119 if (articles.size() > MAX_ARTICLE_COUNT) {
120 return articles.subList(0, MAX_ARTICLE_COUNT);
121 } else {
122 return articles;
123 }
124 }
125
126 @JSONField(serialize = false)
127 @XmlTransient
128 public List<MpArticle> getFullArticles() {
129 return articles;
130 }
131
132 public String getMediaId() {
133 return mediaId;
134 }
135
136 @Override
137 public String toString() {
138 return "MpNews [articles=" + articles + ", mediaId=" + mediaId + "]";
139 }
140 }