/**
*
*/
package com.photoshare.msg;
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.utils.FileTools;
import com.photoshare.utils.Utils;
/**
* @author Aron
*
* MessageReader read failed messages from xml file.
*
*/
public class MessageReader implements XMLParser<MessageItem> {
private static final String MSGS_TAG = "messages";
/*
* (non-Javadoc)
*
* @see com.photoshare.common.XMLParser#WriteXML(java.lang.String,
* java.lang.String)
*/
public void WriteXML(String path, String file) throws Exception {
}
/*
* (non-Javadoc)
*
* @see com.photoshare.common.XMLParser#loadListFromXML(java.lang.String,
* java.lang.String)
*/
public List<MessageItem> loadListFromXML(String path, String file)
throws Exception {
List<MessageItem> list = new ArrayList<MessageItem>();
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();
String name = null;
String url = null;
String descp = null;
String type = null;
long id = 0;
boolean status = false;
while (eventType != XmlPullParser.END_DOCUMENT) {
switch (eventType) {
case XmlPullParser.START_DOCUMENT:
break;
case XmlPullParser.START_TAG:
if (parser.getName().equals(MessageItem.MSG_DESCRIPTION)) {
descp = parser.nextText();
} else if (parser.getName().equals(
MessageItem.MSG_IMAGE_URL)) {
url = parser.nextText();
} else if (parser.getName().equals(MessageItem.MSG_NAME)) {
name = parser.nextText();
} else if (parser.getName().equals(MessageItem.MSG_TYPE)) {
type = parser.nextText();
} else if (parser.getName()
.equals(MessageItem.MSG_EVENT_ID)) {
id = Long.parseLong(parser.nextText());
} else if (parser.getName().equals(
MessageItem.MSG_BTN_STATUS)) {
status = Boolean.parseBoolean(parser.nextText());
}
case XmlPullParser.END_TAG:
if (parser.getName().equals(MessageItem.MSG_TAG)) {
MessageItem item = new MessageItem(name, descp, url,
MsgType.SWITCH(type), id, status);
list.add(item);
}
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 list;
}
/*
* (non-Javadoc)
*
* @see com.photoshare.common.XMLParser#WriteXML(java.lang.String,
* java.lang.String, java.lang.Object)
*/
public void WriteXML(String path, String file, MessageItem type)
throws Exception {
}
/*
* (non-Javadoc)
*
* @see com.photoshare.common.XMLParser#loadFromXML(java.lang.String,
* java.lang.String)
*/
public MessageItem loadFromXML(String path, String file) throws Exception {
return null;
}
/*
* (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<MessageItem> list)
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("", MSGS_TAG);
for (MessageItem item : list) {
serializer.startTag("", MessageItem.MSG_TAG);
serializer.startTag("", MessageItem.MSG_NAME);
serializer.text(item.getMsgName());
serializer.endTag("", MessageItem.MSG_NAME);
serializer.startTag("", MessageItem.MSG_DESCRIPTION);
serializer.text(item.getMsgDescription());
serializer.endTag("", MessageItem.MSG_DESCRIPTION);
serializer.startTag("", MessageItem.MSG_IMAGE_URL);
serializer.text(item.getMsgPhotoUrl());
serializer.endTag("", MessageItem.MSG_IMAGE_URL);
serializer.startTag("", MessageItem.MSG_TYPE);
serializer.text(item.getMsgType().toString());
serializer.endTag("", MessageItem.MSG_TYPE);
serializer.startTag("", MessageItem.MSG_EVENT_ID);
serializer.text(item.getEventId() + "");
serializer.endTag("", MessageItem.MSG_EVENT_ID);
serializer.startTag("", MessageItem.MSG_BTN_STATUS);
serializer.text(item.isBtnStatus() + "");
serializer.endTag("", MessageItem.MSG_BTN_STATUS);
serializer.endTag("", MessageItem.MSG_TAG);
}
serializer.endTag("", MSGS_TAG);
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(MessageItem 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<MessageItem> list, String path, String file)
throws Exception {
list = loadListFromXML(path, file);
}
}