package net.oschina.app.bean;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import net.oschina.app.AppException;
import net.oschina.app.bean.Active.ObjectReply;
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 UserInformation extends Entity{
private int pageSize;
private User user = new User();
private List<Active> activelist = new ArrayList<Active>();
public int getPageSize() {
return pageSize;
}
public User getUser() {
return user;
}
public List<Active> getActivelist() {
return activelist;
}
public static UserInformation parse(InputStream inputStream) throws IOException, AppException {
UserInformation uinfo = new UserInformation();
User user = null;
Active active = null;
//获得XmlPullParser解析器
XmlPullParser xmlParser = Xml.newPullParser();
try {
xmlParser.setInput(inputStream, UTF8);
//获得解析到的事件类别,这里有开始文档,结束文档,开始标签,结束标签,文本等等事件。
int evtType=xmlParser.getEventType();
//一直循环,直到文档结束
while(evtType!=XmlPullParser.END_DOCUMENT){
String tag = xmlParser.getName();
int depth = xmlParser.getDepth();
switch(evtType){
case XmlPullParser.START_TAG:
if(tag.equalsIgnoreCase("user"))
{
user = new User();
}
else if(tag.equalsIgnoreCase("pageSize"))
{
uinfo.pageSize = StringUtils.toInt(xmlParser.nextText(),0);
}
else if (tag.equalsIgnoreCase("active"))
{
active = new Active();
}
else if (user != null)
{
if(tag.equalsIgnoreCase("uid")){
user.setUid(StringUtils.toInt(xmlParser.nextText(), 0));
}else if(tag.equalsIgnoreCase("from")){
user.setLocation(xmlParser.nextText());
}else if(tag.equalsIgnoreCase("name")){
user.setName(xmlParser.nextText());
}else if(depth==3 && tag.equalsIgnoreCase("portrait")){
user.setFace(xmlParser.nextText());
}else if(tag.equalsIgnoreCase("jointime")){
user.setJointime(xmlParser.nextText());
}else if(tag.equalsIgnoreCase("gender")){
user.setGender(xmlParser.nextText());
}else if(tag.equalsIgnoreCase("devplatform")){
user.setDevplatform(xmlParser.nextText());
}else if(tag.equalsIgnoreCase("expertise")){
user.setExpertise(xmlParser.nextText());
}else if(tag.equalsIgnoreCase("relation")){
user.setRelation(StringUtils.toInt(xmlParser.nextText(), 0));
}else if(tag.equalsIgnoreCase("latestonline")){
user.setLatestonline(xmlParser.nextText());
}
}
else if (active != null)
{
if(tag.equalsIgnoreCase("id"))
{
active.id = StringUtils.toInt(xmlParser.nextText(),0);
}
else if(depth==4 && tag.equalsIgnoreCase("portrait"))
{
active.setFace(xmlParser.nextText());
}
else if(tag.equalsIgnoreCase("message"))
{
active.setMessage(xmlParser.nextText());
}
else if(tag.equalsIgnoreCase("author"))
{
active.setAuthor(xmlParser.nextText());
}
else if(tag.equalsIgnoreCase("authorid"))
{
active.setAuthorId(StringUtils.toInt(xmlParser.nextText(),0));
}
else if(tag.equalsIgnoreCase("catalog"))
{
active.setActiveType(StringUtils.toInt(xmlParser.nextText(),0));
}
else if(tag.equalsIgnoreCase("objectID"))
{
active.setObjectId(StringUtils.toInt(xmlParser.nextText(),0));
}
else if(tag.equalsIgnoreCase("objecttype"))
{
active.setObjectType(StringUtils.toInt(xmlParser.nextText(),0));
}
else if(tag.equalsIgnoreCase("objectcatalog"))
{
active.setObjectCatalog(StringUtils.toInt(xmlParser.nextText(),0));
}
else if(tag.equalsIgnoreCase("objecttitle"))
{
active.setObjectTitle(xmlParser.nextText());
}
else if(tag.equalsIgnoreCase("objectreply"))
{
active.setObjectReply(new ObjectReply());
}
else if(active.getObjectReply()!=null && tag.equalsIgnoreCase("objectname"))
{
active.getObjectReply().objectName = xmlParser.nextText();
}
else if(active.getObjectReply()!=null && tag.equalsIgnoreCase("objectbody"))
{
active.getObjectReply().objectBody = xmlParser.nextText();
}
else if(tag.equalsIgnoreCase("commentCount"))
{
active.setCommentCount(StringUtils.toInt(xmlParser.nextText(),0));
}
else if(tag.equalsIgnoreCase("pubDate"))
{
active.setPubDate(xmlParser.nextText());
}
else if(tag.equalsIgnoreCase("tweetimage"))
{
active.setTweetimage(xmlParser.nextText());
}
else if(tag.equalsIgnoreCase("appclient"))
{
active.setAppClient(StringUtils.toInt(xmlParser.nextText(),0));
}
else if(tag.equalsIgnoreCase("url"))
{
active.setUrl(xmlParser.nextText());
}
}
//通知信息
else if(tag.equalsIgnoreCase("notice"))
{
uinfo.setNotice(new Notice());
}
else if(uinfo.getNotice() != null)
{
if(tag.equalsIgnoreCase("atmeCount"))
{
uinfo.getNotice().setAtmeCount(StringUtils.toInt(xmlParser.nextText(),0));
}
else if(tag.equalsIgnoreCase("msgCount"))
{
uinfo.getNotice().setMsgCount(StringUtils.toInt(xmlParser.nextText(),0));
}
else if(tag.equalsIgnoreCase("reviewCount"))
{
uinfo.getNotice().setReviewCount(StringUtils.toInt(xmlParser.nextText(),0));
}
else if(tag.equalsIgnoreCase("newFansCount"))
{
uinfo.getNotice().setNewFansCount(StringUtils.toInt(xmlParser.nextText(),0));
}
}
break;
case XmlPullParser.END_TAG:
//如果遇到标签结束,则把对象添加进集合中
if (tag.equalsIgnoreCase("user") && user != null) {
uinfo.user = user;
user = null;
}
else if (tag.equalsIgnoreCase("active") && active != null) {
uinfo.getActivelist().add(active);
active = null;
}
break;
}
//如果xml没有结束,则导航到下一个节点
evtType=xmlParser.next();
}
} catch (XmlPullParserException e) {
throw AppException.xml(e);
} finally {
inputStream.close();
}
return uinfo;
}
}