package org.entermedia.email; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.lucene.facet.taxonomy.TaxonomyWriter; import org.apache.lucene.index.IndexWriter; import org.openedit.Data; import org.openedit.data.Searcher; import org.openedit.data.lucene.BaseLuceneSearcher; import org.openedit.repository.ContentItem; import com.openedit.WebPageRequest; import com.openedit.hittracker.HitTracker; import com.openedit.page.manage.PageManager; import com.openedit.users.User; import com.openedit.util.PathProcessor; public class EmailSearcher extends BaseLuceneSearcher implements Searcher { protected XmlEmailArchive fieldEmailArchive; protected PageManager fieldPageManager; public PageManager getPageManager() { return fieldPageManager; } public void setPageManager(PageManager pageManager) { fieldPageManager = pageManager; } public XmlEmailArchive getEmailArchive() { return fieldEmailArchive; } public void setEmailArchive(XmlEmailArchive inEmailArchive) { fieldEmailArchive = inEmailArchive; inEmailArchive.setCatalogId(getCatalogId()); } public void setCatalogId(String inCatalogId) { fieldCatalogId = inCatalogId; getEmailArchive().setCatalogId(getCatalogId()); } private static final Log log = LogFactory.getLog(EmailSearcher.class); public void reIndexAll(final IndexWriter writer, final TaxonomyWriter inTaxonomyWriter) { // http://www.onjava.com/pub/a/onjava/2003/03/05/lucene.html // http://www.onjava.com/pub/a/onjava/2003/03/05/lucene.html?page=2 // writer.mergeFactor = 10; PathProcessor processor = new PathProcessor() { public void processFile(ContentItem inContent, User inUser) { String sourcepath = inContent.getPath(); String rootstring = getEmailArchive().getEmailPath(); sourcepath = sourcepath.substring(rootstring.length(), sourcepath.length()); sourcepath = sourcepath.replace(".xml", ""); TemplateWebEmail email = getEmailArchive().loadEmail(sourcepath); populateEmail(writer, inTaxonomyWriter, email, true); } }; processor.setRecursive(true); processor.setRootPath(getEmailArchive().getEmailPath()); processor.setPageManager(getEmailArchive().getPageManager()); processor.setIncludeExtensions("xml"); processor.process(); // HitCollector log.info("Reindex done"); } private void populateEmail(IndexWriter inWriter, TaxonomyWriter inTaxonomyWriter, TemplateWebEmail inEmail, boolean add) { super.updateIndex(inWriter, inTaxonomyWriter,inEmail); // try { // if (add) { // inWriter.addDocument(doc, getAnalyzer()); // } else { // Term term = new Term("id", inEmail.getId().toLowerCase()); // inWriter.updateDocument(term, doc, getAnalyzer()); // } // log.debug("Indexed " + inEmail.getId()); // } catch (IOException ex) { // throw new OpenEditRuntimeException(ex); // } } public void saveData(Data inData, User inUser){ if(inData instanceof TemplateWebEmail){ getEmailArchive().saveEmail((TemplateWebEmail) inData, inUser); } updateIndex(inData); } public HitTracker getAllHits(WebPageRequest inReq) { return fieldSearch("id", "*"); } public Object searchById(String inId) { Data hit =(Data) super.searchById(inId); String sourcepath = hit.getSourcePath(); return getEmailArchive().loadEmail(sourcepath); } }