package com.bluevia.android.directory.parser;
import java.io.IOException;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import android.util.Log;
import com.bluevia.android.commons.parser.ParseException;
import com.bluevia.android.commons.parser.xml.XmlParserSerializerUtils;
import com.bluevia.android.directory.data.AccessInfo;
/**
* Xml parser for XmlDirectoryUserAccess entities.
*
* @author Telefonica I+D
*
*/
class XmlDirectoryAccessInfoParser implements DirectoryEntityParser {
private static final String TAG = "XmlDirectoryUserAccessParser";
/**
* @see com.bluevia.android.commons.parser.IParser#parse(java.io.InputStream)
*/
public AccessInfo parse(XmlPullParser parser) throws ParseException {
AccessInfo userAccessInfo= new AccessInfo();
int eventType;
try {
eventType = parser.next();
Log.e(TAG, "Expected event START_TAG: Actual event: " + XmlPullParser.TYPES[eventType]);
} catch (XmlPullParserException xppe) {
throw new ParseException("Could not read next event.", xppe);
} catch (IOException ioe) {
throw new ParseException("Could not read next event.", ioe);
}
while (eventType != XmlPullParser.END_DOCUMENT){
String nameSpace = parser.getName();
switch (eventType){
case XmlPullParser.END_TAG:
if (XmlConstants.ACCESSINFO.equals(nameSpace)) {
return userAccessInfo;
}
break;
case XmlPullParser.START_TAG:
if(nameSpace.equals(XmlConstants.ACCESSINFO_ACCESSTYPE)){
try{
userAccessInfo.setAccessType(XmlParserSerializerUtils.getChildText(parser));
} catch(XmlPullParserException e){
throw new ParseException("Problem with getChild", e);
}
}
if(nameSpace.equals(XmlConstants.ACCESSINFO_APN)){
try{
userAccessInfo.setAPN(XmlParserSerializerUtils.getChildText(parser));
}catch(XmlPullParserException e){
throw new ParseException("Problem with getChild", e);
}
}
if(nameSpace.equals(XmlConstants.ACCESSINFO_ROAMING)){
try{
String roam = XmlParserSerializerUtils.getChildText(parser);
if(roam.equals("yes"))
userAccessInfo.setRoaming(true);
else
userAccessInfo.setRoaming(false);
}catch(XmlPullParserException e){
throw new ParseException("Problem with getChild", e);
}
}
}
try{
eventType = parser.next();
}catch (XmlPullParserException e) {
throw new ParseException("Could not read next event.", e);
} catch (IOException e) {
throw new ParseException("Could not read next event.", e);
}
}
return null;
}
}