package de.fhopf.lucenesolrtalk; import com.google.common.base.Function; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Collections; import java.util.Date; import java.util.List; import java.util.Properties; /** * Function that reads a talk from a properties file. */ public class TalkFromFile implements Function<File, Talk> { private DateFormat format = new SimpleDateFormat("dd.MM.yyyy"); @Override public Talk apply(File input) { Properties props = read(input); String speakerValue = props.getProperty("speaker"); String title = props.getProperty("title"); String dateValue = props.getProperty("date"); String contents = props.getProperty("content"); String categoriesValue = props.getProperty("categories"); String organizer = props.getProperty("organizer", ""); List<String> speakers = Arrays.asList(speakerValue.split(",")); List<String> categories = Collections.emptyList(); if (categoriesValue != null) { categories = Arrays.asList(categoriesValue.split(",")); } return new Talk(input.getAbsolutePath(), title, speakers, parseDate(dateValue), contents, categories, organizer); } private Date parseDate(String dateValue) { try { return format.parse(dateValue); } catch (ParseException e) { throw new IllegalStateException(e); } } private Properties read(File input) { Properties props = new Properties(); FileInputStream in = null; try { in = new FileInputStream(input); props.load(in); } catch (IOException e) { throw new IllegalStateException(e); } finally { if (in != null) { try { in.close(); } catch (IOException e) { e.printStackTrace(); } } } return props; } }