/** * */ package com.photoshare.service.photos; import java.io.BufferedWriter; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.List; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlPullParserFactory; import org.xmlpull.v1.XmlSerializer; import android.util.Xml; import com.photoshare.common.XMLParser; import com.photoshare.service.comments.CommentInfo; import com.photoshare.utils.FileTools; import com.photoshare.utils.Utils; /** * @author czj_yy * */ public class PhotoBeanReader implements XMLParser<PhotoBean> { /* * (non-Javadoc) * * @see com.photoshare.common.XMLParser#loadFromXML(java.lang.String, * java.lang.String) */ public PhotoBean loadFromXML(String path, String file) throws Exception { PhotoBean photo = new PhotoBean(); ArrayList<CommentInfo> comments = new ArrayList<CommentInfo>(); try { XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); XmlPullParser parser = factory.newPullParser(); InputStream stream = FileTools.ReadFile(path, file); if (stream == null) { return null; } parser.setInput(stream, Utils.ENCODE_UTF_8); int eventType = parser.getEventType(); long cid = 0; long uid = 0; String uname = ""; String content = ""; String time = ""; CommentInfo comment = null; while (eventType != XmlPullParser.END_DOCUMENT) { switch (eventType) { case XmlPullParser.START_DOCUMENT: break; case XmlPullParser.START_TAG: if (parser.getName().equals(PhotoBean.KEY_CAPTION)) { photo.setCaption(parser.nextText()); } else if (parser.getName().equals( PhotoBean.KEY_COMMENT_COUNT)) { photo.setCommentCount(Integer.parseInt(parser .nextText())); } else if (parser.getName().equals( PhotoBean.KEY_CREATE_TIME)) { photo.setCreateTime(parser.nextText()); } else if (parser.getName().equals(PhotoBean.KEY_LARGE_URL)) { photo.setUrlLarge(parser.nextText()); } else if (parser.getName().equals( PhotoBean.KEY_LIKES_COUNT)) { photo.setLikesCount(Integer.parseInt(parser.nextText())); } else if (parser.getName() .equals(PhotoBean.KEY_MIDDLE_URL)) { photo.setUrlHead(parser.nextText()); } else if (parser.getName().equals(PhotoBean.KEY_PID)) { photo.setPid(Long.parseLong(parser.nextText())); } else if (parser.getName().equals(PhotoBean.KEY_TINY_URL)) { photo.setUrlTiny(parser.nextText()); } else if (parser.getName().equals(PhotoBean.KEY_UID)) { photo.setUid(Long.parseLong(parser.nextText())); } else if (parser.getName().equals(PhotoBean.KEY_UNAME)) { photo.setUname(parser.nextText()); } else if (parser.getName().equals(PhotoBean.KEY_UHEAD_URL)) { photo.setTinyHeadUrl(parser.nextText()); } else if (parser.getName().equals(PhotoBean.KEY_COMMENTS)) { } else if (parser.getName().equals( PhotoBean.ABSOLUTE_PATH_TAG)) { photo.setAbsolutePath(parser.nextText()); } else if (parser.getName().equals(CommentInfo.KEY_COMMENT)) { } else if (parser.getName().equals(CommentInfo.KEY_CID)) { cid = Long.parseLong(parser.nextText()); } else if (parser.getName().equals(CommentInfo.KEY_CONTENT)) { content = parser.nextText(); } else if (parser.getName().equals( CommentInfo.KEY_CREATE_TIME)) { time = parser.nextText(); } else if (parser.getName().equals(CommentInfo.KEY_UID)) { uid = Long.parseLong(parser.nextText()); } else if (parser.getName().equals(CommentInfo.KEY_UNAME)) { uname = parser.nextText(); } else if (parser.getName().equals(PhotoBean.KEY_IS_LIKE)) { photo.setLike(Boolean.parseBoolean(parser.nextText())); } break; case XmlPullParser.END_TAG: if (parser.getName().equals(CommentInfo.KEY_COMMENT)) { comment = new CommentInfo.CommentBuilder().Cid(cid) .Comment(content).CreateTime(time) .Pid(photo.getPid()).UName(uname).Uid(uid) .build(); comments.add(comment); } else if (parser.getName().equals(PhotoBean.KEY_PHOTO)) { photo.setComments(comments); } break; } eventType = parser.next(); } } catch (NumberFormatException e) { throw new Exception(e); } catch (XmlPullParserException e) { throw new Exception(e); } catch (IOException e) { throw new Exception(e); } return photo; } /* * (non-Javadoc) * * @see com.photoshare.common.XMLParser#loadListFromXML(java.lang.String, * java.lang.String) */ public List<PhotoBean> loadListFromXML(String path, String file) throws Exception { List<PhotoBean> photos = new ArrayList<PhotoBean>(); try { XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); XmlPullParser parser = factory.newPullParser(); InputStream stream = FileTools.ReadFile(path, file); if (stream == null) { return null; } PhotoBean photo = null; ArrayList<CommentInfo> comments = new ArrayList<CommentInfo>(); parser.setInput(stream, Utils.ENCODE_UTF_8); int eventType = parser.getEventType(); long cid = 0; long uid = 0; String uname = ""; String content = ""; String time = ""; CommentInfo comment = null; while (eventType != XmlPullParser.END_DOCUMENT) { switch (eventType) { case XmlPullParser.START_DOCUMENT: break; case XmlPullParser.START_TAG: if (parser.getName().equals(PhotoBean.KEY_PHOTO)) { photo = new PhotoBean(); } else if (parser.getName().equals(PhotoBean.KEY_CAPTION)) { photo.setCaption(parser.nextText()); } else if (parser.getName().equals( PhotoBean.KEY_COMMENT_COUNT)) { photo.setCommentCount(Integer.parseInt(parser .nextText())); } else if (parser.getName().equals( PhotoBean.KEY_CREATE_TIME)) { photo.setCreateTime(parser.nextText()); } else if (parser.getName().equals(PhotoBean.KEY_LARGE_URL)) { photo.setUrlLarge(parser.nextText()); } else if (parser.getName().equals( PhotoBean.KEY_LIKES_COUNT)) { photo.setLikesCount(Integer.parseInt(parser.nextText())); } else if (parser.getName() .equals(PhotoBean.KEY_MIDDLE_URL)) { photo.setUrlHead(parser.nextText()); } else if (parser.getName().equals(PhotoBean.KEY_PID)) { photo.setPid(Long.parseLong(parser.nextText())); } else if (parser.getName().equals(PhotoBean.KEY_TINY_URL)) { photo.setUrlTiny(parser.nextText()); } else if (parser.getName().equals(PhotoBean.KEY_UID)) { photo.setUid(Long.parseLong(parser.nextText())); } else if (parser.getName().equals(PhotoBean.KEY_UNAME)) { photo.setUname(parser.nextText()); } else if (parser.getName().equals(PhotoBean.KEY_UHEAD_URL)) { photo.setTinyHeadUrl(parser.nextText()); } else if (parser.getName().equals(PhotoBean.KEY_COMMENTS)) { } else if (parser.getName().equals( PhotoBean.ABSOLUTE_PATH_TAG)) { photo.setAbsolutePath(parser.nextText()); } else if (parser.getName().equals(CommentInfo.KEY_COMMENT)) { } else if (parser.getName().equals(CommentInfo.KEY_CID)) { cid = Long.parseLong(parser.nextText()); } else if (parser.getName().equals(CommentInfo.KEY_CONTENT)) { content = parser.nextText(); } else if (parser.getName().equals( CommentInfo.KEY_CREATE_TIME)) { time = parser.nextText(); } else if (parser.getName().equals(CommentInfo.KEY_UID)) { uid = Long.parseLong(parser.nextText()); } else if (parser.getName().equals(CommentInfo.KEY_UNAME)) { uname = parser.nextText(); } else if (parser.getName().equals(PhotoBean.KEY_IS_LIKE)) { photo.setLike(Boolean.parseBoolean(parser.nextText())); } break; case XmlPullParser.END_TAG: if (parser.getName().equals(CommentInfo.KEY_COMMENT)) { comment = new CommentInfo.CommentBuilder().Cid(cid) .Comment(content).CreateTime(time) .Pid(photo.getPid()).UName(uname).Uid(uid) .build(); comments.add(comment); } else if (parser.getName().equals(PhotoBean.KEY_PHOTO)) { photo.setComments(comments); photos.add(photo); } break; } eventType = parser.next(); } } catch (NumberFormatException e) { throw new Exception(e); } catch (XmlPullParserException e) { throw new Exception(e); } catch (IOException e) { throw new Exception(e); } return photos; } /* * (non-Javadoc) * * @see com.photoshare.common.XMLParser#WriteXML(java.lang.String, * java.lang.String, java.lang.Object) */ public void WriteXML(String path, String file, PhotoBean photo) throws Exception { try { OutputStream outStream = FileTools.OpenFile(path, file); OutputStreamWriter outStreamWriter = new OutputStreamWriter( outStream, "UTF-8"); BufferedWriter writer = new BufferedWriter(outStreamWriter); XmlSerializer serializer = Xml.newSerializer(); serializer.setOutput(writer); // <?xml version=”1.0″ encoding=”UTF-8″ standalone=”yes”?> serializer.startDocument(Utils.ENCODE_UTF_8, true); try { serializer.startTag("", PhotoBean.KEY_PHOTO); serializer.startTag("", PhotoBean.KEY_UID); serializer.text("" + photo.getUid()); serializer.endTag("", PhotoBean.KEY_UID); serializer.startTag("", PhotoBean.KEY_UNAME); serializer.text(photo.getUname()); serializer.endTag("", PhotoBean.KEY_UNAME); serializer.startTag("", PhotoBean.KEY_UHEAD_URL); serializer.text(photo.getTinyHeadUrl()); serializer.endTag("", PhotoBean.KEY_UHEAD_URL); serializer.startTag("", PhotoBean.KEY_CAPTION); serializer.text(photo.getCaption()); serializer.endTag("", PhotoBean.KEY_CAPTION); serializer.startTag("", PhotoBean.KEY_COMMENT_COUNT); serializer.text("" + photo.getCommentCount()); serializer.endTag("", PhotoBean.KEY_COMMENT_COUNT); serializer.startTag("", PhotoBean.KEY_COMMENTS); for (CommentInfo info : photo.getComments()) { serializer.startTag("", CommentInfo.KEY_COMMENT); serializer.startTag("", CommentInfo.KEY_UNAME); serializer.text(info.getUname()); serializer.endTag("", CommentInfo.KEY_UNAME); serializer.startTag("", CommentInfo.KEY_UID); serializer.text(info.getUid() + ""); serializer.endTag("", CommentInfo.KEY_UID); serializer.startTag("", CommentInfo.KEY_CID); serializer.text(info.getCid() + ""); serializer.endTag("", CommentInfo.KEY_CID); serializer.startTag("", CommentInfo.KEY_CONTENT); serializer.text(info.getComment()); serializer.endTag("", CommentInfo.KEY_CONTENT); serializer.startTag("", CommentInfo.KEY_CREATE_TIME); serializer.text(info.getCreateTime()); serializer.endTag("", CommentInfo.KEY_CREATE_TIME); serializer.endTag("", CommentInfo.KEY_COMMENT); } serializer.endTag("", PhotoBean.KEY_COMMENTS); serializer.startTag("", PhotoBean.KEY_CREATE_TIME); serializer.text("" + photo.getCreateTime()); serializer.endTag("", PhotoBean.KEY_CREATE_TIME); serializer.startTag("", PhotoBean.ABSOLUTE_PATH_TAG); serializer.text(photo.getAbsolutePath()); serializer.endTag("", PhotoBean.ABSOLUTE_PATH_TAG); serializer.startTag("", PhotoBean.KEY_LARGE_URL); serializer.text(photo.getUrlLarge()); serializer.endTag("", PhotoBean.KEY_LARGE_URL); serializer.startTag("", PhotoBean.KEY_LIKES_COUNT); serializer.text("" + photo.getLikesCount()); serializer.endTag("", PhotoBean.KEY_LIKES_COUNT); serializer.startTag("", PhotoBean.KEY_IS_LIKE); serializer.text("" + photo.isLike()); serializer.endTag("", PhotoBean.KEY_IS_LIKE); serializer.startTag("", PhotoBean.KEY_MIDDLE_URL); serializer.text(photo.getUrlHead()); serializer.endTag("", PhotoBean.KEY_MIDDLE_URL); serializer.startTag("", PhotoBean.KEY_PID); serializer.text("" + photo.getPid()); serializer.endTag("", PhotoBean.KEY_PID); serializer.startTag("", PhotoBean.KEY_TINY_URL); serializer.text(photo.getUrlTiny()); serializer.endTag("", PhotoBean.KEY_TINY_URL); serializer.endTag("", PhotoBean.KEY_PHOTO); } catch (IllegalArgumentException e) { throw new Exception(e); } catch (IllegalStateException e) { throw new Exception(e); } catch (IOException e) { throw new Exception(e); } serializer.endDocument(); writer.flush(); writer.close(); } catch (FileNotFoundException e) { throw new Exception(e); } catch (UnsupportedEncodingException e) { throw new Exception(e); } catch (IOException e) { throw new Exception(e); } } /* * (non-Javadoc) * * @see com.photoshare.common.XMLParser#WriteXML(java.lang.String, * java.lang.String, java.util.List) */ public void WriteXML(String path, String file, List<PhotoBean> photos) throws Exception { try { OutputStream outStream = FileTools.OpenFile(path, file); OutputStreamWriter outStreamWriter = new OutputStreamWriter( outStream, "UTF-8"); BufferedWriter writer = new BufferedWriter(outStreamWriter); XmlSerializer serializer = Xml.newSerializer(); serializer.setOutput(writer); // <?xml version=”1.0″ encoding=”UTF-8″ standalone=”yes”?> serializer.startDocument(Utils.ENCODE_UTF_8, true); serializer.startTag("", PhotoBean.KEY_PHOTOS); try { for (PhotoBean photo : photos) { serializer.startTag("", PhotoBean.KEY_PHOTO); serializer.startTag("", PhotoBean.KEY_UID); serializer.text("" + photo.getUid()); serializer.endTag("", PhotoBean.KEY_UID); serializer.startTag("", PhotoBean.KEY_UNAME); serializer.text(photo.getUname()); serializer.endTag("", PhotoBean.KEY_UNAME); serializer.startTag("", PhotoBean.KEY_UHEAD_URL); serializer.text(photo.getTinyHeadUrl()); serializer.endTag("", PhotoBean.KEY_UHEAD_URL); serializer.startTag("", PhotoBean.KEY_CAPTION); serializer.text(photo.getCaption()); serializer.endTag("", PhotoBean.KEY_CAPTION); serializer.startTag("", PhotoBean.KEY_COMMENT_COUNT); serializer.text("" + photo.getCommentCount()); serializer.endTag("", PhotoBean.KEY_COMMENT_COUNT); serializer.startTag("", PhotoBean.KEY_COMMENTS); for (CommentInfo info : photo.getComments()) { serializer.startTag("", CommentInfo.KEY_COMMENT); serializer.startTag("", CommentInfo.KEY_UNAME); serializer.text(info.getUname()); serializer.endTag("", CommentInfo.KEY_UNAME); serializer.startTag("", CommentInfo.KEY_UID); serializer.text(info.getUid() + ""); serializer.endTag("", CommentInfo.KEY_UID); serializer.startTag("", CommentInfo.KEY_CID); serializer.text(info.getCid() + ""); serializer.endTag("", CommentInfo.KEY_CID); serializer.startTag("", CommentInfo.KEY_CONTENT); serializer.text(info.getComment()); serializer.endTag("", CommentInfo.KEY_CONTENT); serializer.startTag("", CommentInfo.KEY_CREATE_TIME); serializer.text(info.getCreateTime()); serializer.endTag("", CommentInfo.KEY_CREATE_TIME); serializer.endTag("", CommentInfo.KEY_COMMENT); } serializer.endTag("", PhotoBean.KEY_COMMENTS); serializer.startTag("", PhotoBean.KEY_CREATE_TIME); serializer.text("" + photo.getCreateTime()); serializer.endTag("", PhotoBean.KEY_CREATE_TIME); serializer.startTag("", PhotoBean.ABSOLUTE_PATH_TAG); serializer.text(photo.getAbsolutePath()); serializer.endTag("", PhotoBean.ABSOLUTE_PATH_TAG); serializer.startTag("", PhotoBean.KEY_LARGE_URL); serializer.text(photo.getUrlLarge()); serializer.endTag("", PhotoBean.KEY_LARGE_URL); serializer.startTag("", PhotoBean.KEY_LIKES_COUNT); serializer.text("" + photo.getLikesCount()); serializer.endTag("", PhotoBean.KEY_LIKES_COUNT); serializer.startTag("", PhotoBean.KEY_IS_LIKE); serializer.text("" + photo.isLike()); serializer.endTag("", PhotoBean.KEY_IS_LIKE); serializer.startTag("", PhotoBean.KEY_MIDDLE_URL); serializer.text(photo.getUrlHead()); serializer.endTag("", PhotoBean.KEY_MIDDLE_URL); serializer.startTag("", PhotoBean.KEY_PID); serializer.text("" + photo.getPid()); serializer.endTag("", PhotoBean.KEY_PID); serializer.startTag("", PhotoBean.KEY_TINY_URL); serializer.text(photo.getUrlTiny()); serializer.endTag("", PhotoBean.KEY_TINY_URL); serializer.endTag("", PhotoBean.KEY_PHOTO); } serializer.endTag("", PhotoBean.KEY_PHOTOS); } catch (IllegalArgumentException e) { throw new Exception(e); } catch (IllegalStateException e) { throw new Exception(e); } catch (IOException e) { throw new Exception(e); } serializer.endDocument(); writer.flush(); writer.close(); } catch (FileNotFoundException e) { throw new Exception(e); } catch (UnsupportedEncodingException e) { throw new Exception(e); } catch (IOException e) { throw new Exception(e); } } /* * (non-Javadoc) * * @see com.photoshare.common.XMLParser#loadFromXML(java.lang.Object, * java.lang.String, java.lang.String) */ public void loadFromXML(PhotoBean obj, String path, String file) throws Exception { obj = loadFromXML(path, file); } /* * (non-Javadoc) * * @see com.photoshare.common.XMLParser#loadListFromXML(java.util.List, * java.lang.String, java.lang.String) */ public void loadListFromXML(List<PhotoBean> list, String path, String file) throws Exception { list.addAll(loadListFromXML(path, file)); } }