1 package mircoders.producer;
6 import org.apache.lucene.analysis.standard.StandardAnalyzer;
7 import org.apache.lucene.index.*;
8 import org.apache.lucene.document.Document;
9 import org.apache.lucene.document.Field;
12 import freemarker.template.*;
16 import mir.producer.*;
17 //import mir.generator.*;
18 import mircoders.global.*;
19 import mircoders.localizer.*;
21 import mir.entity.adapter.*;
22 import mircoders.entity.*;
23 import mircoders.storage.*;
26 public class IndexingProducerNode implements ProducerNode {
27 private String contentKey;
28 private String indexPath;
31 public IndexingProducerNode(String aContentKey, String pathToIndex) {
32 contentKey = aContentKey;
33 indexPath=pathToIndex;
36 public void produce(Map aValueMap, String aVerb, PrintWriter aLogger) throws ProducerFailure {
37 IndexWriter indexWriter;
44 startTime = System.currentTimeMillis();
47 data = ParameterExpander.findValueForKey( aValueMap, contentKey );
49 if (! (data instanceof EntityAdapter)) {
50 throw new ProducerFailure("IndexingProducerNode: value of '"+contentKey+"' is not an EntityAdapter, but an " + data.getClass().getName(), null);
53 entity = ((EntityAdapter) data).getEntity();
54 if (! (entity instanceof EntityContent)) {
55 throw new ProducerFailure("IndexingProducerNode: value of '"+contentKey+"' is not a content EntityAdapter, but a " + entity.getClass().getName() + " adapter", null);
57 aLogger.println("Indexing " + (String) entity.getValue("id") + " into " + indexPath);
60 IndexReader indexReader = IndexReader.open(indexPath);
61 indexReader.delete(new Term("id",entity.getValue("id")));
64 indexWriter = new IndexWriter(indexPath, new StandardAnalyzer(), false);
65 Document theDoc = new Document();
67 // Keyword is stored and indexed, but not tokenized
68 // Text is tokenized,stored, indexed
69 // Unindexed is not tokenized or indexed, only stored
70 // Unstored is tokenized and indexed, but not stored
72 theDoc.add(Field.Keyword("id",entity.getValue("id")));
73 theDoc.add(Field.Keyword("where",entity.getValue("publish_path")+entity.getValue("id")+".shtml"));
74 theDoc.add(Field.Text("creator",entity.getValue("creator")));
75 theDoc.add(Field.Text("title",entity.getValue("title")));
76 theDoc.add(Field.Keyword("webdb_create",entity.getValue("webdb_create_formatted")));
77 theDoc.add(Field.UnStored("content_and_description",entity.getValue("description")+entity.getValue("content_data")));
80 TemplateModel topics=entity.get("to_topics");
81 aLogger.println("THE CLASS NAME WAS: "+entity.get("to_topics").getClass().getName());
82 while (((TemplateListModel)topics).hasNext()){
83 theDoc.add(Field.UnStored("topic",((SimpleHash)((TemplateListModel)topics).next()).get("title").toString()));
90 TemplateModel images=entity.get("to_media_images");
92 theDoc.add(Field.UnStored("media","images"));
95 TemplateModel audio=entity.get("to_media_audio");
97 theDoc.add(Field.UnStored("media","audio"));
100 TemplateModel video=entity.get("to_media_video");
102 theDoc.add(Field.UnStored("media","video"));
105 //comments-just aggregate all relevant fields
106 String commentsAggregate = "";
107 TemplateModel comments=entity.get("to_comments");
108 if (comments != null){
109 while (((TemplateListModel)comments).hasNext()){
110 TemplateModel aComment = ((TemplateListModel)comments).next();
111 commentsAggregate = commentsAggregate + " " + ((TemplateHashModel)aComment).get("title").toString()
112 + " " + ((TemplateHashModel)aComment).get("creator").toString()
113 + " " + ((TemplateHashModel)aComment).get("text").toString();
116 theDoc.add(Field.UnStored("comments",commentsAggregate));
118 indexWriter.addDocument(theDoc);
122 catch (Throwable t) {
123 aLogger.println("Error while indexing content: " + t.getMessage());
124 t.printStackTrace(aLogger);
125 //should remove index lock here.....jd
126 throw new ProducerFailure(t.getMessage(), t);
132 endTime = System.currentTimeMillis();
134 aLogger.println(" IndexTime: " + (endTime-startTime) + " ms<br>");
138 public Set buildVerbSet() {
139 return new HashSet();