[Tynstep-svn] r203 - in trunk/step: step-build step-core step-core/src/main/java/com/tyndalehouse/step/core step-core/src/main/java/com/tyndalehouse/step/core/data step-core/src/main/java/com/tyndalehouse/step/core/data/create step-core/src/main/java/com/tyndalehouse/step/core/data/entities step-core/src/main/java/com/tyndalehouse/step/core/data/entities/reference step-core/src/main/java/com/tyndalehouse/step/core/exceptions step-core/src/main/java/com/tyndalehouse/step/core/guice step-core/src/main/java/com/tyndalehouse/step/core/guice/providers step-core/src/main/java/com/tyndalehouse/step/core/service step-core/src/main/java/com/tyndalehouse/step/core/service/impl step-core/src/main/java/com/tyndalehouse/step/core/utils step-core/src/main/resources step-core/src/main/resources/com/tyndalehouse/step/core step-core/src/main/resources/com/tyndalehouse/step/core/data step-core/src/main/resources/com/tyndalehouse/step/core/data/create step-core/src/main/resources/com/tyndalehouse/step/core/data/create/hotspot step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeband step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline step-core/src/test step-core/src/test/java/com/tyndalehouse/step/core step-core/src/test/java/com/tyndalehouse/step/core/data step-core/src/test/java/com/tyndalehouse/step/core/data/common step-core/src/test/java/com/tyndalehouse/step/core/data/create step-core/src/test/java/com/tyndalehouse/step/core/utils step-core/src/test/resources step-parent step-server step-web step-web/src/main/java/com/tyndalehouse/step/rest/controllers step-web/src/main/resources step-web/src/main/webapp step-web/src/main/webapp/js step-web/src/test/java/com/tyndalehouse/step/rest/controllers

ChrisBurrell at crosswire.org ChrisBurrell at crosswire.org
Sat Jan 22 13:02:36 MST 2011


Author: ChrisBurrell
Date: 2011-01-22 13:02:36 -0700 (Sat, 22 Jan 2011)
New Revision: 203

Added:
   trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/
   trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/create/
   trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/create/CsvData.java
   trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/create/CsvDataMapper.java
   trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/create/Loader.java
   trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/create/TimelineModuleLoader.java
   trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/dao/
   trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/entities/
   trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/entities/HotSpot.java
   trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/entities/KeyedEntity.java
   trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/entities/ScriptureReference.java
   trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/entities/ScriptureTarget.java
   trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/entities/Timeband.java
   trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/entities/TimelineEvent.java
   trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/entities/reference/
   trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/entities/reference/TargetType.java
   trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/entities/reference/TimeUnitType.java
   trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/guice/providers/DatabaseConfigProvider.java
   trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/service/TimelineService.java
   trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/service/impl/TimelineServiceImpl.java
   trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/utils/PassageReferenceUtils.java
   trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/utils/StepIOUtils.java
   trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/
   trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/
   trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/hotspot/
   trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/hotspot/hotspots.csv
   trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeband/
   trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeband/timebands.csv
   trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/
   trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_Africa.csv
   trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_Americas.csv
   trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_ArchCult.csv
   trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_Asia.csv
   trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_EarlyChurch.csv
   trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_Egypt.csv
   trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_Europe.csv
   trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_ExileAndReturn.csv
   trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_Global.csv
   trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_Intertestamental.csv
   trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_Jesus.csv
   trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_Monarchy.csv
   trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_NTChurch.csv
   trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_OTNeighbours.csv
   trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_PatriarchsToJudges.csv
   trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_Rome.csv
   trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/index.txt
   trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/license.txt
   trunk/step/step-core/src/main/resources/ebean.properties
   trunk/step/step-core/src/test/java/com/tyndalehouse/step/core/data/
   trunk/step/step-core/src/test/java/com/tyndalehouse/step/core/data/common/
   trunk/step/step-core/src/test/java/com/tyndalehouse/step/core/data/common/PartialDateTest.java
   trunk/step/step-core/src/test/java/com/tyndalehouse/step/core/data/create/
   trunk/step/step-core/src/test/java/com/tyndalehouse/step/core/data/create/CsvDataTest.java
   trunk/step/step-core/src/test/java/com/tyndalehouse/step/core/data/create/DataTest.java
   trunk/step/step-core/src/test/java/com/tyndalehouse/step/core/data/create/DataTestModule.java
   trunk/step/step-core/src/test/java/com/tyndalehouse/step/core/utils/PassageReferenceUtilsTest.java
   trunk/step/step-core/src/test/resources/
   trunk/step/step-core/src/test/resources/log4j.properties
Modified:
   trunk/step/step-build/
   trunk/step/step-core/
   trunk/step/step-core/pom.xml
   trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/exceptions/StepInternalException.java
   trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/guice/StepCoreModule.java
   trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/guice/providers/DefaultInstallersProvider.java
   trunk/step/step-core/src/main/resources/log4j.properties
   trunk/step/step-core/src/main/resources/step.core.properties
   trunk/step/step-parent/pom.xml
   trunk/step/step-server/pom.xml
   trunk/step/step-web/pom.xml
   trunk/step/step-web/src/main/java/com/tyndalehouse/step/rest/controllers/FrontController.java
   trunk/step/step-web/src/main/java/com/tyndalehouse/step/rest/controllers/SetupController.java
   trunk/step/step-web/src/main/java/com/tyndalehouse/step/rest/controllers/TimelineController.java
   trunk/step/step-web/src/main/resources/log4j.properties
   trunk/step/step-web/src/main/webapp/js/timeline.js
   trunk/step/step-web/src/main/webapp/setup.jsp
   trunk/step/step-web/src/test/java/com/tyndalehouse/step/rest/controllers/FrontControllerTest.java
Log:
updating with new database layer and timeline data loading


Property changes on: trunk/step/step-build
___________________________________________________________________
Modified: svn:ignore
   - .checkstyle
.checkstyle.config.xml
.classpath
.fbprefs
.pmd
.project
.settings
target

   + .checkstyle
.checkstyle.config.xml
.classpath
.fbprefs
.pmd
.project
.settings
target
.checkstyle.config.test.xml
.LICENSE.txt



Property changes on: trunk/step/step-core
___________________________________________________________________
Modified: svn:ignore
   - .checkstyle
.checkstyle.config.xml
.classpath
.fbprefs
.pmd
.project
.settings
target

   + .checkstyle
.checkstyle.config.xml
.classpath
.fbprefs
.pmd
.project
.settings
target
.checkstyle.config.test.xml
.LICENSE.txt


Modified: trunk/step/step-core/pom.xml
===================================================================
--- trunk/step/step-core/pom.xml	2011-01-07 22:52:32 UTC (rev 202)
+++ trunk/step/step-core/pom.xml	2011-01-22 20:02:36 UTC (rev 203)
@@ -34,13 +34,12 @@
 			<groupId>org.jdom</groupId>
 			<artifactId>jdom</artifactId>
 		</dependency>
-		
-		
+				
 		<!-- common utils -->
-		<dependency>
-			<groupId>commons-beanutils</groupId>
-			<artifactId>commons-beanutils</artifactId>
-		</dependency>
+<!--		<dependency>-->
+<!--			<groupId>commons-beanutils</groupId>-->
+<!--			<artifactId>commons-beanutils</artifactId>-->
+<!--		</dependency>-->
 		
 		<dependency>
 			<groupId>commons-lang</groupId>
@@ -48,13 +47,60 @@
 		</dependency>
 		
 		<dependency>
+			<groupId>commons-io</groupId>
+			<artifactId>commons-io</artifactId>
+		</dependency>
+		
+		<dependency>
 			<groupId>commons-collections</groupId>
 			<artifactId>commons-collections</artifactId>
 		</dependency>
+
+		<!--  we don't always need this - depends on what version -->
+		<dependency>
+			<groupId>commons-dbcp</groupId>
+			<artifactId>commons-dbcp</artifactId>
+		</dependency>
 		
 		<dependency>
 			<groupId>com.jolira</groupId>
 			<artifactId>guice</artifactId>
 		</dependency>
+		
+		<dependency>
+			<groupId>net.sf.opencsv</groupId>
+			<artifactId>opencsv</artifactId>
+		</dependency>
+
+<!--		<dependency>-->
+<!--			<groupId>javax.persistence</groupId>-->
+<!--			<artifactId>persistence-api</artifactId>-->
+<!--		</dependency>-->
+
+<!--		<dependency>-->
+<!--			<groupId>com.j256.ormlite</groupId>-->
+<!--			<artifactId>ormlite-core</artifactId>-->
+<!--		</dependency>-->
+
+<dependency>
+    <groupId>org.avaje</groupId>
+    <artifactId>ebean</artifactId>
+</dependency>
+
+		<dependency>
+			<groupId>org.mockito</groupId>
+			<artifactId>mockito-core</artifactId>
+		</dependency>
+
+<!--		<dependency>-->
+<!--			<groupId>com.j256.ormlite</groupId>-->
+<!--			<artifactId>ormlite-jdbc</artifactId>-->
+<!--		</dependency>-->
+
+		<dependency>
+			<groupId>com.h2database</groupId>
+			<artifactId>h2</artifactId>
+		</dependency>
+		
 	</dependencies>
 </project>

Added: trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/create/CsvData.java
===================================================================
--- trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/create/CsvData.java	                        (rev 0)
+++ trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/create/CsvData.java	2011-01-22 20:02:36 UTC (rev 203)
@@ -0,0 +1,51 @@
+package com.tyndalehouse.step.core.data.create;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * A wrapper for CSV data that can be accessed similar to a Map
+ * 
+ * @author Chris
+ * 
+ */
+public class CsvData {
+    private final List<String[]> data;
+    private final Map<String, Integer> headerMapping = new HashMap<String, Integer>();
+
+    /**
+     * Initialises a CSV data accessor
+     * 
+     * @param fileData the data that is passed through
+     */
+    public CsvData(final List<String[]> fileData) {
+        this.data = fileData;
+
+        final String[] headerRow = fileData.get(0);
+        for (int ii = 0; ii < headerRow.length; ii++) {
+            this.headerMapping.put(headerRow[ii], Integer.valueOf(ii));
+        }
+    }
+
+    /**
+     * provides access to cells contained in the file
+     * 
+     * @param row the row index
+     * @param columnName the columnName
+     * @return the value at row [row] and column [columnName]
+     */
+    public String getData(final int row, final String columnName) {
+
+        return this.data.get(row + 1)[this.headerMapping.get(columnName)];
+    }
+
+    /**
+     * the number of rows in the data file
+     * 
+     * @return the number of rows in the data file
+     */
+    public int size() {
+        return this.data.size() - 1;
+    }
+}

Added: trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/create/CsvDataMapper.java
===================================================================
--- trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/create/CsvDataMapper.java	                        (rev 0)
+++ trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/create/CsvDataMapper.java	2011-01-22 20:02:36 UTC (rev 203)
@@ -0,0 +1,19 @@
+package com.tyndalehouse.step.core.data.create;
+
+/**
+ * Defines a mapping function
+ * 
+ * @author Chris
+ * 
+ * @param <T> the type that will be returned
+ */
+public interface CsvDataMapper<T> {
+    /**
+     * Maps the piece of data as a row
+     * 
+     * @param rowNum the row num
+     * @param data the data containing the rows
+     * @return the element
+     */
+    T mapRow(int rowNum, CsvData data);
+}

Added: trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/create/Loader.java
===================================================================
--- trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/create/Loader.java	                        (rev 0)
+++ trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/create/Loader.java	2011-01-22 20:02:36 UTC (rev 203)
@@ -0,0 +1,63 @@
+package com.tyndalehouse.step.core.data.create;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.avaje.ebean.Ebean;
+import com.avaje.ebean.Transaction;
+import com.google.inject.Inject;
+import com.tyndalehouse.step.core.data.entities.ScriptureReference;
+
+/**
+ * The object that will be responsible for loading all the data into a database
+ * 
+ * @author Chris
+ * 
+ */
+public class Loader {
+    private static final int BATCH_SIZE = 1000;
+    private static final Logger LOG = LoggerFactory.getLogger(Loader.class);
+    private final TimelineModuleLoader timelineModuleLoader;
+
+    /**
+     * The loader is given a connection source to load the data
+     * 
+     * @param timelineModuleLoader loader that loads the timeline module
+     */
+    @Inject
+    public Loader(final TimelineModuleLoader timelineModuleLoader) {
+        this.timelineModuleLoader = timelineModuleLoader;
+        // this.scriptureReferenceDao = scriptureReferenceDao;
+    }
+
+    /**
+     * Creates the table and loads the initial data set
+     */
+    public void init() {
+        loadData();
+    }
+
+    /**
+     * Loads the data into the database
+     */
+    private void loadData() {
+        LOG.debug("Loading initial data");
+        final Transaction transaction = Ebean.beginTransaction();
+        try {
+            transaction.setBatchMode(true);
+            transaction.setBatchSize(BATCH_SIZE);
+            transaction.setReadOnly(false);
+            // set up a list of scripture references that can be populated as we populate the database
+            final List<ScriptureReference> scriptureReferences = new ArrayList<ScriptureReference>();
+            this.timelineModuleLoader.init(scriptureReferences);
+
+            Ebean.save(scriptureReferences);
+            Ebean.commitTransaction();
+        } finally {
+            Ebean.endTransaction();
+        }
+    }
+}

Added: trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/create/TimelineModuleLoader.java
===================================================================
--- trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/create/TimelineModuleLoader.java	                        (rev 0)
+++ trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/create/TimelineModuleLoader.java	2011-01-22 20:02:36 UTC (rev 203)
@@ -0,0 +1,243 @@
+package com.tyndalehouse.step.core.data.create;
+
+import static com.tyndalehouse.step.core.data.common.PartialDate.parseDate;
+import static com.tyndalehouse.step.core.utils.StepIOUtils.closeQuietly;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.io.IOUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import au.com.bytecode.opencsv.CSVReader;
+
+import com.avaje.ebean.Ebean;
+import com.tyndalehouse.step.core.data.common.PartialDate;
+import com.tyndalehouse.step.core.data.common.PrecisionType;
+import com.tyndalehouse.step.core.data.entities.HotSpot;
+import com.tyndalehouse.step.core.data.entities.KeyedEntity;
+import com.tyndalehouse.step.core.data.entities.ScriptureReference;
+import com.tyndalehouse.step.core.data.entities.Timeband;
+import com.tyndalehouse.step.core.data.entities.TimelineEvent;
+import com.tyndalehouse.step.core.data.entities.reference.TimeUnitType;
+import com.tyndalehouse.step.core.exceptions.StepInternalException;
+import com.tyndalehouse.step.core.utils.PassageReferenceUtils;
+import com.tyndalehouse.step.core.utils.StepIOUtils;
+
+/**
+ * Loads anything related to the timeline
+ * 
+ * @author Chris
+ * 
+ */
+public class TimelineModuleLoader {
+    private static final String TIMELINE_DIRECTORY = "timeline/";
+    private static final String HOTSPOTS_CSV_DATA_FILE = "hotspot/hotspots.csv";
+    private static final String TIMEBAND_CSV_DATA_FILE = "timeband/timebands.csv";
+
+    // CHECKSTYLE:OFF column mappings, names could be different so turning checkstyle off
+    private static final String TIMEBAND_SCALE_COLUMN = "scale";
+    private static final String TIMEBAND_DESCRIPTION_COLUMN = "description";
+    private static final String TIMEBAND_CODE_COLUMN = "code";
+    private static final String HOTSPOT_SCALE_COLUMN = "scale";
+    private static final String HOTSPOT_DESCRIPTION_COLUMN = "description";
+    private static final String HOTSPOT_CODE_COLUMN = "code";
+    private static final String HOTSPOT_TIMEBAND_COLUMN = "timeband";
+    private static final String HOTSPOT_COLUMN_NAME = "Timeline";
+    // CHECKSTYLE:ON
+
+    private static final Logger LOG = LoggerFactory.getLogger(TimelineModuleLoader.class);
+
+    /**
+     * loads up the timeline data
+     * 
+     * @param scriptureReferences the scripture references that might be found as part of the loading
+     */
+    public void init(final List<ScriptureReference> scriptureReferences) {
+
+        final Map<String, Timeband> bands = loadTimebands();
+        final Map<String, HotSpot> hotSpots = loadHotSpots(bands);
+        final List<CsvData> timelineDataFiles = getTimelineDataFiles();
+        final List<TimelineEvent> timelineEvents = loadTimelineEvents(hotSpots, timelineDataFiles,
+                scriptureReferences);
+
+        // finally persist to database
+        Ebean.save(timelineEvents);
+
+    }
+
+    /**
+     * Loads the hot spot data
+     * 
+     * @param bands the bands that represent the whole timeline, a hot spot is part of a specific band
+     * 
+     * @return a list of hot spots
+     */
+    private Map<String, HotSpot> loadHotSpots(final Map<String, Timeband> bands) {
+        LOG.debug("Loading hot spot data");
+        final Map<String, HotSpot> hotSpots = load(HOTSPOTS_CSV_DATA_FILE, new CsvDataMapper<HotSpot>() {
+            public HotSpot mapRow(final int rowNum, final CsvData data) {
+                final HotSpot hs = new HotSpot();
+                hs.setCode(data.getData(rowNum, HOTSPOT_CODE_COLUMN));
+                hs.setDescription(data.getData(rowNum, HOTSPOT_DESCRIPTION_COLUMN));
+                hs.setScale(TimeUnitType.valueOf(data.getData(rowNum, HOTSPOT_SCALE_COLUMN)));
+                hs.setTimeband(bands.get(data.getData(rowNum, HOTSPOT_TIMEBAND_COLUMN)));
+                return hs;
+            }
+        });
+
+        return hotSpots;
+    }
+
+    /**
+     * loads the timeband from file
+     * 
+     * @return the map of timebands loaded up.
+     */
+    private Map<String, Timeband> loadTimebands() {
+        LOG.debug("Loading timeband data");
+        final Map<String, Timeband> timebands = load(TIMEBAND_CSV_DATA_FILE, new CsvDataMapper<Timeband>() {
+            public Timeband mapRow(final int rowNum, final CsvData data) {
+                final Timeband timeband = new Timeband();
+                timeband.setCode(data.getData(rowNum, TIMEBAND_CODE_COLUMN));
+                timeband.setDescription(data.getData(rowNum, TIMEBAND_DESCRIPTION_COLUMN));
+                timeband.setScale(TimeUnitType.valueOf(data.getData(rowNum, TIMEBAND_SCALE_COLUMN)));
+                return timeband;
+            }
+        });
+
+        return timebands;
+    }
+
+    /**
+     * Loads the timeline data from files
+     * 
+     * @param hotspots the hotspots loaded so far
+     * @param csvDataFiles a set of csv data files that can be read
+     * @param scriptureReferences a list of scripture references to be populated as we load data up
+     * @return a set of timeline events
+     * 
+     */
+    private List<TimelineEvent> loadTimelineEvents(final Map<String, HotSpot> hotspots,
+            final List<CsvData> csvDataFiles, final List<ScriptureReference> scriptureReferences) {
+        LOG.debug("Loading timeline events data");
+        final List<TimelineEvent> events = new ArrayList<TimelineEvent>();
+
+        for (final CsvData data : csvDataFiles) {
+            for (int ii = 0; ii < data.size(); ii++) {
+                final TimelineEvent event = new TimelineEvent();
+                final PartialDate from = parseDate(data.getData(ii, "From"));
+                final PartialDate to = parseDate(data.getData(ii, "To"));
+
+                event.setHotSpot(hotspots.get(data.getData(ii, HOTSPOT_COLUMN_NAME)));
+                event.setSummary(data.getData(ii, "Name"));
+                if (from.getPrecision() != PrecisionType.NONE) {
+                    event.setFromDate(from.getDate().getTimeInMillis());
+                    event.setFromPrecision(from.getPrecision());
+                }
+
+                if (to.getPrecision() != PrecisionType.NONE) {
+                    event.setToDate(to.getDate().getTimeInMillis());
+                    event.setToPrecision(to.getPrecision());
+
+                }
+
+                events.add(event);
+
+                // finally add any scripture reference required
+
+                scriptureReferences.addAll(PassageReferenceUtils.getPassageReferences(event,
+                        data.getData(ii, "Refs")));
+            }
+        }
+
+        return events;
+    }
+
+    /**
+     * @return a list of files containing the timeline data
+     */
+    @SuppressWarnings("unchecked")
+    private List<CsvData> getTimelineDataFiles() {
+        // final File sourceDirectory;
+        InputStream indexFile = null;
+        List<String> indexChapters = null;
+        try {
+            indexFile = getClass().getResourceAsStream(TIMELINE_DIRECTORY + "index.txt");
+            indexChapters = IOUtils.readLines(indexFile);
+        } catch (final IOException e) {
+            throw new StepInternalException(e.getMessage(), e);
+        } finally {
+            StepIOUtils.closeQuietly(indexFile);
+        }
+
+        final List<CsvData> csvDataFiles = new ArrayList<CsvData>();
+        for (final String ic : indexChapters) {
+            csvDataFiles.add(readTimelineDataFile(ic));
+        }
+
+        return csvDataFiles;
+    }
+
+    /**
+     * Loads an individual file up.
+     * 
+     * @param timelineDataFile the timeline data file
+     * @return a CSV wrapped data file
+     */
+    private CsvData readTimelineDataFile(final String timelineDataFile) {
+        LOG.debug("Reading timeline file: [{}]", timelineDataFile);
+
+        // this uses a buffered reader internally
+        CSVReader reader = null;
+        Reader fileReader = null;
+        try {
+            final InputStream csvFile = getClass().getResourceAsStream(TIMELINE_DIRECTORY + timelineDataFile);
+            fileReader = new InputStreamReader(csvFile);
+
+            reader = new CSVReader(fileReader);
+            return new CsvData(reader.readAll());
+        } catch (final IOException e) {
+            throw new StepInternalException(e.getMessage(), e);
+        } finally {
+            closeQuietly(reader);
+        }
+    }
+
+    /**
+     * loads data from a csv file
+     * 
+     * @param resourceName the resource name to load
+     * @param csvDataMapper the mapper that will be used to construct a entity
+     * @param <K> a type representing the keyed entity
+     * @return a map of entities loaded from the CSV file
+     */
+    private <K extends KeyedEntity> Map<String, K> load(final String resourceName,
+            final CsvDataMapper<K> csvDataMapper) {
+        final Map<String, K> hotSpots = new HashMap<String, K>();
+
+        CSVReader reader = null;
+        try {
+            LOG.debug("Loading {}", resourceName);
+            reader = new CSVReader(new InputStreamReader(getClass().getResourceAsStream(resourceName)));
+            final CsvData data = new CsvData(reader.readAll());
+
+            for (int ii = 0; ii < data.size(); ii++) {
+                final K entity = csvDataMapper.mapRow(ii, data);
+                hotSpots.put(entity.getCode(), entity);
+            }
+        } catch (final IOException e) {
+            throw new StepInternalException(e.getMessage(), e);
+        } finally {
+            StepIOUtils.closeQuietly(reader);
+        }
+        return hotSpots;
+    }
+}

Added: trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/entities/HotSpot.java
===================================================================
--- trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/entities/HotSpot.java	                        (rev 0)
+++ trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/entities/HotSpot.java	2011-01-22 20:02:36 UTC (rev 203)
@@ -0,0 +1,128 @@
+package com.tyndalehouse.step.core.data.entities;
+
+import java.util.List;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+import javax.persistence.OneToMany;
+
+import com.avaje.ebean.annotation.CacheStrategy;
+import com.tyndalehouse.step.core.data.entities.reference.TimeUnitType;
+
+/**
+ * The entity representing a timeline
+ * 
+ * @author Chris
+ * 
+ */
+ at CacheStrategy(readOnly = true)
+ at Entity
+public class HotSpot implements KeyedEntity {
+    @Id
+    @GeneratedValue
+    private Integer id;
+
+    @Column
+    private String description;
+
+    @Column
+    private String code;
+
+    @Column
+    private TimeUnitType scale;
+
+    @ManyToOne(cascade = CascadeType.ALL)
+    private Timeband timeband;
+
+    @OneToMany
+    private List<TimelineEvent> events;
+
+    /**
+     * @return the id
+     */
+    public Integer getId() {
+        return this.id;
+    }
+
+    /**
+     * @param id the id to set
+     */
+    public void setId(final Integer id) {
+        this.id = id;
+    }
+
+    /**
+     * @return the description
+     */
+    public String getDescription() {
+        return this.description;
+    }
+
+    /**
+     * @param description the description to set
+     */
+    public void setDescription(final String description) {
+        this.description = description;
+    }
+
+    /**
+     * @return the code
+     */
+    public String getCode() {
+        return this.code;
+    }
+
+    /**
+     * @param code the code to set
+     */
+    public void setCode(final String code) {
+        this.code = code;
+    }
+
+    /**
+     * @return the scale
+     */
+    public TimeUnitType getScale() {
+        return this.scale;
+    }
+
+    /**
+     * @param scale the scale to set
+     */
+    public void setScale(final TimeUnitType scale) {
+        this.scale = scale;
+    }
+
+    /**
+     * @return the timeband
+     */
+    public Timeband getTimeband() {
+        return this.timeband;
+    }
+
+    /**
+     * @param timeband the timeband to set
+     */
+    public void setTimeband(final Timeband timeband) {
+        this.timeband = timeband;
+    }
+
+    /**
+     * @return the events
+     */
+    public List<TimelineEvent> getEvents() {
+        return this.events;
+    }
+
+    /**
+     * @param events the events to set
+     */
+    public void setEvents(final List<TimelineEvent> events) {
+        this.events = events;
+    }
+
+}

Added: trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/entities/KeyedEntity.java
===================================================================
--- trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/entities/KeyedEntity.java	                        (rev 0)
+++ trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/entities/KeyedEntity.java	2011-01-22 20:02:36 UTC (rev 203)
@@ -0,0 +1,16 @@
+package com.tyndalehouse.step.core.data.entities;
+
+/**
+ * An interface allowing the entity to be keyed by something other than just id
+ * 
+ * @author Chris
+ * 
+ */
+public interface KeyedEntity {
+    /**
+     * A code that can be used as a key to a Map
+     * 
+     * @return the code
+     */
+    String getCode();
+}

Added: trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/entities/ScriptureReference.java
===================================================================
--- trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/entities/ScriptureReference.java	                        (rev 0)
+++ trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/entities/ScriptureReference.java	2011-01-22 20:02:36 UTC (rev 203)
@@ -0,0 +1,118 @@
+package com.tyndalehouse.step.core.data.entities;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+
+import com.tyndalehouse.step.core.data.entities.reference.TargetType;
+
+/**
+ * The object that represents a scripture reference
+ * 
+ * @author Chris
+ */
+ at Entity
+public class ScriptureReference {
+    @Id
+    @GeneratedValue
+    private Integer scriptureReferenceId;
+
+    @ManyToOne
+    private ScriptureTarget target;
+
+    @Column
+    private TargetType targetType;
+
+    @Column
+    private int startVerseId;
+
+    @Column
+    private int endVerseId;
+
+    /**
+     * @return the scriptureReferenceId
+     */
+    public Integer getScriptureReferenceId() {
+        return this.scriptureReferenceId;
+    }
+
+    /**
+     * @param scriptureReferenceId the scriptureReferenceId to set
+     */
+    public void setScriptureReferenceId(final Integer scriptureReferenceId) {
+        this.scriptureReferenceId = scriptureReferenceId;
+    }
+
+    // /**
+    // * @return the target
+    // */
+    // public AbstractScriptureTarget getTarget() {
+    // return this.target;
+    // }
+    //
+    // /**
+    // * @param target the target to set
+    // */
+    // public void setTarget(final AbstractScriptureTarget target) {
+    // this.target = target;
+    // }
+
+    /**
+     * @return the targetType
+     */
+    public TargetType getTargetType() {
+        return this.targetType;
+    }
+
+    /**
+     * @param targetType the targetType to set
+     */
+    public void setTargetType(final TargetType targetType) {
+        this.targetType = targetType;
+    }
+
+    /**
+     * @return the startVerseId
+     */
+    public int getStartVerseId() {
+        return this.startVerseId;
+    }
+
+    /**
+     * @param startVerseId the startVerseId to set
+     */
+    public void setStartVerseId(final int startVerseId) {
+        this.startVerseId = startVerseId;
+    }
+
+    /**
+     * @return the endVerseId
+     */
+    public int getEndVerseId() {
+        return this.endVerseId;
+    }
+
+    /**
+     * @param endVerseId the endVerseId to set
+     */
+    public void setEndVerseId(final int endVerseId) {
+        this.endVerseId = endVerseId;
+    }
+
+    /**
+     * @return the target
+     */
+    public ScriptureTarget getTarget() {
+        return this.target;
+    }
+
+    /**
+     * @param target the target to set
+     */
+    public void setTarget(final ScriptureTarget target) {
+        this.target = target;
+    }
+
+}

Added: trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/entities/ScriptureTarget.java
===================================================================
--- trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/entities/ScriptureTarget.java	                        (rev 0)
+++ trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/entities/ScriptureTarget.java	2011-01-22 20:02:36 UTC (rev 203)
@@ -0,0 +1,41 @@
+package com.tyndalehouse.step.core.data.entities;
+
+import javax.persistence.DiscriminatorColumn;
+import javax.persistence.DiscriminatorType;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+
+import com.avaje.ebean.annotation.CacheStrategy;
+
+/**
+ * A marker interface meaning this object can be attached to scripture references
+ * 
+ * @author Chris
+ * 
+ */
+ at CacheStrategy(readOnly = true)
+ at Entity
+ at Inheritance(strategy = InheritanceType.JOINED)
+ at DiscriminatorColumn(discriminatorType = DiscriminatorType.INTEGER, name = "targetTypeId")
+public class ScriptureTarget {
+    @Id
+    @GeneratedValue
+    private Integer id;
+
+    /**
+     * @return the id
+     */
+    public Integer getId() {
+        return this.id;
+    }
+
+    /**
+     * @param id the id to set
+     */
+    public void setId(final Integer id) {
+        this.id = id;
+    }
+}

Added: trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/entities/Timeband.java
===================================================================
--- trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/entities/Timeband.java	                        (rev 0)
+++ trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/entities/Timeband.java	2011-01-22 20:02:36 UTC (rev 203)
@@ -0,0 +1,105 @@
+package com.tyndalehouse.step.core.data.entities;
+
+import java.util.List;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+
+import com.avaje.ebean.annotation.CacheStrategy;
+import com.tyndalehouse.step.core.data.entities.reference.TimeUnitType;
+
+/**
+ * Represents a timeband
+ * 
+ * @author Chris
+ */
+ at CacheStrategy(readOnly = true)
+ at Entity
+public class Timeband implements KeyedEntity {
+    @Id
+    @GeneratedValue
+    private Integer id;
+    @Column
+    private String code;
+    @Column
+    private TimeUnitType scale;
+    @Column
+    private String description;
+
+    @OneToMany(cascade = CascadeType.ALL)
+    private List<HotSpot> hotspots;
+
+    /**
+     * @return the id
+     */
+    public Integer getId() {
+        return this.id;
+    }
+
+    /**
+     * @param id the id to set
+     */
+    public void setId(final Integer id) {
+        this.id = id;
+    }
+
+    /**
+     * @return the code
+     */
+    public String getCode() {
+        return this.code;
+    }
+
+    /**
+     * @param code the code to set
+     */
+    public void setCode(final String code) {
+        this.code = code;
+    }
+
+    /**
+     * @return the scale
+     */
+    public TimeUnitType getScale() {
+        return this.scale;
+    }
+
+    /**
+     * @param scale the scale to set
+     */
+    public void setScale(final TimeUnitType scale) {
+        this.scale = scale;
+    }
+
+    /**
+     * @return the description
+     */
+    public String getDescription() {
+        return this.description;
+    }
+
+    /**
+     * @param description the description to set
+     */
+    public void setDescription(final String description) {
+        this.description = description;
+    }
+
+    /**
+     * @return the hotspots
+     */
+    public List<HotSpot> getHotspots() {
+        return this.hotspots;
+    }
+
+    /**
+     * @param hotspots the hotspots to set
+     */
+    public void setHotspots(final List<HotSpot> hotspots) {
+        this.hotspots = hotspots;
+    }
+}

