package org.ijsolutions.testbench; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.elasticsearch.common.xcontent.XContentBuilder; import org.entermediadb.elasticsearch.searchers.BaseElasticSearcher; import org.openedit.Data; import org.openedit.ModuleManager; import org.openedit.OpenEditException; import org.openedit.OpenEditRuntimeException; import org.openedit.data.PropertyDetails; import org.openedit.page.manage.PageManager; import org.openedit.users.User; import org.openedit.util.PathUtilities; public class QuestionSearcher extends BaseElasticSearcher { private static final Log log = LogFactory.getLog(QuestionSearcher.class); protected TestBench fieldTestBench; protected PageManager fieldPageManager; protected ModuleManager fieldModuleManager; public TestBench getTestBench() { if (fieldTestBench == null) { fieldTestBench = (TestBench) getModuleManager().getBean(getCatalogId(), "testBench"); } return fieldTestBench; } public void setTestBench(TestBench inTestBench) { fieldTestBench = inTestBench; } public ModuleManager getModuleManager() { return fieldModuleManager; } public void setModuleManager(ModuleManager inModuleManager) { fieldModuleManager = inModuleManager; } @Override protected void updateIndex(XContentBuilder inContent, Data inData, PropertyDetails inDetails, User inUser) { // TODO Auto-generated method stub super.updateIndex(inContent, inData, inDetails, inUser); try { Question question = (Question) inData; List categories = question.getCategories(); String[] catids = new String[categories.size()]; int i = 0; for (Iterator iterator = categories.iterator(); iterator.hasNext();) { Category cat = (Category) iterator.next(); catids[i++] = cat.getId(); } if (i > 0) { inContent.field("category", catids); } } catch (IOException e) { throw new OpenEditException(e); } } // protected void updateIndex(Question inQuestion, Document doc, // PropertyDetails inJobDetails) throws CorruptIndexException, // IOException { // // super.updateIndex(inQuestion, doc, inJobDetails); // Set categories = buildCategorySet(inQuestion); // StringBuffer cats = new StringBuffer(); // for (Iterator iter = categories.iterator(); iter.hasNext();) // { // Category cat = (Category) iter.next(); // cats.append(cat.getId()); // cats.append(' '); // } // doc.add(new Field("category", cats.toString(), Field.Store.NO, Field.Index.ANALYZED)); // } // public void reIndexAll(IndexWriter inWriter, TaxonomyWriter inTaxonomyWriter) throws OpenEditException { // // String questionsDataPath = getQuestionArchive().getQuestionsDataPath(); // List list = getPageManager().getRepository().getChildrenNames( // questionsDataPath); // // try { // log.info("Writing out " + list.size() + " jobs"); // buildIndex(inWriter, inTaxonomyWriter, list); // // restoreIndex(newIndex); // } catch (Exception ex) { // throw new OpenEditException(ex); // } // // } // protected void updateIndex(XContentBuilder inContent, Data inData, PropertyDetails inDetails) { // // PropertyDetails details = getPropertyDetailsArchive() // .getPropertyDetails("question"); // // PropertyDetails delivdetails = // // getFieldArchive().getPropertyDetails("jobdeliverable"); // // // } @Override public void reIndexAll() throws OpenEditException { String questionsDataPath = getQuestionArchive().getQuestionsDataPath(); List inPaths = getPageManager().getRepository().getChildrenNames(questionsDataPath); ArrayList questions = new ArrayList(); for (Iterator iter = inPaths.iterator(); iter.hasNext();) { String path = (String) iter.next(); String id = PathUtilities.extractPageName(path); if (id.contains("categor")) { continue; } Question question = getQuestionArchive().getQuestionById(id); if (question != null) { questions.add(question); } else { log.info("Error loading product:" + id); } } updateIndex(questions, null); getQuestionArchive().clear(); } public QuestionArchive getQuestionArchive() { return getTestBench().getQuestionArchive(); } public PageManager getPageManager() { return fieldPageManager; } public void setPageManager(PageManager inPageManager) { fieldPageManager = inPageManager; } @Override public void saveAllData(Collection inAll, User inUser) { // TODO Auto-generated method stub super.saveAllData(inAll, inUser); for (Iterator iterator = inAll.iterator(); iterator.hasNext();) { Question question = (Question) iterator.next(); try { getQuestionArchive().saveQuestion(question); } catch (Exception e) { throw new OpenEditRuntimeException(e); } } } public void saveData(Data inData) { if (inData instanceof Question) { try { getQuestionArchive().saveQuestion((Question) inData); ArrayList one = new ArrayList(); one.add(inData); updateIndex(one, null); log.info("quesiton saveed"); } catch (Exception e) { throw new OpenEditRuntimeException(e); } } } public void deleteData(Data inData) { if (!(inData instanceof Question)) { inData = searchById(inData.getId()); } if (inData instanceof Question) { try { getQuestionArchive().deleteQuestion((Question) inData); } catch (Exception e) { throw new OpenEditRuntimeException(e); } } } public Data searchById(String inId) { Question questionById = getQuestionArchive().getQuestionById(inId); return questionById; } public Data createNewData() { return getQuestionArchive().createNewQuestion(); } public String nextId() { // TODO Auto-generated method stub try { return getQuestionArchive().nextQuestionNumber(); } catch (Exception e) { throw new OpenEditException(e); } } public void reindexInternal() throws OpenEditException { reIndexAll(); } }