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