Added: trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/entities/TimelineEvent.java
===================================================================
--- trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/entities/TimelineEvent.java	                        (rev 0)
+++ trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/entities/TimelineEvent.java	2011-01-22 20:02:36 UTC (rev 203)
@@ -0,0 +1,123 @@
+package com.tyndalehouse.step.core.data.entities;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.DiscriminatorValue;
+import javax.persistence.Entity;
+import javax.persistence.ManyToOne;
+
+import com.avaje.ebean.annotation.CacheStrategy;
+import com.tyndalehouse.step.core.data.common.PrecisionType;
+
+/**
+ * Represents an event or duration in time.
+ * 
+ * @author Chris
+ */
+ at CacheStrategy(readOnly = true)
+ at Entity
+ at DiscriminatorValue("1")
+public class TimelineEvent extends ScriptureTarget {
+    @Column
+    private String summary;
+
+    @Column(nullable = true)
+    private long fromDate;
+
+    @Column(nullable = true)
+    private long toDate;
+
+    @Column(nullable = true)
+    private PrecisionType fromPrecision;
+
+    @Column(nullable = true)
+    private PrecisionType toPrecision;
+
+    @ManyToOne(cascade = CascadeType.ALL)
+    private HotSpot hotSpot;
+
+    /**
+     * @return the summary
+     */
+    public String getSummary() {
+        return this.summary;
+    }
+
+    /**
+     * @param summary the summary to set
+     */
+    public void setSummary(final String summary) {
+        this.summary = summary;
+    }
+
+    /**
+     * @return the fromDate
+     */
+    public long getFromDate() {
+        return this.fromDate;
+    }
+
+    /**
+     * @param fromDate the fromDate to set
+     */
+    public void setFromDate(final long fromDate) {
+        this.fromDate = fromDate;
+    }
+
+    /**
+     * @return the toDate
+     */
+    public long getToDate() {
+        return this.toDate;
+    }
+
+    /**
+     * @param toDate the toDate to set
+     */
+    public void setToDate(final long toDate) {
+        this.toDate = toDate;
+    }
+
+    /**
+     * @return the fromPrecision
+     */
+    public PrecisionType getFromPrecision() {
+        return this.fromPrecision;
+    }
+
+    /**
+     * @param fromPrecision the fromPrecision to set
+     */
+    public void setFromPrecision(final PrecisionType fromPrecision) {
+        this.fromPrecision = fromPrecision;
+    }
+
+    /**
+     * @return the toPrecision
+     */
+    public PrecisionType getToPrecision() {
+        return this.toPrecision;
+    }
+
+    /**
+     * @param toPrecision the toPrecision to set
+     */
+    public void setToPrecision(final PrecisionType toPrecision) {
+        this.toPrecision = toPrecision;
+    }
+
+    /**
+     * @return the hotSpot
+     */
+    public HotSpot getHotSpot() {
+        return this.hotSpot;
+    }
+
+    /**
+     * @param hotSpot the hotSpot to set
+     */
+    public void setHotSpot(final HotSpot hotSpot) {
+        this.hotSpot = hotSpot;
+    }
+
+}

Added: trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/entities/reference/TargetType.java
===================================================================
--- trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/entities/reference/TargetType.java	                        (rev 0)
+++ trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/entities/reference/TargetType.java	2011-01-22 20:02:36 UTC (rev 203)
@@ -0,0 +1,12 @@
+package com.tyndalehouse.step.core.data.entities.reference;
+
+/**
+ * Represents different entities that can be linked to a scripture reference
+ * 
+ * @author Chris
+ * 
+ */
+public enum TargetType {
+    /** a timeline event */
+    TIMELINE_EVENT,
+}

Added: trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/entities/reference/TimeUnitType.java
===================================================================
--- trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/entities/reference/TimeUnitType.java	                        (rev 0)
+++ trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/entities/reference/TimeUnitType.java	2011-01-22 20:02:36 UTC (rev 203)
@@ -0,0 +1,24 @@
+package com.tyndalehouse.step.core.data.entities.reference;
+
+/**
+ * Indicates the best resolution of the hotspot or timeband
+ * 
+ * @author Chris
+ * 
+ */
+public enum TimeUnitType {
+    /** CENTURY */
+    CENTURY,
+    /** DAY */
+    DAY,
+    /** DECADE */
+    DECADE,
+    /** MILLIENIUM */
+    MILLENIUM,
+    /** MONTH */
+    MONTH,
+    /** WEEK */
+    WEEK,
+    /** YEAR */
+    YEAR,
+}

Modified: trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/exceptions/StepInternalException.java
===================================================================
--- trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/exceptions/StepInternalException.java	2011-01-07 22:52:32 UTC (rev 202)
+++ trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/exceptions/StepInternalException.java	2011-01-22 20:02:36 UTC (rev 203)
@@ -1,8 +1,8 @@
 package com.tyndalehouse.step.core.exceptions;
 
 /**
- * The default exception to be thrown throughout the application. It is of type {@link RuntimeException} so that it does
- * not require explicit catching
+ * The default exception to be thrown throughout the application. It is of type {@link RuntimeException} so
+ * that it does not require explicit catching
  * 
  * @author Chris
  * 

Modified: trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/guice/StepCoreModule.java
===================================================================
--- trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/guice/StepCoreModule.java	2011-01-07 22:52:32 UTC (rev 202)
+++ trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/guice/StepCoreModule.java	2011-01-22 20:02:36 UTC (rev 203)
@@ -8,19 +8,24 @@
 
 import org.crosswire.jsword.book.install.Installer;
 
+import com.avaje.ebean.EbeanServer;
 import com.google.inject.AbstractModule;
 import com.google.inject.Module;
 import com.google.inject.TypeLiteral;
 import com.google.inject.name.Names;
+import com.tyndalehouse.step.core.data.create.Loader;
+import com.tyndalehouse.step.core.guice.providers.DatabaseConfigProvider;
 import com.tyndalehouse.step.core.guice.providers.DefaultInstallersProvider;
 import com.tyndalehouse.step.core.guice.providers.DefaultLexiconRefsProvider;
 import com.tyndalehouse.step.core.guice.providers.DefaultVersionsProvider;
 import com.tyndalehouse.step.core.service.BibleInformationService;
 import com.tyndalehouse.step.core.service.JSwordService;
 import com.tyndalehouse.step.core.service.ModuleService;
+import com.tyndalehouse.step.core.service.TimelineService;
 import com.tyndalehouse.step.core.service.impl.BibleInformationServiceImpl;
 import com.tyndalehouse.step.core.service.impl.JSwordServiceImpl;
 import com.tyndalehouse.step.core.service.impl.ModuleServiceImpl;
+import com.tyndalehouse.step.core.service.impl.TimelineServiceImpl;
 
 /**
  * The module configuration that configures the application via guice
@@ -38,6 +43,8 @@
         bind(JSwordService.class).to(JSwordServiceImpl.class).asEagerSingleton();
         bind(BibleInformationService.class).to(BibleInformationServiceImpl.class).asEagerSingleton();
         bind(ModuleService.class).to(ModuleServiceImpl.class).asEagerSingleton();
+        bind(TimelineService.class).to(TimelineServiceImpl.class);
+        bind(Loader.class);
 
         bind(new TypeLiteral<List<String>>() {
         }).annotatedWith(Names.named("defaultVersions")).toProvider(DefaultVersionsProvider.class);
@@ -45,9 +52,24 @@
         }).annotatedWith(Names.named("defaultLexiconRefs")).toProvider(DefaultLexiconRefsProvider.class);
         bind(new TypeLiteral<List<Installer>>() {
         }).toProvider(DefaultInstallersProvider.class);
+
+        bind(EbeanServer.class).toProvider(DatabaseConfigProvider.class).asEagerSingleton();
+
+        bindDaos();
+        // bind(ConnectionSource.class).toProvider(DataSourceProvider.class);
     }
 
     /**
+     * helper method that binds the DAOs
+     */
+    private void bindDaos() {
+        // bind(TimebandDao.class).to(TimebandDaoImpl.class);
+        // bind(HotSpotDao.class).to(HotSpotDaoImpl.class);
+        // bind(TimelineEventDao.class).to(TimelineEventDaoImpl.class);
+        // bind(ScriptureReferenceDao.class).to(ScriptureReferenceDaoImpl.class);
+    }
+
+    /**
      * reads the core properties from the file
      * 
      * @return a list of properties read from file

Added: trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/guice/providers/DatabaseConfigProvider.java
===================================================================
--- trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/guice/providers/DatabaseConfigProvider.java	                        (rev 0)
+++ trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/guice/providers/DatabaseConfigProvider.java	2011-01-22 20:02:36 UTC (rev 203)
@@ -0,0 +1,117 @@
+package com.tyndalehouse.step.core.guice.providers;
+
+import org.apache.commons.dbcp.BasicDataSource;
+
+import com.avaje.ebean.EbeanServer;
+import com.avaje.ebean.EbeanServerFactory;
+import com.avaje.ebean.config.ServerConfig;
+import com.google.inject.Inject;
+import com.google.inject.Provider;
+import com.google.inject.name.Named;
+import com.tyndalehouse.step.core.data.entities.HotSpot;
+import com.tyndalehouse.step.core.data.entities.ScriptureReference;
+import com.tyndalehouse.step.core.data.entities.ScriptureTarget;
+import com.tyndalehouse.step.core.data.entities.Timeband;
+import com.tyndalehouse.step.core.data.entities.TimelineEvent;
+
+/**
+ * Returns a database connection server instance for use across the application
+ * 
+ * @author Chris
+ * 
+ */
+public class DatabaseConfigProvider implements Provider<EbeanServer> {
+    private final String driverClassName;
+    private final boolean poolStatements;
+    private final int maxActive;
+    private final int maxIdle;
+    private final int maxOpenStatements;
+    private final String validationQuery;
+    private final String url;
+    private final String username;
+    private final String password;
+
+    /**
+     * We inject some properties in to the datasource provider
+     * 
+     * @param driverClassName the driver name
+     * @param url the URL connection string
+     * @param username the username to login with
+     * @param password the password
+     * @param maxActive the maximum number of active connections
+     * @param maxIdle the maximum number of idle connections
+     * @param maxOpenStatements the maximum number of open statements
+     * @param poolableStatements true if statements should be pooled
+     * @param validationQuery the validation query to check the status of a connection
+     */
+    // CHECKSTYLE:OFF
+    @Inject
+    public DatabaseConfigProvider(@Named("app.db.driver") final String driverClassName,
+            @Named("app.db.url") final String url, @Named("app.db.username") final String username,
+            @Named("app.db.password") final String password,
+            @Named("app.db.maxActive") final String maxActive, @Named("app.db.maxIdle") final String maxIdle,
+            @Named("app.db.maxOpenStatement") final String maxOpenStatements,
+            @Named("app.db.poolableStatements") final String poolableStatements,
+            @Named("app.db.validationQuery") final String validationQuery) {
+        this.driverClassName = driverClassName;
+        this.url = url;
+        this.username = username;
+        this.password = password;
+        this.validationQuery = validationQuery;
+
+        // TODO add exception handling when i know how
+        this.maxActive = Integer.parseInt(maxActive);
+        this.maxIdle = Integer.parseInt(maxIdle);
+        this.maxOpenStatements = Integer.parseInt(maxOpenStatements);
+        this.poolStatements = Boolean.parseBoolean(poolableStatements);
+    }
+
+    // CHECKSTYLE:ON
+
+    @Override
+    public EbeanServer get() {
+        final ServerConfig config = new ServerConfig();
+        config.setName("db");
+
+        final BasicDataSource ds = new BasicDataSource();
+        ds.setDefaultAutoCommit(false);
+        ds.setDriverClassName(this.driverClassName);
+        ds.setPoolPreparedStatements(this.poolStatements);
+        ds.setMaxActive(this.maxActive);
+        ds.setMaxIdle(this.maxIdle);
+        ds.setMaxOpenPreparedStatements(this.maxOpenStatements);
+        ds.setValidationQuery(this.validationQuery);
+        ds.setUrl(this.url);
+        ds.setUsername(this.username);
+        ds.setPassword(this.password);
+
+        config.setDataSource(ds);
+
+        addEntities(config);
+
+        // set DDL options...
+        config.setDdlGenerate(true);
+        config.setDdlRun(true);
+
+        config.setDefaultServer(true);
+        config.setRegister(true);
+
+        return EbeanServerFactory.create(config);
+    }
+
+    /**
+     * Adds all entities to ebean server. We need to this, since it seems since Ebean only looks at exploded
+     * parts of the classpath and therfore we would have to hard code the jar file name into the classpath
+     * 
+     * @param config the configuration to be enhanced
+     */
+    private void addEntities(final ServerConfig config) {
+        // timeline entities
+        config.addClass(HotSpot.class);
+        config.addClass(Timeband.class);
+        config.addClass(TimelineEvent.class);
+        config.addClass(ScriptureTarget.class);
+        config.addClass(ScriptureReference.class);
+    }
+
+}

Modified: trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/guice/providers/DefaultInstallersProvider.java
===================================================================
--- trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/guice/providers/DefaultInstallersProvider.java	2011-01-07 22:52:32 UTC (rev 202)
+++ trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/guice/providers/DefaultInstallersProvider.java	2011-01-22 20:02:36 UTC (rev 203)
@@ -57,6 +57,7 @@
                         final Integer p = Integer.parseInt(proxyPort);
                         installer.setProxyPort(p.intValue());
                     } catch (final NumberFormatException e) {
+                        // TODO work out how this should be thrown
                         throw new StepInternalException("Unable to parse port number " + proxyPort, e);
                     }
                 }

Added: trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/service/TimelineService.java
===================================================================
--- trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/service/TimelineService.java	                        (rev 0)
+++ trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/service/TimelineService.java	2011-01-22 20:02:36 UTC (rev 203)
@@ -0,0 +1,26 @@
+package com.tyndalehouse.step.core.service;
+
+import java.util.List;
+
+import com.tyndalehouse.step.core.data.entities.Timeband;
+
+/**
+ * The timeline service gives access to all the data relating to the timeline the events, the configuration,
+ * etc.
+ * 
+ * The timeline data is currently loaded from a CSV file and stored in the database
+ * 
+ * @author Chris
+ * 
+ */
+public interface TimelineService {
+    /**
+     * Retrieves the whole configuration of the timeline. This defines a number of different bands, each with
+     * their hotpots. Each timeband is given a suggested scale (or time unit - decade, century, month day),
+     * etc. The hotspots also also given a unit.
+     * 
+     * @return a list of timebands with all the required details
+     */
+    List<Timeband> getTimelineConfiguration();
+
+}

Added: trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/service/impl/TimelineServiceImpl.java
===================================================================
--- trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/service/impl/TimelineServiceImpl.java	                        (rev 0)
+++ trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/service/impl/TimelineServiceImpl.java	2011-01-22 20:02:36 UTC (rev 203)
@@ -0,0 +1,36 @@
+package com.tyndalehouse.step.core.service.impl;
+
+import java.util.List;
+
+import com.avaje.ebean.Ebean;
+import com.google.inject.Singleton;
+import com.tyndalehouse.step.core.data.entities.Timeband;
+import com.tyndalehouse.step.core.service.TimelineService;
+
+/**
+ * The implementation of the timeline service, based on JDBC and ORM Lite to access the database.
+ * 
+ * @author Chris
+ */
+ at Singleton
+public class TimelineServiceImpl implements TimelineService {
+    // private final Loader loader;
+
+    // /**
+    // * Constructing a timeband dao
+    // *
+    // * @param timebandDao the data access object that can be used to access the timeband
+    // */
+    // @Inject
+    // public TimelineServiceImpl(final TimebandDao timebandDao, final HotSpotDao hotSpotDao, final Loader
+    // loader) {
+    // // this.timebandDao = timebandDao;
+    // // this.hotSpotDao = hotSpotDao;
+    // this.loader = loader;
+    // }
+
+    @Override
+    public List<Timeband> getTimelineConfiguration() {
+        return Ebean.createQuery(Timeband.class).fetch("hotspots").findList();
+    }
+}

Added: trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/utils/PassageReferenceUtils.java
===================================================================
--- trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/utils/PassageReferenceUtils.java	                        (rev 0)
+++ trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/utils/PassageReferenceUtils.java	2011-01-22 20:02:36 UTC (rev 203)
@@ -0,0 +1,83 @@
+package com.tyndalehouse.step.core.utils;
+
+import static java.lang.Integer.valueOf;
+import static org.apache.commons.lang.StringUtils.isNotBlank;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.crosswire.jsword.passage.KeyFactory;
+import org.crosswire.jsword.passage.NoSuchKeyException;
+import org.crosswire.jsword.passage.NoSuchVerseException;
+import org.crosswire.jsword.passage.PassageKeyFactory;
+import org.crosswire.jsword.passage.RestrictionType;
+import org.crosswire.jsword.passage.RocketPassage;
+import org.crosswire.jsword.passage.Verse;
+import org.crosswire.jsword.passage.VerseRange;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.tyndalehouse.step.core.data.entities.ScriptureReference;
+import com.tyndalehouse.step.core.data.entities.ScriptureTarget;
+import com.tyndalehouse.step.core.data.entities.reference.TargetType;
+import com.tyndalehouse.step.core.exceptions.StepInternalException;
+
+/**
+ * A helper class to deal with passage references
+ * 
+ * @author Chris
+ * 
+ * 
+ */
+public final class PassageReferenceUtils {
+    private static final Logger LOG = LoggerFactory.getLogger(PassageReferenceUtils.class);
+
+    /** prevent initialisation */
+    private PassageReferenceUtils() {
+        // no implementation
+    }
+
+    /**
+     * 
+     * @param references a list of references
+     * @param target id of the event
+     * @return the list of references strongly-typed
+     */
+    public static List<ScriptureReference> getPassageReferences(final ScriptureTarget target,
+            final String references) {
+        final List<ScriptureReference> refs = new ArrayList<ScriptureReference>();
+
+        if (isNotBlank(references)) {
+            LOG.debug("Resolving references for [{}]", references);
+            try {
+                final KeyFactory keyFactory = PassageKeyFactory.instance();
+                final RocketPassage rp = (RocketPassage) keyFactory.getKey(references);
+                for (int ii = 0; ii < rp.countRanges(RestrictionType.NONE); ii++) {
+                    final VerseRange vr = rp.getRangeAt(ii, RestrictionType.NONE);
+                    final Verse start = vr.getStart();
+                    final Verse end = vr.getEnd();
+
+                    final int startVerseId = start.getOrdinal();
+                    final int endVerseId = end.getOrdinal();
+
+                    LOG.trace("Found reference [{}] to [{}]", valueOf(startVerseId), valueOf(endVerseId));
+                    final ScriptureReference sr = new ScriptureReference();
+
+                    // TODO fix this:
+                    sr.setTarget(target);
+
+                    sr.setStartVerseId(startVerseId);
+                    sr.setEndVerseId(endVerseId);
+                    sr.setTargetType(TargetType.TIMELINE_EVENT);
+                    refs.add(sr);
+                }
+            } catch (final NoSuchVerseException nsve) {
+                // Nehemiah 6.20 might not exist for example...
+                LOG.error("Scripture reference does not exist [{}]", nsve);
+            } catch (final NoSuchKeyException e) {
+                throw new StepInternalException(e.getMessage(), e);
+            }
+        }
+        return refs;
+    }
+}

Added: trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/utils/StepIOUtils.java
===================================================================
--- trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/utils/StepIOUtils.java	                        (rev 0)
+++ trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/utils/StepIOUtils.java	2011-01-22 20:02:36 UTC (rev 203)
@@ -0,0 +1,37 @@
+package com.tyndalehouse.step.core.utils;
+
+import java.io.IOException;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Some IO Utils for use in the STEP application
+ * 
+ * @author Chris
+ * 
+ */
+public final class StepIOUtils {
+    private static final Logger LOG = LoggerFactory.getLogger(StepIOUtils.class);
+
+    /** preventing instanciation */
+    private StepIOUtils() {
+        // hiding implementation
+    }
+
+    /**
+     * Closes a @see Closeable properly
+     * 
+     * @param c the closeable object
+     */
+    public static void closeQuietly(final java.io.Closeable c) {
+        try {
+            if (c != null) {
+                c.close();
+            }
+        } catch (final IOException e) {
+            // if exception thrown, do nothing
+            LOG.warn("Failed to close reader or stream", e);
+        }
+    }
+}

Added: trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/hotspot/hotspots.csv
===================================================================
--- trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/hotspot/hotspots.csv	                        (rev 0)
+++ trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/hotspot/hotspots.csv	2011-01-22 20:02:36 UTC (rev 203)
@@ -0,0 +1,74 @@
+code,scale,description,timeband
+T_Abraham,YEAR,Abraham,TL_PatriarchsToJudges
+T_ACBronzeAge,MILLENIUM,AC Bronze Age,TL_ArchCult
+T_ACModern,CENTURY,AC Modern,TL_ArchCult
+T_AdamToAbraham,MILLENIUM,Adam to Abraham,TL_PatriarchsToJudges
+T_Africa,MILLENIUM,Africa,TL_Africa
+T_All,MILLENIUM,All,TL_Global
+T_Americas,MILLENIUM,Americas,TL_Americas
+T_ArchCult,CENTURY,Architecture and Culture,TL_ArchCult
+T_Asia,CENTURY,Asia,TL_Asia
+T_Assyria,CENTURY,Assyria,TL_OTNeighbours
+T_Babylon,MILLENIUM,Babylon,TL_OTNeighbours
+T_ACBabylonPersia,CENTURY,Babylon Persia,TL_ArchCult
+T_Bible,MILLENIUM,Bible,TL_Global
+T_BirthOfTheNation,CENTURY,Birth of the Nation,TL_Global
+T_China,CENTURY,China,TL_Asia
+T_Conquest,YEAR,Conquest,TL_PatriarchsToJudges
+T_David,DECADE,David,TL_Monarchy
+T_EarlyChurch,YEAR,Early church,TL_EarlyChurch
+T_Egypt,MILLENIUM,Egypt,TL_Egypt
+T_EgyptD12,CENTURY,Egypt D 12,TL_Egypt
+T_EgyptD18,CENTURY,Egypt D 18,TL_Egypt
+T_EgyptD19,CENTURY,Egypt D 19,TL_Egypt
+T_EgyptPtolemaic,MILLENIUM,Egypt Ptolemaic,TL_Egypt
+T_Esther,YEAR,Esther,TL_ExileAndReturn
+T_Europe,CENTURY,Europe,TL_Europe
+T_Exile,YEAR,Exile,TL_ExileAndReturn
+T_ExileAndReturn,YEAR,Exile and return,TL_ExileAndReturn
+T_Exodus,YEAR,Exodus,TL_PatriarchsToJudges
+T_Ezekiel,DECADE,Ezekiel,TL_ExileAndReturn
+T_Greece,CENTURY,Greece,TL_Europe
+T_HagZech,YEAR,Haggai and Zechariah,TL_ExileAndReturn
+T_Hasmonean,CENTURY,Hasmonean,TL_Intertestamental
+T_Herodians,CENTURY,Herodians,TL_Intertestamental
+T_India,CENTURY,India,TL_Asia
+T_Intertestamental,DECADE,Intertestamental,TL_Intertestamental
+T_ACIronAge,MILLENIUM,Iron Age,TL_ArchCult
+T_Isaac,YEAR,Isaac,TL_PatriarchsToJudges
+T_Isaiah,CENTURY,Isaiah,TL_Monarchy
+T_IsraelMonarchy,DECADE,Israel's monarchy,TL_Monarchy
+T_Jacob,YEAR,Jacob,TL_PatriarchsToJudges
+T_Jeremiah,DECADE,Jeremiah,TL_Monarchy
+T_JesusJohn,MONTH,Jesus and John,TL_Jesus
+T_JesusEarly,YEAR,Jesus' early life,TL_Jesus
+T_JesusGalilee,MONTH,Jesus in Galilee,TL_Jesus
+T_JesusGalileeArea,MONTH,Jesus in Galilee Area,TL_Jesus
+T_JesusJudea,MONTH,Jesus in Judea,TL_Jesus
+T_JesusPerea,MONTH,Jesus in Perea,TL_Jesus
+T_JesusResurrected,WEEK,Jesus Resurrected,TL_Jesus
+T_ACJewishPeriod,CENTURY,Jewish Period,TL_ArchCult
+T_JudahMonarchy,DECADE,Judah's monarchy,TL_Monarchy
+T_Judges,DECADE,Judges,TL_PatriarchsToJudges
+T_LifeOfJesus,YEAR,Life of Jesus,TL_Jesus
+T_Mesopotamia,MILLENIUM,Mesopotamia,TL_OTNeighbours
+T_Monarchy,DECADE,Monarchy,TL_Monarchy
+T_NewTestament,DECADE,New Testament,TL_NTChurch
+T_NTChurch,YEAR,NT Church,TL_NTChurch
+T_PassionWeek,DAY,Passion week,TL_Jesus
+T_Patriarchs,YEAR,Patriarchs,TL_Global
+T_PaulToRome,YEAR,Paul to Rome,TL_NTChurch
+T_PaulMJ1,MONTH,Paul's first missionary journey,TL_NTChurch
+T_PaulMJ2,MONTH,Paul's second missionary journey,TL_NTChurch
+T_PaulMJ3,MONTH,Paul's third missionary journey,TL_NTChurch
+T_Persia,CENTURY,Persia,TL_OTNeighbours
+T_Return,YEAR,Return,TL_ExileAndReturn
+T_ACRomeByzantium,MILLENIUM,Rom Byzantium,TL_ArchCult
+T_RomanEmpire,CENTURY,Roman empire,TL_Rome
+T_RomanRepublic,CENTURY,Roman Republic,TL_Rome
+T_Rome,CENTURY,Rome,TL_Rome
+T_Saul,YEAR,Saul,TL_Monarchy
+T_Solomon,DECADE,Solomon,TL_Monarchy
+T_Syria,MILLENIUM,Syria,TL_OTNeighbours
+T_UnitedMonarchy,YEAR,United monarchy,TL_Monarchy
+T_Wilderness,DECADE,Wilderness,TL_PatriarchsToJudges

Added: trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeband/timebands.csv
===================================================================
--- trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeband/timebands.csv	                        (rev 0)
+++ trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeband/timebands.csv	2011-01-22 20:02:36 UTC (rev 203)
@@ -0,0 +1,17 @@
+code,scale,description
+TL_Jesus,YEAR,Jesus
+TL_NTChurch,YEAR,New Testament Church
+TL_PatriarchsToJudges,DECADE,Patriarchs to Judges
+TL_Rome,DECADE,Rome
+TL_Egypt,DECADE,Egypt
+TL_Monarchy,DECADE,Monarchy
+TL_EarlyChurch,DECADE,Early Church
+TL_ArchCult,CENTURY,Architecture and Culture
+TL_OTNeighbours,DECADE,Old Testament Neighbours
+TL_Global,CENTURY,Global
+TL_ExileAndReturn,YEAR,Exile and Return
+TL_Intertestamental,CENTURY,Intertestamental
+TL_Africa,MILLENIUM,Africa
+TL_Asia,CENTURY,Asia
+TL_Europe,DECADE,Europe
+TL_Americas,MILLENIUM,Americas

Added: trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_Africa.csv
===================================================================
--- trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_Africa.csv	                        (rev 0)
+++ trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_Africa.csv	2011-01-22 20:02:36 UTC (rev 203)
@@ -0,0 +1,5 @@
+"ID","Name","From","To","From2","To2","Importance","Certainty","Flags","Timeline","Type","Description","Refs","Notes"
+"T_Africa","Events in Africa",-3000,1000,,,"T_All",,,"T_All","Timeline",,,
+"E_AFR1","Bantu expansion from Cameroon to Central Africa","-3000","-1500",,,"T_Africa","200",,"T_Africa","Period",,,
+"E_AFR2","Bantu expansion from Central to SouthernAfrica","-1000","500",,,"T_Africa","200",,"T_Africa","Period",,,
+"E_AFR3","Kingdom of Axum in Ethiopia","1","1000",,,"T_Africa","50",,"T_Africa","Dynasty",,,

Added: trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_Americas.csv
===================================================================
--- trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_Americas.csv	                        (rev 0)
+++ trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_Americas.csv	2011-01-22 20:02:36 UTC (rev 203)
@@ -0,0 +1,7 @@
+"ID","Name","From","To","From2","To2","Importance","Certainty","Flags","Timeline","Type","Description","Refs","Notes"
+"T_Americas","Events in the Americas",-4000,900,,,"T_All",,,"T_All","Timeline",,,"From Finegan, adding post-1917. Fuzzinesses mine. NB: these seem to assume a late Exodus"
+"E_AME1","First date on the Mayan Long Count calendar","-3112-08-11",,,,"T_Americas",,,"T_Americas","Event",,,
+"E_AME2","Mayan pre-classical period","-1000","250",,,"T_Americas","100/25",,"T_Americas","Period",,,
+"E_AME3","Mayan classical period","250","900",,,"T_Americas","25",,"T_Americas","Period",,,
+"E_AME4","Olmec civilisation","-1200","-400",,,"T_Americas","50",,"T_Americas","Period",,,
+"E_AME5","Hopewell tradition","-500","200",,,"T_Americas","50",,"T_Americas","Period","in eastern half of what's now the USA",,

Added: trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_ArchCult.csv
===================================================================
--- trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_ArchCult.csv	                        (rev 0)
+++ trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_ArchCult.csv	2011-01-22 20:02:36 UTC (rev 203)
@@ -0,0 +1,38 @@
+"ID","Name","From","To","From2","To2","Importance","Certainty","Flags","Timeline","Type","Description","Refs","Notes"
+"T_ArchCult","Archaeological and Cultural ",,,,,"T_All",,,"T_All","Timeline","Archaeological and Cultural Periods in the Holy Land. These are based on general archaeology and history, rather than Biblical accounts, so diverge from Biblical chronology particularly before the Exodus. ",,"From Finegan, adding post-1917. Fuzzinesses mine. NB: these seem to assume a late Exodus"
+"T_ACBronzeAge","Bronze Age","-3300","-1200",,,"T_ArchCult","50/25",,"T_ArchCult","Timeline","Canaanite Period",,
+"T_ACIronAge","Iron Age","-1200","-586",,,"T_ArchCult","25/0",,"T_ArchCult","Timeline","Israelite Period",,
+"T_ACBabylonPersia","Babylonian and Persian Periods","-586","-332",,,"T_ACIronAge",,,"T_ACIronAge","Timeline",,,
+"T_ACHellenistic","Hellenistic Period","-332","-37",,,"T_ACBabylonPersia",,,"T_ACBabylonPersia","Timeline",,,
+"T_ACJewishPeriod","Jewish periods of Tanakh scholarship","-175","500",,,"T_ArchCult","25",,"T_ArchCult","Timeline",,,"(best description? David IB's the expert here!)"
+"T_ACRomeByzantium","Roman and Byzantine Periods","-37","638",,,"T_ArchCult",,,"T_ArchCult","Timeline",,,
+"T_ACModern","Early Arab Period","638","1099",,,"T_ArchCult",,,"T_ArchCult","Timeline",,,
+"E_AC1","Palaeolithic",,"-18000",,,"T_ArchCult","/100",,"T_ArchCult","Period","Old Stone Age",,
+"E_AC2","Epipalaeolithic","-18000","-8300",,,"T_ArchCult","100/50",,"T_ArchCult","Period","Middle Stone Age",,
+"E_AC3","Neolithic","-8300","-4500",,,"T_ArchCult","50",,"T_ArchCult","Period","New Stone Age",,
+"E_AC4","Chalcolithic","-4500","-3300",,,"T_ArchCult","50",,"T_ArchCult","Period","Copper-Stone Age",,
+"E_AC5","Early Bronze Age I","-3300","-3000",,,"T_ACBronzeAge","50/25",,"T_ACBronzeAge","Period",,,
+"E_AC6","Early Bronze Age II","-3000","-2700",,,"T_ACBronzeAge","25",,"T_ACBronzeAge","Period",,,
+"E_AC7","Early Bronze Age III","-2700","-2200",,,"T_ACBronzeAge","25",,"T_ACBronzeAge","Period",,,
+"E_AC8","Middle Bronze Age I","-2200","-2000",,,"T_ACBronzeAge","25",,"T_ACBronzeAge","Period",,,
+"E_AC9","Middle Bronze Age II","-2000","-1550",,,"T_ACBronzeAge","25",,"T_ACBronzeAge","Period",,,
+"E_AC10","Late Bronze Age I","-1550","-1400",,,"T_ACBronzeAge","25",,"T_ACBronzeAge","Period",,,
+"E_AC11","Late Bronze Age II","-1400","-1200",,,"T_ACBronzeAge","25",,"T_ACBronzeAge","Period",,,
+"E_AC12","Iron Age I ","-1200","-1000",,,"T_ACIronAge","25",,"T_ACIronAge","Period",,,
+"E_AC13","Iron Age II","-1000","-586",,,"T_ACIronAge","25/0",,"T_ACIronAge","Period",,,
+"E_AC14","Babylonian Period","-586","-538",,,"T_ArchCult",,,"T_ArchCult","Period",,,
+"E_AC15","Persian Period","-538","-332",,,"T_ACBabylonPersia",,,"T_ACBabylonPersia","Period",,,
+"E_AC16","Hellenistic Period I","-332","-167",,,"T_ACBabylonPersia",,,"T_ACBabylonPersia","Period",,,
+"E_AC17","Soferim and Tannaiam","-175","200",,,"T_ACJewishPeriod","25",,"T_ACJewishPeriod","Period",,,
+"E_AC18","Hellenistic Period II","-167","-37",,,"T_ACBabylonPersia",,,"T_ACBabylonPersia","Period",,,
+"E_AC19","Early Roman Period","-37","132",,,"T_ACRomeByzantium",,,"T_ACRomeByzantium","Period",,,
+"E_AC20","Herodian Period","-37","70",,,"T_ACRomeByzantium",,,"T_ACRomeByzantium","Period",,,
+"E_AC21","Late Roman Period","132","324",,,"T_ACRomeByzantium",,,"T_ACRomeByzantium","Period",,,
+"E_AC22","Amoraim","200","500",,,"T_ACJewishPeriod","25",,"T_ACJewishPeriod","Period",,,
+"E_AC23","Byzantine Period","324","638",,,"T_ACRomeByzantium",,,"T_ACRomeByzantium","Period",,,
+"E_AC24","Talmudic","350","500",,,"T_ACJewishPeriod","25",,"T_ACJewishPeriod","Period",,,
+"E_AC25","Crusader Period","1099","1291",,,"T_ACModern",,,"T_ACModern","Period",,,
+"E_AC26","Late Arab Period","1291","1516",,,"T_ACModern",,,"T_ACModern","Period","Fatimid and Mameluke",,
+"E_AC27","Ottoman Period","1516","1917",,,"T_ACModern",,,"T_ACModern","Period",,,
+"E_AC28","British Mandate","1917","1948",,,"T_ACModern",,,"T_ACModern","Period",,,
+"E_AC29","Israel and Palestine","1948",,,,"T_ACModern",,,"T_ACModern","Period","The area occupied by Biblical Israel has formed the modern state of Israel and various Palestinian entities. ",,"(need to word this one carefully)"

