package com.android.mms.dom;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import android.util.Config;
import android.util.Log;
import com.android.mms.dom.WbxmlParser;
import com.android.mms.transaction.OtaConfigVO;
import com.android.mms.transaction.WapPushMsg;
public abstract class OtaParser {
/**
* The log tag.
*/
static final String LOG_TAG = "OTAParser";
private static final boolean DEBUG = true;
private static final boolean LOCAL_LOGV = DEBUG ? Config.LOGD : Config.LOGV;
/**
* MIME
*/
public static final int OTA_OMA_DATA = 1; // Moto OMA
public static final int OTA_NOKIA_DATA1 = 2; // Nokia browser settings
public static final int OTA_NOKIA_DATA2 = 3; // Nokia Browser bookmarks
public static final int OTA_MSG_OK=0;
public static final int OTA_MSG_ERROR=1;
public static final int OTA_MSG_INVALIDATE=2;
/**
* The wap push data.
*/
private ByteArrayInputStream mOTADataStream = null;
public List<OtaConfigVO> data = new ArrayList();
WbxmlParser mParser = new WbxmlParser(); // Parser
String currentTagName;
int otaMimeType;
/**
* Constructor.
*
* @param wapPushDataStream wap push data to be parsed
*/
public OtaParser(byte[] pushDataStream, int mimeType) {
mOTADataStream = new ByteArrayInputStream(pushDataStream);
otaMimeType = mimeType;
}
/**
* @param tagName
* @param oc
*/
abstract void elementParser(String tagName);
abstract public int getParseData();
/**
* Parse the wap push. type the push message type WAP_PUSH_TYPE_SI or
* WAP_PUSH_TYPE_SL
*
* @return the push structure if parsing successfully. null if parsing error
* happened or mandatory fields are not set.
*/
public int parse() {
String tagName = null;
if (mOTADataStream == null) {
Log.e(LOG_TAG, "mWapPushDataStream is not set!");
return OTA_MSG_ERROR;
}
try {
mParser.setInput(mOTADataStream, null);
if (LOCAL_LOGV) {
Log.i(LOG_TAG, "Document charset : " + mParser.getInputEncoding());
}
int eventType = mParser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
switch (eventType) {
case XmlPullParser.START_DOCUMENT:
Log.i(LOG_TAG, "Start document");
break;
case XmlPullParser.END_DOCUMENT:
Log.i(LOG_TAG, "End document");
break;
case XmlPullParser.START_TAG:
Log.i(LOG_TAG, "Start tag = " + mParser.getName());
elementParser(mParser.getName());
break;
case XmlPullParser.END_TAG:
Log.i(LOG_TAG, "End tag = " + mParser.getName());
break;
case XmlPullParser.TEXT:
Log.i(LOG_TAG, "Text = " + mParser.getText());
break;
default:
Log.i(LOG_TAG, "unknown event type = " + eventType);
break;
}
if(eventType==XmlPullParser.END_TAG && "wap-provisioningdoc".equals(mParser.getName())){
break;
}
eventType = mParser.next();
}
} catch (IOException e) {
if (LOCAL_LOGV) {
Log.e(LOG_TAG, e.toString());
}
return OTA_MSG_ERROR;
} catch (XmlPullParserException e) {
if (LOCAL_LOGV) {
Log.e(LOG_TAG, e.toString());
}
return OTA_MSG_ERROR;
}
return getParseData();
}
}