package com.foxinmy.weixin4j.model;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import com.alibaba.fastjson.annotation.JSONField;
import com.foxinmy.weixin4j.type.ButtonType;
/**
* 菜单按钮
* <p>
* 目前自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单,一级菜单最多4个汉字,二级菜单最多7个汉字,多出来的部分将会以"..."代替
* 请注意,创建自定义菜单后,由于微信客户端缓存,需要24小时微信客户端才会展现出来,建议测试时可以尝试取消关注公众账号后再次关注,则可以看到创建后的效果
* </p>
*
* @className Button
* @author jinyu(foxinmy@gmail.com)
* @date 2014年4月5日
* @since JDK 1.6
*/
public class Button implements Serializable {
private static final long serialVersionUID = -6422234732203854866L;
/**
* 菜单标题,不超过16个字节,子菜单不超过40个字节
*/
private String name;
/**
* 菜单类型 </br> <font color="red">
* 公众平台官网上能够设置的菜单类型有view、text、img、photo、video、voice </font>
*
* @see com.foxinmy.weixin4j.type.ButtonType
*/
private ButtonType type;
/**
* 菜单KEY值,根据type的类型而定</p> 通过公众平台设置的自定义菜单:</br> <li>text:保存文字; <li>
* img、voice:保存媒体ID; <li>video:保存视频URL; <li>
* news:保存图文消息媒体ID <li>view:保存链接URL;
* <p>
* 使用API设置的自定义菜单:
* </p> <li>
* click、scancode_push、scancode_waitmsg、pic_sysphoto、pic_photo_or_album、
* pic_weixin、location_select:保存key; <li>view:保存链接URL; <li>
* media_id、view_limited:保存媒体ID
*/
private String content;
/**
* 扩展属性,比如在公众平台设置菜单时的图文列表
*/
@JSONField(serialize = false, deserialize = false)
private Object extra;
/**
* 二级菜单数组,个数应为1~5个
*/
@JSONField(name = "sub_button")
private List<Button> subs;
protected Button() {
this.subs = new ArrayList<Button>();
}
/**
* 创建一个具有子菜单的菜单
*
* @param name
* 菜单名
* @param subButtons
* 二级菜单列表
*/
public Button(String name, Button... subButtons) {
this.name = name;
this.subs = new ArrayList<Button>(Arrays.asList(subButtons));
}
/**
* 创建一个普通菜单
*
* @param name
* 菜单名
* @param content
* 菜单内容
* @param type
* 菜单类型
*/
public Button(String name, String content, ButtonType type) {
this.name = name;
this.content = content;
this.type = type;
this.subs = new ArrayList<Button>();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public ButtonType getType() {
return type;
}
public void setType(ButtonType type) {
this.type = type;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public Object getExtra() {
return extra;
}
/**
* 扩展只读属性,设置无效
*
* @param extra
*/
public void setExtra(Object extra) {
this.extra = extra;
}
public List<Button> getSubs() {
return subs;
}
public void setSubs(List<Button> subs) {
this.subs = subs;
}
public Button pushSub(Button btn) {
this.subs.add(btn);
return this;
}
@Override
public String toString() {
return "Button [name=" + name + ", type=" + type + ", content="
+ content + ", extra=" + extra + ", subs=" + subs + "]";
}
}