001    package railo.runtime.search.lucene2;
002    
003    import java.io.IOException;
004    
005    import org.apache.lucene.analysis.Analyzer;
006    import org.apache.lucene.document.Document;
007    import org.apache.lucene.search.Hits;
008    
009    import railo.runtime.search.SearchException;
010    import railo.runtime.search.SearchResulItem;
011    import railo.runtime.search.lucene2.highlight.Highlight;
012    
013    public class SearchResulItemHits implements SearchResulItem {
014    
015            
016            
017            private Hits hits;
018            private int index;
019            private Object highlighter;
020            private Analyzer analyzer;
021            private String id;
022            private String categoryTree;
023            private String category;
024            private int maxNumFragments;
025            private int maxLength;
026            private Document doc;
027    
028            public SearchResulItemHits(Hits hits, int index, Object highlighter,Analyzer analyzer,
029                            String id, String categoryTree, String category,int maxNumFragments, int maxLength) {
030                    this.hits=hits;
031                    this.index=index;
032                    this.highlighter=highlighter;
033                    this.analyzer=analyzer;
034                    this.id=id;
035                    this.categoryTree=categoryTree;
036                    this.category=category;
037                    this.maxNumFragments=maxNumFragments;
038                    this.maxLength=maxLength;
039            }
040    
041            @Override
042            public String getAuthor() {
043                    return doc("author");
044            }
045    
046            @Override
047            public String getCategory() {
048                    return category;
049            }
050    
051            @Override
052            public String getCategoryTree() {
053                    return categoryTree;
054            }
055    
056            @Override
057            public String getCustom1() {
058                    return doc("custom1");
059            }
060    
061            @Override
062            public String getCustom2() {
063                    return doc("custom2");
064            }
065    
066            @Override
067            public String getCustom3() {
068                    return doc("custom3");
069            }
070    
071            @Override
072            public String getCustom4() {
073                    return doc("custom4");
074            }
075        
076        public String getCustom(int index) throws SearchException {
077            if(index==1) return doc("custom1");
078            if(index==2) return doc("custom2");
079            if(index==3) return doc("custom3");
080            if(index==4) return doc("custom4");
081            
082            throw new SearchException("invalid index ["+index+"], valid index is [1,2,3,4]");
083        }
084    
085            @Override
086            public String getId() {
087                    return id;
088            }
089    
090            @Override
091            public String getKey() {
092                    return doc("key");
093            }
094    
095            @Override
096            public String getMimeType() {
097                    return doc("mime-type");
098            }
099    
100            public int getRecordsSearched() {
101                    // TODO Auto-generated method stub
102                    return 0;
103            }
104        
105    
106            @Override
107            public float getScore() {
108                    try {
109                            return hits.score(index);
110                    } catch (IOException e) {
111                            return 0;
112                    }
113            }
114    
115            @Override
116            public String getSize() {
117                    return doc("size");
118            }
119    
120            @Override
121            public String getSummary() {
122                    return doc("summary");
123            }
124    
125            @Override
126            public String getTitle() {
127                    return doc("title");
128            }
129    
130            @Override
131            public String getUrl() {
132                    return doc("url");
133            }
134            
135            /** FUTURE add to interface
136             * @return the contextSummary
137             */
138            public String getContextSummary() {
139                    String contextSummary="";
140                    if(maxNumFragments>0){
141                            contextSummary=Highlight.createContextSummary(highlighter,analyzer,doc("contents"),maxNumFragments,maxLength,"");
142                    }
143                    return contextSummary;
144            }
145    
146            private String doc(String field) {
147                    if(doc==null){
148                            try {
149                                    doc=hits.doc(index);
150                            } catch (IOException e) {
151                                    e.printStackTrace();
152                            }
153                    }
154                    return doc.get(field);
155            }
156    }