package com.alibaba.hsclient.commond;
import java.io.UnsupportedEncodingException;
import com.alibaba.hsclient.Command;
import com.alibaba.hsclient.bean.FilterInfo;
import com.alibaba.hsclient.bean.InInfo;
import com.alibaba.hsclient.bean.LimitInfo;
import com.alibaba.hsclient.util.CompareOperator;
import com.alibaba.hsclient.util.Const;
/**
* <indexid> <op> <vlen> <v1> ... <vn> [LIM] [IN] [FILTER ...]
* @author yinghui.huangyh
*
*/
public class FindCommand implements Command{
private int indexId;
private CompareOperator operator;
private String[] fieldValues;
private LimitInfo limitInfo;
private InInfo inInfo;
private FilterInfo[] filterInfos;
public FindCommand(int indexId, CompareOperator operator, String[] fieldValues,
LimitInfo limitInfo, InInfo inInfo, FilterInfo[] filterInfos) {
super();
this.indexId = indexId;
this.operator = operator;
this.fieldValues = fieldValues;
this.limitInfo = limitInfo;
this.inInfo = inInfo;
this.filterInfos = filterInfos;
}
public int getIndexId() {
return indexId;
}
public void setIndexId(int indexId) {
this.indexId = indexId;
}
public CompareOperator getOperator() {
return operator;
}
public void setOperator(CompareOperator operator) {
this.operator = operator;
}
public String[] getFieldValues() {
return fieldValues;
}
public void setFieldValues(String[] fieldValues) {
this.fieldValues = fieldValues;
}
public LimitInfo getLimitInfo() {
return limitInfo;
}
public void setLimitInfo(LimitInfo limitInfo) {
this.limitInfo = limitInfo;
}
public InInfo getInInfo() {
return inInfo;
}
public void setInInfo(InInfo inInfo) {
this.inInfo = inInfo;
}
public FilterInfo[] getFilterInfos() {
return filterInfos;
}
public void setFilterInfos(FilterInfo[] filterInfos) {
this.filterInfos = filterInfos;
}
public byte[] toByte(String encoding) throws UnsupportedEncodingException {
StringBuffer sb = new StringBuffer();
sb.append(this.getIndexId()).append(Const.TOKEN_SEPARATOR)
.append(this.operator.getValue()).append(Const.TOKEN_SEPARATOR)
.append(this.fieldValues.length).append(Const.TOKEN_SEPARATOR);
for (String str : fieldValues) {
sb.append(str).append(Const.TOKEN_SEPARATOR);
}
if (this.limitInfo != null)
{
sb.append(this.limitInfo.getLimit()).append(Const.TOKEN_SEPARATOR)
.append(this.limitInfo.getOffset()).append(Const.TOKEN_SEPARATOR);
}
if (this.inInfo != null)
{
sb.append(this.inInfo.getInOperator()).append(Const.TOKEN_SEPARATOR)
.append(this.inInfo.getiCol()).append(Const.TOKEN_SEPARATOR)
.append(this.inInfo.getInValues().length).append(Const.TOKEN_SEPARATOR);
for (String str : this.inInfo.getInValues())
{
sb.append(str).append(Const.TOKEN_SEPARATOR);
}
}
if (this.filterInfos != null)
{
for (FilterInfo filterInfo : this.filterInfos)
{
sb.append(filterInfo.getfType()).append(Const.TOKEN_SEPARATOR)
.append(filterInfo.getfOp()).append(Const.TOKEN_SEPARATOR)
.append(filterInfo.getfCol()).append(Const.TOKEN_SEPARATOR)
.append(filterInfo.getfVal()).append(Const.TOKEN_SEPARATOR);
}
}
sb.deleteCharAt(sb.toString().length() -1);
sb.append(Const.COMMAND_TERMINATE);
return sb.toString().getBytes(encoding);
}
}