001: /*
002: * Copyright 2004-2006 the original author or authors.
003: *
004: * Licensed under the Apache License, Version 2.0 (the "License");
005: * you may not use this file except in compliance with the License.
006: * You may obtain a copy of the License at
007: *
008: * http://www.apache.org/licenses/LICENSE-2.0
009: *
010: * Unless required by applicable law or agreed to in writing, software
011: * distributed under the License is distributed on an "AS IS" BASIS,
012: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013: * See the License for the specific language governing permissions and
014: * limitations under the License.
015: */
016:
017: package org.compass.core.impl;
018:
019: import org.compass.core.CompassException;
020: import org.compass.core.CompassHighlighter;
021: import org.compass.core.Resource;
022: import org.compass.core.engine.SearchEngineHighlighter;
023: import org.compass.core.mapping.ResourcePropertyLookup;
024: import org.compass.core.spi.InternalCompassHits;
025: import org.compass.core.spi.InternalCompassSession;
026:
027: /**
028: * @author kimchy
029: */
030: public class DefaultCompassHighlighter implements CompassHighlighter {
031:
032: private Resource resource;
033:
034: private SearchEngineHighlighter highlighter;
035:
036: private InternalCompassSession session;
037:
038: private InternalCompassHits hits;
039:
040: private int hitNumber;
041:
042: public DefaultCompassHighlighter(InternalCompassSession session,
043: InternalCompassHits hits, int n) {
044: this .session = session;
045: this .hits = hits;
046: this .hitNumber = n;
047: this .highlighter = hits.getSearchEngineHits().getHighlighter();
048: this .resource = hits.resource(n);
049: }
050:
051: public CompassHighlighter setAnalyzer(String analyzerName)
052: throws CompassException {
053: highlighter.setAnalyzer(analyzerName);
054: return this ;
055: }
056:
057: public CompassHighlighter setAnalyzer(Resource resource)
058: throws CompassException {
059: highlighter.setAnalyzer(resource);
060: return this ;
061: }
062:
063: public CompassHighlighter setHighlighter(String highlighterName)
064: throws CompassException {
065: highlighter.setHighlighter(highlighterName);
066: return this ;
067: }
068:
069: public CompassHighlighter setSeparator(String separator)
070: throws CompassException {
071: highlighter.setSeparator(separator);
072: return this ;
073: }
074:
075: public CompassHighlighter setMaxNumFragments(int maxNumFragments)
076: throws CompassException {
077: highlighter.setMaxNumFragments(maxNumFragments);
078: return this ;
079: }
080:
081: public CompassHighlighter setMaxBytesToAnalyze(int maxBytesToAnalyze)
082: throws CompassException {
083: highlighter.setMaxBytesToAnalyze(maxBytesToAnalyze);
084: return this ;
085: }
086:
087: public CompassHighlighter setTextTokenizer(
088: TextTokenizer textTokenizer) throws CompassException {
089: highlighter.setTextTokenizer(textTokenizer);
090: return this ;
091: }
092:
093: public String fragment(String propertyName) throws CompassException {
094: ResourcePropertyLookup lookup = session.getMapping()
095: .getResourcePropertyLookup(propertyName);
096: String fragment = highlighter.fragment(resource, lookup
097: .getPath());
098: hits.setHighlightedText(hitNumber, propertyName, fragment);
099: return fragment;
100: }
101:
102: public String fragment(String propertyName, String text)
103: throws CompassException {
104: ResourcePropertyLookup lookup = session.getMapping()
105: .getResourcePropertyLookup(propertyName);
106: String fragment = highlighter.fragment(resource, lookup
107: .getPath(), text);
108: hits.setHighlightedText(hitNumber, propertyName, fragment);
109: return fragment;
110: }
111:
112: public String[] fragments(String propertyName)
113: throws CompassException {
114: ResourcePropertyLookup lookup = session.getMapping()
115: .getResourcePropertyLookup(propertyName);
116: return highlighter.fragments(resource, lookup.getPath());
117: }
118:
119: public String[] fragments(String propertyName, String text)
120: throws CompassException {
121: ResourcePropertyLookup lookup = session.getMapping()
122: .getResourcePropertyLookup(propertyName);
123: return highlighter.fragments(resource, lookup.getPath(), text);
124: }
125:
126: public String fragmentsWithSeparator(String propertyName)
127: throws CompassException {
128: ResourcePropertyLookup lookup = session.getMapping()
129: .getResourcePropertyLookup(propertyName);
130: String fragment = highlighter.fragmentsWithSeparator(resource,
131: lookup.getPath());
132: hits.setHighlightedText(hitNumber, propertyName, fragment);
133: return fragment;
134: }
135:
136: public String fragmentsWithSeparator(String propertyName,
137: String text) throws CompassException {
138: ResourcePropertyLookup lookup = session.getMapping()
139: .getResourcePropertyLookup(propertyName);
140: String fragment = highlighter.fragmentsWithSeparator(resource,
141: lookup.getPath(), text);
142: hits.setHighlightedText(hitNumber, propertyName, fragment);
143: return fragment;
144: }
145:
146: public String[] multiResourceFragment(String propertyName)
147: throws CompassException {
148: ResourcePropertyLookup lookup = session.getMapping()
149: .getResourcePropertyLookup(propertyName);
150: String[] fragments = highlighter.multiResourceFragment(
151: resource, lookup.getPath());
152: return fragments;
153: }
154:
155: public String[] multiResourceFragment(String propertyName,
156: String[] texts) throws CompassException {
157: ResourcePropertyLookup lookup = session.getMapping()
158: .getResourcePropertyLookup(propertyName);
159: String[] fragments = highlighter.multiResourceFragment(
160: resource, lookup.getPath(), texts);
161: return fragments;
162: }
163:
164: public String multiResourceFragmentWithSeparator(String propertyName)
165: throws CompassException {
166: ResourcePropertyLookup lookup = session.getMapping()
167: .getResourcePropertyLookup(propertyName);
168: String fragment = highlighter
169: .multiResourceFragmentWithSeparator(resource, lookup
170: .getPath());
171: hits.setHighlightedText(hitNumber, propertyName, fragment);
172: return fragment;
173: }
174:
175: public String multiResourceFragmentWithSeparator(
176: String propertyName, String[] texts)
177: throws CompassException {
178: ResourcePropertyLookup lookup = session.getMapping()
179: .getResourcePropertyLookup(propertyName);
180: String fragment = highlighter
181: .multiResourceFragmentWithSeparator(resource, lookup
182: .getPath(), texts);
183: hits.setHighlightedText(hitNumber, propertyName, fragment);
184: return fragment;
185: }
186: }
|