/*
* NetcastChannelParser
* Connect SDK
*
* Copyright (c) 2014 LG Electronics.
* Created by Hyun Kook Khang on 19 Jan 2014
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.connectsdk.service.netcast;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import com.connectsdk.core.ChannelInfo;
public class NetcastChannelParser extends DefaultHandler {
public JSONArray channelArray;
public JSONObject channel;
public String value;
public final String CHANNEL_TYPE = "chtype";
public final String MAJOR = "major";
public final String MINOR = "minor";
public final String DISPLAY_MAJOR = "displayMajor";
public final String DISPLAY_MINOR = "displayMinor";
public final String SOURCE_INDEX = "sourceIndex";
public final String PHYSICAL_NUM = "physicalNum";
public final String CHANNEL_NAME = "chname";
public final String PROGRAM_NAME = "progName";
public final String AUDIO_CHANNEL = "audioCh";
public final String INPUT_SOURCE_NAME = "inputSourceName";
public final String INPUT_SOURCE_TYPE = "inputSourceType";
public final String LABEL_NAME = "labelName";
public final String INPUT_SOURCE_INDEX = "inputSourceIdx";
public NetcastChannelParser() {
channelArray = new JSONArray();
value = null;
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
if (qName.equalsIgnoreCase("data")) {
channel = new JSONObject();
}
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
try {
if (qName.equalsIgnoreCase("data")) {
channelArray.put(channel);
}
else if (qName.equalsIgnoreCase(CHANNEL_TYPE)) {
channel.put("channelModeName", value);
}
else if (qName.equalsIgnoreCase(MAJOR)) {
channel.put("majorNumber", Integer.parseInt(value));
}
else if (qName.equalsIgnoreCase(DISPLAY_MAJOR)) {
channel.put("displayMajorNumber", Integer.parseInt(value));
}
else if (qName.equalsIgnoreCase(MINOR)) {
channel.put("minorNumber", Integer.parseInt(value));
}
else if (qName.equalsIgnoreCase(DISPLAY_MINOR)) {
channel.put("displayMinorNumber", Integer.parseInt(value));
}
else if (qName.equalsIgnoreCase(SOURCE_INDEX)) {
channel.put("sourceIndex", value);
}
else if (qName.equalsIgnoreCase(PHYSICAL_NUM)) {
channel.put("physicalNumber", Integer.parseInt(value));
}
else if (qName.equalsIgnoreCase(CHANNEL_NAME)) {
channel.put("channelName", value);
}
else if (qName.equalsIgnoreCase(PROGRAM_NAME)) {
channel.put("programName", value);
}
else if (qName.equalsIgnoreCase(AUDIO_CHANNEL)) {
channel.put("audioCh", value);
}
else if (qName.equalsIgnoreCase(INPUT_SOURCE_NAME)) {
channel.put("inputSourceName", value);
}
else if (qName.equalsIgnoreCase(INPUT_SOURCE_TYPE)) {
channel.put("inputSourceType", value);
}
else if (qName.equalsIgnoreCase(LABEL_NAME)) {
channel.put("labelName", value);
}
else if (qName.equalsIgnoreCase(INPUT_SOURCE_INDEX)) {
channel.put("inputSourceIndex", value);
}
value = null;
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
value = new String(ch, start, length);
}
public JSONArray getJSONChannelArray() {
return channelArray;
}
public static ChannelInfo parseRawChannelData(JSONObject channelRawData) {
String channelName = null;
String channelId = null;
String channelNumber = null;
int minorNumber = 0;
int majorNumber = 0;
ChannelInfo channelInfo = new ChannelInfo();
channelInfo.setRawData(channelRawData);
try {
if (!channelRawData.isNull("channelName"))
channelName = (String) channelRawData.get("channelName");
if (!channelRawData.isNull("channelId"))
channelId = (String) channelRawData.get("channelId");
if (!channelRawData.isNull("majorNumber"))
majorNumber = (Integer) channelRawData.get("majorNumber");
if (!channelRawData.isNull("minorNumber"))
minorNumber = (Integer) channelRawData.get("minorNumber");
if (!channelRawData.isNull("channelNumber"))
channelNumber = (String) channelRawData.get("channelNumber");
else {
channelNumber = String.format(String.valueOf(majorNumber) + "-" + String.valueOf(minorNumber));
}
channelInfo.setName(channelName);
channelInfo.setId(channelId);
channelInfo.setNumber(channelNumber);
channelInfo.setMajorNumber(majorNumber);
channelInfo.setMinorNumber(minorNumber);
} catch (JSONException e) {
e.printStackTrace();
}
return channelInfo;
}
}