package weibo4j.model;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import weibo4j.http.Response;
import weibo4j.org.json.JSONArray;
import weibo4j.org.json.JSONException;
import weibo4j.org.json.JSONObject;
public class Status extends WeiboResponse {
private static final long serialVersionUID = -8795691786466526420L;
private User user = null; //作者信息
private Date createdAt; //status创建时间
private String id; //status id
private String mid; //微博MID
private long idstr; //保留字段,请勿使用
private String text; //微博内容
private Source source; //微博来源
private boolean favorited; //是否已收藏
private boolean truncated;
private long inReplyToStatusId; //回复ID
private long inReplyToUserId; //回复人ID
private String inReplyToScreenName; //回复人昵称
private String thumbnailPic; //微博内容中的图片的缩略地址
private String bmiddlePic; //中型图片
private String originalPic; //原始图片
private Status retweetedStatus = null; //转发的博文,内容为status,如果不是转发,则没有此字段
private String geo; //地理信息,保存经纬度,没有时不返回此字段
private double latitude = -1; //纬度
private double longitude = -1; //经度
private int repostsCount; //转发数
private int commentsCount; //评论数
private String annotations; //元数据,没有时不返回此字段
private int mlevel;
private Visible visible;
public Status()
{
}
public Status(Response res)throws WeiboException{
super(res);
JSONObject json=res.asJSONObject();
constructJson(json);
}
private void constructJson(JSONObject json) throws WeiboException {
try {
createdAt = parseDate(json.getString("created_at"), "EEE MMM dd HH:mm:ss z yyyy");
id = json.getString("id");
mid=json.getString("mid");
idstr = json.getLong("idstr");
text = json.getString("text");
if(!json.getString("source").isEmpty()){
source = new Source(json.getString("source"));
}
inReplyToStatusId = getLong("in_reply_to_status_id", json);
inReplyToUserId = getLong("in_reply_to_user_id", json);
inReplyToScreenName=json.getString("in_reply_toS_screenName");
favorited = getBoolean("favorited", json);
truncated = getBoolean("truncated", json);
thumbnailPic = json.getString("thumbnail_pic");
bmiddlePic = json.getString("bmiddle_pic");
originalPic = json.getString("original_pic");
repostsCount = json.getInt("reposts_count");
commentsCount = json.getInt("comments_count");
annotations = json.getString("annotations");
if(!json.isNull("user"))
user = new User(json.getJSONObject("user"));
if(!json.isNull("retweeted_status")){
retweetedStatus= new Status(json.getJSONObject("retweeted_status"));
}
mlevel = json.getInt("mlevel");
geo= json.getString("geo");
if(geo!=null &&!"".equals(geo) &&!"null".equals(geo)){
getGeoInfo(geo);
}
if(!json.isNull("visible")){
visible= new Visible(json.getJSONObject("visible"));
}
} catch (JSONException je) {
throw new WeiboException(je.getMessage() + ":" + json.toString(), je);
}
}
private void getGeoInfo(String geo) {
StringBuffer value= new StringBuffer();
for(char c:geo.toCharArray()){
if(c>45&&c<58){
value.append(c);
}
if(c==44){
if(value.length()>0){
latitude=Double.parseDouble(value.toString());
value.delete(0, value.length());
}
}
}
longitude=Double.parseDouble(value.toString());
}
public Status(JSONObject json)throws WeiboException, JSONException{
constructJson(json);
}
public Status(String str) throws WeiboException, JSONException {
// StatusStream uses this constructor
super();
JSONObject json = new JSONObject(str);
constructJson(json);
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public long getIdstr() {
return idstr;
}
public void setIdstr(long idstr) {
this.idstr = idstr;
}
public Date getCreatedAt() {
return createdAt;
}
public void setCreatedAt(Date createdAt) {
this.createdAt = createdAt;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public Source getSource() {
return source;
}
public void setSource(Source source) {
this.source = source;
}
public boolean isFavorited() {
return favorited;
}
public void setFavorited(boolean favorited) {
this.favorited = favorited;
}
public long getInReplyToStatusId() {
return inReplyToStatusId;
}
public void setInReplyToStatusId(long inReplyToStatusId) {
this.inReplyToStatusId = inReplyToStatusId;
}
public long getInReplyToUserId() {
return inReplyToUserId;
}
public void setInReplyToUserId(long inReplyToUserId) {
this.inReplyToUserId = inReplyToUserId;
}
public String getInReplyToScreenName() {
return inReplyToScreenName;
}
public void setInReplyToScreenName(String inReplyToScreenName) {
this.inReplyToScreenName = inReplyToScreenName;
}
public String getThumbnailPic() {
return thumbnailPic;
}
public void setThumbnailPic(String thumbnailPic) {
this.thumbnailPic = thumbnailPic;
}
public String getBmiddlePic() {
return bmiddlePic;
}
public void setBmiddlePic(String bmiddlePic) {
this.bmiddlePic = bmiddlePic;
}
public String getOriginalPic() {
return originalPic;
}
public void setOriginalPic(String originalPic) {
this.originalPic = originalPic;
}
public Status getRetweetedStatus() {
return retweetedStatus;
}
public void setRetweetedStatus(Status retweetedStatus) {
this.retweetedStatus = retweetedStatus;
}
public String getGeo() {
return geo;
}
public void setGeo(String geo) {
this.geo = geo;
}
public double getLatitude() {
return latitude;
}
public void setLatitude(double latitude) {
this.latitude = latitude;
}
public double getLongitude() {
return longitude;
}
public void setLongitude(double longitude) {
this.longitude = longitude;
}
public int getRepostsCount() {
return repostsCount;
}
public void setRepostsCount(int repostsCount) {
this.repostsCount = repostsCount;
}
public int getCommentsCount() {
return commentsCount;
}
public void setCommentsCount(int commentsCount) {
this.commentsCount = commentsCount;
}
public String getMid() {
return mid;
}
public void setMid(String mid) {
this.mid = mid;
}
public String getAnnotations() {
return annotations;
}
public void setAnnotations(String annotations) {
this.annotations = annotations;
}
public int getMlevel() {
return mlevel;
}
public void setMlevel(int mlevel) {
this.mlevel = mlevel;
}
public Visible getVisible() {
return visible;
}
public void setVisible(Visible visible) {
this.visible = visible;
}
public boolean isTruncated() {
return truncated;
}
public void setTruncated(boolean truncated) {
this.truncated = truncated;
}
public static StatusWapper constructWapperStatus(Response res) throws WeiboException {
JSONObject jsonStatus = res.asJSONObject(); //asJSONArray();
JSONArray statuses = null;
try {
if(!jsonStatus.isNull("statuses")){
statuses = jsonStatus.getJSONArray("statuses");
}
if(!jsonStatus.isNull("reposts")){
statuses = jsonStatus.getJSONArray("reposts");
}
int size = statuses.length();
List<Status> status = new ArrayList<Status>(size);
for (int i = 0; i < size; i++) {
status.add(new Status(statuses.getJSONObject(i)));
}
long previousCursor = jsonStatus.getLong("previous_curosr");
long nextCursor = jsonStatus.getLong("next_cursor");
long totalNumber = jsonStatus.getLong("total_number");
String hasvisible = jsonStatus.getString("hasvisible");
return new StatusWapper(status, previousCursor, nextCursor,totalNumber,hasvisible);
} catch (JSONException jsone) {
throw new WeiboException(jsone);
}
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Status other = (Status) obj;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
return true;
}
@Override
public String toString() {
return "Status [user=" + user + ", idstr=" + idstr + ", createdAt="
+ createdAt + ", id=" + id + ", text=" + text + ", source="
+ source + ", favorited=" + favorited + ", truncated="
+ truncated + ", inReplyToStatusId=" + inReplyToStatusId
+ ", inReplyToUserId=" + inReplyToUserId
+ ", inReplyToScreenName=" + inReplyToScreenName
+ ", thumbnailPic=" + thumbnailPic + ", bmiddlePic="
+ bmiddlePic + ", originalPic=" + originalPic
+ ", retweetedStatus=" + retweetedStatus + ", geo=" + geo
+ ", latitude=" + latitude + ", longitude=" + longitude
+ ", repostsCount=" + repostsCount + ", commentsCount="
+ commentsCount + ", mid=" + mid + ", annotations="
+ annotations + ", mlevel=" + mlevel
+ ", visible=" + visible + "]";
}
}