package org.fastcatsearch.http.action.management.collections;
import java.io.File;
import java.io.Writer;
import java.lang.reflect.Constructor;
import java.util.List;
import java.util.Map;
import org.fastcatsearch.datasource.SourceModifier;
import org.fastcatsearch.datasource.reader.DBReader;
import org.fastcatsearch.datasource.reader.DefaultDataSourceReader;
import org.fastcatsearch.datasource.reader.SingleSourceReader;
import org.fastcatsearch.http.ActionAuthority;
import org.fastcatsearch.http.ActionAuthorityLevel;
import org.fastcatsearch.http.ActionMapping;
import org.fastcatsearch.http.action.ActionRequest;
import org.fastcatsearch.http.action.ActionResponse;
import org.fastcatsearch.http.action.AuthAction;
import org.fastcatsearch.ir.IRService;
import org.fastcatsearch.ir.config.CollectionContext;
import org.fastcatsearch.ir.config.DataSourceConfig;
import org.fastcatsearch.ir.config.SingleSourceConfig;
import org.fastcatsearch.ir.document.Document;
import org.fastcatsearch.ir.field.Field;
import org.fastcatsearch.ir.settings.FieldSetting;
import org.fastcatsearch.ir.settings.SchemaSetting;
import org.fastcatsearch.service.ServiceManager;
import org.fastcatsearch.util.DynamicClassLoader;
import org.fastcatsearch.util.ResponseWriter;
@ActionMapping(value = "/management/collections/test-source-reader", authority = ActionAuthority.Collections, authorityLevel = ActionAuthorityLevel.WRITABLE)
public class TestSourceReaderAction extends AuthAction {
@Override
public void doAuthAction(ActionRequest request, ActionResponse response)
throws Exception {
String collectionId = request.getParameter("collectionId");
IRService irService = ServiceManager.getInstance().getService(IRService.class);
CollectionContext collectionContext = irService.collectionContext(collectionId);
DataSourceConfig dataSourceConfig = collectionContext.dataSourceConfig();
List<SingleSourceConfig> singleSourceConfigList = dataSourceConfig.getFullIndexingSourceConfig();
DefaultDataSourceReader dataReader = null;
Writer writer = response.getWriter();
ResponseWriter resultWriter = getDefaultResponseWriter(writer);
resultWriter.object();
int maxRows = 10;
try {
resultWriter.key("mappingResult").array();
if(singleSourceConfigList.size() > 0) {
SingleSourceConfig singleSourceConfig = singleSourceConfigList.get(0);
Class<?> sourceReaderCls = DynamicClassLoader.loadClass(singleSourceConfig.getSourceReader());
Constructor<?> constructor = sourceReaderCls.getConstructor(String.class,
File.class, SingleSourceConfig.class, SourceModifier.class,
String.class);
@SuppressWarnings("unchecked")
SingleSourceReader<Map<String, Object>> sreader = (SingleSourceReader<Map<String, Object>>) constructor
.newInstance(collectionId, null, singleSourceConfig, null, null);
sreader.setMaxRows(maxRows);
SchemaSetting workSchemaSetting = collectionContext.workSchemaSetting();
List<FieldSetting> fieldSettingList = workSchemaSetting.getFieldSettingList();
dataReader = new DefaultDataSourceReader(workSchemaSetting);
dataReader.addSourceReader(sreader);
dataReader.init();
while (dataReader.hasNext()) {
Document document = dataReader.nextDocument();
resultWriter.array();
for (int finx = 0; finx < fieldSettingList.size(); finx++) {
FieldSetting fieldSetting = fieldSettingList.get(finx);
Field field = document.get(finx);
resultWriter.object().key("field").value(fieldSetting.getName())
.key("value").value(field.getDataString()).endObject();
}
resultWriter.endArray();
logger.trace("document:{}", document);
}
dataReader.close();
}
resultWriter.endArray().endObject();
} finally {
if(dataReader!=null) {
dataReader.close();
}
}
resultWriter.done();
}
}