package no.java.incogito.application; import fj.F; import fj.P2; import fj.data.List; import static fj.data.List.nil; import fj.data.Option; import fj.data.TreeMap; import no.java.incogito.domain.CssConfiguration; import static no.java.incogito.domain.CssConfiguration.defaultCssConfiguration; import no.java.incogito.domain.Label; import no.java.incogito.domain.Level; import no.java.incogito.domain.Room; import static no.java.incogito.domain.Event.emptyLabelIconMap; import no.java.incogito.domain.Level.LevelId; import static no.java.incogito.Functions.compose; import no.java.incogito.Functions; import org.joda.time.LocalDate; import org.joda.time.Interval; /** * @author <a href="mailto:trygvis@java.no">Trygve Laugstøl</a> * @version $Id$ */ public class IncogitoConfiguration { public static final List<EventConfiguration> emptyEventConfigurations = nil(); public final String baseurl; public final CssConfiguration cssConfiguration; public final Option<String> frontPageText; public final Option<String> aboutText; public final List<EventConfiguration> eventConfigurations; public IncogitoConfiguration(String baseurl, CssConfiguration cssConfiguration, Option<String> frontPageText, Option<String> aboutText, List<EventConfiguration> eventConfigurations) { this.baseurl = baseurl; this.cssConfiguration = cssConfiguration; this.frontPageText = frontPageText; this.aboutText = aboutText; this.eventConfigurations = eventConfigurations; } public static class EventConfiguration { public final String name; public final Option<String> blurb; public final List<P2<LocalDate, DayConfiguration>> dayConfigurations; public List<Room> presentationRooms; public final List<Label> labels; public final TreeMap<String, Label> labelMap; public final TreeMap<LevelId, Level> levels; private final long timestamp; public EventConfiguration(String name, Option<String> blurb, List<P2<LocalDate, DayConfiguration>> dayConfigurations, List<Room> presentationRooms, List<Label> labels, TreeMap<LevelId, Level> levels, long timestamp) { this.name = name; this.blurb = blurb; this.dayConfigurations = dayConfigurations; this.presentationRooms = presentationRooms; this.labels = labels; this.levels = levels; this.timestamp = timestamp; labelMap = labels.foldLeft(Functions.<String, Label>TreeMap_set().f(Label.id_), emptyLabelIconMap); } public static final F<EventConfiguration, String> name_ = new F<EventConfiguration, String>() { public String f(EventConfiguration eventConfiguration) { return eventConfiguration.name; } }; public boolean isOutdated(long fileTimestamp) { return fileTimestamp > timestamp; } } public static class DayConfiguration { public final List<Room> rooms; public final List<Interval> timeslots; public DayConfiguration(List<Room> rooms, List<Interval> timeslots) { this.rooms = rooms; this.timeslots = timeslots; } } public String getBaseurl() { return baseurl; } public String getFrontPageText() { return frontPageText.orSome((String) null); } public String getAboutText() { return aboutText.orSome((String) null); } public Option<EventConfiguration> findEventConfigurationByName(String name) { return eventConfigurations.find(compose(Functions.equals.f(name), EventConfiguration.name_)); } public static final IncogitoConfiguration unconfigured = new IncogitoConfiguration("http://unconfigured", defaultCssConfiguration,Option.<String>none(), Option.<String>none(), emptyEventConfigurations); }