Added: trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_Asia.csv
===================================================================
--- trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_Asia.csv	                        (rev 0)
+++ trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_Asia.csv	2011-01-22 20:02:36 UTC (rev 203)
@@ -0,0 +1,32 @@
+"ID","Name","From","To","From2","To2","Importance","Certainty","Flags","Timeline","Type","Description","Refs","Notes"
+"T_Asia","Events in Asia",-3300,600,,,"T_All",,,"T_All","Timeline",,,"From Finegan, adding post-1917. Fuzzinesses mine. NB: these seem to assume a late Exodus"
+"T_India","Indian subcontinent",-3300,600,,,"T_Asia",,,"T_Asia","Timeline",,,
+"T_China","China",-2070,420,,,"T_Asia",,,"T_Asia","Timeline",,,
+"E_ASIA1","Xia Dynasty","-2070","-1600",,,"T_China",,,"T_China","Dynasty",,,
+"E_ASIA2","Shang Dynasty","-1600","-1046",,,"T_China",,,"T_China","Dynasty",,,
+"E_ASIA3","Western Zhou Dynasty","-1046","-771",,,"T_China",,,"T_China","Dynasty",,,
+"E_ASIA4","Eastern Zhou Dynasty","-770","-256",,,"T_China",,,"T_China","Dynasty",,,
+"E_ASIA5","Spring and Autumn Period","-722","-476",,,"T_China",,,"T_China","Dynasty",,,
+"E_ASIA6","Warring States Period","-475","-221",,,"T_China",,,"T_China","Dynasty",,,
+"E_ASIA7","Qin Dynasty","-221","-206",,,"T_China",,,"T_China","Dynasty",,,
+"E_ASIA8","Western Han Dynasty","-206","9",,,"T_China",,,"T_China","Dynasty",,,
+"E_ASIA9","Xin Dynasty","9","23",,,"T_China",,,"T_China","Dynasty",,,
+"E_ASIA10","Eastern Han Dynasty","23","220",,,"T_China",,,"T_China","Dynasty",,,
+"E_ASIA11","Three Kingdoms","220","265",,,"T_China",,,"T_China","Dynasty",,,
+"E_ASIA12","Western Jin Dynasty","265","317",,,"T_China",,,"T_China","Dynasty",,,
+"E_ASIA13","Eastern Jin Dynasty","317","420",,,"T_China",,,"T_China","Dynasty",,,
+"E_ASIA14","Building of original Great Wall","-500","-221",,,"T_China",,,"T_China","Event","Current wall dates mainly from 15th century",,
+"E_ASIA15","Confucius","-551","-479",,,"T_China",,,"T_China","Life",,,
+"E_ASIA16","Lao Tzu","-600","-470",,,"T_China","50",,"T_China","Life","Traditional dates. Unclear whether he actually existed.",,
+"E_ASIA17","Indus Valley Civilisation","-3300","-1400",,,"T_India","100",,"T_India","Period","Mature phase 2600-1900 ",,
+"E_ASIA18","Vedic period","-1000","-321",,,"T_India","100/0",,"T_India","Period",,,
+"E_ASIA19","Composition of Rigveda","-1700","-1100",,,"T_India","100",,"T_India","Event",,,
+"E_ASIA20","Composition of Mahabharata and Ramayana","-750","-350",,,"T_India","100",,"T_India","Event",,,
+"E_ASIA21","Composition of Upanishads","-900","-600",,,"T_India","100",,"T_India","Event",,,
+"E_ASIA22","Mauryan Empire","-321","-184",,,"T_India","10",,"T_India","Dynasty",,,
+"E_ASIA23","Ashoka the Great","-269","-232",,,"T_India","10",,"T_India","Reign",,,
+"E_ASIA24","Sunga Dynasty","-183","-71",,,"T_India","10",,"T_India","Dynasty",,,
+"E_ASIA25","Kanva Dynasty","-71","-45",,,"T_India","10",,"T_India","Dynasty",,,
+"E_ASIA26","Sautavahana Empire","-230","220",,,"T_India","10",,"T_India","Dynasty",,,
+"E_ASIA27","Gupta Empire","320","550",,,"T_India","10",,"T_India","Dynasty",,,
+"E_ASIA28","Buddha","-560","-480",,,"T_India","10",,"T_India","Life",,,

Added: trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_EarlyChurch.csv
===================================================================
--- trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_EarlyChurch.csv	                        (rev 0)
+++ trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_EarlyChurch.csv	2011-01-22 20:02:36 UTC (rev 203)
@@ -0,0 +1,40 @@
+"ID","Name","From","To","From2","To2","Importance","Certainty","Flags","Timeline","Type","Description","Refs","Notes"
+"E_EC1","First Council of Nicaea","325",,,,"T_EarlyChurch",,,"T_EarlyChurch","Council",,,"Dates taken from Wikipedia mainly. Need checking."
+"E_EC2","First Council of Constantinople","381",,,,"T_EarlyChurch",,,"T_EarlyChurch","Council",,,
+"E_EC3","First Council of Ephesus","431",,,,"T_EarlyChurch",,,"T_EarlyChurch","Council",,,
+"E_EC4","Council of Chalcedon","451",,,,"T_EarlyChurch",,,"T_EarlyChurch","Council",,,
+"E_EC5","Constantine converts to Christianity","312",,,,"T_EarlyChurch",,,"T_EarlyChurch","Event",,,
+"E_EC6","Edict of Milan","313",,,,"T_EarlyChurch",,,"T_EarlyChurch","Event",,,
+"E_EC7","Alexander of Alexandria","280","326",,,"T_EarlyChurch",,,"T_EarlyChurch","Life",,,
+"E_EC8","Athanasius","293","373",,,"T_EarlyChurch",,,"T_EarlyChurch","Life",,,
+"E_EC9","Arius","253","336",,,"T_EarlyChurch",,,"T_EarlyChurch","Life",,,
+"E_EC10","Eusebius of Caesarea","265","339",,,"T_EarlyChurch",,,"T_EarlyChurch","Life",,,
+"E_EC11","Justin Martyr","100","165",,,"T_EarlyChurch",,,"T_EarlyChurch","Life",,,
+"E_EC12","Gregory Nazianzus","330","389",,,"T_EarlyChurch",,,"T_EarlyChurch","Life",,,
+"E_EC13","John Chystostom","347","407",,,"T_EarlyChurch",,,"T_EarlyChurch","Life",,,
+"E_EC14","Cyril of Alexandria","378","444",,,"T_EarlyChurch",,,"T_EarlyChurch","Life",,,
+"E_EC15","Nestorius","386","451",,,"T_EarlyChurch",,,"T_EarlyChurch","Life",,,
+"E_EC16","Pelagius","354","420",,,"T_EarlyChurch",,,"T_EarlyChurch","Life",,,
+"E_EC17","Augustine of Hippo","354","430",,,"T_EarlyChurch",,,"T_EarlyChurch","Life",,,
+"E_EC18","Eutyches","380","456",,,"T_EarlyChurch",,,"T_EarlyChurch","Life",,,
+"E_EC19","Theodoret of Cyrus","393","457",,,"T_EarlyChurch",,,"T_EarlyChurch","Life",,,
+"E_EC20","Theodore of Mopsuestia","350","428",,,"T_EarlyChurch",,,"T_EarlyChurch","Life",,,
+"E_EC21","Apollinarius of Laodicea","330","390",,,"T_EarlyChurch",,,"T_EarlyChurch","Life",,,
+"E_EC22","Ambrose of Milan","338","397",,,"T_EarlyChurch",,,"T_EarlyChurch","Life",,,
+"E_EC23","Jerome","347","420",,,"T_EarlyChurch",,,"T_EarlyChurch","Life",,,
+"E_EC24","Ignatius of Antioch","50","117",,,"T_EarlyChurch",,,"T_EarlyChurch","Life",,,
+"E_EC25","Polycarp of Smyrna","69","155",,,"T_EarlyChurch",,,"T_EarlyChurch","Life",,,
+"E_EC26","Irenaeous of Lyons","150","202",,,"T_EarlyChurch",,,"T_EarlyChurch","Life",,,
+"E_EC27","Tertullian","160","220",,,"T_EarlyChurch",,,"T_EarlyChurch","Life",,,
+"E_EC28","Clement of Alexandria","150","215",,,"T_EarlyChurch",,,"T_EarlyChurch","Life",,,
+"E_EC29","Origen of Alexandria","185","254",,,"T_EarlyChurch",,,"T_EarlyChurch","Life",,,
+"E_EC30","Clement of Rome","40","101",,,"T_EarlyChurch",,,"T_EarlyChurch","Life",,,
+"E_EC31","Didache","100",,,,"T_EarlyChurch",,,"T_EarlyChurch","Book",,,
+"E_EC32","Shepherd of Hermas","120",,,,"T_EarlyChurch",,,"T_EarlyChurch","Book",,,
+"E_EC33","Marcion","85","160",,,"T_EarlyChurch",,,"T_EarlyChurch","Life",,,
+"E_EC34","Gregory of Nyssa","335","394",,,"T_EarlyChurch",,,"T_EarlyChurch","Life",,,
+"E_EC35","Basil of Caesarea","330","379",,,"T_EarlyChurch",,,"T_EarlyChurch","Life",,,
+"E_EC36","Persecution in Lyon","177",,,,"T_EarlyChurch",,,"T_EarlyChurch","Event",,,
+"E_EC37","Edict of Decius","250-01",,,,"T_EarlyChurch",,,"T_EarlyChurch","Event",,,
+"E_EC38","Persecution under Decius and Valerian","250","260",,,"T_EarlyChurch",,,"T_EarlyChurch","Event",,,
+"E_EC39","Persecution under Diocletian","303","311",,,"T_EarlyChurch",,,"T_EarlyChurch","Event",,,

Added: trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_Egypt.csv
===================================================================
--- trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_Egypt.csv	                        (rev 0)
+++ trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_Egypt.csv	2011-01-22 20:02:36 UTC (rev 203)
@@ -0,0 +1,71 @@
+"ID","Name","From","To","From2","To2","Importance","Certainty","Flags","Timeline","Type","Description","Refs","Notes"
+"T_Egypt","Egyptian Dynasties","-3005","-332",,,"T_All","45/0",,"T_All","Timeline","3050/2960-332",,"From Finegan except where noted. His ranges given in the description, which I've converted into our system by taking a middle date (except where noted)"
+"E_EgyptD1","1st Dynasty","-3005","-2820",,,"T_Egypt","45/40",,"T_Egypt","Reign","3050/2960-2860/2780",,
+"E_EgyptD2","2nd Dynasty","-2820","-2670",,,"T_Egypt","40/30",,"T_Egypt","Reign","2860/2780-2695/2640",,
+"E_EgyptD3","3rd Dynasty","-2670","-2600",,,"T_Egypt","30/30",,"T_Egypt","Reign","2695/2640-2630/2575",,
+"E_EgyptD4","4th Dynasty","-2600","-2480",,,"T_Egypt","30/25",,"T_Egypt","Reign","2630/2575-2505/2460",,
+"E_EgyptD5","5th Dynasty","-2480","-2330",,,"T_Egypt","25/20",,"T_Egypt","Reign","2505/2460-2345/2310",,
+"E_EgyptD6_8","6th - 8th Dynasties","-2330","-2147",,,"T_Egypt","20/13",,"T_Egypt","Reign","2345/2310-2160/2134",,
+"E_EgyptD9_10","9th and 10th Dynasties","-2147","-2040",,,"T_Egypt","13/7",,"T_Egypt","Reign","2160/2134-2047/2033",,
+"E_EgyptD11","11th Dynasty","-2134","-1991",,,"T_Egypt",,,"T_Egypt","Reign","2134-1991",,
+"T_EgyptD12","12th Dynasty","-1991","-1785",,,"T_Egypt",,,"T_Egypt","Timeline","1991-1785",,
+"E_EgyptD13_14","13th and 14th Dynasties","-1785","-1655",,,"T_Egypt","0/5",,"T_Egypt","Reign","1785-1660/1650",,
+"E_EgyptD15_17","15th-17th Dynasties","-1655","-1552",,,"T_Egypt","5/10",,"T_Egypt","Reign","1660/1651-1560/1541",,"Finegan gives a partial table of 15th dynasty pharaohs, but not enough to be useful, I think."
+"T_EgyptD18","18th Dynasty","-1552","-1295",,,"T_Egypt","5/7",,"T_Egypt","Timeline","1560/1551-1320/1306",,"Using dates from Finegan's Table 116. Note that the date given here for the 18/19 endpoint (1295) contradicts the (1320/1306) range in on xxxvi. Wikipedia gives 1292, or 1295 on a page citing Ian Shaw, so taking this one."
+"T_EgyptD19","19th Dynasty","-1295","-1196",,,"T_Egypt","7/8",,"T_Egypt","Timeline","1320/1306-1200/1185",,"Dates from Finnegan's Table 117"
+"E_EgyptD20","20th Dynasty","-1192","-1077",,,"T_Egypt","8/8",,"T_Egypt","Reign","1200/1185-1085/1070",,
+"E_EgyptD21","21st Dynasty","-1077","-944",,,"T_Egypt","8/4",,"T_Egypt","Reign","1085/1070-947/940",,
+"E_EgyptD22_24","22nd - 24th Dynasties","-944","-712",,,"T_Egypt","4/2",,"T_Egypt","Reign","947/940-714/711",,
+"E_EgyptD25","25th Dynasty","-712","-656",,,"T_Egypt","2/1",,"T_Egypt","Reign","714/711-656/655",,
+"E_EgyptD26","26th Dynasty","-664","-525",,,"T_Egypt",,,"T_Egypt","Reign","664-525",,
+"E_EgyptD27","27th Dynasty","-525","-404",,,"T_Egypt",,,"T_Egypt","Reign","525-404",,
+"E_EgyptD28","28th Dynasty","-404","-398",,,"T_Egypt",,,"T_Egypt","Reign","404-398",,
+"E_EgyptD29","29th Dynasty","-399","-380",,,"T_Egypt",,,"T_Egypt","Reign","399-380",,
+"E_EgyptD30","30th Dynasty","-380","-342",,,"T_Egypt",,,"T_Egypt","Reign","380-342",,
+"E_EgyptD31","31th Dynasty","-342","-332",,,"T_Egypt",,,"T_Egypt","Reign","342-332",,
+"T_EgyptPtolemaic","Ptolemaic Kingdom","-332","-30",,,"T_Egypt",,,"T_Egypt","Timeline","332-30. Incomplete.",,"IVP dictionary 323-180, filled out from Wikipedia"
+"E_EgyptP1","Amenemhet I","-1991","-1962",,,"T_EgyptD12",,,"T_EgyptD12","Reign",,,
+"E_EgyptP2","Sesostris I","-1962","-1928",,,"T_EgyptD12",,,"T_EgyptD12","Reign",,,
+"E_EgyptP3","Amenemhet II","-1928","-1895",,,"T_EgyptD12",,,"T_EgyptD12","Reign",,,
+"E_EgyptP4","Sesostris II","-1895","-1878",,,"T_EgyptD12",,,"T_EgyptD12","Reign",,,
+"E_EgyptP5","Sesostris III","-1878","-1842",,,"T_EgyptD12",,,"T_EgyptD12","Reign",,,
+"E_EgyptP6","Amenemhet III","-1842","-1797",,,"T_EgyptD12",,,"T_EgyptD12","Reign",,,
+"E_EgyptP7","Amenemhet IV","-1797","-1790",,,"T_EgyptD12",,,"T_EgyptD12","Reign",,,
+"E_EgyptP8","Nefrusobek","-1790","-1785",,,"T_EgyptD12",,,"T_EgyptD12","Reign",,,
+"E_EgyptP9","Ahmose","-1552","-1526",,,"T_EgyptD18",,,"T_EgyptD18","Reign",,,
+"E_EgyptP10","Ahmenhotep","-1526","-1506",,,"T_EgyptD18",,,"T_EgyptD18","Reign",,,
+"E_EgyptP11","Thutmose I","-1506","-1493",,,"T_EgyptD18",,,"T_EgyptD18","Reign",,,
+"E_EgyptP12","Thutmose II","-1493","-1479",,,"T_EgyptD18",,,"T_EgyptD18","Reign",,,
+"E_EgyptP13","Thutmose III","-1479","-1425",,,"T_EgyptD18",,,"T_EgyptD18","Reign",,,
+"E_EgyptP14","Hatshepsut","-1478","-1458",,,"T_EgyptD18",,,"T_EgyptD18","Reign",,,
+"E_EgyptP15","Amenhotep II","-1425","-1401",,,"T_EgyptD18",,,"T_EgyptD18","Reign",,,
+"E_EgyptP16","Thutmose IV","-1401","-1390",,,"T_EgyptD18",,,"T_EgyptD18","Reign",,,
+"E_EgyptP17","Amenhotep III","-1390","-1352",,,"T_EgyptD18",,,"T_EgyptD18","Reign",,,
+"E_EgyptP18","Amenhotep IV","-1352","-1348",,,"T_EgyptD18",,,"T_EgyptD18","Reign",,,
+"E_EgyptP19","Akhenaten","-1348","-1338",,,"T_EgyptD18",,,"T_EgyptD18","Reign",,,
+"E_EgyptP20","Smenkhkare","-1338","-1336",,,"T_EgyptD18",,,"T_EgyptD18","Reign",,,
+"E_EgyptP21","Tutenkhaten/Tutankhamen","-1336","-1327",,,"T_EgyptD18",,,"T_EgyptD18","Reign",,,
+"E_EgyptP22","Ay","-1327","-1323",,,"T_EgyptD18",,,"T_EgyptD18","Reign",,,
+"E_EgyptP23","Horemheb","-1323","-1295",,,"T_EgyptD18",,,"T_EgyptD18","Reign",,,
+"E_EgyptP24","Ramses I","-1295","-1294",,,"T_EgyptD19",,,"T_EgyptD19","Reign",,,
+"E_EgyptP25","Seti I","-1294","-1279",,,"T_EgyptD19",,,"T_EgyptD19","Reign",,,
+"E_EgyptP26","Ramses II","-1279","-1212",,,"T_EgyptD19",,,"T_EgyptD19","Reign",,,
+"E_EgyptP27","Merneptah","-1212","-1202",,,"T_EgyptD19",,,"T_EgyptD19","Reign",,,
+"E_EgyptP28","Amenmesse","-1202","-1199",,,"T_EgyptD19",,,"T_EgyptD19","Reign",,,
+"E_EgyptP29","Seti II","-1202","-1196",,,"T_EgyptD19",,,"T_EgyptD19","Reign",,,
+"E_EgyptP30","Shesonq I","-944","-924",,,"T_Egypt","2/0",,"T_Egypt","Reign","22nd Dynasty. Shishak of the Bible","1Kgs.11.29-40;1Kgs.14.25-26; 2Chr.12.2-12","This and next four entries from IVP dictionary."
+"E_EgyptP31","Osorkon IV","-727","-716",,,"T_Egypt",,,"T_Egypt","Reign","22nd Dynasty. Most likely candidate for So of the Bible","2Kgs.17.4","Kitchen gives accession date as 732/730"
+"E_EgyptP32","Taharqa","-690","-664",,,"T_Egypt",,,"T_Egypt","Reign","25th Dynasty. Tirhakah of the Bible (although before he became Pharaoh)","2Kgs.19.9",
+"E_EgyptP33","Necho II","-610","-595",,,"T_Egypt",,,"T_Egypt","Reign","26th Dynasty. Neco of the Bible","2Kgs.23.29-35; 2Chr.35.20-36.4;Jer.25.19",
+"E_EgyptP34","Apries","-589","-570",,,"T_Egypt",,,"T_Egypt","Reign","26th Dynasty. Hophra of the Bible","Jer.37.5-11; Ezek.17.17; Ezek.29.2-3",
+"E_EgyptP35","Alexander the Great","-332","-323",,,"T_EgyptPtolemaic",,,"T_EgyptPtolemaic","Reign",,,
+"E_EgyptP36","Ptolemy I Soter","-323","-282",,,"T_EgyptPtolemaic",,,"T_EgyptPtolemaic","Reign",,,
+"E_EgyptP37","Judaea annexed by Ptolemy I","-320",,,,"T_EgyptPtolemaic",,,"T_EgyptPtolemaic","Event",,,
+"E_EgyptP38","Ptolemy II Philadelphus","-282","-246",,,"T_EgyptPtolemaic",,,"T_EgyptPtolemaic","Reign",,,
+"E_EgyptP39","Ptolemy III Euergetes","-246","-222",,,"T_EgyptPtolemaic",,,"T_EgyptPtolemaic","Reign",,,
+"E_EgyptP40","Ptolemy IV Philopator","-222","-205",,,"T_EgyptPtolemaic",,,"T_EgyptPtolemaic","Reign",,,
+"E_EgyptP41","Ptolemy V Epiphanes","-204","-180",,,"T_EgyptPtolemaic",,,"T_EgyptPtolemaic","Reign",,,
+"E_EgyptP42","Battle of Panium","-198",,,,"T_EgyptPtolemaic",,,"T_EgyptPtolemaic","Battle","Most foreign possessions lost to Syria",,
+"E_EgyptP43","Cleopatra (VII)","-51","-30",,,"T_EgyptPtolemaic",,,"T_EgyptPtolemaic","Reign",,,
+"E_EgyptP44","Main pyramid-building period",-2630,-2400,,,"T_Egypt",50,,"T_Egypt","Period","(from Wikipedia. Needs review.)",,
+"E_EgyptP45 ","Twelfth dynasty pyramid-building period",-1991,-1820,,,"T_Egypt",50,,"T_Egypt","Period",,,

Added: trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_Europe.csv
===================================================================
--- trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_Europe.csv	                        (rev 0)
+++ trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_Europe.csv	2011-01-22 20:02:36 UTC (rev 203)
@@ -0,0 +1,42 @@
+"ID","Name","From","To","From2","To2","Importance","Certainty","Flags","Timeline","Type","Description","Refs","Notes"
+"T_Europe","Events in Europe",,,,,"T_All",,,"T_All","Timeline","Archaeological and Cultural Periods in the Holy Land. These are based on general archaeology and history, rather than Biblical accounts, so diverge from Biblical chronology particularly before the Exodus. ",,"From Finegan, adding post-1917. Fuzzinesses mine. NB: these seem to assume a late Exodus"
+"T_Greece","Greece",,,,,"T_Europe",,,"T_Europe","Timeline",,,
+"E_EUR1","Minoan civilisation","-2000","-1450",,,"T_Greece","300/50",,"T_Greece","Period","Considerable debate as to start date, depending on what you define as ""civilisation""!",,
+"E_EUR2","Mycenaean civilisation","-1500","-1200",,,"T_Greece","50/50",,"T_Greece","Period","Wikipedia c1600-c1100",,
+"E_EUR3","Volcanic eruption on Thera","-1628",,,,"T_Greece","30 ",,"T_Greece","Event","Tree-counting date is 1628. Other datings up to 1600 or beyond",,
+"E_EUR4","Trojan War","-1190",,,,"T_Greece","50 ",,"T_Greece","War",,,
+"E_EUR5","Greek Dark Ages","-1200","-800",,,"T_Greece","50 ",,"T_Greece","Period",,,
+"E_EUR6","Growth of city states","-800","-510",,,"T_Greece","50/0",,"T_Greece","Period",,,
+"E_EUR7","Classical Greek period","-510","-323",,,"T_Greece",,,"T_Greece","Period",,,
+"E_EUR8","Persian Wars","-499","-450",,,"T_Greece","0/1",,"T_Greece","War",,,
+"E_EUR9","First Persion invasion of Greece","-492","-490",,,"T_Greece",,,"T_Greece","War",,,
+"E_EUR10","Battle of Marathon","-490-08",,,,"T_Greece","1",,"T_Greece","Battle",,,
+"E_EUR11","Second Persion invasion of Greece","-480-03","-479-07",,,"T_Greece",,,"T_Greece","War",,,
+"E_EUR12","Battle of Thermopylae","-480-08",,,,"T_Greece",,,"T_Greece","Battle",,,
+"E_EUR13","Battle of Salamis","-480-09",,,,"T_Greece",,,"T_Greece","Battle",,,
+"E_EUR14","Battles of Plataea and Mycale","-479-06",,,,"T_Greece",,,"T_Greece","Battle",,,
+"E_EUR15","Peloponnesian War","-431","-404",,,"T_Greece",,,"T_Greece","War",,,
+"E_EUR16","Hellenistic Greek period","-323","-146",,,"T_Greece",,,"T_Greece","Period",,,
+"E_EUR17","Annexation of Greece by Rome","-146",,,,"T_Greece",,,"T_Greece","Event",,,
+"E_EUR18","Hippocrates","-460","-370",,,"T_Greece","5",,"T_Greece","Life",,,
+"E_EUR19","Socrates","-469","-399",,,"T_Greece",,,"T_Greece","Life",,,
+"E_EUR20","Plato","-428","-348",,,"T_Greece",,,"T_Greece","Life",,,
+"E_EUR21","Aristotle","-384","-322",,,"T_Greece",,,"T_Greece","Life",,,
+"E_EUR22","Zeno of Citium","-334","-262",,,"T_Greece",,,"T_Greece","Life","Founder of Stoicism",,
+"E_EUR23","Epicurus","-341","-270",,,"T_Greece",,,"T_Greece","Life",,,
+"E_EUR24","Aeschylus","-525","-456",,,"T_Greece","5",,"T_Greece","Life",,,
+"E_EUR25","Sophocles","-495","-406",,,"T_Greece","5/0",,"T_Greece","Life",,,
+"E_EUR26","Euripedes","-480","-406",,,"T_Greece","5/0",,"T_Greece","Life",,,
+"E_EUR27","Aristophanes","-446","-388",,,"T_Greece","5",,"T_Greece","Life",,,
+"E_EUR28","Thales","-626","-546",,,"T_Greece",,,"T_Greece","Life",,,
+"E_EUR29","Pythagoras","-582","-507",,,"T_Greece","5",,"T_Greece","Life",,,
+"E_EUR30","Archimedes","-287","-212",,,"T_Greece",,,"T_Greece","Life",,,
+"E_EUR31","Euclid","-325","-265",,,"T_Greece",,,"T_Greece","Life",,,
+"E_EUR32","Hipparchus","-190","-120",,,"T_Greece",,,"T_Greece","Life",,,
+"E_EUR33","Eratosthenes","-276","-195",,,"T_Greece",,,"T_Greece","Life",,,
+"E_EUR34","Herodotus","-484","-425",,,"T_Greece","5",,"T_Greece","Life",,,
+"E_EUR35","Thucydides","-460","-395",,,"T_Greece","5",,"T_Greece","Life",,,
+"E_EUR36","Urnfield culture","-1300","-750",,,"T_Europe","50 ",,"T_Europe","Life","Celtic culture in central Europe",,
+"E_EUR37","Hallstatt culture","-750","-550",,,"T_Europe","50 ",,"T_Europe","Life","in central Europe",,
+"E_EUR38","La Tene culture","-450","-1",,,"T_Europe","50",,"T_Europe","Life","western and central Europe",,
+"E_EUR39","Stonehenge construction","-3100","-1600",,,"T_Europe","50",,"T_Europe","Life",,,

