package org.fastcatsearch.ir.config;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.CharBuffer;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import org.fastcatsearch.ir.settings.AnalyzerSetting;
import org.fastcatsearch.ir.settings.FieldIndexSetting;
import org.fastcatsearch.ir.settings.FieldSetting;
import org.fastcatsearch.ir.settings.GroupIndexSetting;
import org.fastcatsearch.ir.settings.IndexSetting;
import org.fastcatsearch.ir.settings.PrimaryKeySetting;
import org.fastcatsearch.ir.settings.RefSetting;
import org.fastcatsearch.ir.settings.Schema;
import org.fastcatsearch.ir.settings.SchemaSetting;
import org.fastcatsearch.util.JAXBConfigs;
import org.junit.Test;
public class SchemaSettingTest {
@Test
public void testSettingMarshall() throws JAXBException {
SchemaSetting setting = new SchemaSetting();
//add fieldsetting
List<FieldSetting> fieldSettingList = new ArrayList<FieldSetting>();
FieldSetting fieldSetting = new FieldSetting("title", "제목", FieldSetting.Type.ASTRING);
fieldSettingList.add(fieldSetting);
setting.setFieldSettingList(fieldSettingList);
PrimaryKeySetting primaryKeySetting = new PrimaryKeySetting("id");
primaryKeySetting.setFieldList(new ArrayList<RefSetting>());
primaryKeySetting.getFieldList().add(new RefSetting("id"));
primaryKeySetting.getFieldList().add(new RefSetting("price"));
setting.setPrimaryKeySetting(primaryKeySetting);
List<RefSetting> indexFieldSettingList = new ArrayList<RefSetting>();
RefSetting indexFieldSetting = new RefSetting("title");
indexFieldSettingList.add(indexFieldSetting);
List<IndexSetting> indexSettingList = new ArrayList<IndexSetting>();
IndexSetting indexSetting = new IndexSetting("title_index","korean");
indexSettingList.add(indexSetting);
setting.setIndexSettingList(indexSettingList);
List<FieldIndexSetting> fieldIndexSettingList = new ArrayList<FieldIndexSetting>();
FieldIndexSetting fieldIndexSetting = new FieldIndexSetting("title", "title field index", "title");
fieldIndexSettingList.add(fieldIndexSetting);
setting.setFieldIndexSettingList(fieldIndexSettingList);
List<GroupIndexSetting> groupSettingList = new ArrayList<GroupIndexSetting>();
GroupIndexSetting groupIndexSetting = new GroupIndexSetting("category", "category_group", "category");
groupSettingList.add(groupIndexSetting);
setting.setGroupIndexSettingList(groupSettingList);
List<AnalyzerSetting> analyzerSettingList = new ArrayList<AnalyzerSetting>();
analyzerSettingList.add(new AnalyzerSetting("korean_index","korean_index", 10, 100, "com.fastcatsearch.plugin.analysis.korean.StandardKoreanAnalyzer"));
analyzerSettingList.add(new AnalyzerSetting("korean_query","korean_query", 10, 100, "com.fastcatsearch.plugin.analysis.korean.StandardKoreanAnalyzer"));
setting.setAnalyzerSettingList(analyzerSettingList);
JAXBContext context = JAXBContext.newInstance(setting.getClass());
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(setting, System.out);
}
@Test
public void testSettingUnmarshall() throws JAXBException, IOException {
InputStream is = new FileInputStream("/Users/swsong/TEST_HOME/danawa1022/node1/collections/vol1/schema.xml");
InputStreamReader r = new InputStreamReader(is);
CharBuffer buf = CharBuffer.allocate(1024 * 1024);
r.read(buf);
r.close();
buf.flip();
System.out.println(new String(buf.array(), 0, buf.limit()));
is = new FileInputStream("src/test/resources/schema.xml");
SchemaSetting setting = JAXBConfigs.readConfig(is, SchemaSetting.class);
// JAXBContext context = JAXBContext.newInstance(SchemaSetting.class);
//
// Unmarshaller unmarshaller = context.createUnmarshaller();
//
// SchemaSetting setting = (SchemaSetting) unmarshaller.unmarshal(is);
is.close();
System.out.println(setting);
System.out.println(setting.getFieldSettingList().get(0).getId());
System.out.println(setting.getAnalyzerSettingList().size());
Schema schema = new Schema(setting);
}
}