/*
* Hibernate Search, full-text search for your domain model
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/
package org.hibernate.search.elasticsearch.settings.impl.translation;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
import java.io.Reader;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CodingErrorAction;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import org.apache.lucene.analysis.util.ResourceLoader;
/**
* @author Yoann Rodiere
*/
public class AbstractSynonymsParameterValueTransformer extends FileAsLineArrayParameterValueTransformer {
public AbstractSynonymsParameterValueTransformer(ResourceLoader resourceLoader) {
super( resourceLoader );
}
@Override
protected List<String> getLines(InputStream stream) throws IOException {
/*
* See org.apache.lucene.analysis.synonym.SynonymFilterFactory.loadSynonyms(ResourceLoader, String, boolean, Analyzer)
* for instance.
*/
CharsetDecoder decoder = StandardCharsets.UTF_8.newDecoder()
.onMalformedInput( CodingErrorAction.REPORT )
.onUnmappableCharacter( CodingErrorAction.REPORT );
List<String> lines = new ArrayList<>();
try ( final Reader reader = new InputStreamReader( stream, decoder );
final LineNumberReader lineNumberReader = new LineNumberReader( reader ) ) {
String line = lineNumberReader.readLine();
while ( line != null ) {
String content = extractContent( line );
if ( content != null ) {
lines.add( content );
}
line = lineNumberReader.readLine();
}
}
return lines;
}
/**
* Extract the content from a line.
* <p>
* This method basically strips non-meaningful content, like comments, from a line.
*
* @param line The line to extract content from
* @return The content, or null if there is none.
*/
protected String extractContent(String line) {
return line;
}
}