Added: trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_ExileAndReturn.csv
===================================================================
--- trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_ExileAndReturn.csv	                        (rev 0)
+++ trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_ExileAndReturn.csv	2011-01-22 20:02:36 UTC (rev 203)
@@ -0,0 +1,70 @@
+"ID","Name","From","To","From2","To2","Importance","Certainty","Flags","Timeline","Type","Description","Refs","Notes"
+"T_EzraNehemiah","Books of Ezra and Nehemiah","-538","-445",,,"T_Return",,,"T_Return","Timeline","Timeline of the books of Ezra and Nehemiah","Ezra.*;Neh.*","Following Finnegan where available, otherwise IVP (which in some cases differ by a year where both list the same date). Need to confirm regnal dates with PDBC then adjust. Assuming (as Finnegan does) that Artaxerxes is Artaxerxes I, not II as per some scholars."
+"E_EzNe1","Proclamation of Cyrus","-538",,,,"T_Return",,,"T_Return","Event",,"Ezra.1",
+"E_EzNe2","Return of the exiles following the proclamation of Cyrus","-538",,,,"T_Return",,,"T_Return","Event",,"Ezra.2",
+"E_EzNe3","Rebuilding the altar","-538-07",,,,"T_Return",,,"T_Return","Event",,"Ezra.3.1-7",
+"E_EzNe4","Start of the rebuilding of the temple","-536-02",,,,"T_Return",,,"T_Return","Event",,"Ezra.3.8-13",
+"E_EzNe5","Opposition to the rebuilding of the temple","-536","-486",,,"T_Return",,,"T_Return","Event",,"Ezra.4.1-5","To end of Darius's reign"
+"E_EzNe6","Accusation in the reign of Ahaseurus (Xerxes)","-485",,,,"T_Return",,,"T_Return","Event",,"Ezra.4.6","Started reign 486"
+"E_EzNe7","Letter to King Artaxeres and his response","-455",,,,"T_Return","10Y",,"T_Return","Event",,"Ezra.4.7-23","Artaxerxes reigned 465-424. However, this must logically predate Nehemiah 1 (445)."
+"E_EzNe8","Rebuilding the temple resumes following the prophesies of Haggai and Zechariah","-520-06",,,,"T_Return",,,"T_Return","Event","Aug/Sep ","Ezra.4.24-5.5","Haggai's prophecy on -06-01, Aug 29th"
+"E_EzNe9","Darius confirms Cyrus's decree","-520-06","-520-12",,,"T_Return","EM",,"T_Return","Event",,"Ezra.5.6-6.12","Allowing some travel time!"
+"E_EzNe10","Temple rebuilt","-520-06-24","-516-12-03",,,"T_Return",,,"T_Return","Event","Completion Mar 12th 515","Ezra.6.13-15;Hag.1.15",
+"E_EzNe11","Celebration of rebuilding of the temple and the first Passover","-516-12","-515-01",,,"T_Return",,,"T_Return","Event","Mar/Apr 515","Ezra.6.16-22",
+"E_EzNe12","Ezra sent to Jerusalem by Artaxerxes ","-458-01-01","-458-05-01",,,"T_Return",,,"T_Return","Event","Apr 8-Aug4","Ezra.7-8.32",
+"E_EzNe13","Silver and gold deposited in the temple","-458-05-04",,,,"T_Return",,,"T_Return","Event","Aug 7","Ezra.8.33-36",
+"E_EzNe14","Ezra prays about the problem of intermarriage","-458-05","-458-09",,,"T_Return",,,"T_Return","Event",,"Ezra.9-10.6",
+"E_EzNe15","Ezra's proclamation that the men of Judah should assemble","-458-09-07",,,,"T_Return",,,"T_Return","Event",,"Ezra.10.7-8",
+"E_EzNe16","Ezra's teaching on intermarriage","-458-09-10",,,,"T_Return",,,"T_Return","Event",,"Ezra.10.9-44",
+"E_EzNe17","Nehemiah visited by Hanani; his prayer","-446-09",,,,"T_Return",,,"T_Return","Event","Nov/Dec 446","Neh.1","A problem with the dating here, as Kislev is after Nisan in the year. Finnegan doesn't discuss this. Williamson (WBC Ezra-Nehemiah p167), following Bickermann, suggests we should be following regnal, not calendar years. Whether that changes other datings relating to Persian kings is unclear."
+"E_EzNe18","Artaxerxes sends Nehemiah to Jerusalem","-445-01",,,,"T_Return",,,"T_Return","Event","Apr/May 445","Neh.2.1-10",
+"E_EzNe19","Nehemiah governor of Israel","-445","-433",,,"T_Return",,,"T_Return","Event",,"Neh.5.14",
+"E_EzNe20","Nehemiah arrives in Jerusalem","-445-04-28",,,,"T_Return",,,"T_Return","Event","Aug 7","Neh.2.11",
+"E_EzNe21","Nehemiah inspects the walls","-445-05-02",,,,"T_Return",,,"T_Return","Event","night of Aug 10","Neh.2.12-16",
+"E_EzNe22","Rebuilding of the walls of Jerusalem","-445-05-03","-445-06-25",,,"T_Return",,,"T_Return","Event","Aug 11-Oct 2","Neh.2.17-6.19","End date given, plus length of 52 days. (Not sure which months were 30 days, which 29, so may be one or two days off.)"
+"E_EzNe23","Appointing of gatekeepers, singers and Levites","-445-06-26","-445-06-29",,,"T_Return",,,"T_Return","Event","Oct 3-Oct 6","Neh.6.20-7.72",
+"E_EzNe24","Ezra reads the Law","-445-07-01","-445-07-08",,,"T_Return",,,"T_Return","Event","Oct 7-Oct 14","Neh.7.73-8.18",
+"E_EzNe25","The Israelites confess their sins","-445-07-24",,,,"T_Return",,,"T_Return","Event",,"Neh.9-10",
+"E_EzNe26","Resettlement in Jerusalem","-445","-444",,,"T_Return",,,"T_Return","Event",,"Neh.11-12.26","No end time. Months seem reasonable"
+"E_EzNe27","Dedication of the walls of Jerusalem","-445-08",,,,"T_Return","EM",,"T_Return","Event",,"Neh.12.27-43",
+"E_EzNe28","Nehemiah's final reforms","-432",,,,"T_Return","EY",,"T_Return","Event",,"Neh.12.44-13.6","After 433. A dating issue in that the implication of 12:44, 13:1 is that everything from 12:27 to 13:6 is at the same time, but Nehemiah is present at 12:38 but not 13:6. Following Williamson in that the dedication of the walls was not long afterwards, and 12:44 onwards is one block."
+"E_EzNe29","Nehemiah returns to Jerusalem","-430",,,,"T_Return","EY",,"T_Return","Event",,"Neh.13.6-31","After the previous. No information how much later. Worth seeing how this parallels Malachi."
+"T_HagZech","Prophecies of Haggai and Zechariah","-520-06-01","-500",,,"T_Return",,,"T_Return","Timeline",,"Hag.*;Zech.*",
+"B_Hag","Haggai","-520-06-01","-520-09-23",,,"T_Return",,,"T_HagZech","Book",,"Hag.*",
+"B_Zech","Zechariah","-520-08","-500",,,"T_Return","0/20Y",,"T_HagZech","Book",,"Zech.*","No information on when chapters 9-14 were written."
+"B_Mal","Malachi","-430",,,,"T_Return","10 ",,"T_Return","Book",,"Mal.*","Contemporary with Nehemiah's return to Jerusalem, perhaps. IVP gives 433 in one article, 460 in another."
+"E_HagZech1","Prophecy through Haggai to rebuild the Temple","-520-06-01",,,,"T_HagZech",,,"T_HagZech","Event",,"Hag.1",
+"E_HagZech2","Prophecy through Haggai to be strong because the Lord is with them","-520-07-21",,,,"T_HagZech",,,"T_HagZech","Event",,"Hag.2.1-9",
+"E_HagZech3","Prophecies through Haggai that the people will be blessed, and to Zerubbabel","-520-09-23",,,,"T_HagZech",,,"T_HagZech","Event",,"Hag.2.10-19",
+"E_HagZech4","Prophecy through Zechariah to return to the Lord","-520-08",,,,"T_HagZech",,,"T_HagZech","Event","Oct/Nov 520","Zech.1.1-6",
+"E_HagZech5","Prophecy through Zechariah of various images","-520-11-24",,,,"T_HagZech",,,"T_HagZech","Event","Feb 519","Zech.1.7-6.15",
+"E_HagZech6","Prophecy through Zechariah concerning fasting and feasting","-518-04-09",,,,"T_HagZech",,,"T_HagZech","Event","Nov 518. Unclear if all one day","Zech.7-8",
+"E_HagZech7","Zechariah's oracles concerning Israel and her enemies","-500",,,,"T_HagZech","20Y",,"T_HagZech","Event","No dating information","Zech.9-14",
+"T_Ezekiel","Prophecies of Ezekiel","-593","-570",,,"T_Exile",,,"T_Exile","Timeline","Prophecies in Ezekiel which are dated.","Ezek.*","IVP gives 593-570. Note there are quite a few textual difficulties with the numbers."
+"B_Ezek","Ezekiel","-593","-570",,,"T_Exile","0/10",,"T_Ezekiel","Book",,"Ezek.*",
+"E_Ezek1","Call of Ezekiel","-593-04-05",,,,"T_Ezekiel",,,"T_Ezekiel",,"Jul 31","Ezek.1.1-.3.14",
+"E_Ezek2","Warning to Israel of the siege of Jerusalem","-593-04-12",,,,"T_Ezekiel",,,"T_Ezekiel",,"Aug 7","Ezek.3.16-5.17",
+"E_Ezek3","Prophecy about the Temple and Israel's leaders","-592-06-05",,,,"T_Ezekiel",,,"T_Ezekiel",,"Sep 17","Ezek.8.1-11.25",
+"E_Ezek4","Prophecy about Israel rebelling","-591-05-10",,,,"T_Ezekiel",,,"T_Ezekiel",,,"Ezek.20.1-44",
+"E_Ezek5","Prophecy about a cooking pot","-589-10-10",,,,"T_Ezekiel",,,"T_Ezekiel",,"Jan 15 588","Ezek.24.1-14",
+"E_Ezek6","Prophecy against Tyre","-587-01-01",,,,"T_Ezekiel",,,"T_Ezekiel",,"First day of month, no month given. Assuming first month as per WBC best guess?","Ezek.26","Whatever month this is in, predates the fall of Jerusalem, which is surprising. Discussion in WBC about this."
+"E_Ezek7","Prophecy against Egypt","-588-10-12",,,,"T_Ezekiel",,,"T_Ezekiel",,,"Ezek.29.1-16",
+"E_Ezek8","Prophecy that Nebuchadnezzar will conquer Egypt","-571-01-01",,,,"T_Ezekiel",,,"T_Ezekiel",,,"Ezek.29.17-21",
+"E_Ezek9","Prophecy about Egypt and Babylon","-587-01-07",,,,"T_Ezekiel",,,"T_Ezekiel",,,"Ezek.30.20-26",
+"E_Ezek10","Prophecy to Egypt about Assyria (the cedar of Lebanon)","-587-03-01",,,,"T_Ezekiel",,,"T_Ezekiel",,,"Ezek.31",
+"E_Ezek11","Lament concerning Pharaoh","-586-12-01",,,,"T_Ezekiel",,,"T_Ezekiel",,,"Ezek.32.1-16",
+"E_Ezek12","Warning to Egypt that other nations have already been destroyed","-586-12-15",,,,"T_Ezekiel",,,"T_Ezekiel",,"No month, assuming same as previous","Ezek.32.17-32",
+"E_Ezek13","Explanation of Jerusalem's fall","-586-10-05",,,,"T_Ezekiel",,,"T_Ezekiel",,"Jan 8 585","Ezek.33.21-33",
+"E_Ezek14","Vision of the new Temple","-573-01-10",,,,"T_Ezekiel",,,"T_Ezekiel",,"Apr 28 573","Ezek.40-48",
+"B_Lam","Lamentations","-586",,,,"T_Exile","5",,"T_Exile","Book",,"Lam.*","(not IVP. Assuming 586 or shortly after.)"
+"B_Obad","Obadiah","-586",,,,"T_Exile",,,"T_Exile","Book",,"Obad.*","c586 or later, from IVP"
+"T_Esther","Timeline of Esther",-484,-475,,,"T_Return",,,"T_Return","Timeline",,"Esth.*",
+"E_Est1","Queen Vashti deposed",-484,,,,"T_Esther",,,"T_Esther","Event",,"Esth.1",
+"E_Est2","Esther becomes queen ",-481,-480,,,"T_Esther",,,"T_Esther","Event",,"Esth.2.1-18",
+"E_Est3","Mordecai discovers the plot to assassinate Xerxes",-479,,,,"T_Esther","EY",,"T_Esther","Event",,"Esth.2.19-23",
+"E_Est4","Haman honoured",-476,,,,"T_Esther","EY",,"T_Esther","Event",,"Esth.3.1-6",
+"E_Est5","The plot to kill the Jews; the Jews saved","-475-01","-475-12",,,"T_Esther",,,"T_Esther","Event",,"Esth.3.7-10.3",
+"B_Job","Job",-500,,,,"T_Return",100,,"T_Return","Book","Possible date for the book of Job in its present form. (Opinions vary from about 1500 to 150BC.) It is likely that the story in some form is much older. ","Job.*","WBC"
+"B_Eccl","Ecclesiastes",-500,-200,,,"T_Return",100,,"T_Return","Book","Likely date for Ecclesiastes in its present form. ","Eccl.*","WBC"
+"B_Prov","Proverbs",-500,-400,,,"T_Return",100,,"T_Return","Book","Likely date for Proverbs in its present form. (Chapters 10-31 probably pre-date the exile)","Prov.*","WBC"
+"B_Song","Song of Solomon",-1011,-971,,,"T_UnitedMonarchy",,,"T_UnitedMonarchy","Book","Reflecting Solomon's authorship.","Song.*","(don't have a commentary - need to check what opinions are)"

Added: trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_Global.csv
===================================================================
--- trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_Global.csv	                        (rev 0)
+++ trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_Global.csv	2011-01-22 20:02:36 UTC (rev 203)
@@ -0,0 +1,24 @@
+"ID","Name","From","To","From2","To2","Importance","Certainty","Flags","Timeline","Type","Description","Refs","Notes"
+"T_All","All","-3800","2000","-4112","2000",,,,"T_All","Timeline","Container for everything",,"All refs very approximate"
+"T_Bible","Bible ","-3800","400","-4112","400","T_All",,,"T_All","Timeline","All OT dates need sorting out",,
+"T_Patriarchs","Patriarchs","-4000","-1547","-4112","-1859","T_All",,,"T_Bible","Timeline",,"Gen.*",
+"T_AdamToAbraham","Adam to Abraham","-4000","-1854","-4000","-1854","T_Patriarchs",,,"T_Patriarchs","Timeline",,"Gen.1-11",
+"T_Abraham","Abraham","-1854","-1679","-1854","-1679","T_Patriarchs",,,"T_Patriarchs","Timeline",,"Gen.12.1-25.18","These divisions from ""These are the generations of"""
+"T_Isaac","Isaac","-1754","-1574","-1754","-1574","T_Patriarchs",,,"T_Patriarchs","Timeline",,"Gen.25.19-35.29","These divisions from ""These are the generations of"""
+"T_Jacob","Jacob","-1694","-1547","-1694","-1547","T_Patriarchs",,,"T_Patriarchs","Timeline",,"Gen.37.1-50.26","These divisions from ""These are the generations of"""
+"T_BirthOfTheNation","Birth of the Nation","-1250","-1045","-1446","-1045","T_Bible",,,"T_Bible","Timeline",,"Exod.*; Josh.*; Judg.*; 1Sam.*",
+"T_Exodus","Exodus","-1250-01-01","-1250-12-31","-1446-01-01","-1446-12-31","T_BirthOfTheNation",,,"T_BirthOfTheNation","Timeline",,,"[**] All timelines need to be a range"
+"T_Wilderness","Wilderness","-1250","-1210","-1446","-1406","T_BirthOfTheNation",,,"T_BirthOfTheNation","Timeline",,,"[**] Need to ensure that this links with the previous"
+"T_Conquest","Conquest","-1210","-1190","-1406","-1386","T_BirthOfTheNation",,,"T_BirthOfTheNation","Timeline",,,
+"T_Judges","Judges","-1190","-1045","-1386","-1045","T_BirthOfTheNation",,,"T_BirthOfTheNation","Timeline",,,
+"T_Monarchy","Monarchy","-1045","-586",,,"T_Bible",,,"T_Bible","Timeline","During this period, Israel was ruled by kings. At first one king ruled all the people, but in 931 the nation split into two, Israel or Samaria, and Judah. Both gradually turned away from God, and were conquered by other nations, leading to the people going into exile. ","1Sam.8-31; 2Sam.*;1Kgs.*; 2Kgs.*; 1Chr.10-29;  2Chr.*",
+"T_UnitedMonarchy","United monarchy","-1045","-931",,,"T_Monarchy",,,"T_Monarchy","Timeline","[subline of Monarchy] After a period being ruled by judges, the Israeli nation asked God for a king. God called Saul, who was then succeeded by David, then Solomon. After this the kingdom split in two.","1Sam.8-31; 2Sam.*;  1Kgs.1-11; 1Chr.10-29; 2Chr.1-9",
+"T_JudahMonarchy","Judah (split kingdom)","-931","-586",,,"T_Monarchy",,,"T_Monarchy","Timeline","[subline of Monarchy] Judah was the southern and smaller of the two Jewish kingdoms, and included the city of Jerusalem. It outlived its northern rival, and was finally conquered by Babylon in 586.","1Kgs.12-22; 2Kgs.*; 2Chr.10-36",
+"T_IsraelMonarchy","Israel (split kingdom)","-931","-723",,,"T_Monarchy",,,"T_Monarchy","Timeline","[subline of Monarchy] Israel, also known as Samaria after its capital city, was the northern and larger of the two Israeli kingdoms. It was conquered by Assyria in 722.",,
+"T_ExileAndReturn","Exile and return","-586","-432",,,"T_Bible",,,"T_Bible","Timeline",,"Ezra.*; Neh.*",
+"T_Exile ","Exile  ","-586","-537",,,"T_ExileAndReturn",,,"T_ExileAndReturn","Timeline",,,
+"T_Return","Return","-537","-432",,,"T_ExileAndReturn",,,"T_ExileAndReturn","Timeline",,,
+"T_NewTestament","New Testament period","-3-12","100",,,"T_All",,,"T_Bible","Timeline",,,
+"T_LifeOfJesus","Life of Jesus","-3-12","33-05-14",,,"T_NewTestament",,,"T_NewTestament","Timeline",,,
+"T_NTChurch","NT church","33-05-24","100",,,"T_NewTestament",,,"T_NewTestament","Timeline",,,
+"T_EarlyChurch","Early church","100","500",,,"T_All",,,"T_All","Timeline",,,

Added: trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_Intertestamental.csv
===================================================================
--- trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_Intertestamental.csv	                        (rev 0)
+++ trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_Intertestamental.csv	2011-01-22 20:02:36 UTC (rev 203)
@@ -0,0 +1,25 @@
+"ID","Name","From","To","From2","To2","Importance","Certainty","Flags","Timeline","Type","Description","Refs","Notes"
+"T_Intertestamental","Intertestamental Period","-537","-1",,,"T_Bible",,,"T_Bible","Timeline","Intertestamental period. Needs further work",,
+"E_INT1","Judaea under Persian control","-537","-332",,,"T_Intertestamental",,,"T_Intertestamental","Event",,,
+"E_INT2","Judaea part of Alexander the Great's Empire","-331","-323",,,"T_Intertestamental",,,"T_Intertestamental","Event",,,
+"E_INT3","Judaea ruled by Egypt","-323","-198",,,"T_Intertestamental",,,"T_Intertestamental","Event",,,
+"E_INT4","Judaea ruled by Syria (the Seleucids)","-198","-164",,,"T_Intertestamental",,,"T_Intertestamental","Event",,,
+"T_Hasmonean","Hasmonean kingdom","-164",-37,,,"T_Intertestamental",,,"T_Intertestamental","Timeline",,,
+"E_INT5","Judea under Roman rule","-63","-1",,,"T_Intertestamental",,,"T_Intertestamental","Event","- and well after this of course",,
+"E_INT6","Maccabean Revolt","-167","-164",,,"T_Intertestamental",,,"T_Intertestamental","Event",,,
+"E_INT7","Judas Maccabaeus","-166","-161",,,"T_Hasmonean",,,"T_Hasmonean","Reign",,,
+"E_INT8","Jonathan Maccabaeus","-161","-143",,,"T_Hasmonean",,,"T_Hasmonean","Reign",,,
+"E_INT9","Simon Maccabaeus","-143","-135",,,"T_Hasmonean",,,"T_Hasmonean","Reign",,,
+"E_INT10","John Hyrcanus I","-135","-104",,,"T_Hasmonean",,,"T_Hasmonean","Reign",,,
+"E_INT11","Aristobalus I","-104",,,,"T_Hasmonean",,,"T_Hasmonean","Reign",,,
+"E_INT12","Alexander Jannaeus","-103","-76",,,"T_Hasmonean",,,"T_Hasmonean","Reign",,,
+"E_INT13","Queen Salome Alexandra and Hyrcanus II","-76","-67",,,"T_Hasmonean",,,"T_Hasmonean","Reign",,,
+"E_INT14","Hyrcanus II and Aristobalus II","-67",-40,,,"T_Hasmonean",,,"T_Hasmonean","Reign",,,
+"E_INT15","Pompey establishes Roman protection","-63",,,,"T_Hasmonean",,,"T_Hasmonean","Event",,,
+"E_INT16","Antigonus",-40,-36,,,"T_Hasmonean",,,"T_Hasmonean","Event",,,
+"T_Herodians","Herodian rulers of Judea",-40,44,,,"T_Intertestamental",,,"T_Intertestamental","Timeline","Overlaps with Jesus's ministry and beyond",,
+"E_INT17","Herod the Great",-36,-1,,,"T_Herodians",,,"T_Herodians","Reign",,,
+"E_INT18","Herod Archelaus, ethnarch of Samaria, Judea and Edom",-4,6,,,"T_Herodians",,,"T_Herodians","Reign",,,
+"E_INT19","Herod Antipas, tetrarch of Galilee",-4,39,,,"T_Herodians",,,"T_Herodians","Reign",,,
+"E_INT20","Herod Philip II, tetrarch of Iturea and Trachonitis",-4,34,,,"T_Herodians",,,"T_Herodians","Reign",,,
+"E_INT21","Herod Agrippa I, king of Israel",39,44,,,"T_Herodians",,,"T_Herodians","Reign","The Herod who died in Acts 12",,

Added: trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_Jesus.csv
===================================================================
--- trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_Jesus.csv	                        (rev 0)
+++ trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_Jesus.csv	2011-01-22 20:02:36 UTC (rev 203)
@@ -0,0 +1,64 @@
+"ID","Name","From","To","From2","To2","Importance","Certainty","Flags","Timeline","Type","Description","Refs","Source"
+"T_JesusEarly","Early Years of Jesus Christ and John the Baptist","-04-10","11",,,"T_LifeOfJesus",,,"T_LifeOfJesus","Timeline",,,
+"T_JesusJohn","John's ministry and the start of Jesus's","29-01","31-02",,,"T_LifeOfJesus",,,"T_LifeOfJesus","Timeline","Jesus mainly in Judea",,
+"T_JesusGalilee","Jesus's ministry in Galilee","31-02","31-12",,,"T_LifeOfJesus",,,"T_LifeOfJesus","Timeline",,,
+"T_JesusGalileeArea","Jesus's minstry in areas around Galilee","32-01","32-09",,,"T_LifeOfJesus",,,"T_LifeOfJesus","Timeline","Phoenicia, Mt Hermon, Decapolis",,
+"T_JesusJudea","Jesus's minstry in Judea","32-09","32-12",,,"T_LifeOfJesus",,,"T_LifeOfJesus","Timeline",,,
+"T_JesusPerea","Jesus's minstry in Perea","33-01","33-03",,,"T_LifeOfJesus",,,"T_LifeOfJesus","Timeline",,,
+"T_PassionWeek","Passion Week","33-03-28","33-04-05",,,"T_LifeOfJesus",,,"T_LifeOfJesus","Timeline",,,
+"T_JesusResurrected","The resurrected Jesus","33-04-05","33-05-14",,,"T_LifeOfJesus",,,"T_LifeOfJesus","Timeline",,,
+"E_JES1","Birth of John the Baptist promised","-04-10",,,,"T_JesusEarly",,,"T_JesusEarly","Event",,"Luke.1.5-25",
+"E_JES2","Birth of Jesus promised","-03-04",,,,"T_JesusEarly",,,"T_JesusEarly","Event",,"Luke.1.26-56;Matt.1.18-24",
+"E_JES3","Birth of John the Baptist","-03-07",,,,"T_JesusEarly",,,"T_JesusEarly","Event",,"Luke.1.57-80",
+"E_JES4","Birth of Jesus ","-02-01",,,,"T_JesusEarly",,,"T_JesusEarly","Event",,"Luke.2.1-20; Matt.1.25",
+"E_JES5","Jesus presented in the Temple","-02-01",,,,"T_JesusEarly",,,"T_JesusEarly","Event",,"Luke.2.21-40",
+"E_JES6","Visit of the Magi","-02-09",,,,"T_JesusEarly",,,"T_JesusEarly","Event","Two theories in Finnegan (550-551). Summer/late-fall, or Dec 25. Star seen on Jun 17th","Matt.2.1-12",
+"E_JES7","Flight to Egypt","-02-10",,,,"T_JesusEarly",,,"T_JesusEarly","Event",,"Matt.2.13-18",
+"E_JES8","Herod's death","-01-04",,,,"T_JesusEarly",,,"T_JesusEarly","Event","Between January and Passover, probably later rather than earlier",,
+"E_JES9","Return from Egypt",1,,,,"T_JesusEarly",,,"T_JesusEarly","Event","By tradition two years after the flight","Matt.2.19-23",
+"E_JES10","Jesus in the Temple at age 12","11-05",,,,"T_JesusEarly",,,"T_JesusEarly","Event",,"Luke.2.41-52",
+"E_JES11","Public ministry of John the Baptist","29-01","29-09",,,"T_JesusJohn",,,"T_JesusJohn","Event",,"Matt.3.1-12;Mark.1.1-8;Luke.3.1-20;John.1.19-28",
+"E_JES12","Jesus's baptism","29-09",,,,"T_JesusJohn","EM",,"T_JesusJohn","Event",,"Matt.3.13-17;Mark.1.9-11;Luke.3.21-22;John.1.29-34",
+"E_JES13","Jesus's temptation in the desert","29-10","29-11",,,"T_JesusJohn","EM",,"T_JesusJohn","Event",,"Matt.4.1-11;Mark.1.12-13;Luke.4.1-13",
+"E_JES14","End of John's Ministry and the beginning of Jesus's.","29-09","31-02",,,"T_JesusJohn",,,"T_JesusJohn","Event","Autumn 29. John 2:20 in Spring 30. John 4:35 in Jan/Feb 31","Matt.4.12;Mark.1.14;Luke.4.14;John.1.35-4.45",
+"E_JES15","Opposition at home and a new headquarters","31-03",,,,"T_JesusGalilee","EM",,"T_JesusGalilee","Event",,"Matt.4.13-17;Mark.1.14-15;Luke.4.14-31;John.4.46-54",
+"E_JES16","Disciples called","31-03",,,,"T_JesusGalilee","EM",,"T_JesusGalilee","Event",,"Matt.4.18-24;Matt.8.2-4;Matt.8.14-17;Matt.9.1-17;Mark.1.16-2.22;Luke.4.31-5.39",
+"E_JES17","Sabbath controversies","31-05","31-10",,,"T_JesusGalilee",,,"T_JesusGalilee","Event","Matt 12:1 and parallels around Passover 31. John 5:1 Oct 31","Matt.4.25;Matt.12.1-21;Mark.2.23-3.12;Luke.6.1-11;John.5.1-47",
+"E_JES18","Appointment of the Twelve and Sermon on the Mount","31-11",,,,"T_JesusGalilee","EM",,"T_JesusGalilee","Event",,"Matt.5.1-7.29;Mark.3.13-19;Luke.6.12-49",
+"E_JES19","Growing fame; emphasis on repentance","31-11",,,,"T_JesusGalilee","EM",,"T_JesusGalilee","Event",,"Matt.8.1;Matt.8.5-13;Matt.11.2-30;Luke.7.1-50",
+"E_JES20","First public rejection by Jewish leaders","31-11",,,,"T_JesusGalilee","EM",,"T_JesusGalilee","Event",,"Matt.12.22-50;Mark.3.20-35;Luke.8.1-3;Luke.8.19-21",
+"E_JES21","Secrets about the kingdom taught in parables","31-11",,,,"T_JesusGalilee","EM",,"T_JesusGalilee","Event",,"Matt.13.1-52;Mark.4.1-34;Luke.8.4-18",
+"E_JES22","Continuing opposition","31-11",,,,"T_JesusGalilee","EM",,"T_JesusGalilee","Event",,"Matt.8.18;Matt.8.23-34;Matt.9.18-34;Matt.13.54-58;Mark.4.35-6.6;Luke.8.22-56",
+"E_JES23","Final Galilean campaign","31-11",,,,"T_JesusGalilee","EM",,"T_JesusGalilee","Event",,"Matt.9.35-11.1;Matt.14.1-12;Mark.6.6-30;Luke.9.1-10",
+"E_JES24","Lesson on the bread of life","32-04",,,,"T_JesusGalileeArea",,,"T_JesusGalileeArea","Event","April 32","Matt.14.13-36;Mark.6.31-56;Luke.9.10-17;John.6.1-71",
+"E_JES25","Lesson on the yeast of the Pharisees, Sadducees and Herodians","32-04",,,,"T_JesusGalileeArea","EM",,"T_JesusGalileeArea","Event",,"Matt.15.1-16.12;Mark.7.1-8.26;John.7.1",
+"E_JES26","Lesson of Messiahship learned and confirmed","32-04",,,,"T_JesusGalileeArea","EM",,"T_JesusGalileeArea","Event",,"Matt.16.13-17.13;Mark.8.27-9.13;Luke.9.18-36",
+"E_JES27","Lessons on responsibility to others","32-04",,,,"T_JesusGalileeArea","EM",,"T_JesusGalileeArea","Event",,"Matt.17.14-18.35;Mark.9.14-50;Luke.9.37-50",
+"E_JES28","Journey to Jerusalem for Tabernacles","32-09",,,,"T_JesusGalileeArea","EM",,"T_JesusGalileeArea","Event",,"Matt.8.19-22;Luke.9.51-62;John.7.2-10",
+"E_JES29","Teachings at Tabernacles","32-09",,,,"T_JesusJudea",,,"T_JesusJudea","Event","Sep 32","John.7.11-8.59",
+"E_JES30","Private lessons on loving service and prayer","32-10",,,,"T_JesusJudea","EM",,"T_JesusJudea","Event",,"Luke.10.1-11.13",
+"E_JES31","Second debate with the scribes and Pharisees","32-11",,,,"T_JesusJudea","EM",,"T_JesusJudea","Event",,"Luke.11.14-13.21",
+"E_JES32","Teaching at the Feast of Dedication","32-12",,,,"T_JesusJudea",,,"T_JesusJudea","Event","Dec 32","John.9.1-10.39",
+"E_JES33","Principles of discipleship","33-01",,,,"T_JesusPerea","EM",,"T_JesusPerea","Event",,"Luke.13.22-17.10;John.10.40-42",
+"E_JES34","Raising of Lazarus and a brief tour through Samaria and Galilee","33-01",,,,"T_JesusPerea","EM",,"T_JesusPerea","Event",,"Luke.17.11-37;John.11.1-54",
+"E_JES35","Teaching on final journey to Jerusalem","33-02",,,,"T_JesusPerea","EM",,"T_JesusPerea","Event",,"Matt.19.1-20.34;Mark.10.1-52;Luke.18.1-19.28",
+"E_JES36","Arrived at Bethany","33-03-28",,,,"T_PassionWeek",,,"T_PassionWeek","Event","Bethany over the Jordan, not the same Bethany as in Matt.26","John.12.1-8",
+"E_JES37","Crowd came to see Jesus","33-03-29",,,,"T_PassionWeek",,,"T_PassionWeek","Event",,"John.12.9-11",
+"E_JES38","Triumphal Entry into Jerusalem","33-03-30",,,,"T_PassionWeek",,,"T_PassionWeek","Event",,"Matt.21.1-11;Mark.11.1-11; Luke.19.28-44;John.12.12-19",
+"E_JES39","Jesus curses the fig tree","33-03-31",,,,"T_PassionWeek",,,"T_PassionWeek","Event","NB: discrepancy between Matthew and Mark here","Mark.11.12-14",
+"E_JES40","Cleansing of the temple","33-03-31",,,,"T_PassionWeek",,,"T_PassionWeek","Event",,"Matt.21.12-17;Mark.11.15-19;Luke.19.45-46",
+"E_JES41","The fig tree is withered","33-04-01",,,,"T_PassionWeek",,,"T_PassionWeek","Event",,"Matt.21.18-22;Mark.11.20-25",
+"E_JES42","Jesus teaches and disputes in the temple","33-04-01",,,,"T_PassionWeek",,,"T_PassionWeek","Event",,"Matt.21.23-23.39; Mark.11.27-12.44;Luke.19.47-21:4",
+"E_JES43","Jesus on the Mount of Olives","33-04-01",,,,"T_PassionWeek",,,"T_PassionWeek","Event",,"Matt.24.1-25.46;Mark.13.1-37;Luke.21.5-36",
+"E_JES44","Jesus anointed at Bethany","33-04-01",,,,"T_PassionWeek",,,"T_PassionWeek","Event",,"Matt.26.4-13;Mark.14.1-9",
+"E_JES45","Judas arranges to betray Jesus","33-04-01",,,,"T_PassionWeek",,,"T_PassionWeek","Event",,"Matt.26.14-16;Mark.14.10-11;Luke.22.1-6",
+"E_JES46","The Last Supper","33-04-02",,,,"T_PassionWeek",,,"T_PassionWeek","Event",,"Matt.26.17-30;Mark.14.12-26;Luke.22.7-30;John.13.1-30",
+"E_JES47","Jesus's last teaching","33-04-02",,,,"T_PassionWeek",,,"T_PassionWeek","Event",,"Matt.26.31-35;Mark.14.27-31;Luke.22.31-38;John.13.31-17.26",
+"E_JES48","The garden of Gethsemane","33-04-02",,,,"T_PassionWeek",,,"T_PassionWeek","Event",,"Matt.26.36-46;Mark.14.32-42;Luke.22.39-46;John.18.1",
+"E_JES49","Jesus is arrested","33-04-03",,,,"T_PassionWeek",,,"T_PassionWeek","Event","(With Hastings) assuming arrested around midnight, so start a new day here.","Matt.26.47-56;Mark.14.43-52;Luke.22.47-53;John.18.2-12",
+"E_JES50","Jesus's trials","33-04-03",,,,"T_PassionWeek",,,"T_PassionWeek","Event",,"Matt.26.57-27.26;Mark.14.53-15.15;Luke.22.54-23.25;John.18.13-19.16",
+"E_JES51","Crucifixion","33-04-03",,,,"T_PassionWeek",,,"T_PassionWeek","Event",,"Matt.27.27-56;Mark.15.16-41;Luke.22.26-49;John.19.17-37",
+"E_JES52","Burial","33-04-03",,,,"T_PassionWeek",,,"T_PassionWeek","Event","NB: the ""next day"" would start at sunset. Assuming this happened that evening","Matt.27.57-66;Mark.15.42-47;Luke.22.50-56;John.19.38-42",
+"E_JES53","Resurrection","33-04-05",,,,"T_PassionWeek",,,"T_PassionWeek","Event",,"Matt.28.1-15;Mark.16.1-11;Luke.24.1-12;John.20.1-18",
+"E_JES54","Post-resurrection appearances","33-04-05","33-05-14",,,"T_JesusResurrected",,,"T_JesusResurrected","Event",,"Matt.28.16-20;Mark.16.12-18;Luke.24.13-49;John.20.19-21.25;Acts.1.3-8",
+"E_JES55","Ascension","33-05-14",,,,"T_JesusResurrected",,,"T_JesusResurrected","Event",,"Luke.24.50-53;Mark.16.19-20;Acts.1.9-11",

