xref: /OpenGrok/opengrok-indexer/src/main/java/org/opengrok/indexer/search/Summary.java (revision ff44f24ac10337e272510634599e287cb25d0e9c)
1b5840353SAdam Hornáček /*
2b5840353SAdam Hornáček  * Copyright 2005 The Apache Software Foundation
3b5840353SAdam Hornáček  * Portions Copyright (c) 2017, Chris Fraire <cfraire@me.com>.
4b5840353SAdam Hornáček  *
5b5840353SAdam Hornáček  * Licensed under the Apache License, Version 2.0 (the "License");
6b5840353SAdam Hornáček  * you may not use this file except in compliance with the License.
7b5840353SAdam Hornáček  * You may obtain a copy of the License at
8b5840353SAdam Hornáček  *
9b5840353SAdam Hornáček  *     http://www.apache.org/licenses/LICENSE-2.0
10b5840353SAdam Hornáček  *
11b5840353SAdam Hornáček  * Unless required by applicable law or agreed to in writing, software
12b5840353SAdam Hornáček  * distributed under the License is distributed on an "AS IS" BASIS,
13b5840353SAdam Hornáček  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14b5840353SAdam Hornáček  * See the License for the specific language governing permissions and
15b5840353SAdam Hornáček  * limitations under the License.
16b5840353SAdam Hornáček  */
179805b761SAdam Hornáček package org.opengrok.indexer.search;
18b5840353SAdam Hornáček 
19b5840353SAdam Hornáček import java.util.ArrayList;
20b5840353SAdam Hornáček import java.util.List;
219805b761SAdam Hornáček import org.opengrok.indexer.web.Util;
22b5840353SAdam Hornáček 
23b5840353SAdam Hornáček /** A document summary dynamically generated to match a query. */
24b5840353SAdam Hornáček public class Summary {
25b5840353SAdam Hornáček 
htmlize(String q)26b5840353SAdam Hornáček     protected static String htmlize(String q) {
27b5840353SAdam Hornáček         return Util.prehtmlize(q);
28b5840353SAdam Hornáček     }
29b5840353SAdam Hornáček 
30b5840353SAdam Hornáček     /** A fragment of text within a summary. */
31b5840353SAdam Hornáček     public static class Fragment {
32b5840353SAdam Hornáček         private final String text;
33b5840353SAdam Hornáček 
3481b586e6SVladimir Kotal         /* Constructs a fragment for the given text. */
Fragment(String text)35*ff44f24aSAdam Hornáček         public Fragment(String text) {
36*ff44f24aSAdam Hornáček             this.text = text;
37*ff44f24aSAdam Hornáček         }
38b5840353SAdam Hornáček 
3981b586e6SVladimir Kotal         /* Returns the text of this fragment. */
getText()40*ff44f24aSAdam Hornáček         public String getText() {
41*ff44f24aSAdam Hornáček             return text;
42*ff44f24aSAdam Hornáček         }
43b5840353SAdam Hornáček 
4481b586e6SVladimir Kotal         /* Returns true iff this fragment is to be highlighted. */
isHighlight()45*ff44f24aSAdam Hornáček         public boolean isHighlight() {
46*ff44f24aSAdam Hornáček             return false;
47*ff44f24aSAdam Hornáček         }
48b5840353SAdam Hornáček 
4981b586e6SVladimir Kotal         /* Returns true iff this fragment is an ellipsis. */
isEllipsis()50*ff44f24aSAdam Hornáček         public boolean isEllipsis() {
51*ff44f24aSAdam Hornáček             return false;
52*ff44f24aSAdam Hornáček         }
53b5840353SAdam Hornáček 
5481b586e6SVladimir Kotal         /* Returns an HTML representation of this fragment. */
55*ff44f24aSAdam Hornáček         @Override
toString()56*ff44f24aSAdam Hornáček         public String toString() {
57*ff44f24aSAdam Hornáček             return htmlize(text);
58*ff44f24aSAdam Hornáček         }
59b5840353SAdam Hornáček     }
60b5840353SAdam Hornáček 
61b5840353SAdam Hornáček     /** A highlighted fragment of text within a summary. */
62b5840353SAdam Hornáček     public static class Highlight extends Fragment {
6381b586e6SVladimir Kotal         /* Constructs a highlighted fragment for the given text. */
Highlight(String text)64*ff44f24aSAdam Hornáček         public Highlight(String text) {
65*ff44f24aSAdam Hornáček             super(text);
66*ff44f24aSAdam Hornáček         }
67b5840353SAdam Hornáček 
6881b586e6SVladimir Kotal         /* Returns true. */
69*ff44f24aSAdam Hornáček         @Override
isHighlight()70*ff44f24aSAdam Hornáček         public boolean isHighlight() {
71*ff44f24aSAdam Hornáček             return true;
72*ff44f24aSAdam Hornáček         }
73b5840353SAdam Hornáček 
7481b586e6SVladimir Kotal         /* Returns an HTML representation of this fragment. */
75*ff44f24aSAdam Hornáček         @Override
toString()76*ff44f24aSAdam Hornáček         public String toString() {
77*ff44f24aSAdam Hornáček             return "<b>" + super.toString() + "</b>";
78*ff44f24aSAdam Hornáček         }
79b5840353SAdam Hornáček     }
80b5840353SAdam Hornáček 
81b5840353SAdam Hornáček     /** An ellipsis fragment within a summary. */
82b5840353SAdam Hornáček     public static class Ellipsis extends Fragment {
8381b586e6SVladimir Kotal         /* Constructs an ellipsis fragment for the given text. */
Ellipsis()84*ff44f24aSAdam Hornáček         public Ellipsis() {
85*ff44f24aSAdam Hornáček             super(" ... ");
86b5840353SAdam Hornáček         }
87b5840353SAdam Hornáček 
88*ff44f24aSAdam Hornáček         /* Returns true. */
89*ff44f24aSAdam Hornáček         @Override
isEllipsis()90*ff44f24aSAdam Hornáček         public boolean isEllipsis() {
91*ff44f24aSAdam Hornáček             return true;
92*ff44f24aSAdam Hornáček         }
93*ff44f24aSAdam Hornáček 
94*ff44f24aSAdam Hornáček         /* Returns an HTML representation of this fragment. */
95*ff44f24aSAdam Hornáček         @Override
toString()96*ff44f24aSAdam Hornáček         public String toString() {
97*ff44f24aSAdam Hornáček             return "<b> ... </b>";
98*ff44f24aSAdam Hornáček         }
99*ff44f24aSAdam Hornáček     }
100*ff44f24aSAdam Hornáček 
101*ff44f24aSAdam Hornáček     private final List<Fragment> fragments = new ArrayList<>();
102b5840353SAdam Hornáček 
103b5840353SAdam Hornáček     private static final Fragment[] FRAGMENT_PROTO = new Fragment[0];
104b5840353SAdam Hornáček 
1054ce4e2b9SAdam Hornáček     /* Adds a fragment to a summary.*/
add(Fragment fragment)106*ff44f24aSAdam Hornáček     public void add(Fragment fragment) {
107*ff44f24aSAdam Hornáček         fragments.add(fragment);
108*ff44f24aSAdam Hornáček     }
109b5840353SAdam Hornáček 
11081b586e6SVladimir Kotal     /**
11181b586e6SVladimir Kotal      * Returns an array of all of this summary's fragments.
11281b586e6SVladimir Kotal      * @return fragment array
11381b586e6SVladimir Kotal      */
getFragments()114b5840353SAdam Hornáček     public Fragment[] getFragments() {
1155670a478SVladimir Kotal         return fragments.toArray(FRAGMENT_PROTO);
116b5840353SAdam Hornáček     }
117b5840353SAdam Hornáček 
11881b586e6SVladimir Kotal     /**
11981b586e6SVladimir Kotal      * Returns an HTML representation of this fragment.
12081b586e6SVladimir Kotal      * @return string representation
12181b586e6SVladimir Kotal      */
122*ff44f24aSAdam Hornáček     @Override
toString()123b5840353SAdam Hornáček     public String toString() {
124b5840353SAdam Hornáček         StringBuilder buffer = new StringBuilder();
125*ff44f24aSAdam Hornáček         for (Fragment fragment : fragments) {
126*ff44f24aSAdam Hornáček             buffer.append(fragment);
127b5840353SAdam Hornáček         }
128b5840353SAdam Hornáček         return buffer.toString();
129b5840353SAdam Hornáček     }
130b5840353SAdam Hornáček }
131