xref: /OpenGrok/opengrok-indexer/src/main/java/org/opengrok/indexer/history/HistoryReader.java (revision 5d9f3aa0ca3da3a714233f987fa732f62c0965f6)
1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License (the "License").
6  * You may not use this file except in compliance with the License.
7  *
8  * See LICENSE.txt included in this distribution for the specific
9  * language governing permissions and limitations under the License.
10  *
11  * When distributing Covered Code, include this CDDL HEADER in each
12  * file and include the License file at LICENSE.txt.
13  * If applicable, add the following below this CDDL HEADER, with the
14  * fields enclosed by brackets "[]" replaced with your own identifying
15  * information: Portions Copyright [yyyy] [name of copyright owner]
16  *
17  * CDDL HEADER END
18  */
19 
20 /*
21  * Copyright (c) 2005, 2018, Oracle and/or its affiliates. All rights reserved.
22  */
23 package org.opengrok.indexer.history;
24 
25 import java.io.IOException;
26 import java.io.Reader;
27 import java.io.StringReader;
28 import java.util.List;
29 import org.opengrok.indexer.util.IOUtils;
30 
31 /**
32  * Class for reading history entries in a way suitable for indexing by Lucene.
33  */
34 public class HistoryReader extends Reader {
35 
36     private final List<HistoryEntry> entries;
37     private Reader input;
38 
HistoryReader(History history)39     HistoryReader(History history) {
40         entries = history.getHistoryEntries();
41     }
42 
43     @Override
read(char[] cbuf, int off, int len)44     public int read(char[] cbuf, int off, int len) throws IOException {
45         if (input == null) {
46             input = createInternalReader();
47         }
48         return input.read(cbuf, off, len);
49     }
50 
51     @Override
close()52     public void close() throws IOException {
53         IOUtils.close(input);
54     }
55 
createInternalReader()56     private Reader createInternalReader() {
57         StringBuilder str = new StringBuilder();
58         for (HistoryEntry entry : entries) {
59             str.append(entry.getLine());
60         }
61         return new StringReader(str.toString());
62     }
63 }
64