Added: trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_Monarchy.csv
===================================================================
--- trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_Monarchy.csv	                        (rev 0)
+++ trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_Monarchy.csv	2011-01-22 20:02:36 UTC (rev 203)
@@ -0,0 +1,175 @@
+"ID","Name","From","To","From2","To2","Importance","Certainty","Flags","Timeline","Type","Description","Refs","Notes"
+"T_Saul","Saul","-1042","-1011","-1050","-1011","T_UnitedMonarchy",,,"T_UnitedMonarchy","Timeline",,,
+"T_David","David ","-1011","-971",,,"T_UnitedMonarchy",,,"T_UnitedMonarchy","Timeline",,,
+"T_Solomon","Solomon","-971","-931",,,"T_UnitedMonarchy",,,"T_UnitedMonarchy","Timeline",,,
+"E_MON1","Saul","-1042","-1011","-1050","-1011",,"10Y",,"T_Saul","Reign",,"1Sam.9-31",
+"E_MON2","Saul anointed as king; Samuel retires","-1042",,"-1050",,"T_Saul","10Y",,"T_Saul","Event",,"1Sam.9-12",
+"E_MON3","Saul fights the Philistines at Gibeah","-1040",,"-1048",,"T_Saul","10Y",,"T_Saul","Event",,"1Sam.13-14",
+"E_MON4","Saul fights the Amalekites; rejected by God","-1026",,"-1034",,"T_Saul","10Y",,"T_Saul","Event",,"1Sam.15",
+"E_MON5","David anointed by Samuel","-1018",,,,"T_Saul",,,"T_Saul","Event",,"1Sam.16",
+"E_MON6","David and Goliath","-1018",,,,"T_Saul",,,"T_Saul","Event",,"1Sam.17",
+"E_MON7","Saul's later reign","-1018","-1011",,,"T_Saul",,,"T_Saul","Event",,"1Sam.18-30","Needs splitting up"
+"E_MON8","Saul's death","-1011",,,,"T_Saul",,,"T_Saul","Event",,"1Sam.31; 1Chr.10",
+"E_MON9","Genealogies",,,,,,,,"T_Bible","Event","not clear what to do with this","1Chr.1-9",
+"E_MON10","David hears of Saul's death","-1011",,,,"T_David",,,"T_David","Event",,"2Sam.1",
+"E_MON11","David ","-1011","-971",,,"T_David",,,"T_David","Reign",,"2Sam.2-24;1Kgs.1-2.9;1Chr.11-29",
+"E_MON12","David king over Judah; fighting with the house of Saul","-1011","-1004",,,"T_David",,,"T_David","Event",,"2Sam.2-4",
+"E_MON13","David anointed king over Israel at Hebron","-1004",,,,"T_David",,,"T_David","Event",,"2Sam.5.1-5; 1Chr.11.1-3; 1Chr.11.10-12.40",
+"E_MON14","David conquers Jerusalem","-1004",,,,"T_David",,,"T_David","Event",,"2Sam.5.6-16; 1Chr.11.4-9",
+"E_MON15","David defeats the Philisines in the Valley of Rephaim","-1003",,,,"T_David",,,"T_David","Event",,"2Sam.5.17-23; 1Chr.17",
+"E_MON16","David brings the Ark to Jerusalem; promise of the Temple","-1001",,,,"T_David",,,"T_David","Event",,"2Sam.6-7;1Chr.13.1-14; 1Chr.15-16","Split?"
+"E_MON17","David builds his palace","-1001",,,,"T_David",,,"T_David","Event",,"1Chr.14.1-7",
+"E_MON18","David's various victories","-1001","-996",,,"T_David",,,"T_David","Event",,"2Sam.8; 1Chr.18",
+"E_MON19","David and Mephibosheth","-996",,,,"T_David",,,"T_David","Event",,"2Sam.9",
+"E_MON20","David defeats the Ammonites","-993",,,,"T_David",,,"T_David","Event",,"2Sam.10; 1Chr.19",
+"E_MON21","David and Bathsheba","-991",,,,"T_David",,,"T_David","Event",,"2Sam.11;1Chr.20.1-3",
+"E_MON22","Nathan rebukes David; death of Bathsheba's child","-990",,,,"T_David",,,"T_David","Event",,"2Sam.12",
+"E_MON23","Amnon and Tamar","-988",,,,"T_David",,,"T_David","Event",,"2Sam.13.1-22",
+"E_MON24","Absalom kills Amnon","-986",,,,"T_David",,,"T_David","Event",,"2Sam.13.23-36",
+"E_MON25","Absalom in Geshur","-986","-983",,,"T_David",,,"T_David","Event",,"2Sam.13.37-39",
+"E_MON26","Absalom returns to Jerusalem","-983",,,,"T_David",,,"T_David","Event",,"2Sam.14",
+"E_MON27","Absalom's rebellion and death","-983","-979",,,"T_David",,,"T_David","Event",,"2Sam.15-19","Split?"
+"E_MON28","Sheba rebels against David","-978",,,,"T_David",,,"T_David","Event",,"2Sam.20",
+"E_MON29","David avenges the Gibeonites","-977",,,,"T_David",,,"T_David","Event",,"2Sam.21.1-14",
+"E_MON30","Wars against the Philistines","-977","-974",,,"T_David",,,"T_David","Event",,"2Sam.21.15-22",
+"E_MON31","David's last words","-972",,,,"T_David",,,"T_David","Event",,"2Sam.22-23",
+"E_MON32","David's census","-971",,,,"T_David",,,"T_David","Event",,"2Sam.24.1-17;1Chr.21.1-17",
+"E_MON33","David's preparations for the building of the Temple and organisation of worship","-971",,,,"T_David",,,"T_David","Event",,"2Sam.24.18-25;1Chr.21.18-29.20",
+"E_MON34","Adonijah's rebellion","-971",,,,"T_David",,,"T_David","Event",,"1Kgs.1",
+"E_MON35","David names Solomon his successor; instructions to Solomon","-971",,,,"T_David",,,"T_David","Event",,"1Kgs.2.1-9;1Chr.22.5-19;1Chr.29.21-25",
+"E_MON36","David's death","-971",,,,"T_David",,,"T_David","Event",,"1Kgs.2.10-12;1Chr.29.26-30",
+"E_MON37","Solomon","-971","-931",,,"T_Solomon",,,"T_Solomon","Reign",,"1Kgs.1.28-11.43;2Chr.1.1-9.31",
+"E_MON38","Solomon establishes his kingdom, granted wisdom","-971","-968",,,"T_Solomon",,,"T_Solomon","Event",,"1Kgs.2.13-4.34;2Chr.1",
+"E_MON39","Building of the Temple","-967-02-02","-960-08",,,"T_Solomon",,,"T_Solomon","Event",,"1Kgs.5-6;1Kgs.7.13-21;2Chr.2-4","See Finnegan S424 for exact 480  dating issue"
+"E_MON40","Building of Solomon's Palace","-960","-947",,,"T_Solomon",,,"T_Solomon","Event",,"1Kgs.7.1-12",
+"E_MON41","Dedication of the Temple","-959-07",,,,"T_Solomon",,,"T_Solomon","Event",,"1Kgs.8;2Chr.5-7",
+"E_MON42","Further activities of Solomon","-958","-936",,,"T_Solomon","EY",,"T_Solomon","Event",,"1Kgs.9.1-11.13;2Chr.8-9",
+"E_MON43","Solomon fights Hadad and Rezon","-936",,,,"T_Solomon","EY",,"T_Solomon","Event",,"1Kgs.11.14-25",
+"E_MON44","Jeroboam rebels against Solomon and flees to Egypt","-934",,,,"T_Solomon","EY",,"T_Solomon","Event",,"1Kgs.11.26-40",
+"E_MON45","Solomon's death","-931",,,,"T_Solomon",,,"T_Solomon","Event",,"1Kgs.11.41-43",
+"E_MON46","Jeroboam I","-931","-910",,,"T_IsraelMonarchy",,,"T_IsraelMonarchy","Reign",,"1Kgs.12.16-14.20",
+"E_MON47","Prophecy against Jeroboam by the man of Judah","-930",,,,"T_IsraelMonarchy","EY",,"T_IsraelMonarchy","Event",,"1Kgs.13",
+"E_MON48","Prophecy against Jeroboam by Ahijah","-928",,,,"T_IsraelMonarchy","EY",,"T_IsraelMonarchy","Event",,"1Kgs.14.1-18",
+"E_MON49","Nadab","-910","-909",,,"T_IsraelMonarchy",,,"T_IsraelMonarchy","Reign",,"1Kgs.15.25-32",
+"E_MON50","Baasha","-909","-886",,,"T_IsraelMonarchy",,,"T_IsraelMonarchy","Reign",,"1Kgs.15.33-16.7",
+"E_MON51","Elah","-886","-885-01-01",,,"T_IsraelMonarchy",,,"T_IsraelMonarchy","Reign",,"1Kgs.16.8-14",
+"E_MON52","Zimri","-885-01-01","-885-01-07",,,"T_IsraelMonarchy","EM",,"T_IsraelMonarchy","Reign",,"1Kgs.16.15-20",
+"E_MON53","Tibni","-885-01-07","-885-04",,,"T_IsraelMonarchy","EM",,"T_IsraelMonarchy","Reign","Arguable whether he counts as a king ","1Kgs.16.21-22",
+"E_MON54","Omri","-885-01-07","-874",,,"T_IsraelMonarchy",,,"T_IsraelMonarchy","Reign",,"1Kgs.16.21-28",
+"E_MON55","Capital of Israel moved from Tirzah to Samaria","-879",,,,"T_IsraelMonarchy",,,"T_IsraelMonarchy","Event",,"1Kgs.16.23-24",
+"E_MON56","Ahab","-874","-853",,,"T_IsraelMonarchy",,,"T_IsraelMonarchy","Reign",,"1Kgs.16.29-22.40",
+"E_MON57","Elijah prophesies a drought; fed by ravens","-861",,,,"T_IsraelMonarchy","EY",,"T_IsraelMonarchy","Event",,"1Kgs.17.1-6",
+"E_MON58","The widow at Zarephath","-860",,,,"T_IsraelMonarchy","EY",,"T_IsraelMonarchy","Event",,"1Kgs.17.7-24",
+"E_MON59","Elijah and the prophets of Baal at Mount Carmel","-857",,,,"T_IsraelMonarchy","EY",,"T_IsraelMonarchy","Event",,"1Kgs.18-19.18","Three years after the previous"
+"E_MON60","Elijah calls Elisha","-857",,,,"T_IsraelMonarchy","EY",,"T_IsraelMonarchy","Event",,"1Kgs.19.19-21",
+"E_MON61","Ahab defeats Ben-Hadad of Aram","-856",,,,"T_IsraelMonarchy","EY",,"T_IsraelMonarchy","Event",,"1Kgs.20.1-34",
+"E_MON62","Naboth's vineyard","-855",,,,"T_IsraelMonarchy","EY",,"T_IsraelMonarchy","Event",,"1Kgs.21",
+"E_MON63","Micaiah prophesies against Ahab; Ahab dies in battle at Ramoth Gilead","-853",,,,"T_IsraelMonarchy",,,"T_IsraelMonarchy","Event","Attested in Assyrian records as the battle of Qarqar, summer 853. See Finnegan S422","1Kgs.22.1-40;2Chr.18.1-19.3",
+"E_MON64","Ahaziah","-853","-852",,,"T_IsraelMonarchy",,,"T_IsraelMonarchy","Reign",,"1Kgs.22.51-53;2Kgs.1.1-18",
+"E_MON65","Joram","-852","-841",,,"T_IsraelMonarchy",,,"T_IsraelMonarchy","Event","Also Jehoram in the Hebrew, but not to be confused with Jehoram of Judah","2Kgs.3.1-27;2Kgs.9.14-26",
+"E_MON66","Elijah taken up into heaven","-852",,,,"T_IsraelMonarchy","EY",,"T_IsraelMonarchy","Event",,"2Kgs.2.1-18","Usher's estimate. Not even clear in which reign this happens!"
+"E_MON67","Elisha heals the water supply; Elisha jeered for being bald","-851",,,,"T_IsraelMonarchy","EY",,"T_IsraelMonarchy","Event",,"2Kgs.2.19-25",
+"E_MON68","Moab revolts","-850",,,,"T_IsraelMonarchy","EY",,"T_IsraelMonarchy","Event",,"2Kgs.3.14-27",
+"E_MON69","Elisha performs various miracles including healing Naaman","-850",,,,"T_IsraelMonarchy","EY",,"T_IsraelMonarchy","Event",,"2Kgs.4.1-6.23","Split?"
+"E_MON70","Siege of Samaria","-849",,,,"T_IsraelMonarchy","EY",,"T_IsraelMonarchy","Event",,"2Kgs.6.24-7.20",
+"E_MON71","Shunammite woman's land restored","-849","-842",,,"T_IsraelMonarchy","EY",,"T_IsraelMonarchy","Event","Takes seven years","2Kgs.8.1-6",
+"E_MON72","Ben-Hadad of Aram murdered and succeeded by Hazael","-842",,,,"T_IsraelMonarchy","EY",,"T_IsraelMonarchy","Event",,"2Kgs.8.7-15",
+"E_MON73","Jehu","-841","-814",,,"T_IsraelMonarchy",,,"T_IsraelMonarchy","Reign",,"2Kgs.9.1-10.36",
+"E_MON74","Jehoahaz","-814","-798",,,"T_IsraelMonarchy",,,"T_IsraelMonarchy","Reign",,"2Kgs.13.1-9",
+"E_MON75","Jehoash","-798","-782",,,"T_IsraelMonarchy",,,"T_IsraelMonarchy","Reign",,"2Kgs.13.10-25",
+"E_MON76","Jeroboam II","-793","-753-06",,,"T_IsraelMonarchy",,,"T_IsraelMonarchy","Reign","Co-regent 793-782","2Kgs.14.23-29",
+"E_MON77","Zechariah","-753-06","-752-01",,,"T_IsraelMonarchy",,,"T_IsraelMonarchy","Reign",,"2Kgs.15.8-12",
+"E_MON78","Shallum","-752-01","-752-02",,,"T_IsraelMonarchy",,,"T_IsraelMonarchy","Reign",,"2Kgs.15.13-16",
+"E_MON79","Menahem","-752-02","-742",,,"T_IsraelMonarchy",,,"T_IsraelMonarchy","Reign",,"2Kgs.15.17-22",
+"E_MON80","Pekahiah","-742","-740",,,"T_IsraelMonarchy",,,"T_IsraelMonarchy","Reign",,"2Kgs.15.23-26",
+"E_MON81","Pekah","-740","-732",,,"T_IsraelMonarchy",,,"T_IsraelMonarchy","Reign",,"2Kgs.15.27-31",
+"E_MON82","Hoshea","-732","-723",,,"T_IsraelMonarchy",,,"T_IsraelMonarchy","Reign",,"2Kgs.17.1-6",
+"E_MON83","Siege of Samaria","-726","-723",,,"T_IsraelMonarchy",,,"T_IsraelMonarchy","Event",,"2Kgs.17.4-6",
+"E_MON84","Israel expelled and Samaria resettled","-723","-720",,,"T_IsraelMonarchy",,,"T_IsraelMonarchy","Event",,"2Kgs.17.7-41;2Kgs.18.9-12",
+"E_MON85","Rehoboam","-931","-913",,,"T_JudahMonarchy",,,"T_JudahMonarchy","Reign",,"1Kgs.12.1-24;1Kgs.14.21-31;2Chr.10.1-12.16",
+"E_MON86","Accession of Rehoboam and split of the kingdom","-931",,,,"T_JudahMonarchy",,,"T_JudahMonarchy","Event",,"1Kgs.12.1-24;2Chr.10",
+"E_MON87","Attack by Shishak of Egypt","-927",,,,"T_JudahMonarchy",,,"T_JudahMonarchy","Event",,"1Kgs.14.25-26;2Chr.12.1-9",
+"E_MON88","Abijah","-913","-911",,,"T_JudahMonarchy",,,"T_JudahMonarchy","Reign","Abijam in 1 Kings","1Kgs.15.1-8;2Chr.13.1-22",
+"E_MON89","Asa","-911","-870",,,"T_JudahMonarchy",,,"T_JudahMonarchy","Reign",,"1Kgs.15.9-24;2Chr.14.1-16.14",
+"E_MON90","Attack by Zerah the Cushite","-901",,,,"T_JudahMonarchy",,,"T_JudahMonarchy","Event",,"2Chr.14.9-15",
+"E_MON91","Prophecy by Azariah son of Oded and Asa's reforms","-896-03",,,,"T_JudahMonarchy",,,"T_JudahMonarchy","Event",,"2Chr.15.1-19",
+"E_MON92","Asa at war with Baasha of Israel","-895",,,,"T_JudahMonarchy",,,"T_JudahMonarchy","Event","Dating issue here. Cannot be the 36th year of Asa's reign, since Baasha is dead. Usher proposed 36th year of the split kingdom, which I've followed, but need to check with other sources (Thiele preferably).","1Kgs.15.16-22;2Chr.16.1-10",
+"E_MON93","Asa afflicted with a disease in his foot","-873",,,,"T_JudahMonarchy",,,"T_JudahMonarchy","Event",,"2Chr.16.12",
+"E_MON94","Jehoshaphat","-870","-848",,,"T_JudahMonarchy",,,"T_JudahMonarchy","Reign","Co-regent 873-871","1Kgs.22.41-50;2Chr.17.1-21.1",
+"E_MON95","Jehoshaphat appoints officials to teach the Law","-867",,,,"T_JudahMonarchy",,,"T_JudahMonarchy","Event",,"2Chr.17.7-9",
+"E_MON96","Jehoshaphat marries his son Jehoram to Athaliah of Israel","-864",,,,"T_JudahMonarchy","EY",,"T_JudahMonarchy","Event",,"2Chr.18.1","Needs to be before 863 when their son is born!"
+"E_MON97","Jehoshaphat appoints judges","-852",,,,"T_JudahMonarchy","EY",,"T_JudahMonarchy","Event",,"2Chr.19.4-11","After Ahab dies"
+"E_MON98","Jehoshaphat defeats the Moabites and Ammonites","-850",,,,"T_JudahMonarchy","EY",,"T_JudahMonarchy","Event",,"2Chr.20.1-30",
+"E_MON99","Jehoram","-848","-841",,,"T_JudahMonarchy",,,"T_JudahMonarchy","Reign","Co-regent 856-848","2Kgs.8.16-24;2Chr.21.1-20",
+"E_MON100","Ahaziah","-841",,,,"T_JudahMonarchy",,,"T_JudahMonarchy","Reign",,"2Kgs.8.25-29;2Kgs.9.27-29;2Chr.22.1-9",
+"E_MON101","Athaliah","-841","-835",,,"T_JudahMonarchy",,,"T_JudahMonarchy","Reign",,"2Kgs.11.1-20;2Chr.22.10-23.15",
+"E_MON102","Joash","-835","-796",,,"T_JudahMonarchy",,,"T_JudahMonarchy","Reign","Also Jehoash","2Kgs.11.21-12.21;2Chr.23.16-24.27",
+"E_MON103","Joash repairs the Temple","-813",,,,"T_JudahMonarchy",,,"T_JudahMonarchy","Event",,"2Kgs.12.4-16;2Chr.24.1-14",
+"E_MON104","Joash killed by the Arameans","-796",,,,"T_JudahMonarchy",,,"T_JudahMonarchy","Event",,"2Chr.24.23-27",
+"E_MON105","Amaziah","-796","-767",,,"T_JudahMonarchy",,,"T_JudahMonarchy","Event",,"2Kgs.14.1-22;2Chr.25.1-28",
+"E_MON106","Azariah","-767","-739",,,"T_JudahMonarchy",,,"T_JudahMonarchy","Reign","Also Uzziah. Co-regent 790-767","2Kgs.15.1-7;2Chr.26.1-23",
+"E_MON107","Jotham","-739","-732",,,"T_JudahMonarchy",,,"T_JudahMonarchy","Reign","Co-regent 750-739","2Kgs.15.32-38;2Chr.27.1-9",
+"E_MON108","Ahaz","-732","-715-01",,,"T_JudahMonarchy",,,"T_JudahMonarchy","Reign","Co-regent 736-732","2Kgs.16.1-20;2Chr.28-1.27",
+"E_MON109","Hezekiah","-715-01","-687",,,"T_JudahMonarchy",,,"T_JudahMonarchy","Reign",,"2Kgs.18.1-20.21;2Chr.29.1-32.33",
+"E_MON110","Hezekiah reconsecrates the Temple and re-establishes Passover","-715-01","-715-03",,,"T_JudahMonarchy",,,"T_JudahMonarchy","Event",,"2Chr.29.3-31.20",
+"E_MON111","Sennacherib attacks Judah","-701-06",,,,"T_JudahMonarchy","EM",,"T_JudahMonarchy","Event",,"2Kgs.18.13-19.37;2Chr.32.1-23",
+"E_MON112","Hezekiah's illness","-701-08",,,,"T_JudahMonarchy","EM",,"T_JudahMonarchy","Event",,"2Kgs.20.1-11",
+"E_MON113","Hezekiah receives messengers from Merodach-Baladan of Bablyon","-701-09",,,,"T_JudahMonarchy","EM",,"T_JudahMonarchy","Event",,"2Kgs.20.12-19",
+"E_MON114","Manasseh","-687","-643",,,"T_JudahMonarchy",,,"T_JudahMonarchy","Reign","Co-regent 698-687","2Kgs.21.1-18;2Chr.33.1-20",
+"E_MON115","Amon","-643","-641",,,"T_JudahMonarchy",,,"T_JudahMonarchy","Reign",,"2Kgs.21.19-26;2Chr.33.21-25",
+"E_MON116","Josiah","-641","-609-04",,,"T_JudahMonarchy",,,"T_JudahMonarchy","Reign",,"2Kgs.22.1-23.30;2Chr.34.1-35.27",
+"E_MON117","Book of the Law found; renewal of the covenant","-628",,,,"T_JudahMonarchy",,,"T_JudahMonarchy","Event",,"2Kgs.22.3-23.25;2Chr.34.3-35.19",
+"E_MON118","Battle of Megiddo","-609-04",,,,"T_JudahMonarchy",,,"T_JudahMonarchy","Event","June/July","2Kgs.23.29-30;2Chr.35.20-24",
+"E_MON119","Jehoahaz","-609-04","-609-07",,,"T_JudahMonarchy",,,"T_JudahMonarchy","Reign",,"2Kgs.23.31-35;2Chr.36.1-4",
+"E_MON120","Jehoiakim","-609-07","-598-07-22",,,"T_JudahMonarchy",,,"T_JudahMonarchy","Reign","Dec 9th [really? check]","2Kgs.23.36-24.7;2Chr.36.5-8",
+"E_MON121","Jehoiachin","-598-07-22","-597-01-10",,,"T_JudahMonarchy",,,"T_JudahMonarchy","Reign","Dec 9th - Mar 16th","2Kgs.24.7-17;2Chr.36.9-11",
+"E_MON122","Zedekiah","-597-01-10","-586-04-09",,,"T_JudahMonarchy",,,"T_JudahMonarchy","Reign","Mar 16th - July 18th","2Kgs.24.18-25.7;2Chr.36.11-21",
+"E_MON123","Capture of Jerusalem and beginning of Exile","-597-01-10",,,,"T_JudahMonarchy",,,"T_JudahMonarchy","Event","Mar 16th","2Kgs.24.10-14",
+"E_MON124","Final fall of Jerusalem","-586-04-09",,,,"T_JudahMonarchy",,,"T_JudahMonarchy","Event","July 18th ","2Kgs.25.1-7",
+"E_MON125","Destruction of the Temple","-586-05-07",,,,"T_JudahMonarchy",,,"T_JudahMonarchy","Event",,"2Kgs.25.8-21",
+"E_MON126","Gedaliah murdered and the exile to Egypt","-586-07","-586-12",,,"T_JudahMonarchy","EM ",,"T_JudahMonarchy","Event",,"2Kgs.25.22-26",
+"E_MON127","Jehoiachin released","-562",,,,"T_JudahMonarchy",,,"T_JudahMonarchy","Event",,"2Kgs.25.27-30; Jer.52.31-34",
+"B_Isa","Isaiah","-740","-700",,,"T_JudahMonarchy",,,"T_Isaiah","Book","Estimated dates that the prophet was active","Isa.*","IVP dates for these books. Need confirming"
+"B_Jer","Jeremiah","-627","-586",,,"T_JudahMonarchy",,,"T_Jeremiah","Book",,"Jer.*",
+"B_Dan","Daniel","-605","-535",,,"T_Exile",,,"T_Exile","Book",,"Dan.*",
+"B_Hos","Hosea","-760","-722",,,"T_IsraelMonarchy",,,"T_IsraelMonarchy","Book",,"Hos.*",
+"B_Joel","Joel","-810","-750",,,"T_JudahMonarchy",,,"T_JudahMonarchy","Book",,"Joel.*",
+"B_Amos","Amos","-760",,,,"T_IsraelMonarchy",,,"T_IsraelMonarchy","Book",,"Amos.*",
+"B_Jonah","Jonah","-760",,,,"T_IsraelMonarchy",,,"T_IsraelMonarchy","Book",,"Jonah.*",
+"B_Mic","Micah","-742","-687",,,"T_JudahMonarchy",,,"T_JudahMonarchy","Book",,"Mic.*",
+"B_Nah","Nahum","-664","-612",,,"T_JudahMonarchy",,,"T_JudahMonarchy","Book",,"Nah.*",
+"B_Zeph","Zephaniah","-640",,,,"T_JudahMonarchy",,,"T_JudahMonarchy","Book",,"Zeph.*",
+"B_Hab","Habakkuk","-605",,,,"T_JudahMonarchy",,,"T_JudahMonarchy","Book",,"Hab.*",
+"E_MON128","Start of siege of Jerusalem","-588-10-10",,,,"T_JudahMonarchy",,,"T_JudahMonarchy","Event",,"2Kgs.25.1",
+"T_Jeremiah","Timeline of Jeremiah","-627","-586",,,"T_JudahMonarchy",,,"T_JudahMonarchy","Timeline",,"Jer.*",
+"E_Jer1","Call and initial prophecies","-627",,,,"T_Jeremiah",,,"T_Jeremiah","Event",,"Jer.1.4-3.5",
+"E_Jer2","Prophecy during the reign of Josiah","-627","-609",,,"T_Jeremiah",,,"T_Jeremiah","Event",,"Jer.3.6-6.30",
+"E_Jer3","Prophecies foretelling the exile ","-627","-597",,,"T_Jeremiah",,,"T_Jeremiah","Event",,"Jer.7.1-20.18",
+"E_Jer4","Request from Zedekiah","-588",,,,"T_Jeremiah",,,"T_Jeremiah","Event",,"Jer.21",
+"E_Jer5","Prophecies against kings of Judah","-609","-586",,,"T_Jeremiah",,,"T_Jeremiah","Event",,"Jer.22",
+"E_Jer6","Vision of two baskets of figs","-597",,,,"T_Jeremiah",,,"T_Jeremiah","Event",,"Jer.24",
+"E_Jer7","Prophecy of disaster but a return after 70 years","-605",,,,"T_Jeremiah",,,"T_Jeremiah","Event",,"Jer.25",
+"E_Jer8","Jeremiah threatened with death","-609",,,,"T_Jeremiah",,,"T_Jeremiah","Event",,"Jer.26",
+"E_Jer9","Symbol of the yoke, and Hananiah","-594",,,,"T_Jeremiah",,,"T_Jeremiah","Event",,"Jer.27-28",
+"E_Jer10","Letter to the exiles","-597","-586",,,"T_Jeremiah",,,"T_Jeremiah","Event",,"Jer.29-31",
+"E_Jer11","Jeremiah buys a field; prophecy of destruction but later healing","-587",,,,"T_Jeremiah",,,"T_Jeremiah","Event",,"Jer.32-33",
+"E_Jer12","A warning to Zedekiah that Jerusalem will fall","-588","-586",,,"T_Jeremiah",,,"T_Jeremiah","Event",,"Jer.34.1-7",
+"E_Jer13","Freeing the slaves and re-enslavement","-597","-586",,,"T_Jeremiah",,,"T_Jeremiah","Event",,"Jer.34.8-22",
+"E_Jer14","The Recabites","-609","-598",,,"T_Jeremiah",,,"T_Jeremiah","Event",,"Jer.35",
+"E_Jer15","Burning Jeremiah's scroll","-605",,,,"T_Jeremiah",,,"T_Jeremiah","Event",,"Jer.36",
+"E_Jer16","Jeremiah in prison and in a cistern","-597",,,,"T_Jeremiah",,,"T_Jeremiah","Event",,"Jer.37-38",
+"E_Jer17","The fall of Jerusalem","-588","-586",,,"T_Jeremiah",,,"T_Jeremiah","Event",,"Jer.39;Jer.52.1-30",
+"E_Jer18","Jerusalem freed and the exile to Egypt","-586-07","-586-12",,,"T_Jeremiah",,,"T_Jeremiah","Event",,"Jer.40-44",
+"E_Jer19","Message to Baruch ","-605",,,,"T_Jeremiah",,,"T_Jeremiah","Event",,"Jer.45",
+"E_Jer20","Prophecy against Egypt at the time of Carchemish","-605",,,,"T_Jeremiah",,,"T_Jeremiah","Event",,"Jer.46",
+"E_Jer21","Prophecy about Elam","-597",,,,"T_Jeremiah",,,"T_Jeremiah","Event",,"Jer.49.34-39",
+"E_Jer22","Prophecies against Babylon ","-594",,,,"T_Jeremiah",,,"T_Jeremiah","Event",,"Jer.50-51",
+"T_Isaiah","Timeline of Isaiah","-740","-520",,,"T_JudahMonarchy",,,"T_JudahMonarchy","Timeline",,"Isa.*",
+"T_Isa1","Commission of Isaiah","-739",,,,"T_Isaiah",,,"T_Isaiah","Event",,"Isa.6",
+"T_Isa2","Prophecy about Emmanuel and Assyria","-732",,,,"T_Isaiah",,,"T_Isaiah","Event","It isn't clear where this prophecy ends, possibly as late as chapter 12.","Isa.7-8.10",
+"T_Isa3","Prophecy against the Philistines","-715",,,,"T_Isaiah",,,"T_Isaiah","Event",,"Isa.14.28-32",
+"T_Isa4","Prophecy against Egypt and Cush","-712",,,,"T_Isaiah",,,"T_Isaiah","Event",,"Isa.20",
+"T_Isa5","Sennacherib's invasion","-701",,,,"T_Isaiah",,,"T_Isaiah","Event",,"Isa.36-39",
+"T_Isa6","Setting of ""Second Isaiah""","-540",,,,"T_Isaiah","5",,"T_Isaiah","Event",,"Isa.40-55",
+"T_Isa7","Setting of ""Third Isaiah""","-520",,,,"T_Isaiah","5",,"T_Isaiah","Event",,"Isa.56-66",
+"B_Ps","Psalms","-1018","-971",,,"T_UnitedMonarchy",,,"T_UnitedMonarchy","Book","Dating the Psalms is in many cases difficult or impossible, and they seem to have been composed over a wide timeframe. Placed here given the large number written by David (and Asaph, his contemporary) and the traditional association with him.","Ps.*",

