/* © 2010 Stephan Reichholf <stephan at reichholf dot net>
*
* Licensed under the Create-Commons Attribution-Noncommercial-Share Alike 3.0 Unported
* http://creativecommons.org/licenses/by-nc-sa/3.0/
*/
package net.reichholf.dreamdroid.parsers.enigma2.saxhandler;
import net.reichholf.dreamdroid.helpers.DateTime;
import net.reichholf.dreamdroid.helpers.ExtendedHashMap;
import net.reichholf.dreamdroid.helpers.Python;
import net.reichholf.dreamdroid.helpers.enigma2.Movie;
import org.xml.sax.Attributes;
/**
* @author sreichholf
*
*/
public class E2MovieListHandler extends E2ListHandler {
protected static final String TAG_E2MOVIE = "e2movie";
protected static final String TAG_E2SERVICEREFERENCE = "e2servicereference";
protected static final String TAG_E2TITLE = "e2title";
protected static final String TAG_E2DESCRIPTION = "e2description";
protected static final String TAG_E2DESCRIPTIONEXTENDED = "e2descriptionextended";
protected static final String TAG_E2SERVICENAME = "e2servicename";
protected static final String TAG_E2TIME = "e2time";
protected static final String TAG_E2LENGTH = "e2length";
protected static final String TAG_E2TAGS = "e2tags";
protected static final String TAG_E2FILENAME = "e2filename";
protected static final String TAG_E2FILESIZE = "e2filesize";
private boolean inMovie = false;
private boolean inReference = false;
private boolean inTitle = false;
private boolean inDescription = false;
private boolean inDescriptionEx = false;
private boolean inName = false;
private boolean inTime = false;
private boolean inLength = false;
private boolean inTags = false;
private boolean inFilename = false;
private boolean inFilesize = false;
private ExtendedHashMap mMovie;
/*
* (non-Javadoc)
*
* @see org.xml.sax.helpers.DefaultHandler#startElement(java.lang.String,
* java.lang.String, java.lang.String, org.xml.sax.Attributes)
*/
@Override
public void startElement(String namespaceUri, String localName, String qName, Attributes attrs) {
switch (localName) {
case TAG_E2MOVIE:
inMovie = true;
mMovie = new ExtendedHashMap();
break;
case TAG_E2SERVICEREFERENCE:
inReference = true;
break;
case TAG_E2TITLE:
inTitle = true;
break;
case TAG_E2DESCRIPTION:
inDescription = true;
break;
case TAG_E2DESCRIPTIONEXTENDED:
inDescriptionEx = true;
break;
case TAG_E2SERVICENAME:
inName = true;
break;
case TAG_E2TIME:
inTime = true;
break;
case TAG_E2LENGTH:
inLength = true;
break;
case TAG_E2TAGS:
inTags = true;
break;
case TAG_E2FILENAME:
inFilename = true;
break;
case TAG_E2FILESIZE:
inFilesize = true;
break;
}
}
/*
* (non-Javadoc)
*
* @see org.xml.sax.helpers.DefaultHandler#endElement(java.lang.String,
* java.lang.String, java.lang.String)
*/
@Override
public void endElement(String namespaceURI, String localName, String qName) {
switch (localName) {
case TAG_E2MOVIE:
inMovie = false;
mList.add(mMovie);
break;
case TAG_E2SERVICEREFERENCE:
inReference = false;
break;
case TAG_E2TITLE:
inTitle = false;
break;
case TAG_E2DESCRIPTION:
inDescription = false;
break;
case TAG_E2DESCRIPTIONEXTENDED:
inDescriptionEx = false;
break;
case TAG_E2SERVICENAME:
inName = false;
break;
case TAG_E2TIME:
inTime = false;
break;
case TAG_E2LENGTH:
inLength = false;
break;
case TAG_E2TAGS:
inTags = false;
break;
case TAG_E2FILENAME:
inFilename = false;
break;
case TAG_E2FILESIZE:
inFilesize = false;
break;
}
}
/*
* (non-Javadoc)
*
* @see org.xml.sax.helpers.DefaultHandler#characters(char[], int, int)
*/
@Override
public void characters(char ch[], int start, int length) {
String value = new String(ch, start, length);
if (inMovie) {
if (inReference) {
mMovie.putOrConcat(Movie.KEY_REFERENCE, value);
} else if (inTitle) {
mMovie.putOrConcat(Movie.KEY_TITLE, value);
} else if (inDescription) {
mMovie.putOrConcat(Movie.KEY_DESCRIPTION, value);
} else if (inDescriptionEx) {
mMovie.putOrConcat(Movie.KEY_DESCRIPTION_EXTENDED, value);
} else if (inName) {
mMovie.putOrConcat(Movie.KEY_SERVICE_NAME, value.replaceAll("\\p{Cntrl}", "")); // remove illegal chars
} else if (inTime) {
mMovie.putOrConcat(Movie.KEY_TIME, value);
mMovie.putOrConcat(Movie.KEY_TIME_READABLE, DateTime.getDateTimeString(value));
} else if (inLength) {
mMovie.putOrConcat(Movie.KEY_LENGTH, value);
} else if (inTags) {
mMovie.putOrConcat(Movie.KEY_TAGS, value);
} else if (inFilename) {
mMovie.putOrConcat(Movie.KEY_FILE_NAME, value);
} else if (inFilesize) {
mMovie.putOrConcat(Movie.KEY_FILE_SIZE, value);
if(Python.NONE.equals(value))
value = "0";
Long size = Long.valueOf(value);
size /= (1024 * 1024);
String size_readable = size + " MB";
mMovie.putOrConcat(Movie.KEY_FILE_SIZE_READABLE, size_readable);
}
}
}
}