package org.fastcatsearch.vo;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.fastcatsearch.common.io.Streamable;
import org.fastcatsearch.ir.io.DataInput;
import org.fastcatsearch.ir.io.DataOutput;
public class CollectionIndexData implements Streamable {
private String collectionId;
private int documentSize;
protected List<String> fieldList;
protected List<RowData> indexData;
protected List<Boolean> isDeletedList;
public CollectionIndexData() {
}
public CollectionIndexData(String collectionId, int documentSize, List<String> fieldList, List<RowData> indexData, List<Boolean> isDeletedList) {
this.collectionId = collectionId;
this.documentSize = documentSize;
this.fieldList = fieldList;
this.indexData = indexData;
this.isDeletedList = isDeletedList;
}
public String getCollectionId() {
return collectionId;
}
public int getDocumentSize() {
return documentSize;
}
public List<String> getFieldList() {
return fieldList;
}
public List<RowData> getIndexData() {
return indexData;
}
public List<Boolean> getIsDeletedList() {
return isDeletedList;
}
@Override
public void readFrom(DataInput input) throws IOException {
collectionId = input.readString();
documentSize = input.readVInt();
int fieldSize = input.readVInt();
fieldList = new ArrayList<String>(fieldSize);
for (int i = 0; i < fieldSize; i++) {
fieldList.add(input.readString());
}
int rowSize = input.readVInt();
indexData = new ArrayList<RowData>(rowSize);
for (int r = 0; r < rowSize; r++) {
String segmentId = input.readString();
String[][] fieldData = new String[fieldSize][];
for (int i = 0; i < fieldSize; i++) {
fieldData[i] = new String[] { input.readString(), input.readString() };
}
RowData rowData = new RowData(segmentId, fieldData);
indexData.add(rowData);
}
rowSize = input.readVInt();
isDeletedList = new ArrayList<Boolean>(rowSize);
for (int r = 0; r < rowSize; r++) {
isDeletedList.add(input.readBoolean());
}
}
@Override
public void writeTo(DataOutput output) throws IOException {
output.writeString(collectionId);
output.writeVInt(documentSize);
if(fieldList != null) {
output.writeVInt(fieldList.size());
for(String fieldId : fieldList) {
output.writeString(fieldId);
}
}else{
output.writeVInt(0);
}
if(indexData != null) {
output.writeVInt(indexData.size());
for(RowData rowData : indexData) {
output.writeString(rowData.getSegmentId());
String[][] fieldData = rowData.getFieldData();
for(int i = 0; i < fieldData.length; i++) {
output.writeString(fieldData[i][0]);
output.writeString(fieldData[i][1]);
}
}
}else{
output.writeVInt(0);
}
if(isDeletedList != null) {
output.writeVInt(isDeletedList.size());
for(Boolean b : isDeletedList) {
output.writeBoolean(b);
}
}else{
output.writeVInt(0);
}
}
public static class RowData {
private String segmentId;
private String[][] fieldData;
public RowData() {
}
public RowData(String segmentId, String[][] fieldData) {
super();
this.segmentId = segmentId;
this.fieldData = fieldData;
}
public String getSegmentId() {
return segmentId;
}
public String[][] getFieldData() {
return fieldData;
}
}
}