Added: trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_NTChurch.csv
===================================================================
--- trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_NTChurch.csv	                        (rev 0)
+++ trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_NTChurch.csv	2011-01-22 20:02:36 UTC (rev 203)
@@ -0,0 +1,115 @@
+"ID","Name","From","To","From2","To2","Importance","Certainty","Flags","Timeline","Type","Description","Refs","Notes"
+"E_NTC1","Pentecost","33-05-24",,,,"T_NewTestament",,,"T_NTChurch","Event",,"Acts.2",
+"E_NTC2","Execution of James","41-03",,,,"T_NTChurch",,,"T_NTChurch","Event",,"Acts.12.1-2",
+"E_NTC3","Imprisonment of Peter","41-04","41-05",,,"T_NTChurch",,,"T_NTChurch","Event",,"Acts.12.3-5",
+"E_NTC4","Death of Herod Agrippa","44-05-01",,,,"T_NTChurch",,,"T_NTChurch","Event",,"Acts.12.23",
+"E_NTC5","Council of Jerusalem","49-01",,,,"T_NewTestament",,,"T_NTChurch","Event",,"Acts.15",
+"E_NTC6","Confrontation of Peter and Paul in Antioch","49-03",,,,"T_NTChurch",,,"T_NTChurch","Event",,"Gal.2.11",
+"E_NTC7","Paul and Barnabas separate","49-04",,,,"T_NTChurch",,,"T_NTChurch","Event",,"Acts.15.36-39",
+"E_NTC8","Execution of Peter and Paul","67-06-29",,,,"T_NewTestament",,,"T_NTChurch","Event",,,
+"E_NTC9","Conversion of Paul ","36-06",,,,"T_NTChurch",,,"T_NTChurch","Event",,"Acts.9.1-7",
+"T_PaulMJ1","Paul's first missionary journey","47-04","48-09",,,"T_NewTestament",,,"T_NTChurch","Timeline",,"Acts.13-14",
+"T_PaulMJ2","Paul's second missionary journey","49-04","51-11",,,"T_NewTestament",,,"T_NTChurch","Timeline",,"Acts.15.36-18.23",
+"T_PaulMJ3","Paul's third missionary journey","52-04","55-05-27",,,"T_NewTestament",,,"T_NTChurch","Timeline",,"Acts.18.23-21.16",
+"E_NTC10","Paul imprisoned in Caesarea","55-05-29","57",,,"T_NTChurch",,,"T_NTChurch","Event",,"Acts.24.27",
+"T_PaulToRome","Paul's shipwreck journey to Rome","57-08","58-02",,,"T_NTChurch",,,"T_NTChurch","Event",,"Acts.27.1-28.16",
+"E_NTC12","Paul in custody in Rome","58","60",,,"T_NTChurch",,,"T_NTChurch","Event",,"Acts.28.30-31",
+"E_NTC13","Peter's second sermon","33-07",,,,"T_NTChurch",,,"T_NTChurch","Event",,"Acts.4.31",
+"E_NTC14","Death of Ananias and Sapphira","33-12",,,,"T_NTChurch",,,"T_NTChurch","Event",,"Acts.4.32-5.11",
+"E_NTC15","Peter brought before Sanhedrin","34-06",,,,"T_NTChurch",,,"T_NTChurch","Event",,"Acts.5.12-42",
+"E_NTC16","Selection of deacons","34-12",,,,"T_NTChurch",,,"T_NTChurch","Event",,"Acts.6.1-7",
+"E_NTC17","Death of Stephen","35-04",,,,"T_NTChurch",,,"T_NTChurch","Event",,"Acts.6.8-7.60",
+"E_NTC18","Paul in Damascus and Arabia","36-06","37-05",,,"T_NTChurch",,,"T_NTChurch","Event",,"Acts.9.8-25; Gal.1.16-17",
+"E_NTC19","Paul to Jerusalem","37-06",,,,"T_NTChurch",,,"T_NTChurch","Event",,"Acts.9.26-29; Gal.1.18-20",
+"E_NTC20","Paul to Tarsus and Syria-Cilicia","37-10",,,,"T_NTChurch",,,"T_NTChurch","Event",,"Acts.9.30; Gal.1.21",
+"E_NTC21","Peter's ministry to Gentiles","38",,,,"T_NTChurch",,,"T_NTChurch","Event",,"Acts.11-18",
+"E_NTC22","Barnabas to Antioch","39",,,,"T_NTChurch",,,"T_NTChurch","Event",,"Acts.11.19-24",
+"E_NTC23","Paul to Antioch","40-01",,,,"T_NTChurch",,,"T_NTChurch","Event",,"Acts.11.25-26",
+"E_NTC24","Agabus's prediction of famine","41-01",,,,"T_NTChurch",,,"T_NTChurch","Event",,"Acts.11.27-28","[** when was the famine?]"
+"E_NTC25","Paul and Barnabas's relief visit to Jerusalem","41-02",,,,"T_NTChurch",,,"T_NTChurch","Event",,"Acts.11.30",
+"E_NTC26","Paul and Barnabas sent from Antioch","47-04",,,,"T_PaulMJ1",,,"T_PaulMJ1","Event",,"Acts.13.1-4",
+"E_NTC27","Paul and Barnabas on Cyprus","47-04","47-06",,,"T_PaulMJ1",,,"T_PaulMJ1","Event",,"Acts.13.5-12",
+"E_NTC28","Paul and Barnabas at Pamphylia","47-07-01","47-07-15",,,"T_PaulMJ1",,,"T_PaulMJ1","Event",,"Acts.13.13",
+"E_NTC29","Paul and Barnabs at Pisidian Antioch","47-07-15","47-09-15",,,"T_PaulMJ1",,,"T_PaulMJ1","Event",,"Acts.13.14-52",
+"E_NTC30","Paul and Barnanas at Iconium","47-10","48-02",,,"T_PaulMJ1",,,"T_PaulMJ1","Event",,"Acts.14.1-7",
+"E_NTC31","Paul and Barnabas at Lystra","48-03","48-04",,,"T_PaulMJ1",,,"T_PaulMJ1","Event",,"Acts.14.8-19",
+"E_NTC32","Paul and Barnabas at Derbe","48-05","48-06",,,"T_PaulMJ1",,,"T_PaulMJ1","Event",,"Acts.14.20-23",
+"E_NTC33","Paul and Barnabas return visits","48-06","48-08",,,"T_PaulMJ1",,,"T_PaulMJ1","Event",,"Acts.14.24-25",
+"E_NTC34","Paul and Barnabas return to Antioch","48-09",,,,"T_PaulMJ1",,,"T_PaulMJ1","Event",,"Acts.14.26",
+"B_Gal","BOOK: Galatians","49-04",,,,"T_NTChurch",,,"T_NTChurch","Book",,"Gal.*","written in Antioch immediately after the events"
+"E_NTC36","Paul departs from Antioch","49-04",,,,"T_PaulMJ2",,,"T_PaulMJ2","Event",,"Acts.15.40",
+"E_NTC37","Paul in Syria and Cilicia","49-04",,,,"T_PaulMJ2",,,"T_PaulMJ2","Event",,"Acts.15.41",
+"E_NTC38","Paul in Lystra and Derbe ","49-05",,,,"T_PaulMJ2",,,"T_PaulMJ2","Event",,"Acts.16.1",
+"E_NTC39","Paul in Iconium","49-06",,,,"T_PaulMJ2",,,"T_PaulMJ2","Event",,"Acts.16.4",
+"E_NTC40","Paul in Pisidian Antioch","49-06","49-07",,,"T_PaulMJ2",,,"T_PaulMJ2","Event",,"Acts.16.4",
+"E_NTC41","Paul from Antoich to Troas","49-07",,,,"T_PaulMJ2",,,"T_PaulMJ2","Event",,"Acts.16.6-10",
+"E_NTC42","Paul in Philippi","49-08","49-10",,,"T_PaulMJ2",,,"T_PaulMJ2","Event",,"Acts.16.11-40",
+"E_NTC43","Paul in Thessalonica","49-10","50-01",,,"T_PaulMJ2",,,"T_PaulMJ2","Event",,"Acts.17.1-9",
+"E_NTC44","Paul in Berea","50-02",,,,"T_PaulMJ2",,,"T_PaulMJ2","Event",,"Acts.17.10-15",
+"E_NTC45","Paul in Athens","50-02","50-03",,,"T_PaulMJ2",,,"T_PaulMJ2","Event",,"Acts.17.16-34",
+"E_NTC46","Paul in Corinth","50-03","51-09",,,"T_PaulMJ2",,,"T_PaulMJ2","Event",,"Acts.18.1-17",
+"E_NTC47","Silas and Timothy arrive from Berea","50-04",,,,"T_PaulMJ2",,,"T_PaulMJ2","Event",,"Acts.18.5",
+"B_1Thess","BOOK: 1 Thessalonians","50-06",,,,"T_PaulMJ2",,,"T_PaulMJ2","Book",,"1Thess.*","written in Corinth"
+"B_2Thess","BOOK: 2 Thessalonians","50-08",,,,"T_PaulMJ2",,,"T_PaulMJ2","Book",,"2Thess.*","written in Corinth"
+"E_NTC50","Paul in Ephesus","51-09",,,,"T_PaulMJ2",,,"T_PaulMJ2","Event",,"Acts.18.19-20",
+"E_NTC51","Paul in Jerusalem (fourth visit)","51-09-30",,,,"T_PaulMJ2",,,"T_PaulMJ2","Event",,"Acts.18.22",
+"E_NTC52","Paul in Antioch again","51-11",,,,"T_PaulMJ2",,,"T_PaulMJ2","Event",,"Acts.18.22",
+"E_NTC53","Paul departs from Antioch","52-04",,,,"T_PaulMJ3",,,"T_PaulMJ3","Event",,"Acts.18.23",
+"E_NTC54","Paul visits Galatian churches","52-04","52-06",,,"T_PaulMJ3",,,"T_PaulMJ3","Event",,"Acts.18.23",
+"E_NTC55","Paul in Ephesus","52-06","54-07",,,"T_PaulMJ3",,,"T_PaulMJ3","Event",,"Acts.19.1-41",
+"E_NTC56","Paul in Macedonia","54-08","54-11",,,"T_PaulMJ3",,,"T_PaulMJ3","Event",,"Acts.20.1",
+"B_1Cor","BOOK: 1 Corinthians","54-03",,,,"T_NTChurch",,,"T_NTChurch","Book",,"1Cor.*","written in Ephesus late in stay"
+"B_2Cor","BOOK: 2 Corinthians","54-09",,,,"T_NTChurch",,,"T_NTChurch","Book",,"2Cor.*","written in Macedonia"
+"E_NTC59","Paul in Corinth","54-11","55-02",,,"T_PaulMJ3",,,"T_PaulMJ3","Event",,"Acts.20.2-3",
+"B_Rom","BOOK: Romans","54-12",,,,"T_NTChurch",,,"T_NTChurch","Book",,"Rom.*","written in Corinth"
+"E_NTC61","Paul in Philippi","55-04-06","55-04-14",,,"T_PaulMJ3",,,"T_PaulMJ3","Event",,"Acts.20.3-5","dates from here on need calibrating for festival dates in 55, not 57"
+"E_NTC62","Paul in Troas","55-04-19","55-04-25",,,"T_PaulMJ3",,,"T_PaulMJ3","Event",,"Acts.20.6",
+"E_NTC63","Eutychus raised from the dead","55-04-24",,,,"T_PaulMJ3",,,"T_PaulMJ3","Event",,"Acts.20.7-12",
+"E_NTC64","Troas to Assos","55-04-25",,,,"T_PaulMJ3",,,"T_PaulMJ3","Event",,"Acts.20.13","a Monday!"
+"E_NTC65","Assos to Mitylene","55-04-26",,,,"T_PaulMJ3",,,"T_PaulMJ3","Event",,"Acts.20.14",
+"E_NTC66","Mitylene to Chios","55-04-27",,,,"T_PaulMJ3",,,"T_PaulMJ3","Event",,"Acts.20.15",
+"E_NTC67","Chios to Trogyllium","55-04-28",,,,"T_PaulMJ3",,,"T_PaulMJ3","Event",,"Acts.20.15",
+"E_NTC68","Trogyllium to Miletus","55-04-29",,,,"T_PaulMJ3",,,"T_PaulMJ3","Event",,"Acts.20.15",
+"E_NTC69","Ephesian elders' visit Paul","55-04-30","55-05-02",,,"T_PaulMJ3",,,"T_PaulMJ3","Event",,"Acts.20.7-38",
+"E_NTC70","Miletus to Patara","55-05-02","55-05-04",,,"T_PaulMJ3",,,"T_PaulMJ3","Event",,"Acts.21.1 ",
+"E_NTC71","Patara to Tyre","55-05-05","55-05-09",,,"T_PaulMJ3",,,"T_PaulMJ3","Event",,"Acts.21.2-3",
+"E_NTC72","Paul at Tyre","55-05-10","55-05-16",,,"T_PaulMJ3",,,"T_PaulMJ3","Event",,"Acts.21.4-6",
+"E_NTC73","Tyre to Caeserea","55-05-17","55-05-19",,,"T_PaulMJ3",,,"T_PaulMJ3","Event",,"Acts.21.7",
+"E_NTC74","Paul at Caeserea","55-05-19","55-05-25",,,"T_PaulMJ3",,,"T_PaulMJ3","Event",,"Acts.21.8-14",
+"E_NTC75","Caeserea to Jerusalem","55-05-25","55-05-27",,,"T_PaulMJ3",,,"T_PaulMJ3","Event",,"Acts.21.15-16",
+"E_NTC76","Paul in Jerusalem (fifth visit)","55-05-27",,,,"T_NTChurch",,,"T_NTChurch","Event",,"Acts.21.17","eve of Pentecost"
+"E_NTC77","Paul's meeting with James","55-05-28",,,,"T_NTChurch",,,"T_NTChurch","Event",,"Acts.21.18-26",
+"E_NTC78","Paul's arrest and trial before Felix","55-05-29","55-06-09",,,"T_NTChurch",,,"T_NTChurch","Event",,"Acts.21.27-24.22","House includes breakdown of this event"
+"E_NTC79","Paul before Felix and Drusilla","55-06",,,,"T_NTChurch",,,"T_NTChurch","Event",,"Acts.24.24-26","Last event needing calibration"
+"E_NTC80","Paul's trial before Festus","57-07",,,,"T_NTChurch",,,"T_NTChurch","Event",,"Acts.25.7-12",
+"E_NTC81","Paul's trial before Agrippa","57-08-01",,,,"T_NTChurch",,,"T_NTChurch","Event",,"Acts.26",
+"E_NTC82","Paul departs from Caesarea","57-08-15",,,,"T_PaulToRome",,,"T_PaulToRome","Event",,"Acts.27.1-4",
+"E_NTC83","Paul at Myra","57-09-01",,,,"T_PaulToRome",,,"T_PaulToRome","Event",,"Acts.27.5-6",
+"E_NTC84","Paul at Fair Havens","57-10-05","57-10-10",,,"T_PaulToRome",,,"T_PaulToRome","Event",,"Acts.27.8",
+"E_NTC85","Paul shipwrecked at Malta","57-10-31",,,,"T_PaulToRome",,,"T_PaulToRome","Event",,"Acts.27.39-44",
+"E_NTC85a","Paul on Malta","58-11-01","58-01-31",,,"T_PaulToRome",,,"T_PaulToRome","Event",,"Acts.28.1-10",
+"E_NTC86","Paul leaves Malta","58-02-01",,,,"T_PaulToRome",,,"T_PaulToRome","Event",,"Acts.28.11",
+"E_NTC87","Paul arrives at Rome","58-02-25",,,,"T_PaulToRome",,,"T_PaulToRome","Event",,"Acts.28.16",
+"B_Eph","BOOK: Ephesians","58-09",,,,"T_NTChurch",,,"T_NTChurch","Book",,"Eph.*",
+"B_Col","BOOK: Colossians","59-09",,,,"T_NTChurch",,,"T_NTChurch","Book",,"Col.*",
+"B_Philemon","BOOK: Philemon","59-09",,,,"T_NTChurch",,,"T_NTChurch","Book",,"Phlm.*",
+"B_Phil","BOOK: Philippians","60-03",,,,"T_NTChurch",,,"T_NTChurch","Book",,"Phil.*",
+"E_NTC92","Martyrdom of James, brother of Jesus","62-03",,,,"T_NTChurch",,,"T_NTChurch","Event",,,"Spring 62 in House. Other sources give 62 or sometimes 61. (Thought Finegan said 61 but cannot find again.)"
+"E_NTC93","Paul's further journeys","60-04","67-01",,,"T_NTChurch",,,"T_NTChurch","Event",,,"Following Moody and Hoehner (in House). They reconstruct similar schemes but have Paul dying in early 68, not our 67. Killed in the 3 or 4 month interregnum after Porcius Festus died."
+"B_1Tim","BOOK: 1 Timothy","62-09",,,,"T_NTChurch",,,"T_NTChurch","Book",,"1Tim.*",
+"B_Tit","BOOK: Titus","66-06",,,,"T_NTChurch",,,"T_NTChurch","Book",,"Titus.*",
+"B_2Tim","BOOK: 2 Timothy","66-09",,,,"T_NTChurch",,,"T_NTChurch","Book",,"2Tim.*","Moody/Hoehner give autumn of 67. Moved a year to fit in with Paul's lifespan"
+"B_Luke","BOOK: Luke","60",,,,"T_NTChurch",,,"T_NTChurch","Book",,"Luke.*","This and remainder from House. Need to substitute Carson/Moo or Moody dates."
+"B_Acts","BOOK: Acts ","61",,,,"T_NTChurch",,,"T_NTChurch","Book",,"Acts.*",
+"B_Mark","BOOK: Mark","62",,,,"T_NTChurch",,,"T_NTChurch","Book",,"Mark.*",
+"B_1Pet","BOOK: 1 Peter","63",,,,"T_NTChurch",,,"T_NTChurch","Book",,"1Pet.*",
+"B_2Pet","BOOK: 2 Peter","64",,,,"T_NTChurch",,,"T_NTChurch","Book","63 or 64","2Pet.*",
+"B_Matt","BOOK: Matthew","67",,,,"T_NTChurch",,,"T_NTChurch","Book","60s","Matt.*",
+"B_Heb","BOOK: Hebrews","67",,,,"T_NTChurch",,,"T_NTChurch","Book","60s","Heb.*",
+"B_Jude","BOOK: Jude","70",,,,"T_NTChurch",,,"T_NTChurch","Book","60s or 70s","Jude.*",
+"B_John","BOOK: John","90",,,,"T_NTChurch",,,"T_NTChurch","Book","late 80s or early 90s","John.*",
+"B_1John","BOOK: 1 John","90",,,,"T_NTChurch",,,"T_NTChurch","Book","late 80s or early 90s","1John.*",
+"B_2John","BOOK: 2 John","90",,,,"T_NTChurch",,,"T_NTChurch","Book","late 80s or early 90s","2John.*",
+"B_3John","BOOK: 3 John","90",,,,"T_NTChurch",,,"T_NTChurch","Book","late 80s or early 90s","3John.*",
+"B_Rev","BOOK: Revelation","90",,,,"T_NTChurch",,,"T_NTChurch","Book","late 80s or early 90s","Rev.*",
+"B_Jas","BOOK: James","45",,,,"T_NTChurch",,,"T_NTChurch","Book","c45 from House. Considerable uncertainty","Jas.*",

Added: trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_OTNeighbours.csv
===================================================================
--- trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_OTNeighbours.csv	                        (rev 0)
+++ trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_OTNeighbours.csv	2011-01-22 20:02:36 UTC (rev 203)
@@ -0,0 +1,57 @@
+"ID","Name","From","To","From2","To2","Importance","Certainty","Flags","Timeline","Type","Description","Refs","Notes"
+"T_Persia","Persian kings","-539","-331",,,"T_All",,,"T_All","Timeline","List of the kings of Persia and Media during their period of dominance.",,"From IVP dictionary, entry on Ezra. Finnegan has some slight differences. He's working from source PDBC - check with that"
+"E_PER1","Cyrus","-539","-530",,,"T_Persia",,,"T_Persia","Reign",,,
+"E_PER2","Cambyses","-530","-522",,,"T_Persia",,,"T_Persia","Reign",,,
+"E_PER3","Darius I Hystaspes","-522","-486",,,"T_Persia",,,"T_Persia","Reign",,,
+"E_PER4","Xerxes I","-486","-465",,,"T_Persia",,,"T_Persia","Reign",,,
+"E_PER5","Artaxerxes I Longimanus","-465","-424",,,"T_Persia",,,"T_Persia","Reign","F has 464-424",,
+"E_PER6","Darius II Nothus","-423","-404",,,"T_Persia",,,"T_Persia","Reign","F has 423-405",,
+"E_PER7","Artaxerxes II Mnemon","-404","-359",,,"T_Persia",,,"T_Persia","Reign",,,
+"E_PER8","Artaxerxes III Ochus","-359","-338",,,"T_Persia","0/1",,"T_Persia","Reign","Latter is 338/7, ditto with next few unclear dates",,
+"E_PER9","Arses","-338","-336",,,"T_Persia","1",,"T_Persia","Reign",,,
+"E_PER10","Darius III Codomanus","-336","-331",,,"T_Persia","1/0",,"T_Persia","Reign",,,
+"E_PER11","Alexander of Macedon","-331","-323",,,"T_Persia",,,"T_Persia","Reign",,,
+"E_PER12","Persians take Babylon","-539-10-12",,,,"T_Persia",,,"T_Persia","Battle","Tashritu 16 = Oct 12th",,"From Finnegan. S454. Two other related dates here too"
+"T_Mesopotamia","Mesopotamia","-1894","-1329",,,"T_All",,,"T_All","Timeline",,,"From IVP dictionary, entry on Chronology. Certainties are my guesses for now."
+"E_MES1","First Dynasty of Bablyon","-1894","-1595",,,"T_Mesopotamia","100/20",,"T_Mesopotamia","Dynasty",,,
+"E_MES2","Hammurabi","-1792","-1750",,,"T_Mesopotamia","50",,"T_Mesopotamia","Reign",,,
+"E_MES3","Kessite Dynasty","-1500","-1329",,,"T_Mesopotamia","25",,"T_Mesopotamia","Dynasty",,,
+"E_MES4","Burnaburiash I","-1500",,,,"T_Mesopotamia","25",,"T_Mesopotamia","Reign",,,
+"E_MES5","Kurigalzu I","-1350",,,,"T_Mesopotamia","25",,"T_Mesopotamia","Reign",,,
+"E_MES6","Kuilgalzu II","-1345","-1329",,,"T_Mesopotamia","25",,"T_Mesopotamia","Reign",,,
+"T_Assyria","Assyria","-1274","-609",,,"T_All",,,"T_All","Timeline",,,
+"E_ASS1","Shalmeneser I","-1274","-1245",,,"T_Assyria",,,"T_Assyria","Reign",,,
+"E_ASS2","Tukulti-Ninurta I","-1244","-1208",,,"T_Assyria",,,"T_Assyria","Reign",,,
+"E_ASS3","Adad-shuma-iddina","-1244","-1219",,,"T_Assyria",,,"T_Assyria","Reign",,,
+"E_ASS4","Nebuchadrezzar I","-1124","-1103",,,"T_Assyria",,,"T_Assyria","Reign",,,
+"E_ASS5","Tiglath-pileser I","-1115","-1077",,,"T_Assyria",,,"T_Assyria","Reign",,,
+"E_ASS6","Ashur-dan II","-933",,,,"T_Assyria",,,"T_Assyria","Reign",,,
+"E_ASS7","Ashurnasirpal II","-883","-859",,,"T_Assyria",,,"T_Assyria","Reign",,,
+"E_ASS8","Shalmaneser III","-859","-824",,,"T_Assyria",,,"T_Assyria","Reign",,,
+"E_ASS9","Tiglath-pileser III","-745","-727",,,"T_Assyria",,,"T_Assyria","Reign",,,
+"E_ASS10","Shalmaneser V","-727","-722",,,"T_Assyria",,,"T_Assyria","Reign",,,
+"E_ASS11","Sargon II","-722","-705",,,"T_Assyria",,,"T_Assyria","Reign",,,
+"E_ASS12","Sennacherib","-705","-681",,,"T_Assyria",,,"T_Assyria","Reign",,,
+"E_ASS13","Esarhaddon","-681","-669",,,"T_Assyria",,,"T_Assyria","Reign",,,
+"E_ASS14","Ashurbanipal","-669","-627",,,"T_Assyria",,,"T_Assyria","Reign",,,
+"E_ASS15","Fall of Ninevah","-612",,,,"T_Assyria",,,"T_Assyria","Event",,,
+"E_ASS16","End of Assyria","-609",,,,"T_Assyria",,,"T_Assyria","Event",,,
+"T_Babylon","Babylon","-626","-539",,,"T_All",,,"T_All","Timeline",,,
+"E_BAB1","Nabopolassar","-626","-605",,,"T_Babylon",,,"T_Babylon","Reign",,,
+"E_BAB2","Nebuchadrezzar II","-605","-562",,,"T_Babylon",,,"T_Babylon","Reign",,,
+"E_BAB3","Amel-Marduk (Evil-merodach)","-562","-560",,,"T_Babylon",,,"T_Babylon","Reign",,,
+"E_BAB4","Neriglissar","-560","-556",,,"T_Babylon",,,"T_Babylon","Reign",,,
+"E_BAB5","Labshi-Marduk","-556",,,,"T_Babylon",,,"T_Babylon","Reign",,,
+"E_BAB6","Nabonidus","-556","-539",,,"T_Babylon",,,"T_Babylon","Reign",,,
+"T_Syria","Syria","-312","-129",,,"T_All",,,"T_All","Timeline",,,
+"E_SYR1","Seleucus I Nicator","-312","-281",,,"T_Syria",,,"T_Syria","Reign",,,
+"E_SYR2","Antiochus I Soter","-281","-261",,,"T_Syria",,,"T_Syria","Reign",,,
+"E_SYR3","Antiochus II Theos","-261","-246",,,"T_Syria",,,"T_Syria","Reign",,,
+"E_SYR4","Seleucus II","-246 ","-226",,,"T_Syria",,,"T_Syria","Reign",,,
+"E_SYR5","Seleucus III Soter","-226","-223",,,"T_Syria",,,"T_Syria","Reign",,,
+"E_SYR6","Antiochus III the Great","-223","-187",,,"T_Syria",,,"T_Syria","Reign",,,
+"E_SYR7","Seleucus IV","-187","-175",,,"T_Syria",,,"T_Syria","Reign",,,
+"E_SYR8","Antiochus IV Epiphanes","-175","-163",,,"T_Syria",,,"T_Syria","Reign",,,
+"E_SYR9","Antiochus V","-163","-162",,,"T_Syria",,,"T_Syria","Reign",,,
+"E_SYR10","Demetrius I","-162","-150",,,"T_Syria",,,"T_Syria","Reign",,,
+"E_SYR11","Antiochus VII Sidetes","-139","-129",,,"T_Syria",,,"T_Syria","Reign",,,

