package com.taobao.loganalyzer.input.tanxpv.parser;
import java.util.ArrayList;
import java.util.List;
import com.taobao.loganalyzer.input.tanxpv.common.LogField;
import com.taobao.loganalyzer.input.tanxpv.common.LogParser;
import com.taobao.loganalyzer.input.tanxpv.common.LogRecord;
import com.taobao.loganalyzer.input.tanxpv.common.SectionParser;
/**
* Section 9:User Section解析类。该Section保存和用户有关的信息。
* @see <a href="http://sps.corp.alimama.com/ad/ADExchange/DocLib/Tan(X)%E7%B3%BB%E7%BB%9F%E6%97%A5%E5%BF%97%E8%AE%BE%E8%AE%A1.pdf">点击日志格式</a>
* @author kangtian
*
*/
public class UserSectionParser implements SectionParser {
/**
* 对用户Section08进行解析 (版本1.0不记录)
* h) section8-用户section(不记录)--------允许
*/
public boolean parse(LogParser lp, LogRecord lr) {
if (lp.isCurCharCA()) {
if (!lp.hasNextChar()) return false;
}
else {
//用户行为信息
lr.addField("UserActionInfo", new LogField(LogField.TYPE_STRING, lp.getNextCB()));
//人群信息
if ( lr.version_cmp("1.0") > 0 )
{
List<LogRecord> list = new ArrayList<LogRecord>();
do {
if (lp.curChar() == LogParser.CONTROL_B) {
if (!lp.hasNextChar()) return false;
continue;
} else if (lp.curChar() == LogParser.CONTROL_A) {
if (!lp.hasNextChar()) return false;
break;
}
LogRecord inner_lr = new LogRecord();
//兴趣类目
inner_lr.addField("Category", new LogField(LogField.TYPE_STRING, lp.getNextCD()));
//分数
inner_lr.addField("Score", new LogField(LogField.TYPE_STRING, lp.getNextCD()));
//消费能力
String ablity = lp.getNextField(new char[]{LogParser.CONTROL_C, LogParser.CONTROL_B,LogParser.CONTROL_A});
//不允许再包含^D
if (ablity!=null && ablity.indexOf(LogParser.CONTROL_D)>=0 )
{
return false ;
}
inner_lr.addField("ConsumeAbility", new LogField(LogField.TYPE_STRING, ablity ));
list.add(inner_lr);
} while (lp.getMatchedChar() != 0 && lp.getMatchedChar() != LogParser.CONTROL_B);
//人群信息
lr.addField("CrowdInfoList", new LogField(LogField.TYPE_LIST, list));
//性别
lr.addField("UserSex", new LogField(LogField.TYPE_STRING, lp.getNextCB()));
//整体消费能力
lr.addField("WholeConsumeAblity", new LogField(LogField.TYPE_STRING, lp.getNextCA()));
}else
{
//取群体行为方式的标志
lr.addField("CrowdActionType", new LogField(LogField.TYPE_STRING, lp.getNextCA()));
}
}
if (lp.isError())
return false;
return true;
}
}