/******************************************************************************* * Copyright (c) 2012, Directors of the Tyndale STEP Project * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * Neither the name of the Tyndale House, Cambridge (www.TyndaleHouse.com) * nor the names of its contributors may be used to endorse or promote * products derived from this software without specific prior written * permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF * THE POSSIBILITY OF SUCH DAMAGE. ******************************************************************************/ package com.tyndalehouse.step.models.timeline.simile; import static com.tyndalehouse.step.core.utils.ConversionUtils.epochMinutesStringToLocalDateTime; import java.util.ArrayList; import java.util.List; import org.joda.time.LocalDateTime; import com.tyndalehouse.step.core.data.EntityDoc; import com.tyndalehouse.step.models.TimelineTranslator; import com.tyndalehouse.step.models.timeline.DigestableTimeline; /** * provides a way of * * @author chrisburrell * */ public class SimileTimelineTranslatorImpl implements TimelineTranslator { private static final String SIMILE_DEFAULT_TIME_FORMAT = "iso8601"; @Override public DigestableTimeline toDigestableForm(final EntityDoc[] events, final LocalDateTime suggestedDate) { final SimileTimelineImpl timeline = new SimileTimelineImpl(); timeline.setLegend(getLegendItems()); timeline.setDateTimeFormat(SIMILE_DEFAULT_TIME_FORMAT); final List<SimileEvent> eventList = new ArrayList<SimileEvent>(); for (final EntityDoc te : events) { final SimileEvent e = translateEvent(te); eventList.add(e); } timeline.setEvents(eventList); if (suggestedDate != null) { timeline.setSuggestedDate(suggestedDate.toString()); } return timeline; } private List<LegendItem> getLegendItems() { final List<LegendItem> legendItems = new ArrayList<>(); add(legendItems, "A something", "triangle_orange.png"); add(legendItems, "B something", "square_gray.png"); add(legendItems, "CD", "triangle_yellow.png"); add(legendItems, "D", "triangle_green.png"); add(legendItems, "E", "circle_green.png"); add(legendItems, "F", "square_blue.png"); add(legendItems, "G", "circle_blue.png"); add(legendItems, "H", "circle_purple.png"); return legendItems; } private void add(final List<LegendItem> legendItems, final String s, final String s1) { LegendItem t = new LegendItem(); t.setTitle(s); t.setIcon(s1); legendItems.add(t); } @Override public SimileEvent translateEvent(final EntityDoc te) { final SimileEvent e = new SimileEvent(); final String name = te.get("name"); e.setTitle(name); e.setDescription(name); e.setStart(epochMinutesStringToLocalDateTime(te.get("fromDate")).toString()); e.setEventId(te.get("id")); e.setCertainty(te.get("certainty")); e.setFlags(te.get("flags")); e.setStartPrecision(te.get("fromPrecision")); final String toDate = te.get("toDate"); if (toDate != null) { final LocalDateTime dt = epochMinutesStringToLocalDateTime(toDate); e.setEnd(dt.toString()); e.setEndPrecision(te.get("toPrecision")); e.setDuration(true); } else { e.setDuration(false); } return e; } }