Added: trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_PatriarchsToJudges.csv
===================================================================
--- trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_PatriarchsToJudges.csv	                        (rev 0)
+++ trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_PatriarchsToJudges.csv	2011-01-22 20:02:36 UTC (rev 203)
@@ -0,0 +1,186 @@
+"ID","Name","From","To","From2","To2","Importance","Certainty","Flags","Timeline","Type","Description","Refs","Notes"
+"E_PAT1","Birth of Abraham","-1854",,"-2166",,"T_Abraham","20",,"T_Abraham","Event",,"Gen.11.27",
+"E_PAT2","Call of Abraham; Abraham goes from Haran to Canaan","-1779",,"-2091",,"T_Abraham","20",,"T_Abraham","Event",,"Gen.12.1-9",
+"E_PAT3","Birth of Ishmael","-1768",,"-2080",,"T_Abraham","20",,"T_Abraham","Event",,"Gen.16.15-17",
+"E_PAT4","Birth of Isaac","-1754",,"-2066",,"T_Abraham","20",,"T_Abraham","Event",,"Gen.21.1-5",
+"E_PAT5","Mount Moriah","-1739",,"-2051",,"T_Abraham","20",,"T_Abraham","Event",,"Gen.22",
+"E_PAT6","Isaac marries Rebekah","-1714",,"-2026",,"T_Abraham","20",,"T_Abraham","Event",,"Gen.24",
+"E_PAT7","Birth of Jacob and Esau","-1694",,"-2006",,"T_Isaac","20",,"T_Isaac","Event",,"Gen.25.19-26",
+"E_PAT8","Death of Abraham","-1679",,"-1991",,"T_Isaac","20",,"T_Isaac","Event",,"Gen.25.7-11",
+"E_PAT9","Jacob goes to Haran","-1617-02",,"-1929-02",,"T_Isaac","20Y",,"T_Isaac","Event",,"Gen.28-29.14",
+"E_PAT10","Jacob marries Leah and Rachel","-1610",,"-1922",,"T_Isaac","20",,"T_Isaac","Event",,"Gen.29.21-30; Gen.30.1; Gen.30.22-26",
+"E_PAT11","Isaac dies","-1574",,"-1886",,"T_Isaac","20",,"T_Isaac","Event",,"Gen.35.23-29",
+"E_PAT12","Jacob and family move to Egypt","-1564",,"-1876",,"T_Isaac","20",,"T_Isaac","Event",,"Gen.46.1-47.11",
+"E_PAT13","Jacob dies","-1547-01",,"-1859-01",,"T_Isaac","20Y",,"T_Isaac","Event",,"Gen.47.28-49.33",
+"E_PAT14","Birth of Joseph ","-1604",,"-1916",,"T_Isaac","20",,"T_Isaac","Event",,"Gen.30.22-24",
+"E_PAT15","Joseph sold into slavery","-1587",,"-1899",,"T_Jacob","20",,"T_Jacob","Event",,"Gen.37.1-36",
+"E_PAT16","Joseph enters the service of Pharaoh","-1574",,"-1886",,"T_Jacob","20",,"T_Jacob","Event",,"Gen.41.1-45",
+"E_PAT17","Seven years of plenty","-1574","-1567","-1886","-1879","T_Jacob","20",,"T_Jacob","Event",,"Gen.41.46-53",
+"E_PAT18","Seven years of famine","-1567","-1560","-1879","-1872","T_Jacob","20",,"T_Jacob","Event",,"Gen.41.53-47.26",
+"E_PAT19","Joseph dies","-1494",,"-1806",,"T_Jacob","20",,"T_Jacob","Event",,"Gen.50.22-26",
+"E_PAT20","Creation","-3800-09",,"-4112-09",,"T_AdamToAbraham","150Y",,"T_AdamToAbraham","Event",,"Gen.1-2","made up"
+"E_PAT21","The Fall","-3800-10",,"-4112-10",,"T_AdamToAbraham","125Y",,"T_AdamToAbraham","Event",,"Gen.3","made up"
+"E_PAT22","Cain and Abel","-3700","-3670","-4012","-3982","T_AdamToAbraham","100",,"T_AdamToAbraham","Event",,"Gen.4","made up"
+"E_PAT23","The Flood","-2145",,"-2457",,"T_AdamToAbraham","70",,"T_AdamToAbraham","Event",,"Gen.6.1-8.17",
+"E_PAT24","Table of Nations","-2145","-2045","-2457","-2357",,"70","EY","T_AdamToAbraham","Event",,"Gen.10","and probably later, but a reasonable place to put it on the timeline"
+"E_PAT25","Tower of Babel","-2045",,"-2357",,"T_AdamToAbraham","70",,"T_AdamToAbraham","Event",,"Gen.11.1-9","Usher dates here on the grounds of Gen 10:25 (at Peleg's birth)"
+"E_PAT26","Abraham in Egypt","-1775",,"-2087",,"T_Abraham","20","EY","T_Abraham","Event",,"Gen.12.10-20","Usher puts in same year as vv1-9"
+"E_PAT27","Abraham returns from Egypt","-1773",,"-2085",,"T_Abraham","20","EY","T_Abraham","Event",,"Gen.13","ditto"
+"E_PAT28","Abraham rescues Lot","-1770-01",,"-2082-01",,"T_Abraham","20Y","EY","T_Abraham","Event",,"Gen.14","Usher's dating"
+"E_PAT29","God's first covenant with Abraham","-1770-07",,"-2082-07",,"T_Abraham","20Y","EY","T_Abraham","Event",,"Gen.15","ditto"
+"E_PAT30","Abraham sleeps with Hagar","-1769",,"-2081",,"T_Abraham","20",,"T_Abraham","Event",,"Gen.16.1-14","10 years after Gen 12:1-9 (v3)"
+"E_PAT31","Circumcision covenant ","-1755-01",,"-2067-01",,"T_Abraham","20Y","EM","T_Abraham","Event",,"Gen.17",
+"E_PAT32","The three visitors; Abraham pleads for Sodom","-1755-04",,"-2067-04",,"T_Abraham","20Y","EY","T_Abraham","Event",,"Gen.18","Usher has same year as previous"
+"E_PAT33","Destruction of Sodom and Gomorrah","-1755-05",,"-2067-05",,"T_Abraham","20Y","EY","T_Abraham","Event",,"Gen.19",
+"E_PAT34","Abraham in Gerar with Abimelech","-1755-09",,"-2067-09",,"T_Abraham","20Y","EY","T_Abraham","Event",,"Gen.20",
+"E_PAT35","Hagar and Ishmael sent away","-1750-01",,"-2062-01",,"T_Abraham","20Y","EY","T_Abraham","Event",,"Gen.21.8-21",
+"E_PAT36","Treaty at Beersheba","-1750-07",,"-2062-07",,"T_Abraham","20Y","EY","T_Abraham","Event",,"Gen.21.22-34",
+"E_PAT37","Death of Sarah; purchase of field at Machpelah","-1717",,"-2029",,"T_Abraham","20",,"T_Abraham","Event",,"Gen.23",
+"E_PAT38","Abraham marries Keturah","-1711",,"-2023",,"T_Abraham","20","EY","T_Abraham","Event",,"Gen.25.1-6","(from Thompson cross-reference, shifted. Not in Usher.)"
+"E_PAT39","Ishmael's descendents","-1738","-1708","-2050","-2020","T_Abraham","20","EY","T_Abraham","Event",,"Gen.25.12-16","made up"
+"E_PAT40","Death of Ishmael","-1629",,"-1941",,"T_Abraham","20",,"T_Abraham","Event",,"Gen.25.17-18",
+"E_PAT41","Isaac in Gerar with Abimelech","-1670","-1660","-1982","-1972","T_Isaac","20","EY","T_Isaac","Event",,"Gen.26.1-33","made up"
+"E_PAT42","Esau marries Judith and Basemath","-1654",,"-1966",,"T_Isaac","20",,"T_Isaac","Event",,"Gen.26.34-35",
+"E_PAT43","Jacob steals Esau's birthright","-1617",,"-1929",,"T_Isaac","20",,"T_Isaac","Event",,"Gen.27",
+"E_PAT44","Birth of Jacob's oldest ten sons","-1610","-1604","-1922","-1916","T_Isaac","20","EY","T_Isaac","Event",,"Gen.29.31-30.21",
+"E_PAT45","Jacob leaves Laban and returns to Israel","-1598",,"-1910",,"T_Jacob","20",,"T_Jacob","Event",,"Gen.30.25-33.20","split into bits?"
+"E_PAT46","Dinah and the Shechenites","-1595",,"-1907",,"T_Jacob","20","EY","T_Jacob","Event",,"Gen.34","Thompson again (no evidence)"
+"E_PAT47","Jacob builds an altar at Bethel","-1592",,"-1904",,"T_Jacob","20","EY","T_Jacob","Event",,"Gen.35.1-15","ditto"
+"E_PAT48","Rachel dies","-1576",,"-1888",,"T_Jacob","20","EY","T_Jacob","Event",,"Gen.35.16-20","before Jacob dies, but not clear how much"
+"E_PAT49","Reuben sleeps with Bilhah","-1575",,"-1887",,"T_Jacob","20","EY","T_Jacob","Event",,"Gen.35.21-22",
+"E_PAT50","Esau's descendants","-1644","-1544","-1956","-1856","T_Jacob","20","EY","T_Jacob","Event",,"Gen.36","made up"
+"E_PAT51","Judith and Tamar","-1587",,"-1899",,"T_Jacob","20","EY","T_Jacob","Event",,"Gen.38",
+"E_PAT52","Joseph and Potiphar's wife","-1582",,"-1894",,"T_Jacob","20","EY","T_Jacob","Event",,"Gen.39","made up"
+"E_PAT53","Joseph, the cupbearer and the baker","-1576",,"-1888",,"T_Jacob","20","EY","T_Jacob","Event",,"Gen.40",
+"E_PAT54","Joseph's brothers visit Egypt","-1566",,"-1878",,"T_Jacob","20",,"T_Jacob","Event",,"Gen.42",
+"E_PAT55","Joseph's brothers visit Egypt a second time ","-1565",,"-1877",,"T_Jacob","20",,"T_Jacob","Event",,"Gen.43-45",
+"E_PAT56","Joseph buries Jacob","-1547-07",,"-1859-07",,"T_Jacob","20Y",,"T_Jacob","Event",,"Gen.50-1-21",
+"E_PAT57","Adam","-3800","-2870","-4112","-3182","T_AdamToAbraham","100",,"T_AdamToAbraham","Event",,"Gen.1.26-28; Gen.2.15-3.24; Gen.5.1-5",
+"E_PAT58","Seth","-3670","-2758","-3982","-3070","T_AdamToAbraham","100",,"T_AdamToAbraham","Event",,"Gen.5.6-8",
+"E_PAT59","Enosh","-3565","-2660","-3877","-2972","T_AdamToAbraham","100",,"T_AdamToAbraham","Event",,"Gen.5.9-11",
+"E_PAT60","Kenan","-3475","-2565","-3787","-2877","T_AdamToAbraham","100",,"T_AdamToAbraham","Event",,"Gen.5.12-14",
+"E_PAT61","Mahalaleel","-3405","-2510","-3717","-2822","T_AdamToAbraham","95",,"T_AdamToAbraham","Event",,"Gen.5.15-17",
+"E_PAT62","Jared","-3340","-2378","-3652","-2690","T_AdamToAbraham","90",,"T_AdamToAbraham","Event",,"Gen.5.18-20",
+"E_PAT63","Enoch","-3178","-2813","-3490","-3125","T_AdamToAbraham","85",,"T_AdamToAbraham","Event",,"Gen.5.21-24",
+"E_PAT64","Methusaleh","-3113","-2144","-3425","-2456","T_AdamToAbraham","80",,"T_AdamToAbraham","Event",,"Gen.5.25-27",
+"E_PAT65","Lamech","-2926","-2149","-3238","-2461","T_AdamToAbraham","75",,"T_AdamToAbraham","Event",,"Gen.5.28-30",
+"E_PAT66","Noah","-2744","-1794","-3056","-2106","T_AdamToAbraham","70",,"T_AdamToAbraham","Event",,"Gen.5.31-9.29",
+"E_PAT67","Shem","-2244","-1644","-2556","-1956","T_AdamToAbraham","65",,"T_AdamToAbraham","Event",,"Gen.5.32;Gen.11.10-11",
+"E_PAT68","Arphaxad","-2144","-1706","-2456","-2018","T_AdamToAbraham","60",,"T_AdamToAbraham","Event",,"Gen.11.12-13",
+"E_PAT69","Shelah","-2109","-1676","-2421","-1988","T_AdamToAbraham","55",,"T_AdamToAbraham","Event",,"Gen.11.14-15",
+"E_PAT70","Eber","-2079","-1615","-2391","-1927","T_AdamToAbraham","50",,"T_AdamToAbraham","Event",,"Gen.11.16-17",
+"E_PAT71","Peleg","-2045","-1806","-2357","-2118","T_AdamToAbraham","45",,"T_AdamToAbraham","Event",,"Gen.11.18-19",
+"E_PAT72","Reu","-2015","-1776","-2327","-2088","T_AdamToAbraham","40",,"T_AdamToAbraham","Event",,"Gen.11.20-21",
+"E_PAT73","Serug","-1983","-1753","-2295","-2065","T_AdamToAbraham","35",,"T_AdamToAbraham","Event",,"Gen.11.22-23",
+"E_PAT74","Nahor","-1953","-1805","-2265","-2117","T_AdamToAbraham","30",,"T_AdamToAbraham","Event",,"Gen.11.24-25",
+"E_PAT75","Terah","-1924","-1719","-2236","-2031","T_AdamToAbraham","25",,"T_AdamToAbraham","Event",,"Gen.11.26-32",
+"E_PAT76","Sojourn in Egypt","-1564","-1251","-1876","-1446","T_BirthOfTheNation","20/10",,"T_BirthOfTheNation","Event",,"Exod.1.1-7",
+"E_PAT79","Joshua and the Elders","-1210","-1200","-1406","-1385","T_Judges","10Y",,"T_Judges","Reign",,,
+"E_PAT80","Mesopotamia/Cushan-rishathaim","-1200","-1192","-1385","-1377","T_Judges","10Y",,"T_Judges","Reign",,"Judg.3.8",
+"E_PAT81","Othniel","-1192","-1152","-1377","-1337","T_Judges","10Y",,"T_Judges","Reign",,"Judg.3.9-11",
+"E_PAT82","Moabites/Eglon","-1200","-1182","-1337","-1319","T_Judges","10Y",,"T_Judges","Reign",,"Judg.3.12-14",
+"E_PAT83","Ehud (and peace)","-1182","-1102","-1319","-1239","T_Judges","10Y",,"T_Judges","Reign",,"Judg.3.15-30",
+"E_PAT84","Philistines","-1175","-1170","-1265","-1260","T_Judges","10Y",,"T_Judges","Reign","No time information given. Allotted a random 5 years","Judg.3.31",
+"E_PAT85","Shamgar","-1170",,"-1260","-1250","T_Judges","10Y",,"T_Judges","Reign","No idea why Walton picks 10 years, or this particular time frame","Judg.3.31",
+"E_PAT86","Canaanites/Jabin","-1180","-1160","-1259","-1239","T_Judges","10Y",,"T_Judges","Reign",,"Judg.4.2-3",
+"E_PAT87","Deborah","-1165","-1150","-1239","-1199","T_Judges","10Y",,"T_Judges","Reign",,"Judg.4.4-5.31",
+"E_PAT88","Midianites/Oreb etc","-1186","-1179","-1199","-1192","T_Judges","10Y",,"T_Judges","Reign",,"Judg.6.1-6",
+"E_PAT89","Gideon","-1179","-1139","-1192","-1152","T_Judges","10Y",,"T_Judges","Reign",,"Judg.6.7-8.35",
+"E_PAT90","Civil War of Abimelech","-1139","-1136","-1152","-1149","T_Judges","10Y",,"T_Judges","Reign",,"Judg.9",
+"E_PAT91","Tola","-1136","-1113","-1149","-1126","T_Judges","10Y",,"T_Judges","Reign",,"Judg.10.1-2",
+"E_PAT92","Jair","-1113","-1091","-1126","-1104","T_Judges","10Y",,"T_Judges","Reign",,"Judg.10.3-6",
+"E_PAT93","Ammonites","-1091","-1073","-1104","-1086","T_Judges","10Y",,"T_Judges","Reign",,"Judg.10.7-9",
+"E_PAT94","Jepthtah","-1073","-1067","-1086","-1080","T_Judges","10Y",,"T_Judges","Reign",,"Judg.10.10-12.7",
+"E_PAT95","Ibzan","-1067","-1060","-1080","-1072","T_Judges","10Y",,"T_Judges","Reign",,"Judg.12.8-10",
+"E_PAT96","Elon","-1060","-1050","-1072","-1062","T_Judges","10Y",,"T_Judges","Reign",,"Judg.12.11-12",
+"E_PAT97","Abdon","-1050","-1042","-1062","-1055","T_Judges","10Y",,"T_Judges","Reign",,"Judg.12.13-15",
+"E_PAT98","Philistines again","-1100","-1060","-1115","-1075","T_Judges","10Y",,"T_Judges","Reign",,"Judg.13.1",
+"E_PAT99","Samson","-1080","-1060","-1075","-1055","T_Judges","10Y",,"T_Judges","Reign",,"Judg.13.2-16.31",
+"E_PAT100","Eli","-1102","-1062","-1100","-1060","T_Judges","10Y",,"T_Judges","Reign","Walton puts 1Sam4 at 1060, 1Sam7 at 1050 so this and next entry inferred","1Sam.1-4",
+"E_PAT101","Samuel","-1062","-1042","-1060","-1050","T_Judges","10Y",,"T_Judges","Reign",,"1Sam.3-12",
+"E_PAT102","Pharoah oppresses Israel and orders the death of the children","-1332",,"-1528",,"T_Exodus","10Y",,"T_Exodus","Event","All month/days are in the Jewish calendar","Exod.1.8-22",
+"E_PAT103","Birth of Moses","-1330",,"-1526",,"T_Exodus","10Y",,"T_Exodus","Event",,"Exod.2.1-10",
+"E_PAT104","Moses flees to Midian","-1290",,"-1486",,"T_Exodus","10Y",,"T_Exodus","Event",,"Exod.2.11-22",
+"E_PAT105","God hears Israel's groaning","-1290","-1252","-1486","-1448",,"10Y",,"T_Exodus","Event",,"Exod.2.23-25",
+"E_PAT106","Burning Bush and call of Moses","-1251-02",,"-1447-02",,"T_Exodus","10Y",,"T_Exodus","Event",,"Exod.3-4.17",
+"E_PAT107","Moses returns to Egypt and meets Pharaoh","-1251-06",,"-1447-06",,"T_Exodus","10Y",,"T_Exodus","Event",,"Exod.4.18-6.30",
+"E_PAT108","Moses and Aaron before Pharaoh; the threat of the plagues","-1251-10",,"-1447-10",,"T_Exodus","10Y",,"T_Exodus","Event",,"Exod.7.1-13",
+"E_PAT109","1st plague: water turned to blood","-1251-12-18","-1251-12-24","-1447-12-18","-1447-12-24","T_Exodus","10Y","EM","T_Exodus","Event",,"Exod.7.14-25","No evidence to suggest how separated the plagues were"
+"E_PAT110","2nd plague: frogs","-1251-12-25","-1251-12-26","-1447-12-25","-1447-12-26","T_Exodus","10Y","EM","T_Exodus","Event",,"Exod.8.1-15",
+"E_PAT111","3rd plague: gnats","-1251-12-27",,"-1447-12-27",,"T_Exodus","10Y","EM","T_Exodus","Event",,"Exod.8.16-19",
+"E_PAT112","4th plague: flies","-1251-12-28","-1251-12-30","-1447-12-28","-1447-12-30","T_Exodus","10Y","EM","T_Exodus","Event",,"Exod.8.20-32",
+"E_PAT113","5th plague: livestock die","-1250-01-01",,"-1446-01-01",,"T_Exodus","10Y","EM","T_Exodus","Event",,"Exod.9.1-7",
+"E_PAT114","6th plague: boils","-1250-01-03",,"-1446-01-03",,"T_Exodus","10Y","EM","T_Exodus","Event",,"Exod.9.8-12",
+"E_PAT115","7th plague: hail","-1250-01-04","-1250-01-05","-1446-01-04","-1446-01-05","T_Exodus","10Y","EM","T_Exodus","Event",,"Exod.9.13-35",
+"E_PAT116","8th plague: locusts","-1250-01-07","-1250-01-09","-1446-01-07","-1446-01-09","T_Exodus","10Y","EM","T_Exodus","Event",,"Exod.10.1-20",
+"E_PAT117","9th plague: darkness","-1250-01-11","-1250-01-13","-1446-01-11","-1446-01-13","T_Exodus","10Y","EM","T_Exodus","Event",,"Exod.10.21-23",
+"E_PAT118","Moses before Pharaoh for the last time; last plague promised","-1250-01-14",,"-1446-01-14",,"T_Exodus","10Y",,"T_Exodus","Event",,"Exod.10.24-11.10",
+"E_PAT119","Passover commanded","-1250-01-14",,"-1446-01-14",,"T_Exodus","10Y",,"T_Exodus","Event",,"Exod.12.1-28",
+"E_PAT120","10th plague: death of the firstborn","-1250-01-15",,"-1446-01-15",,"T_Exodus","10Y",,"T_Exodus","Event",,"Exod.12.29-32",
+"E_PAT121","Departure from Egypt","-1250-01-15","-1250-01-20","-1446-01-15","-1446-01-20","T_Exodus","10Y",,"T_Exodus","Event",,"Exod.12.33-13.22",
+"E_PAT122","Crossing the Red Sea","-1250-01-21",,"-1446-01-21",,"T_Exodus","10Y",,"T_Exodus","Event","Jewish tradition is that this is on the 21st.","Exod.14-15.21",
+"E_PAT123","Red Sea to Marah","-1250-01-22","-1250-01-24","-1446-01-22","-1446-01-24","T_Wilderness","10Y",,"T_Wilderness","Event",,"Exod.15.22",
+"E_PAT124","At Marah","-1250-01-24",,"-1446-01-24",,"T_Wilderness","10Y",,"T_Wilderness","Event",,"Exod.15.23-26",
+"E_PAT125","At Elim","-1250-02-01","-1250-02-08","-1446-02-01","-1446-02-08","T_Wilderness","10Y",,"T_Wilderness","Event",,"Exod.15.27",
+"E_PAT126","Giving of Manna","-1250-02-15","-1250-02-21","-1446-02-15","-1446-02-21","T_Wilderness","10Y",,"T_Wilderness","Event",,"Exod.16",
+"E_PAT127","Water from the Rock at Rephidim","-1250-02-22",,"-1446-02-22",,"T_Wilderness","10Y",,"T_Wilderness","Event",,"Exod.17.1-7",
+"E_PAT128","Israel defeats Amalek","-1250-02-24",,"-1446-02-24",,"T_Wilderness","10Y",,"T_Wilderness","Event",,"Exod.17-8-16",
+"E_PAT129","Jethro visits Moses","-1250-02-25","-1250-02-28","-1446-02-25","-1446-02-28","T_Wilderness","10Y",,"T_Wilderness","Event",,"Exod.18",
+"E_PAT130","Israel arrive at Mount Sinai","-1250-03-01",,"-1446-03-01",,"T_Wilderness","10Y",,"T_Wilderness","Event",,"Exod.19.1-15",
+"E_PAT131","Giving of the Ten Commandments","-1250-03-03",,"-1446-03-03",,"T_Wilderness","10Y",,"T_Wilderness","Event",,"Exod.19-16-20.21",
+"E_PAT132","Moses given the Law","-1250-03-04",,"-1446-03-04",,"T_Wilderness","10Y",,"T_Wilderness","Event",,"Exod.20.22-23.33",
+"E_PAT133","The seventy elders worship God","-1250-03-05",,"-1446-03-05",,"T_Wilderness","10Y",,"T_Wilderness","Event",,"Exod.24.1-14",
+"E_PAT134","Moses on the mountain for 40 days","-1250-03-06","-1250-04-15","-1446-03-06","-1446-04-15","T_Wilderness","10Y",,"T_Wilderness","Event",,"Exod.24.15-31.18",
+"E_PAT135","The Golden Calf","-1250-04-16","-1250-04-17","-1446-04-16","-1446-04-17","T_Wilderness","10Y",,"T_Wilderness","Event",,"Exod.32",
+"E_PAT136","Moss on the mountain a second time for 40 days","-1250-04-21","-1250-05-30","-1446-04-21","-1446-05-30","T_Wilderness","10Y",,"T_Wilderness","Event",,"Exod.33.1-34.28",
+"E_PAT137","Construction of the Tabernacle","-1250-06-01","-1250-12-30","-1446-06-01","-1446-12-30","T_Wilderness","10Y","EM","T_Wilderness","Event",,"Exod.34.29-39.43",
+"E_PAT138","Erection of the Tabernacle","-1249-01-01",,"-1445-01-01",,"T_Wilderness","10Y",,"T_Wilderness","Event",,"Exod.40",
+"E_PAT139","Giving of the Levitical Law and other commands","-1249-01-01","-1249-02-19","-1445-01-01","-1445-02-19","T_Wilderness","10Y",,"T_Wilderness","Event",,"Lev.*; Num.6-8; Num.10.1-10",
+"E_PAT140","Celebrating the Passover at Sinai","-1249-01-14",,"-1445-01-14",,"T_Wilderness","10Y",,"T_Wilderness","Event",,"Num.9",
+"E_PAT141","Taking a census at Sinai","-1249-02-01",,"-1445-02-01",,"T_Wilderness","10Y",,"T_Wilderness","Event",,"Num.1-5",
+"E_PAT142","The Israelites leave Sinai","-1249-02-20",,"-1445-02-20",,"T_Wilderness","10Y",,"T_Wilderness","Event",,"Num.10.11-36",
+"E_PAT143","Sinai to Paran","-1249-03-01","-1249-04-30","-1445-03-01","-1445-04-30","T_Wilderness","10Y","EM","T_Wilderness","Event","timing is Ussher","Num.11-12",
+"E_PAT144","Exploring Canaan","-1249-05-01","-1249-06-30","-1445-05-01","-1445-06-30","T_Wilderness","10Y","EM","T_Wilderness","Event",,"Num.13-14",
+"E_PAT145","Israel in the Wilderness","-1249-07-01","-1212-12-30","-1445-07-07","-1408-12-30","T_Wilderness","10Y",,"T_Wilderness","Event","No dating information here","Num.15.1-19.22",
+"E_PAT146","Death of Miriam","-1211-01-01",,"-1407-01-01","-1407-01-01","T_Wilderness","10Y",,"T_Wilderness","Event","20.1 has ""in the first month"". Ussher reads this as the last year. Scattered events across the year","Num.20.1",
+"E_PAT147","Waters of Meribah","-1211-01-15",,"-1407-01-15",,"T_Wilderness","10Y","EM","T_Wilderness","Event",,"Num.20.1-13",
+"E_PAT148","Edom refuses passage","-1211-02",,"-1407-02",,"T_Wilderness","10Y","EM","T_Wilderness","Event",,"Num.20.14-21",
+"E_PAT149","Death of Aaron ","-1211-03",,"-1407-03",,"T_Wilderness","10Y","EM","T_Wilderness","Event",,"Num.20.22-28",
+"E_PAT150","Defeat of Arad, Sihon king of the Amorites and Og king of Bashan","-1211-04",,"-1407-04",,"T_Wilderness","10Y","EM","T_Wilderness","Event",,"Num.21",
+"E_PAT151","Balak and Balaam","-1211-05",,"-1407-05",,"T_Wilderness","10Y","EM","T_Wilderness","Event",,"Num.22-24",
+"E_PAT152","The plague of Peor","-1211-06-07",,"-1407-06-07",,"T_Wilderness","10Y","EM","T_Wilderness","Event",,"Num.25",
+"E_PAT153","Census of the new generation","-1211-06-21",,"-1407-06-21",,"T_Wilderness","10Y","EM","T_Wilderness","Event",,"Num.26.1-27.11",
+"E_PAT154","Joshua consecrated as successor to Moses","-1211-07",,"-1407-07",,"T_Wilderness","10Y","EM","T_Wilderness","Event",,"Num.27.12-23",
+"E_PAT155","Laws concerning offerings and vows","-1211-07",,"-1407-07",,,"10Y","EM","T_Wilderness","Event",,"Num.28-30",
+"E_PAT156","Vengeance on Midian","-1211-08",,"-1407-08",,"T_Wilderness","10Y","EM","T_Wilderness","Event",,"Num.31",
+"E_PAT157","Reuben and Gad settle in Gilead","-1211-09",,"-1407-09",,"T_Wilderness","10Y","EM","T_Wilderness","Event",,"Num.32",
+"E_PAT158","Summary of the journey","-1250","-1211","-1446","-1407",,"10Y","EM","T_Wilderness","Event",,"Num.33",
+"E_PAT159","Further commandments","-1211-10",,"-1407-10",,,"10Y","EM","T_Wilderness","Event",,"Num.34-36",
+"E_PAT160","Moses speaks to Israel in Moab","-1211-11-01","-1211-11-30","-1407-11-01","-1407-11-30","T_Wilderness","10Y",,"T_Wilderness","Event","Unclear how long all this takes","Deut.1-33",
+"E_PAT161","Moses's death","-1211-12-01","-1211-12-01","-1407-12-01","-1407-12-01","T_Wilderness","10Y",,"T_Wilderness","Event",,"Deut.34",
+"E_PAT162","Commissioning of Joshua","-1210-01-01",,"-1406-01-01",,"T_Conquest","10Y",,"T_Conquest","Event",,"Josh.1","First available day after the mourning period."
+"E_PAT163","Spies sent to Jericho","-1210-01-03","-1210-01-08","-1406-01-03","-1406-01-08","T_Conquest","10Y",,"T_Conquest","Event",,"Josh.2","Hid for three days, plus travelling time"
+"E_PAT164","Crossing of the Jordan ","-1210-01-10",,"-1406-01-10",,"T_Conquest","10Y",,"T_Conquest","Event",,"Josh.3-4","Stated date (4:19)"
+"E_PAT165","Circumcision of the new generation","-1210-01-11","-1210-01-13","-1406-01-11","-1406-01-13","T_Conquest","10Y",,"T_Conquest","Event",,"Josh.5.1-9",
+"E_PAT166","First Passover in Canaan","-1210-01-14",,"-1406-01-14",,"T_Conquest","10Y",,"T_Conquest","Event",,"Josh.5.10-12","Stated date (5:10)"
+"E_PAT167","Fall of Jericho","-1210-01-18","-1210-01-24","-1406-01-18","-1406-01-24","T_Conquest","10Y","EM","T_Conquest","Event",,"Josh.5.13-6.27","7 days, presumably not long after Passover"
+"E_PAT168","Defeat at Ai","-1210-02-01",,"-1406-02-01",,"T_Conquest","10Y","EM","T_Conquest","Event",,"Josh.7","Spread these events out a bit"
+"E_PAT169","Fall of Ai","-1210-02-08",,"-1406-02-08",,"T_Conquest","10Y","EM","T_Conquest","Event",,"Josh.8.1-29",
+"E_PAT170","Renewal of the covenant","-1210-02-14",,"-1406-02-14",,"T_Conquest","10Y","EM","T_Conquest","Event",,"Josh.8.30-35",
+"E_PAT171","Treaty with the Gibeonites","-1210-04",,"-1406-04",,"T_Conquest","10Y","EM","T_Conquest","Event",,"Josh.9",
+"E_PAT172","Battle with the five kings of the Amorites","-1210-05",,"-1406-05",,"T_Conquest","10Y","EM","T_Conquest","Event",,"Josh.10.1-28",
+"E_PAT173","Conquest of Southern Canaan","-1209","-1208","-1405","-1404","T_Conquest","10Y","EY","T_Conquest","Event",,"Josh.10.29-43",
+"E_PAT174","Conquest of Northern Canaan","-1207","-1206","-1403","-1402","T_Conquest","10Y","EY","T_Conquest","Event",,"Josh.11 ","We have four years before chapter 13, so split N and S 50/50"
+"E_PAT175","Summaries of conquests","-1211","-1206","-1407","-1402",,"10Y","EY","T_Conquest","Event",,"Josh.12 ",
+"E_PAT176","Division of the land of Canaan","-1204-01",,"-1200-01",,"T_Conquest","10Y","EM","T_Conquest","Event",,"Josh.13-21","45 years after Num13-14 (vv7-10)"
+"E_PAT177","Eastern tribes return home and build an altar","-1204-02",,"-1200-02",,"T_Conquest","10Y","EM","T_Conquest","Event",,"Josh.22","Immediately after previous"
+"E_PAT178","Joshua's death","-1200",,"-1385",,"T_Conquest","10Y",,"T_Conquest","Event",,"Josh.23-24","Joshua 110, but this is of no use given no other dating for him"
+"E_PAT179","Samuel's birth","-1092",,"-1090",,"T_Judges","10Y",,"T_Judges","Event",,"1Sam.1.1-23",
+"E_PAT180","Samuel's dedication","-1089",,"-1087",,"T_Judges","10Y","EY","T_Judges","Event",,"1Sam.1.24-2.11","Age 3 seems reasonable given other events"
+"E_PAT181","Prophecies against Eli's sons","-1089","-1086","-1087","-1084","T_Judges","10Y",,"T_Judges","Event",,"1Sam.2.12-36",
+"E_PAT182","Samuel called as a prophet","-1086",,"-1084",,"T_Judges","10Y",,"T_Judges","Event",,"1Sam.3.1-18",
+"E_PAT183","Samuel recognised as a prophet","-1086","-1062","-1084","-1060","T_Judges","10Y",,"T_Judges","Event",,"1Sam.3.19-21",
+"E_PAT184","Philistines capture the Ark; Death of Eli","-1062",,"-1060",,"T_Judges","10Y",,"T_Judges","Event",,"1Sam.4-5",
+"E_PAT185","Ark returned to Israel at Kiriath Jearim","-1042",,"-1050",,"T_Judges","10Y",,"T_Judges","Event",,"1Sam.6-7.1",
+"E_PAT186","Samuel defeats the Philistines at Mizpah","-1042",,"-1050",,"T_Judges","10Y",,"T_Judges","Event",,"1Sam.7.2-17",
+"E_PAT187","Israel asks for a king","-1042",,"-1050",,"T_Judges","10Y",,"T_Judges","Event",,"1Sam.8",

Added: trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_Rome.csv
===================================================================
--- trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_Rome.csv	                        (rev 0)
+++ trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/TL_Rome.csv	2011-01-22 20:02:36 UTC (rev 203)
@@ -0,0 +1,36 @@
+"ID","Name","From","To","From2","To2","Importance","Certainty","Flags","Timeline","Type","Description","Refs","Notes"
+"T_Rome","Ancient Rome","-753","476",,,"T_All",,,"T_All","Timeline",,,"Taken from House (selected items)"
+"E_RomanKingdom","Roman Kingdom","-753","-509",,,"T_Rome",,,"T_Rome","Event","Rome ruled by seven kings",,"(Not enough for a timeline?)"
+"T_RomanRepublic","Roman Republic","-508","-27",,,"T_Rome",,,"T_Rome","Timeline","Rome a republic",,
+"T_RomanEmpire","Roman Empure","-27","476",,,"T_Rome",,,"T_Rome","Timeline","Period of the Roman Empire until its fall in the west",,
+"E_Rome1","Roman capture of Jerusalem","-63",,,,"T_RomanRepublic",,,"T_RomanRepublic","Event","Pompey captures Jerusalem",,
+"E_Rome2","Julius Caesar's invasions of Britain","-55","-54",,,"T_RomanRepublic",,,"T_RomanRepublic","Event",,,
+"E_Rome3","Assassination of Julius Caesar","-44-03-15",,,,"T_RomanRepublic",,,"T_RomanRepublic","Event",,,
+"E_Rome4","Roman annexation of Egypt","-30",,,,"T_RomanRepublic",,,"T_RomanRepublic","Event",,,
+"E_Rome5","Augustus","-27","14",,,"T_RomanEmpire",,,"T_RomanEmpire","Reign",,,
+"E_Rome6","Tiberius","14","37",,,"T_RomanEmpire",,,"T_RomanEmpire","Reign",,,
+"E_Rome7","Caligula","37","41",,,"T_RomanEmpire",,,"T_RomanEmpire","Reign",,,
+"E_Rome8","Claudius","41","54",,,"T_RomanEmpire",,,"T_RomanEmpire","Reign",,,
+"E_Rome9","Nero","54","68-06-09",,,"T_RomanEmpire",,,"T_RomanEmpire","Reign",,,
+"E_Rome10","Galba","68-06-09","69-01-15",,,"T_RomanEmpire",,,"T_RomanEmpire","Reign",,,
+"E_Rome11","Otho","69-01-15","69-04-16",,,"T_RomanEmpire",,,"T_RomanEmpire","Reign",,,
+"E_Rome12","Vitellius","69-04-26","69-12-20",,,"T_RomanEmpire",,,"T_RomanEmpire","Reign",,,
+"E_Rome13","Vespasian","69-12-21","79",,,"T_RomanEmpire",,,"T_RomanEmpire","Reign",,,
+"E_Rome14","Titus","79","81",,,"T_RomanEmpire",,,"T_RomanEmpire","Reign",,,
+"E_Rome15","Domitian","81","96",,,"T_RomanEmpire",,,"T_RomanEmpire","Reign",,,
+"E_Rome16","Nerva","96","98",,,"T_RomanEmpire",,,"T_RomanEmpire","Reign",,,
+"E_Rome17","Trajan ","98","117",,,"T_RomanEmpire",,,"T_RomanEmpire","Reign",,,
+"E_Rome18","Hadrian","117","138",,,"T_RomanEmpire",,,"T_RomanEmpire","Reign",,,
+"E_Rome19","Roman annexation of Galatia","-25",,,,"T_RomanEmpire",,,"T_RomanEmpire","Event",,,
+"E_Rome20","Roman invasion of Britain","43",,,,"T_RomanEmpire",,,"T_RomanEmpire","Event",,,
+"E_Rome21","Great Fire of Rome","64",,,,"T_RomanEmpire",,,"T_RomanEmpire","Event",,,
+"E_Rome22","Destruction of Jerusalem","70",,,,"T_RomanEmpire",,,"T_RomanEmpire","Event",,,"(Needs to go into both Roman and Jewish timelines)"
+"E_Rome23","Destruction of Pompeii and Herculaneum","79",,,,"T_RomanEmpire",,,"T_RomanEmpire","Event",,,
+"E_Rome24","Revolt of the Jews in the East","132","134",,,"T_RomanEmpire",,,"T_RomanEmpire","Event",,,
+"E_Rome25","Constantine converts to Christianity",312,,,,"T_RomanEmpire",,,"T_RomanEmpire","Event",,,
+"E_Rome26","Theodosius I","379","395",,,"T_RomanEmpire",,,"T_RomanEmpire","Reign",,,
+"E_Rome27","Constantine I","306","337",,,"T_RomanEmpire",,,"T_RomanEmpire","Reign",,,
+"E_Rome28","Marcus Aurelius","161","180",,,"T_RomanEmpire",,,"T_RomanEmpire","Reign",,,
+"E_Rome29","Decius","249","251",,,"T_RomanEmpire",,,"T_RomanEmpire","Reign",,,
+"E_Rome30","Valerian","253","260",,,"T_RomanEmpire",,,"T_RomanEmpire","Reign",,,
+"E_Rome31","Dicocletian","284","305",,,"T_RomanEmpire",,,"T_RomanEmpire","Reign",,,

Added: trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/index.txt
===================================================================
--- trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/index.txt	                        (rev 0)
+++ trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/index.txt	2011-01-22 20:02:36 UTC (rev 203)
@@ -0,0 +1,16 @@
+TL_Africa.csv
+TL_Americas.csv
+TL_ArchCult.csv
+TL_Asia.csv
+TL_EarlyChurch.csv
+TL_Egypt.csv
+TL_Europe.csv
+TL_ExileAndReturn.csv
+TL_Global.csv
+TL_Intertestamental.csv
+TL_Jesus.csv
+TL_Monarchy.csv
+TL_NTChurch.csv
+TL_OTNeighbours.csv
+TL_PatriarchsToJudges.csv
+TL_Rome.csv

Added: trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/license.txt
===================================================================
--- trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/license.txt	                        (rev 0)
+++ trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/timeline/license.txt	2011-01-22 20:02:36 UTC (rev 203)
@@ -0,0 +1 @@
+The data contained in this folder is Copyright Tyndale House, Cambridge
\ No newline at end of file

Added: trunk/step/step-core/src/main/resources/ebean.properties
===================================================================
--- trunk/step/step-core/src/main/resources/ebean.properties	                        (rev 0)
+++ trunk/step/step-core/src/main/resources/ebean.properties	2011-01-22 20:02:36 UTC (rev 203)
@@ -0,0 +1,80 @@
+# -------------------------------------------------------------  
+# Load (Dev/Test/Prod) properties external to your war/jar  
+# -------------------------------------------------------------  
+# You can use load.properties to load the properties from a  
+# file external to your war/jar.   
+#load.properties.override=${CATALINA_HOME}/conf/myapp.ebean.properties  
+  
+  
+ebean.ddl.generate=false  
+ebean.ddl.run=false  
+  
+ebean.debug.sql=true  
+#ebean.debug.lazyload=false  
+  
+  
+# -------------------------------------------------------------  
+# Transaction Logging  
+# -------------------------------------------------------------  
+  
+# Use java util logging to log transaction details  
+#ebean.loggingToJavaLogger=true  
+  
+# General logging level: (none, explicit, all)  
+ebean.logging=all  
+  
+# Sharing log files: (none, explicit, all)  
+ebean.logging.logfilesharing=all  
+  
+# location of transaction logs   
+ebean.logging.directory=logs  
+#ebean.logging.directory=${catalina.base}/logs/trans  
+  
+# Specific Log levels (none, summary, binding, sql)  
+ebean.logging.iud=sql  
+ebean.logging.query=sql  
+ebean.logging.sqlquery=sql  
+  
+ebean.logging.txnCommit=none  
+  
+# -------------------------------------------------------------  
+# DataSources (If using default Ebean DataSourceFactory)  
+# -------------------------------------------------------------   
+# You can specify many DataSources (one per EbeanServer)  and   
+# one of them is defined as the default/primary DataSource  
+  
+# specify the default/primary DataSource  
+#datasource.default=h2  
+  
+#datasource.h2.username=sa  
+#datasource.h2.password=  
+#datasource.h2.databaseUrl=jdbc:h2:mem:tests;DB_CLOSE_DELAY=-1  
+#datasource.h2.databaseDriver=org.h2.Driver  
+#datasource.h2.minConnections=1  
+#datasource.h2.maxConnections=25  
+#datasource.h2.heartbeatsql=select 1  
+#datasource.h2.isolationlevel=read_committed  
+  
+#datasource.mysql.username=test  
+#datasource.mysql.password=test  
+#datasource.mysql.databaseUrl=jdbc:mysql://127.0.0.1:3306/test  
+#datasource.mysql.databaseDriver=com.mysql.jdbc.Driver  
+#datasource.mysql.minConnections=1  
+#datasource.mysql.maxConnections=25  
+#datasource.mysql.heartbeatsql=select 1  
+#datasource.mysql.isolationlevel=read_committed  
+  
+#datasource.ora.username=test  
+#datasource.ora.password=test  
+#datasource.ora.databaseUrl=jdbc:oracle:thin:@127.0.0.1:1521:XE  
+#datasource.ora.databaseDriver=oracle.jdbc.driver.OracleDriver  
+#datasource.ora.minConnections=1  
+#datasource.ora.maxConnections=25  
+#datasource.ora.heartbeatsql=select count(*) from dual  
+#datasource.ora.isolationlevel=read_committed  
+  
+#datasource.pg.username=test  
+#datasource.pg.password=test  
+#datasource.pg.databaseUrl=jdbc:postgresql://127.0.0.1:5433/test  
+#datasource.pg.databaseDriver=org.postgresql.Driver  
+#datasource.pg.heartbeatsql=select 1  

Modified: trunk/step/step-core/src/main/resources/log4j.properties
===================================================================
--- trunk/step/step-core/src/main/resources/log4j.properties	2011-01-07 22:52:32 UTC (rev 202)
+++ trunk/step/step-core/src/main/resources/log4j.properties	2011-01-22 20:02:36 UTC (rev 203)
@@ -9,5 +9,5 @@
 
 # Categories
 org.crosswire.jsword.book.sword.ConfigEntry=WARN
