package net.oschina.app.bean;
import java.io.IOException;
import java.io.InputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import net.oschina.app.AppException;
import net.oschina.app.common.StringUtils;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import android.util.Xml;
/**
* 好友列表实体类
* @author liux (http://my.oschina.net/liux)
* @version 1.0
* @created 2012-3-21
*/
public class FriendList extends Entity{
public final static int TYPE_FANS = 0x00;
public final static int TYPE_FOLLOWER = 0x01;
private List<Friend> friendlist = new ArrayList<Friend>();
/**
* 好友实体类
*/
public static class Friend implements Serializable {
private int userid;
private String name;
private String face;
private String expertise;
private int gender;
public int getUserid() {return userid;}
public void setUserid(int userid) {this.userid = userid;}
public String getName() {return name;}
public void setName(String name) {this.name = name;}
public String getFace() {return face;}
public void setFace(String face) {this.face = face;}
public String getExpertise() {return expertise;}
public void setExpertise(String expertise) {this.expertise = expertise;}
public int getGender() {return gender;}
public void setGender(int gender) {this.gender = gender;}
}
public List<Friend> getFriendlist() {
return friendlist;
}
public void setFriendlist(List<Friend> resultlist) {
this.friendlist = resultlist;
}
public static FriendList parse(InputStream inputStream) throws IOException, AppException {
FriendList friendlist = new FriendList();
Friend friend = null;
//获得XmlPullParser解析器
XmlPullParser xmlParser = Xml.newPullParser();
try {
xmlParser.setInput(inputStream, UTF8);
//获得解析到的事件类别,这里有开始文档,结束文档,开始标签,结束标签,文本等等事件。
int evtType=xmlParser.getEventType();
//一直循环,直到文档结束
while(evtType!=XmlPullParser.END_DOCUMENT){
String tag = xmlParser.getName();
switch(evtType){
case XmlPullParser.START_TAG:
if (tag.equalsIgnoreCase("friend"))
{
friend = new Friend();
}
else if(friend != null)
{
if(tag.equalsIgnoreCase("userid"))
{
friend.userid = StringUtils.toInt(xmlParser.nextText(),0);
}
else if(tag.equalsIgnoreCase("name"))
{
friend.name = xmlParser.nextText();
}
else if(tag.equalsIgnoreCase("portrait"))
{
friend.face = xmlParser.nextText();
}
else if(tag.equalsIgnoreCase("expertise"))
{
friend.expertise = xmlParser.nextText();
}
else if(tag.equalsIgnoreCase("gender"))
{
friend.gender = StringUtils.toInt(xmlParser.nextText(),0);
}
}
//通知信息
else if(tag.equalsIgnoreCase("notice"))
{
friendlist.setNotice(new Notice());
}
else if(friendlist.getNotice() != null)
{
if(tag.equalsIgnoreCase("atmeCount"))
{
friendlist.getNotice().setAtmeCount(StringUtils.toInt(xmlParser.nextText(),0));
}
else if(tag.equalsIgnoreCase("msgCount"))
{
friendlist.getNotice().setMsgCount(StringUtils.toInt(xmlParser.nextText(),0));
}
else if(tag.equalsIgnoreCase("reviewCount"))
{
friendlist.getNotice().setReviewCount(StringUtils.toInt(xmlParser.nextText(),0));
}
else if(tag.equalsIgnoreCase("newFansCount"))
{
friendlist.getNotice().setNewFansCount(StringUtils.toInt(xmlParser.nextText(),0));
}
}
break;
case XmlPullParser.END_TAG:
//如果遇到标签结束,则把对象添加进集合中
if (tag.equalsIgnoreCase("friend") && friend != null) {
friendlist.getFriendlist().add(friend);
friend = null;
}
break;
}
//如果xml没有结束,则导航到下一个节点
evtType=xmlParser.next();
}
} catch (XmlPullParserException e) {
throw AppException.xml(e);
} finally {
inputStream.close();
}
return friendlist;
}
}