package nliveroid.nlr.main.parser;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import nliveroid.nlr.main.ErrorCode;
import nliveroid.nlr.main.LiveTab.FirstSendFormTask;
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 FirstSendFormParser implements ContentHandler {
private StringBuilder innerText = new StringBuilder(1024);
private ArrayList<String> messages = new ArrayList<String>();
private String ulck = "";
private String descri = "";
private String[] response = new String[2];
private boolean parseTarget = false;
private FirstSendFormTask task;
private boolean isStep2;
private ErrorCode error;//最初のパースとサムネイル取得に必要
public FirstSendFormParser(FirstSendFormTask task,ErrorCode error){
this.task = task;
this.error = error;
}
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(parseTarget){
String inner = getInnerText(arg0,arg2);
if(inner.contains("既にこの時間に予約をしているか")){
isStep2 = true;
}else if(inner.contains("既に順番待ちに並んでいるか")){
isStep2 = true;
}else if(inner.contains("ページの有効期限が切れています")){
messages.add("ページの有効期限が切れています");
}else{
messages.add(inner);
}
parseTarget = false;
}
}
@Override
public void startElement(String arg0, String arg1, String arg2,
Attributes arg3) throws SAXException {
if(arg1.equals("li") && arg3 != null && arg3.getLength() >=1){
for(int i = 0; i < arg3.getLength(); i++){
if(arg3.getValue(i).equals("error_message")){
parseTarget = true;
}
}
}
if(arg1.equals("input")){
for(int i = 0; i < arg3.getLength(); i++){
if(arg3.getLocalName(i).equals("name")){
if(arg3.getValue(i).equals("description")){
for(int j = 0; j < arg3.getLength(); j++){
if(arg3.getLocalName(j).equals("value")){
descri = arg3.getValue(j);
}
}
}else if(arg3.getValue(i).equals("usecoupon")||arg3.getValue(i).equals("confirm")){
Pattern pt = Pattern.compile("ulck_[0-9]+");
Matcher mc = null;
for(int j = 0; j < arg3.getLength(); j++){
mc = pt.matcher(arg3.getValue(j));
if(mc.find()){
ulck = mc.group();
}
}
}
}
}
}
if(arg1.equals("span")){
for(int i = 0; i < arg3.getLength(); i++){
if(arg3.getValue(i).equals("step02")){
//放送できる
isStep2 = true;
}
}
}
}
@Override
public void endElement(String arg0, String arg1, String arg2)throws SAXException {
if(arg1.equals("body")){
if(isStep2&&messages.size() == 0){
response[0] = ulck;
response[1] = descri;
task.finishCallBack(response);
}else{
task.finishCallBack(messages,ulck);
}
}
}
@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 {}
}