-log4j.category.com.tyndalehouse.step=DEBUG
+log4j.category.com.tyndalehouse.step=INFO
 

Modified: trunk/step/step-core/src/main/resources/step.core.properties
===================================================================
--- trunk/step/step-core/src/main/resources/step.core.properties	2011-01-07 22:52:32 UTC (rev 202)
+++ trunk/step/step-core/src/main/resources/step.core.properties	2011-01-22 20:02:36 UTC (rev 203)
@@ -8,3 +8,14 @@
 
 app.proxy.host=
 app.proxy.port=
+
+# Database parameters - these will vary depending on the connection
+app.db.driver=org.h2.Driver
+app.db.url=jdbc:h2:mem:step
+app.db.username=
+app.db.password=
+app.db.maxActive=4
+app.db.maxIdle=2
+app.db.maxOpenStatement=20
+app.db.poolableStatements=true 
+app.db.validationQuery=select 1

Added: trunk/step/step-core/src/test/java/com/tyndalehouse/step/core/data/common/PartialDateTest.java
===================================================================
--- trunk/step/step-core/src/test/java/com/tyndalehouse/step/core/data/common/PartialDateTest.java	                        (rev 0)
+++ trunk/step/step-core/src/test/java/com/tyndalehouse/step/core/data/common/PartialDateTest.java	2011-01-22 20:02:36 UTC (rev 203)
@@ -0,0 +1,98 @@
+package com.tyndalehouse.step.core.data.common;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.Calendar;
+import java.util.GregorianCalendar;
+
+import org.junit.Test;
+
+import com.tyndalehouse.step.core.exceptions.StepInternalException;
+
+/**
+ * Checks different types of parsing functionality for parsing dates
+ * 
+ * @author Chris
+ * 
+ */
+public class PartialDateTest {
+    /** tests null dates */
+    @Test
+    public void testParsingNullDate() {
+        final PartialDate pd = PartialDate.parseDate(null);
+        assertEquals(pd.getDate(), null);
+        assertEquals(pd.getPrecision(), PrecisionType.NONE);
+    }
+
+    /** tests blank dates */
+    @Test
+    public void testBlankDate() {
+        final PartialDate pd = PartialDate.parseDate("  ");
+        assertEquals(pd.getDate(), null);
+        assertEquals(pd.getPrecision(), PrecisionType.NONE);
+    }
+
+    /** tests year AD */
+    @Test
+    public void testYearAD() {
+        final PartialDate pd = PartialDate.parseDate("1");
+        assertEquals(pd.getDate().get(Calendar.YEAR), 1);
+        assertEquals(pd.getDate().get(Calendar.ERA), GregorianCalendar.AD);
+        assertEquals(pd.getPrecision(), PrecisionType.YEAR);
+    }
+
+    /** tests year AD */
+    @Test
+    public void testYearBC() {
+        final PartialDate pd = PartialDate.parseDate("-1");
+        assertEquals(pd.getDate().get(Calendar.YEAR), 1);
+        assertEquals(pd.getDate().get(Calendar.ERA), GregorianCalendar.BC);
+        assertEquals(pd.getPrecision(), PrecisionType.YEAR);
+    }
+
+    /** tests year AD */
+    @Test
+    public void testYearMonthBC() {
+        final PartialDate pd = PartialDate.parseDate("-3-7");
+        assertEquals(pd.getDate().get(Calendar.YEAR), 3);
+        assertEquals(pd.getDate().get(Calendar.MONTH), 7);
+        assertEquals(pd.getDate().get(Calendar.ERA), GregorianCalendar.BC);
+        assertEquals(pd.getPrecision(), PrecisionType.MONTH);
+    }
+
+    /** tests year AD */
+    @Test
+    public void testYearMonthDay() {
+        final PartialDate pd = PartialDate.parseDate("3-07-25");
+        assertEquals(pd.getDate().get(Calendar.YEAR), 3);
+        assertEquals(pd.getDate().get(Calendar.MONTH), 7);
+        assertEquals(pd.getDate().get(Calendar.DAY_OF_MONTH), 25);
+
+        assertEquals(pd.getDate().get(Calendar.ERA), GregorianCalendar.AD);
+        assertEquals(pd.getPrecision(), PrecisionType.DAY);
+    }
+
+    /**
+     * tests an invalid short date
+     */
+    @Test(expected = StepInternalException.class)
+    public void testNoParts() {
+        PartialDate.parseDate("-");
+    }
+
+    /**
+     * tests an invalid long date
+     */
+    @Test(expected = StepInternalException.class)
+    public void testTooManyParts() {
+        PartialDate.parseDate("1-1-1-1-1");
+    }
+
+    /**
+     * tests an invalid date with alpha characters
+     */
+    @Test(expected = StepInternalException.class)
+    public void testAlphaChars() {
+        PartialDate.parseDate("1-a-2");
+    }
+}

Added: trunk/step/step-core/src/test/java/com/tyndalehouse/step/core/data/create/CsvDataTest.java
===================================================================
--- trunk/step/step-core/src/test/java/com/tyndalehouse/step/core/data/create/CsvDataTest.java	                        (rev 0)
+++ trunk/step/step-core/src/test/java/com/tyndalehouse/step/core/data/create/CsvDataTest.java	2011-01-22 20:02:36 UTC (rev 203)
@@ -0,0 +1,40 @@
+package com.tyndalehouse.step.core.data.create;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.junit.Test;
+
+/**
+ * Tests the Csv Data
+ * 
+ * @author Chris
+ * 
+ */
+public class CsvDataTest {
+    /** testing simple csv data lookup */
+    @Test
+    public void testSimpleLookup() {
+        final String headerName = "name";
+        final String headerSurname = "surname";
+        final String name1 = "John";
+        final String name2 = "Claire";
+        final String surname1 = "Blogs";
+        final String surname2 = "Smith";
+
+        final List<String[]> fileData = new ArrayList<String[]>();
+        fileData.add(new String[] { headerName, headerSurname });
+        fileData.add(new String[] { name1, surname1 });
+        fileData.add(new String[] { name2, surname2 });
+
+        final CsvData c = new CsvData(fileData);
+
+        assertEquals(name1, c.getData(0, headerName));
+        assertEquals(name2, c.getData(1, headerName));
+        assertEquals(surname1, c.getData(0, headerSurname));
+        assertEquals(surname2, c.getData(1, headerSurname));
+
+    }
+}

Added: trunk/step/step-core/src/test/java/com/tyndalehouse/step/core/data/create/DataTest.java
===================================================================
--- trunk/step/step-core/src/test/java/com/tyndalehouse/step/core/data/create/DataTest.java	                        (rev 0)
+++ trunk/step/step-core/src/test/java/com/tyndalehouse/step/core/data/create/DataTest.java	2011-01-22 20:02:36 UTC (rev 203)
@@ -0,0 +1,81 @@
+package com.tyndalehouse.step.core.data.create;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.avaje.ebean.Ebean;
+import com.avaje.ebean.SqlRow;
+import com.google.inject.Guice;
+import com.tyndalehouse.step.core.data.entities.Timeband;
+
+/**
+ * Basic test for the loader
+ * 
+ * @author Chris
+ * 
+ */
+public class DataTest {
+    private static final Logger LOG = LoggerFactory.getLogger(DataTest.class);
+
+    /**
+     * sets up the tests correctly
+     */
+    @BeforeClass
+    public static void setupData() {
+        Guice.createInjector(new DataTestModule());
+    }
+
+    /**
+     * Tests that a connection server has been established
+     */
+    @Test
+    public void testConnection() {
+        final String sql = "select count(*) as count from dual";
+        final SqlRow row = Ebean.createSqlQuery(sql).findUnique();
+
+        final Integer i = row.getInteger("count");
+        assertEquals(i, Integer.valueOf(1));
+        LOG.debug("Got " + i + "  - DataSource good.");
+    }
+
+    /**
+     * testing the loading process TODO don't want to test the whole timeline component every build
+     */
+    @Test
+    public void tryLoadingProcess() {
+        final TimelineModuleLoader timelineLoaderModule = new TimelineModuleLoader();
+        final Loader l = new Loader(timelineLoaderModule);
+        l.init();
+
+        // we check that we entities in all three tables
+        final Timeband timeband = Ebean.find(Timeband.class).fetch("hotspots.events").where().eq("id", 1)
+                .findUnique();
+
+        assertNotNull(timeband);
+        assertNotNull(timeband.getHotspots());
+        assertNotNull(timeband.getHotspots().get(0));
+        assertNotNull(timeband.getHotspots().get(0).getEvents());
+        assertNotNull(timeband.getHotspots().get(0).getEvents().get(0).getSummary());
+    }
+    // /**
+    // * Tests the relational query builder
+    // *
+    // * @throws SQLException a SQL exception from the database
+    // */
+    // @Test
+    // public void testRelationalBuilder() throws SQLException {
+    // final HotSpotDao hotspotDao = new HotSpotDaoImpl(this.connectionSource);
+    //
+    // final PreparedQuery<HotSpot> preparedQuery = hotspotDao.getRelationalQueryBuilder().fetch("timeband")
+    // .prepare();
+    //
+    // final List<HotSpot> hotspots = hotspotDao.query(preparedQuery);
+    // assertNotNull(hotspots.get(0).getTimeband());
+    // assertNotNull(hotspots.get(0).getTimeband().getCode());
+    // }
+}

Added: trunk/step/step-core/src/test/java/com/tyndalehouse/step/core/data/create/DataTestModule.java
===================================================================
--- trunk/step/step-core/src/test/java/com/tyndalehouse/step/core/data/create/DataTestModule.java	                        (rev 0)
+++ trunk/step/step-core/src/test/java/com/tyndalehouse/step/core/data/create/DataTestModule.java	2011-01-22 20:02:36 UTC (rev 203)
@@ -0,0 +1,45 @@
+package com.tyndalehouse.step.core.data.create;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Properties;
+
+import com.avaje.ebean.EbeanServer;
+import com.google.inject.AbstractModule;
+import com.google.inject.name.Names;
+import com.tyndalehouse.step.core.guice.providers.DatabaseConfigProvider;
+
+/**
+ * A simple guice module to initialise the database
+ * 
+ * @author Chris
+ * 
+ */
+public class DataTestModule extends AbstractModule {
+    private static final String CORE_GUICE_PROPERTIES = "/step.core.properties";
+
+    @Override
+    protected void configure() {
+        bind(Properties.class).annotatedWith(Names.named("StepCoreProperties")).toInstance(readProperties());
+        bind(EbeanServer.class).toProvider(DatabaseConfigProvider.class).asEagerSingleton();
+    }
+
+    /**
+     * TODO share this code with main code reads the core properties from the file
+     * 
+     * @return a list of properties read from file
+     */
+    private Properties readProperties() {
+        final InputStream stream = getClass().getResourceAsStream(CORE_GUICE_PROPERTIES);
+        final Properties appProperties = new Properties();
+        try {
+            appProperties.load(stream);
+            Names.bindProperties(super.binder(), appProperties);
+        } catch (final IOException e) {
+            // This is the preferred way to tell Guice something went wrong
+            super.addError(e);
+        }
+        return appProperties;
+    }
+
+}

Added: trunk/step/step-core/src/test/java/com/tyndalehouse/step/core/utils/PassageReferenceUtilsTest.java
===================================================================
--- trunk/step/step-core/src/test/java/com/tyndalehouse/step/core/utils/PassageReferenceUtilsTest.java	                        (rev 0)
+++ trunk/step/step-core/src/test/java/com/tyndalehouse/step/core/utils/PassageReferenceUtilsTest.java	2011-01-22 20:02:36 UTC (rev 203)
@@ -0,0 +1,64 @@
+package com.tyndalehouse.step.core.utils;
+
+import static com.tyndalehouse.step.core.utils.PassageReferenceUtils.getPassageReferences;
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.mock;
+
+import java.util.List;
+
+import org.junit.Test;
+
+import com.tyndalehouse.step.core.data.entities.ScriptureTarget;
+import com.tyndalehouse.step.core.data.entities.ScriptureReference;
+
+/**
+ * testing the passage reference utils class
+ * 
+ * @author Chris
+ * 
+ */
+public class PassageReferenceUtilsTest {
+    /**
+     * Tests the resolving of passage references
+     */
+    @Test
+    public void testSingleReference() {
+        final ScriptureTarget target = mock(ScriptureTarget.class);
+        final List<ScriptureReference> refs = getPassageReferences(target, "Gen.1.1");
+
+        assertEquals(refs.size(), 1);
+        assertEquals(1, refs.get(0).getStartVerseId());
+        assertEquals(1, refs.get(0).getEndVerseId());
+    }
+
+    /**
+     * Tests the resolving of passage references
+     */
+    @Test
+    public void testMultipleReference() {
+        final ScriptureTarget target = mock(ScriptureTarget.class);
+        final List<ScriptureReference> refs = getPassageReferences(target, "Gen.1.1;Gen.1.3");
+
+        assertEquals(2, refs.size());
+        assertEquals(1, refs.get(0).getStartVerseId());
+        assertEquals(1, refs.get(0).getEndVerseId());
+        assertEquals(3, refs.get(1).getStartVerseId());
+        assertEquals(3, refs.get(1).getEndVerseId());
+    }
+
+    /**
+     * Tests the resolving of passage references
+     */
+    @Test
+    public void testMultiplePassages() {
+        final ScriptureTarget target = mock(ScriptureTarget.class);
+        final List<ScriptureReference> refs = getPassageReferences(target, "Gen.1.1-2;Gen.1.4-5");
+
+        assertEquals(refs.size(), 2);
+        assertEquals(1, refs.get(0).getStartVerseId());
+        assertEquals(2, refs.get(0).getEndVerseId());
+        assertEquals(4, refs.get(1).getStartVerseId());
+        assertEquals(5, refs.get(1).getEndVerseId());
+    }
+
+}

Added: trunk/step/step-core/src/test/resources/log4j.properties
===================================================================
--- trunk/step/step-core/src/test/resources/log4j.properties	                        (rev 0)
+++ trunk/step/step-core/src/test/resources/log4j.properties	2011-01-22 20:02:36 UTC (rev 203)
@@ -0,0 +1,12 @@
+# Set root logger level to DEBUG and its only appender to A1.
+log4j.rootLogger=INFO, A1
+
+# A1 is set to be a ConsoleAppender.
+# A1 uses PatternLayout.
+log4j.appender.A1=org.apache.log4j.ConsoleAppender
+log4j.appender.A1.layout=org.apache.log4j.PatternLayout
+log4j.appender.A1.layout.ConversionPattern=%d %-5p %C{1}:%L - %m%n
+
+log4j.category.org.crosswire.jsword.book.sword.ConfigEntry=WARN
+log4j.category.com.tyndalehouse.step=INFO
+

Modified: trunk/step/step-parent/pom.xml
===================================================================
--- trunk/step/step-parent/pom.xml	2011-01-07 22:52:32 UTC (rev 202)
+++ trunk/step/step-parent/pom.xml	2011-01-22 20:02:36 UTC (rev 203)
@@ -16,6 +16,7 @@
 		<db.driver>org.apache.derby.jdbc.EmbeddedDriver</db.driver>
 		<db.connection.string>jdbc:derby:${db.directory}</db.connection.string>
 
+		<h2.version>1.3.148</h2.version>
 		<derby.version>10.5.3.0_1</derby.version>
 		<junit.version>4.8.2</junit.version>
 
@@ -23,7 +24,7 @@
 		<jsword.version>1.6.1-SNAPSHOT</jsword.version>
 		<jdom.version>1.1</jdom.version>
 		<javatar.version>2.5</javatar.version>
-		
+
 		<jackson-mapper-asl.version>1.6.2</jackson-mapper-asl.version>
 		<org.slf4j.version>1.6.1</org.slf4j.version>
 		<servlet-api.version>2.5</servlet-api.version>
@@ -34,6 +35,9 @@
 		<guice-servlet.version>2.9.1</guice-servlet.version>
 		<opencsv.version>2.1</opencsv.version>
 		<jetty.version>6.1.22</jetty.version>
+		<!-- <ormlite.version>4.6</ormlite.version> -->
+		<ebean.version>2.7.2</ebean.version>
+		<lucene.version>3.0.3</lucene.version>
 
 		<!-- Commons -->
 		<commons-beanutils.version>1.8.3</commons-beanutils.version>
@@ -77,11 +81,32 @@
 				<version>${jsword.version}</version>
 			</dependency>
 			<dependency>
-			    <groupId>javatar</groupId>
-			    <artifactId>javatar</artifactId>
-			    <version>${javatar.version}</version>
+				<groupId>org.apache.lucene</groupId>
+				<artifactId>lucene-core</artifactId>
+				<version>${lucene.version}</version>
 			</dependency>
 			<dependency>
+				<groupId>org.apache.lucene</groupId>
+				<artifactId>lucene-analyzers</artifactId>
+				<version>${lucene.version}</version>
+			</dependency>
+			<dependency>
+				<groupId>org.apache.lucene</groupId>
+				<artifactId>lucene-snowball</artifactId>
+				<version>${lucene.version}</version>
+			</dependency>
+			<dependency>
+				<groupId>org.apache.lucene</groupId>
+				<artifactId>lucene-smartcn</artifactId>
+				<version>${lucene.version}</version>
+			</dependency>
+			
+			<dependency>
+				<groupId>javatar</groupId>
+				<artifactId>javatar</artifactId>
+				<version>${javatar.version}</version>
+			</dependency>
+			<dependency>
 				<groupId>org.jdom</groupId>
 				<artifactId>jdom</artifactId>
 				<version>${jdom.version}</version>
@@ -131,9 +156,9 @@
 				<version>${jstl.version}</version>
 			</dependency>
 			<dependency>
-			    <groupId>net.sourceforge.pjl-comp-filter</groupId>
-			    <artifactId>pjl-comp-filter</artifactId>
-			    <version>${pjl-comp-filter.version}</version>
+				<groupId>net.sourceforge.pjl-comp-filter</groupId>
+				<artifactId>pjl-comp-filter</artifactId>
+				<version>${pjl-comp-filter.version}</version>
 			</dependency>
 
 			<!-- TODO build against google released artifacts -->
@@ -142,11 +167,11 @@
 				<artifactId>guice</artifactId>
 				<version>${guice.version}</version>
 			</dependency>
-			
+
 			<dependency>
-			    <groupId>org.sonatype.sisu.inject</groupId>
-			    <artifactId>guice-servlet</artifactId>
-			    <version>${guice-servlet.version}</version>
+				<groupId>org.sonatype.sisu.inject</groupId>
+				<artifactId>guice-servlet</artifactId>
+				<version>${guice-servlet.version}</version>
 			</dependency>
 
 			<dependency>
@@ -164,11 +189,11 @@
 				<artifactId>org.restlet.ext.json</artifactId>
 				<version>${restlet.version}</version>
 			</dependency>
-			<dependency>
-				<groupId>commons-beanutils</groupId>
-				<artifactId>commons-beanutils</artifactId>
-				<version>${commons-beanutils.version}</version>
-			</dependency>
+<!--			<dependency>-->
+<!--				<groupId>commons-beanutils</groupId>-->
+<!--				<artifactId>commons-beanutils</artifactId>-->
+<!--				<version>${commons-beanutils.version}</version>-->
+<!--			</dependency>-->
 
 			<dependency>
 				<groupId>commons-lang</groupId>
@@ -181,7 +206,7 @@
 				<artifactId>commons-collections</artifactId>
 				<version>${commons-collections.version}</version>
 			</dependency>
-			
+
 			<dependency>
 				<groupId>commons-dbcp</groupId>
 				<artifactId>commons-dbcp</artifactId>
@@ -229,17 +254,48 @@
 			</dependency>
 
 			<dependency>
+				<groupId>com.j256.ormlite</groupId>
+				<artifactId>ormlite-core</artifactId>
+				<version>${ormlite.version}</version>
+			</dependency>
+
+			<dependency>
+				<groupId>com.j256.ormlite</groupId>
+				<artifactId>ormlite-jdbc</artifactId>
+				<version>${ormlite.version}</version>
+			</dependency>
+
+			<dependency>
+				<groupId>com.h2database</groupId>
+				<artifactId>h2</artifactId>
+				<version>${h2.version}</version>
+				<scope>test</scope>
+			</dependency>
+
+<!--			<dependency>-->
+<!--				<groupId>javax.persistence</groupId>-->
+<!--				<artifactId>persistence-api</artifactId>-->
+<!--				<version>${persistence-api.version}</version>-->
+<!--			</dependency>--> 
+
+			<dependency>
 				<groupId>commons-configuration</groupId>
 				<artifactId>commons-configuration</artifactId>
 				<version>${commons-configuration.version}</version>
 			</dependency>
 
 			<dependency>
+				<groupId>org.avaje</groupId>
+				<artifactId>ebean</artifactId>
+				<version>${ebean.version}</version>
+			</dependency>
+
+			<dependency>
 				<groupId>org.mortbay.jetty</groupId>
 				<artifactId>jetty</artifactId>
 				<version>${jetty.version}</version>
 			</dependency>
-			
+
 			<dependency>
 				<groupId>junit</groupId>
 				<artifactId>junit</artifactId>
@@ -255,13 +311,13 @@
 			<scope>test</scope>
 		</dependency>
 	</dependencies>
-		
+
 	<organization>
 		<name>Tyndale House</name>
 		<url>http://http://www.tyndale.cam.ac.uk/</url>
 	</organization>
-	
-	
+
+
 	<build>
 		<pluginManagement>
 			<plugins>
@@ -322,7 +378,7 @@
 							<projectnature>net.sf.eclipsecs.core.CheckstyleNature</projectnature>
 							<projectnature>edu.umd.cs.findbugs.plugin.eclipse.findbugsNature</projectnature>
 							<projectnature>org.maven.ide.eclipse.maven2Nature</projectnature>
-							
+
 						</additionalProjectnatures>
 						<additionalBuildcommands>
 							<buildcommand>net.sourceforge.pmd.eclipse.plugin.pmdBuilder</buildcommand>
@@ -330,7 +386,7 @@
 							<buildcommand>net.sf.eclipsecs.core.CheckstyleBuilder</buildcommand>
 							<buildcommand>org.maven.ide.eclipse.maven2Builder</buildcommand>
 						</additionalBuildcommands>
-		
+
 						<additionalConfig>
 							<file>
 								<name>.settings/org.eclipse.jdt.core.prefs</name>

Modified: trunk/step/step-server/pom.xml
===================================================================
--- trunk/step/step-server/pom.xml	2011-01-07 22:52:32 UTC (rev 202)
+++ trunk/step/step-server/pom.xml	2011-01-22 20:02:36 UTC (rev 203)
@@ -28,7 +28,6 @@
 			<artifactId>slf4j-log4j12</artifactId>
 			<scope>runtime</scope>
 		</dependency>
-
 	</dependencies>
 
 	<build>

Modified: trunk/step/step-web/pom.xml
===================================================================
--- trunk/step/step-web/pom.xml	2011-01-07 22:52:32 UTC (rev 202)
+++ trunk/step/step-web/pom.xml	2011-01-22 20:02:36 UTC (rev 203)
@@ -84,6 +84,13 @@
 			<version>${javatar.version}</version>
 		</dependency>
 		
+		<dependency>
+		    <groupId>com.h2database</groupId>
+		    <artifactId>h2</artifactId>
+		    <version>${h2.version}</version>
+		    <scope>runtime</scope>
+		</dependency>
+		
 	</dependencies>
 
 	<build>

Modified: trunk/step/step-web/src/main/java/com/tyndalehouse/step/rest/controllers/FrontController.java
===================================================================
--- trunk/step/step-web/src/main/java/com/tyndalehouse/step/rest/controllers/FrontController.java	2011-01-07 22:52:32 UTC (rev 202)
+++ trunk/step/step-web/src/main/java/com/tyndalehouse/step/rest/controllers/FrontController.java	2011-01-22 20:02:36 UTC (rev 203)
@@ -20,6 +20,8 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.avaje.ebean.Ebean;
+import com.avaje.ebean.text.json.JsonContext;
 import com.google.inject.Inject;
 import com.google.inject.Injector;
 import com.google.inject.Singleton;
@@ -123,11 +125,6 @@
         } catch (final InvocationTargetException e) {
             throw new StepInternalException(sr.toString(), e);
         }
-
-        // TODO remove dead code once I have proven this doesn't get used
-        // catch (final NoSuchMethodError e) {
-        // throw new StepInternalException(sr.toString(), e);
-        // }
     }
 
     /**
@@ -138,7 +135,21 @@
      */
     byte[] getEncodedJsonResponse(final Object responseValue) {
         try {
-            return this.jsonMapper.writeValueAsString(responseValue).getBytes(UTF_8_ENCODING);
+            String response;
+            // we have normal objects and avaje ebean objects which have been intercepted
+            // therefore we can't just use simple jackson mapper
+            if (responseValue == null) {
+                return new byte[0];
+            } else if (responseValue.getClass().getPackage().getName().startsWith("com.avaje")) {
+                final JsonContext json = Ebean.getServer(null).createJsonContext();
+
+                // convert list of beans into JSON
+                response = json.toJsonString(responseValue);
+            } else {
+                response = this.jsonMapper.writeValueAsString(responseValue);
+            }
+
+            return response.getBytes(UTF_8_ENCODING);
         } catch (final JsonGenerationException e) {
             throw new StepInternalException(e.getMessage(), e);
         } catch (final JsonMappingException e) {
@@ -163,8 +174,9 @@
         final int endOfControllerName = requestURI.indexOf('/', requestStart);
         final int startOfMethodName = endOfControllerName + 1;
         final String controllerName = requestURI.substring(requestStart, endOfControllerName);
+        final int endOfMethodNameSlash = requestURI.indexOf('/', startOfMethodName);
         final String methodName = requestURI.substring(startOfMethodName,
-                requestURI.indexOf('/', startOfMethodName));
+                endOfMethodNameSlash == -1 ? requestURI.length() : endOfMethodNameSlash);
         final int endOfMethodName = startOfMethodName + methodName.length();
 
         LOGGER.debug("Request parsed as controller: [{}], method [{}]", controllerName, methodName);

Modified: trunk/step/step-web/src/main/java/com/tyndalehouse/step/rest/controllers/SetupController.java
===================================================================
--- trunk/step/step-web/src/main/java/com/tyndalehouse/step/rest/controllers/SetupController.java	2011-01-07 22:52:32 UTC (rev 202)
+++ trunk/step/step-web/src/main/java/com/tyndalehouse/step/rest/controllers/SetupController.java	2011-01-22 20:02:36 UTC (rev 203)
@@ -5,6 +5,7 @@
 
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
+import com.tyndalehouse.step.core.data.create.Loader;
 import com.tyndalehouse.step.core.service.BibleInformationService;
 
 /**
@@ -17,24 +18,26 @@
 public class SetupController {
     private static final Logger LOGGER = LoggerFactory.getLogger(SetupController.class);
     private final BibleInformationService bibleInformation;
+    private final Loader loader;
 
     /**
      * creates the controller
      * 
      * @param bibleInformationService the service that allows access to biblical material
+     * @param loader service which is able to load the data into the database
      */
     @Inject
-    public SetupController(final BibleInformationService bibleInformationService) {
+    public SetupController(final BibleInformationService bibleInformationService, final Loader loader) {
         this.bibleInformation = bibleInformationService;
+        this.loader = loader;
     }
 
     /**
-     * a REST method to retrieve events between two dates The arrays match in index, and go by three (timebandId, from,
-     * to), (timebandId, from, to), ...
+     * a REST method to retrieve events between two dates The arrays match in index, and go by three
+     * (timebandId, from, to), (timebandId, from, to), ...
      * 
      * @return true if the software reckons this is the first time
      */
-    // @RequestMapping("/isFirstTime")
     public boolean isFirstTime() {
         LOGGER.debug("Checking whether this is the first time the software is being run");
         return !this.bibleInformation.hasCoreModules();
@@ -44,10 +47,10 @@
      * Installing default modules
      * 
      */
-    // @RequestMapping("/install/defaultModules")
     public void installDefaultModules() {
         LOGGER.debug("Installing default modules");
-        this.bibleInformation.installDefaultModules();
+        // this.bibleInformation.installDefaultModules();
+        this.loader.init();
     }
 
     /**
@@ -55,7 +58,6 @@
      * 
      * @param reference the initials of the bible to install
      */
-    // @RequestMapping("/install/book/{reference}")
     public void installBible(final String reference) {
         LOGGER.debug("Installing module {}", reference);
         this.bibleInformation.installModules(reference);

Modified: trunk/step/step-web/src/main/java/com/tyndalehouse/step/rest/controllers/TimelineController.java
===================================================================
--- trunk/step/step-web/src/main/java/com/tyndalehouse/step/rest/controllers/TimelineController.java	2011-01-07 22:52:32 UTC (rev 202)
+++ trunk/step/step-web/src/main/java/com/tyndalehouse/step/rest/controllers/TimelineController.java	2011-01-22 20:02:36 UTC (rev 203)
@@ -1,11 +1,15 @@
 package com.tyndalehouse.step.rest.controllers;
 
 import java.util.Date;
+import java.util.List;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.google.inject.Inject;
 import com.google.inject.Singleton;
+import com.tyndalehouse.step.core.data.entities.Timeband;
+import com.tyndalehouse.step.core.service.TimelineService;
 
 /**
  * The timeline controller retrieves information about past events
@@ -16,8 +20,20 @@
 @Singleton
 public class TimelineController {
     private static final Logger LOGGER = LoggerFactory.getLogger(TimelineController.class);
+    private final TimelineService timelineService;
 
     /**
+     * The timeline controller relies on the timeline service to retrieve the data
+     * 
+     * @param timelineService the service
+     */
+    @Inject
+    public TimelineController(final TimelineService timelineService) {
+        this.timelineService = timelineService;
+
+    }
+
+    /**
      * a REST method to retrieve events between two dates The arrays match in index, and go by three
      * (timebandId, from, to), (timebandId, from, to), ...
      * 
@@ -44,4 +60,13 @@
 
         return null;
     }
+
+    /**
+     * Retrieves the timebands that will be used to configure the timeline component
+     * 
+     * @return the timebands
+     */
+    public List<Timeband> getTimelineConfiguration() {
+        return this.timelineService.getTimelineConfiguration();
+    }
 }

Modified: trunk/step/step-web/src/main/resources/log4j.properties
===================================================================
--- trunk/step/step-web/src/main/resources/log4j.properties	2011-01-07 22:52:32 UTC (rev 202)
+++ trunk/step/step-web/src/main/resources/log4j.properties	2011-01-22 20:02:36 UTC (rev 203)
@@ -7,12 +7,6 @@
 log4j.appender.A1.layout=org.apache.log4j.PatternLayout
 log4j.appender.A1.layout.ConversionPattern=%d %-5p %l %x - %m%n
 
-log4j.category.com.tyndalehouse=DEBUG
+log4j.category.com.tyndalehouse=INFO
+log4j.category.org.crosswire.jsword.book.sword.ConfigEntry=WARN
 
-# messages on second appender
-#log4j.appender.A2=org.apache.log4j.RollingFileAppender
-#log4j.appender.A2.File=../logs/step-server.log
-#log4j.appender.A2.MaxFileSize=100KB
-#log4j.appender.A2.MaxBackupIndex=1
-#log4j.appender.A2.layout=org.apache.log4j.PatternLayout
-#log4j.appender.A2.layout.ConversionPattern=%p %t %c - %m%n

Modified: trunk/step/step-web/src/main/webapp/js/timeline.js
===================================================================
--- trunk/step/step-web/src/main/webapp/js/timeline.js	2011-01-07 22:52:32 UTC (rev 202)
+++ trunk/step/step-web/src/main/webapp/js/timeline.js	2011-01-22 20:02:36 UTC (rev 203)
@@ -16,13 +16,7 @@
 	$(rootElement).hear("hide-timeline", function(selfElement) {
 		//first show the bottom pane...
 		mainAppLayout.close("south");
-	
-		
-		
-//		$(window).resize(self.onResize);
 	});
-	
-	//do the removal of the timeline
 }
 
 var tl;

Modified: trunk/step/step-web/src/main/webapp/setup.jsp
===================================================================
--- trunk/step/step-web/src/main/webapp/setup.jsp	2011-01-07 22:52:32 UTC (rev 202)
+++ trunk/step/step-web/src/main/webapp/setup.jsp	2011-01-22 20:02:36 UTC (rev 203)
@@ -16,6 +16,7 @@
     <script src="libs/jquery.layout-latest.js" type="text/javascript"></script>
     <script src="libs/jquery-shout.js" type="text/javascript"></script>
     
+    <script src="js/ui_hooks.js" type="text/javascript"></script>
     <script src="js/setup.js" type="text/javascript"></script>
 </HEAD>
 <body>

Modified: trunk/step/step-web/src/test/java/com/tyndalehouse/step/rest/controllers/FrontControllerTest.java
===================================================================
--- trunk/step/step-web/src/test/java/com/tyndalehouse/step/rest/controllers/FrontControllerTest.java	2011-01-07 22:52:32 UTC (rev 202)
+++ trunk/step/step-web/src/test/java/com/tyndalehouse/step/rest/controllers/FrontControllerTest.java	2011-01-22 20:02:36 UTC (rev 203)
@@ -43,7 +43,7 @@
     /**
      * Tests normal operation of a GET method
      * 
-     * @throws IOException
+     * @throws IOException uncaught exception
      */
     @Test
     public void testDoGet() throws IOException {




More information about the Tynstep-svn mailing list