package no.java.incogito.domain; import javax.ws.rs.core.UriBuilder; import static javax.ws.rs.core.UriBuilder.fromUri; /** * @author <a href="mailto:trygvis@java.no">Trygve Laugstøl</a> * @version $Id$ */ public class IncogitoUri { private final UriBuilder rest; private final UriBuilder baseurl; public IncogitoUri(UriBuilder baseurl) { this.baseurl = baseurl.clone(); this.rest = baseurl.clone().segment("rest"); } public IncogitoUri(String baseurl) { this(fromUri(baseurl)); } public IncogitoRestEventsUri restEvents() { return new IncogitoRestEventsUri(this, rest.clone().segment("events")); } public IncogitoEventsUri events() { return new IncogitoEventsUri(baseurl.clone().segment("events")); } public static class IncogitoEventsUri { private final UriBuilder events; public IncogitoEventsUri(UriBuilder events) { this.events = events; } public IncogitoEventUri eventUri(String name) { return new IncogitoEventUri(events.clone().segment(name)); } public static class IncogitoEventUri { private final UriBuilder event; private final UriBuilder sessions; public IncogitoEventUri(UriBuilder event) { this.event = event; this.sessions = event.clone().segment("sessions"); } public String calendarHtml() { return event.clone().segment("calendar").build().toString(); } public String sessionListHtml() { return sessions.build().toString(); } public String toString() { return event.build().toString(); } public String session(Session session) { return sessions.clone().segment(session.title).build().toString().replaceAll("\\+", "%2b"); } } } public static class IncogitoRestEventsUri { public final IncogitoUri incogitoUri; private final UriBuilder events; public IncogitoRestEventsUri(IncogitoUri incogitoUri, UriBuilder events) { this.incogitoUri = incogitoUri; this.events = events; } public String toString() { return events.build().toString(); } public IncogitoRestEventUri eventUri(String event) { return new IncogitoRestEventUri(this, events.clone().segment(event)); } public static class IncogitoRestEventUri { public final IncogitoRestEventsUri restEventsUri; private final UriBuilder event; private final UriBuilder sessions; private IncogitoRestEventUri(IncogitoRestEventsUri restEventsUri, UriBuilder event) { this.restEventsUri = restEventsUri; this.event = event; sessions = event.clone().segment("sessions"); } public String toString() { return event.build().toString(); } public IncogitoLabelsIconUri labelsIcon() { return new IncogitoLabelsIconUri(event.clone().segment("icons", "labels")); } public static class IncogitoLabelsIconUri { private final UriBuilder labels; private IncogitoLabelsIconUri(UriBuilder labels) { this.labels = labels; } public String toString() { return labels.build().toString(); } public String png(Label label) { return labels.clone().segment(label.id + ".png").build().toString(); } } public IncogitoLevelsIconUri levelsIcon() { return new IncogitoLevelsIconUri(event.clone().segment("icons", "levels")); } public static class IncogitoLevelsIconUri { private final UriBuilder levels; private IncogitoLevelsIconUri(UriBuilder levels) { this.levels = levels; } public String toString() { return levels.build().toString(); } public String png(Level level) { return levels.clone().segment(level.id.name() + ".png").build().toString(); } } public IncogitoRestSessionUri session(Session session) { return new IncogitoRestSessionUri(sessions.clone().segment(session.id.value)); } public static class IncogitoRestSessionUri { private final UriBuilder session; private final UriBuilder photos; public IncogitoRestSessionUri(UriBuilder session) { this.session = session; photos = session.clone().segment("speaker-photos"); } public String speakerPhoto(int i) { return photos.clone().segment(Integer.toString(i)).build().toString(); } @Override public String toString() { return session.build().toString(); } } } } }