package nliveroid.nlr.main.parser;
import java.util.HashMap;
import nliveroid.nlr.main.LiveTab.SetBeforeServerProfile;
import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
import android.util.Log;
public class ReuseParser implements ContentHandler {
private StringBuilder innerText = new StringBuilder(1024);
private HashMap<String,String> formValues = new HashMap<String,String>();
private SetBeforeServerProfile task;
private boolean isDescription;
private boolean communityTarget;
private boolean defaultCommunity;
private boolean isCommuSelector;
private boolean isCategorySelector;
private boolean isCategory;
private boolean isTagArea;
private int tagCount = 0;
public ReuseParser(SetBeforeServerProfile task){
this.task = task;
}
private String getInnerText(char[] arg0,int arg2){
innerText = innerText.delete(0,arg0.length);
innerText.append(arg0, 0, arg2);
return innerText.toString();
}
@Override
public void characters(char[] arg0, int arg1, int arg2) throws SAXException {
if(isDescription){
String desc = getInnerText(arg0,arg2);
if(desc != null)formValues.put("description", desc.trim());
isDescription = false;
}else if(defaultCommunity){
// Log.d("defaultCommunity "," " + defaultCommunity);
formValues.put("community_name", getInnerText(arg0,arg2).trim().replace("\n|\t", ""));
defaultCommunity = false;
}else if(isCategory){
formValues.put("category", getInnerText(arg0,arg2).trim().replace("\n|\t", ""));
isCategory = false;
}
}
@Override
public void startElement(String arg0, String arg1, String arg2,
Attributes arg3) throws SAXException {
if(arg1.equals("input") && arg3 != null){
// for(int i = 0; i < arg3.getLength(); i++){
// Log.d("input "," " + arg3.getLocalName(i) + " " + arg3.getValue(i) );
// }
if(isTagArea){//タグの辺りもinputタグなので先に書く
boolean isLiveTags = false;
String value = "";
boolean isTagLock = false;
boolean isChecked = false;
for(int i = 0; i < arg3.getLength(); i++){
if(arg3.getValue(i).contains("livetags")){
isLiveTags = true;
}else if(arg3.getValue(i).contains("taglock")){
isTagLock = true;
}
if(arg3.getLocalName(i).equals("value")){
value = arg3.getValue(i);
}else if(arg3.getLocalName(i).equals("checked")){
isChecked = true;
}
}
if(isLiveTags){
if(value == null || value.equals(""))return;//valueがないlabel等が
formValues.put("tag"+tagCount, value);
}else if(isTagLock){
formValues.put("lock"+tagCount, String.valueOf(isChecked));
tagCount++;
}
}else{
boolean isTitle = false;
String value = null;
boolean isPublicStatus = false;
boolean isTimeShift = false;
boolean isTwitter = false;
boolean isChecked = false;
for(int i = 0; i < arg3.getLength(); i++){
if(arg3.getLocalName(i).equals("name") && arg3.getValue(i).equals("title")){
isTitle = true;
}else if(arg3.getLocalName(i).equals("id")){
if(arg3.getValue(i).equals("community_only")){
isPublicStatus = true;
}else if( arg3.getValue(i).equals("timeshift_enabled")){
isTimeShift = true;
}else if(arg3.getValue(i).equals("id_twitter_enabled")){
isTwitter = true;
}
}else if(arg3.getLocalName(i).equals("checked")){
isChecked = true;
}else if(arg3.getLocalName(i).equals("value")){
value = arg3.getValue(i);
}
}
// Log.d("FORM "," value" + value + " "+isChecked);
if(isTitle && value != null)formValues.put("title",value);//タイトル取得
if(isPublicStatus)formValues.put("public_status", String.valueOf(isChecked));//コミュ限か
if(isTimeShift)formValues.put("timeshift_enable", String.valueOf(isChecked));//TSか
if(isTwitter)formValues.put("twitter_enable", String.valueOf(isChecked));//Twitter。。とりあえず作ってないけど
}
}else if(arg1.equals("textarea") && arg3 != null){
for(int i = 0; i < arg3.getLength(); i++){
if(arg3.getLocalName(i).equals("name") && arg3.getValue(i).equals("description")){
isDescription = true;
break;
}
}
}else if(arg1.equals("select") && arg3 != null){
for(int i = 0; i < arg3.getLength(); i++){
if(arg3.getLocalName(i).equals("id")&&arg3.getValue(i).equals("default_community")){
isCommuSelector = true;
}
}
}else if(isCommuSelector && arg1.equals("option") && arg3 != null){
//オプションはタグの中に値無しのgetLocalNameでとれる selected >みたいになってる
for(int i = 0; i < arg3.getLength(); i++){
if(arg3.getLocalName(i).equals("selected")){
defaultCommunity = true;
isCommuSelector = false;
break;
}
}
}else if(isCategorySelector && arg1.equals("option") && arg3 != null){
//選択したカテゴリ
for(int i = 0; i < arg3.getLength(); i++){
if(arg3.getLocalName(i).equals("selected")){
isCategory = true;
isCategorySelector = false;
break;
}
}
}else if(arg1.equals("div") && arg3 != null){//div判定がinputを内包しているとinputが判定できない
for(int i = 0; i < arg3.getLength(); i++){
if(arg3.getLocalName(i).equals("id")){
if(arg3.getValue(i).equals("live_tag_main")){
// Log.d("TAGAREA" ,"TRUE ----------");
isTagArea = true;
}else if(arg3.getValue(i).equals("page_footer")){
task.finishCallBack(formValues);
}
}
}
}
}
@Override
public void endElement(String arg0, String arg1, String arg2)throws SAXException {
if(arg1.equals("select")){
isCommuSelector = false;
isCategorySelector = false;
}else if(isTagArea && arg1.equals("td")){
// Log.d("TAGAREA" ,"FALSE ----------");
isTagArea = false;
}
}
@Override
public void endDocument() throws SAXException {}
@Override
public void endPrefixMapping(String arg0) throws SAXException {}
@Override
public void ignorableWhitespace(char[] arg0, int arg1, int arg2)throws SAXException {}
@Override
public void processingInstruction(String arg0, String arg1)throws SAXException {}
@Override
public void setDocumentLocator(Locator arg0) {}
@Override
public void skippedEntity(String arg0) throws SAXException {}
@Override
public void startDocument() throws SAXException {}
@Override
public void startPrefixMapping(String arg0, String arg1)throws SAXException {}
}