diff --git a/stockquote-week5/pom.xml b/stockquote-week5/pom.xml
new file mode 100644
index 0000000..ec2af0f
--- /dev/null
+++ b/stockquote-week5/pom.xml
@@ -0,0 +1,73 @@
+
stockQuery get back a the info about the stock to display to th user.
+ *
+ * @param stockQuery the stock to get data for.
+ * @return a String with the stock data in it.
+ * @throws StockServiceException If data about the stock can't be retrieved. This is a
+ * fatal error.
+ */
+ public String displayStockQuotes(StockQuery stockQuery) throws StockServiceException {
+ StringBuilder stringBuilder = new StringBuilder();
+
+ ListBigDecimal instance
+ * @throws StockServiceException if using the service generates an exception.
+ * If this happens, trying the service may work, depending on the actual cause of the
+ * error.
+ */
+ @Override
+ public StockQuote getQuote(String symbol) throws StockServiceException {
+ // todo - this is a pretty lame implementation why?
+ ListBigDecimal instance
+ * @throws StockServiceException if using the service generates an exception.
+ * If this happens, trying the service may work, depending on the actual cause of the
+ * error.
+ */
+ @Override
+ public StockQuote getQuote(String symbol) {
+ // a dead simple implementation.
+ return new StockQuote(new BigDecimal(100), Calendar.getInstance().getTime(), symbol);
+ }
+
+ /**
+ * Get a historical list of stock quotes for the provide symbol
+ *
+ * @param symbol the stock symbol to search for
+ * @param from the date of the first stock quote
+ * @param until the date of the last stock quote
+ * @return a list of StockQuote instances
+ * @throws StockServiceException if using the service generates an exception.
+ * If this happens, trying the service may work, depending on the actual cause of the
+ * error.
+ */
+ @Override
+ public ListBigDecimal instance
+ * @throws StockServiceException if using the service generates an exception.
+ * If this happens, trying the service may work, depending on the actual cause of the
+ * error.
+ */
+ StockQuote getQuote(String symbol) throws StockServiceException;
+
+ /**
+ * Get a historical list of stock quotes for the provide symbol
+ *
+ * @param symbol the stock symbol to search for
+ * @param from the date of the first stock quote
+ * @param until the date of the last stock quote
+ * @return a list of StockQuote instances
+ * @throws StockServiceException if using the service generates an exception.
+ * If this happens, trying the service may work, depending on the actual cause of the
+ * error.
+ */
+ ListNote that the detail message associated with
+ * {@code cause} is not automatically incorporated in
+ * this exception's detail message.
+ *
+ * @param message the detail message (which is saved for later retrieval
+ * by the {@link #getMessage()} method).
+ * @param cause the cause (which is saved for later retrieval by the
+ * {@link #getCause()} method). (A null value is
+ * permitted, and indicates that the cause is nonexistent or
+ * unknown.)
+ * @since 1.4
+ */
+ public StockServiceException(String message, Throwable cause) {
+ super(message, cause);
+ }
+}
diff --git a/stockquote-week5/src/main/java/com/origamisoftware/teach/advanced/services/StockServiceFactory.java b/stockquote-week5/src/main/java/com/origamisoftware/teach/advanced/services/StockServiceFactory.java
new file mode 100644
index 0000000..1bc4e47
--- /dev/null
+++ b/stockquote-week5/src/main/java/com/origamisoftware/teach/advanced/services/StockServiceFactory.java
@@ -0,0 +1,45 @@
+package com.origamisoftware.teach.advanced.services;
+
+import com.origamisoftware.teach.advanced.model.StockQuote;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * A factory that returns a Note that the detail message associated with
+ * {@code cause} is not automatically incorporated in
+ * this exception's detail message.
+ *
+ * @param message the detail message (which is saved for later retrieval
+ * by the {@link #getMessage()} method).
+ * @param cause the cause (which is saved for later retrieval by the
+ * {@link #getCause()} method). (A null value is
+ * permitted, and indicates that the cause is nonexistent or
+ * unknown.)
+ * @since 1.4
+ */
+ public DatabaseConnectionException(String message, Throwable cause) {
+ super(message, cause);
+ }
+}
diff --git a/stockquote-week5/src/main/java/com/origamisoftware/teach/advanced/util/DatabaseInitializationException.java b/stockquote-week5/src/main/java/com/origamisoftware/teach/advanced/util/DatabaseInitializationException.java
new file mode 100644
index 0000000..bc09f7d
--- /dev/null
+++ b/stockquote-week5/src/main/java/com/origamisoftware/teach/advanced/util/DatabaseInitializationException.java
@@ -0,0 +1,25 @@
+package com.origamisoftware.teach.advanced.util;
+
+/**
+ * This class is used to signal a problem initializing to a database.
+ */
+public class DatabaseInitializationException extends Exception {
+
+ /**
+ * Constructs a new exception with the specified detail message and
+ * cause. Note that the detail message associated with
+ * {@code cause} is not automatically incorporated in
+ * this exception's detail message.
+ *
+ * @param message the detail message (which is saved for later retrieval
+ * by the {@link #getMessage()} method).
+ * @param cause the cause (which is saved for later retrieval by the
+ * {@link #getCause()} method). (A null value is
+ * permitted, and indicates that the cause is nonexistent or
+ * unknown.)
+ * @since 1.4
+ */
+ public DatabaseInitializationException(String message, Throwable cause) {
+ super(message, cause);
+ }
+}
diff --git a/stockquote-week5/src/main/java/com/origamisoftware/teach/advanced/util/DatabaseUtils.java b/stockquote-week5/src/main/java/com/origamisoftware/teach/advanced/util/DatabaseUtils.java
new file mode 100644
index 0000000..708b52a
--- /dev/null
+++ b/stockquote-week5/src/main/java/com/origamisoftware/teach/advanced/util/DatabaseUtils.java
@@ -0,0 +1,65 @@
+package com.origamisoftware.teach.advanced.util;
+
+import com.ibatis.common.jdbc.ScriptRunner;
+
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.SQLException;
+
+/**
+ * A class that contains database related utility methods.
+ */
+public class DatabaseUtils {
+
+ // in a real program these values would be a configurable property and not hard coded.
+ // JDBC driver name and database URL
+ private static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
+ private static final String DB_URL = "jdbc:mysql://localhost:3306/stocks";
+
+ // Database credentials
+ private static final String USER = "monty";
+ private static final String PASS = "some_pass";
+
+ public static Connection getConnection() throws DatabaseConnectionException{
+ Connection connection = null;
+ try {
+ Class.forName("com.mysql.jdbc.Driver");
+ connection = DriverManager.getConnection(DB_URL, USER, PASS);
+ } catch (ClassNotFoundException | SQLException e) {
+ throw new DatabaseConnectionException("Could not connection to database." + e.getMessage(), e);
+ }
+ return connection;
+ }
+
+ /**
+ * A utility method that runs a db initialize script.
+ * @param initializationScript full path to the script to run to create the schema
+ * @throws DatabaseInitializationException
+ */
+ public static void initializeDatabase(String initializationScript) throws DatabaseInitializationException {
+
+ Connection connection = null;
+ try {
+ connection = getConnection();
+ ScriptRunner runner = new ScriptRunner(connection, false, false);
+ InputStream inputStream = new FileInputStream(initializationScript);
+
+ InputStreamReader reader = new InputStreamReader(inputStream);
+
+ runner.runScript(reader);
+ reader.close();
+ connection.commit();
+ connection.close();
+
+ } catch (DatabaseConnectionException | SQLException |IOException e) {
+ throw new DatabaseInitializationException("Could not initialize db because of:"
+ + e.getMessage(),e);
+ }
+
+
+ }
+}
diff --git a/stockquote-week5/src/main/java/com/origamisoftware/teach/advanced/util/ProgramConfiguration.java b/stockquote-week5/src/main/java/com/origamisoftware/teach/advanced/util/ProgramConfiguration.java
new file mode 100644
index 0000000..0b03a55
--- /dev/null
+++ b/stockquote-week5/src/main/java/com/origamisoftware/teach/advanced/util/ProgramConfiguration.java
@@ -0,0 +1,15 @@
+package com.origamisoftware.teach.advanced.util;
+
+import java.util.Properties;
+
+/**
+ * A Utility class that provides application properties and
+ * configuration settings.
+ */
+public class ProgramConfiguration {
+
+ public static Properties getApplicationProperties() {
+ return null;
+ }
+
+}
diff --git a/stockquote-week5/src/main/sql/stocks_db_initialization.sql b/stockquote-week5/src/main/sql/stocks_db_initialization.sql
new file mode 100644
index 0000000..3437e25
--- /dev/null
+++ b/stockquote-week5/src/main/sql/stocks_db_initialization.sql
@@ -0,0 +1,15 @@
+/** create the stocks database */
+
+DROP TABLE IF EXISTS quotes CASCADE;
+CREATE TABLE quotes(
+ id INT NOT NULL AUTO_INCREMENT,
+ symbol VARCHAR(4) NOT NULL,
+ time DATETIME NOT NULL,
+ price DECIMAL NOT NULL,
+ PRIMARY KEY ( id )
+);
+
+INSERT INTO quotes (symbol,time,price) VALUES ('GOOG','2004-08-19 00:00:01','85.00');
+INSERT INTO quotes (symbol,time,price) VALUES ('GOOG','2015-02-03 00:00:01','527.35');
+INSERT INTO quotes (symbol,time,price) VALUES ('APPL','2000-01-01 00:00:01','118.27');
+INSERT INTO quotes (symbol,time,price) VALUES ('AMZN','2015-02-03 00:00:01','363.21');
diff --git a/stockquote-week5/src/test/java/com/origamisoftware/teach/advanced/apps/stockquote/BasicStockQuoteApplicationTest.java b/stockquote-week5/src/test/java/com/origamisoftware/teach/advanced/apps/stockquote/BasicStockQuoteApplicationTest.java
new file mode 100644
index 0000000..fa3e3f2
--- /dev/null
+++ b/stockquote-week5/src/test/java/com/origamisoftware/teach/advanced/apps/stockquote/BasicStockQuoteApplicationTest.java
@@ -0,0 +1,68 @@
+package com.origamisoftware.teach.advanced.apps.stockquote;
+
+import com.origamisoftware.teach.advanced.model.StockQuery;
+import com.origamisoftware.teach.advanced.model.StockQuote;
+import com.origamisoftware.teach.advanced.services.StockService;
+import com.origamisoftware.teach.advanced.services.StockServiceException;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.math.BigDecimal;
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.List;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+/**
+ * Tests for BasicStockQuoteApplication
+ */
+public class BasicStockQuoteApplicationTest {
+
+ private BasicStockQuoteApplication basicStockQuoteApplication;
+ private StockService stockServiceMock;
+
+ @Before
+ public void setUp() {
+ stockServiceMock = mock(StockService.class);
+ }
+
+ @Test
+ public void testValidConstruction() {
+ basicStockQuoteApplication = new BasicStockQuoteApplication(stockServiceMock);
+ assertNotNull("Basic construction works");
+ }
+
+ @Test
+ public void testDisplayResults() throws ParseException, StockServiceException {
+ basicStockQuoteApplication = new BasicStockQuoteApplication(stockServiceMock);
+ String symbol = "APPL";
+ String from = "2011/10/29";
+ String until = "2011/11/29";
+ StockQuery stockQuery = new StockQuery(symbol, from, until);
+
+ ListStockService instance.
+ */
+public class StockServiceFactory {
+
+ /**
+ * Prevent instantiations
+ */
+ private StockServiceFactory() {}
+
+ /**
+ *
+ * @return get a StockService instance
+ */
+ public static DatabaseStockService getInstance() {
+ return new DatabaseStockService() {
+ @Override
+ public StockQuote getQuote(String symbol) throws StockServiceException {
+ return new StockQuote(new BigDecimal(100), Calendar.getInstance().getTime(), symbol);
+ }
+
+ @Override
+ public ListStockServiceFactory
+ */
+public class StockServiceFactoryTest {
+
+ @Test
+ public void testGetInstance() {
+ StockService stockService = StockServiceFactory.getInstance();
+ assertNotNull(stockService);
+ }
+}
diff --git a/stockquote-week5/src/test/java/com/origamisoftware/teach/advanced/util/DatabaseUtilsTest.java b/stockquote-week5/src/test/java/com/origamisoftware/teach/advanced/util/DatabaseUtilsTest.java
new file mode 100644
index 0000000..f775571
--- /dev/null
+++ b/stockquote-week5/src/test/java/com/origamisoftware/teach/advanced/util/DatabaseUtilsTest.java
@@ -0,0 +1,38 @@
+package com.origamisoftware.teach.advanced.util;
+
+import org.junit.Test;
+
+import java.sql.Connection;
+import java.sql.Statement;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * Tests for the DatabaseUtils class
+ */
+public class DatabaseUtilsTest {
+
+ @Test
+ public void testGetConnection() throws Exception{
+ Connection connection = DatabaseUtils.getConnection();
+ assertNotNull("verify that we can get a connection ok",connection);
+ }
+
+ @Test
+ public void testGetConnectionWorks() throws Exception{
+ Connection connection = DatabaseUtils.getConnection();
+ Statement statement = connection.createStatement();
+ boolean execute = statement.execute("select * from quotes");
+ assertTrue("verify that we can execute a statement",execute);
+ }
+
+ @Test
+ public void testInitializeDatabaseWorks(String initializeDatabase) throws Exception{
+ Connection connection = DatabaseUtils.getConnection();
+ Statement statement = connection.createStatement();
+ boolean execute = statement.execute("select * from quotes");
+ assertNotNull("verify that the DB is NotNull",execute);
+ }
+
+}
diff --git a/stockquote-week5/target/classes/com/origamisoftware/teach/advanced/apps/stockquote/BasicStockQuoteApplication$ProgramTerminationStatusEnum.class b/stockquote-week5/target/classes/com/origamisoftware/teach/advanced/apps/stockquote/BasicStockQuoteApplication$ProgramTerminationStatusEnum.class
new file mode 100644
index 0000000..7a13f96
Binary files /dev/null and b/stockquote-week5/target/classes/com/origamisoftware/teach/advanced/apps/stockquote/BasicStockQuoteApplication$ProgramTerminationStatusEnum.class differ
diff --git a/stockquote-week5/target/classes/com/origamisoftware/teach/advanced/apps/stockquote/BasicStockQuoteApplication.class b/stockquote-week5/target/classes/com/origamisoftware/teach/advanced/apps/stockquote/BasicStockQuoteApplication.class
new file mode 100644
index 0000000..161fe9d
Binary files /dev/null and b/stockquote-week5/target/classes/com/origamisoftware/teach/advanced/apps/stockquote/BasicStockQuoteApplication.class differ
diff --git a/stockquote-week5/target/classes/com/origamisoftware/teach/advanced/model/StockData.class b/stockquote-week5/target/classes/com/origamisoftware/teach/advanced/model/StockData.class
new file mode 100644
index 0000000..e2f53b3
Binary files /dev/null and b/stockquote-week5/target/classes/com/origamisoftware/teach/advanced/model/StockData.class differ
diff --git a/stockquote-week5/target/classes/com/origamisoftware/teach/advanced/model/StockQuery.class b/stockquote-week5/target/classes/com/origamisoftware/teach/advanced/model/StockQuery.class
new file mode 100644
index 0000000..cc8167c
Binary files /dev/null and b/stockquote-week5/target/classes/com/origamisoftware/teach/advanced/model/StockQuery.class differ
diff --git a/stockquote-week5/target/classes/com/origamisoftware/teach/advanced/model/StockQuote.class b/stockquote-week5/target/classes/com/origamisoftware/teach/advanced/model/StockQuote.class
new file mode 100644
index 0000000..b4359c2
Binary files /dev/null and b/stockquote-week5/target/classes/com/origamisoftware/teach/advanced/model/StockQuote.class differ
diff --git a/stockquote-week5/target/classes/com/origamisoftware/teach/advanced/services/DatabaseStockService.class b/stockquote-week5/target/classes/com/origamisoftware/teach/advanced/services/DatabaseStockService.class
new file mode 100644
index 0000000..282471e
Binary files /dev/null and b/stockquote-week5/target/classes/com/origamisoftware/teach/advanced/services/DatabaseStockService.class differ
diff --git a/stockquote-week5/target/classes/com/origamisoftware/teach/advanced/services/SimpleStockService.class b/stockquote-week5/target/classes/com/origamisoftware/teach/advanced/services/SimpleStockService.class
new file mode 100644
index 0000000..da1d221
Binary files /dev/null and b/stockquote-week5/target/classes/com/origamisoftware/teach/advanced/services/SimpleStockService.class differ
diff --git a/stockquote-week5/target/classes/com/origamisoftware/teach/advanced/services/StockService.class b/stockquote-week5/target/classes/com/origamisoftware/teach/advanced/services/StockService.class
new file mode 100644
index 0000000..b387788
Binary files /dev/null and b/stockquote-week5/target/classes/com/origamisoftware/teach/advanced/services/StockService.class differ
diff --git a/stockquote-week5/target/classes/com/origamisoftware/teach/advanced/services/StockServiceException.class b/stockquote-week5/target/classes/com/origamisoftware/teach/advanced/services/StockServiceException.class
new file mode 100644
index 0000000..0aa546a
Binary files /dev/null and b/stockquote-week5/target/classes/com/origamisoftware/teach/advanced/services/StockServiceException.class differ
diff --git a/stockquote-week5/target/classes/com/origamisoftware/teach/advanced/services/StockServiceFactory$1.class b/stockquote-week5/target/classes/com/origamisoftware/teach/advanced/services/StockServiceFactory$1.class
new file mode 100644
index 0000000..f2d7453
Binary files /dev/null and b/stockquote-week5/target/classes/com/origamisoftware/teach/advanced/services/StockServiceFactory$1.class differ
diff --git a/stockquote-week5/target/classes/com/origamisoftware/teach/advanced/services/StockServiceFactory.class b/stockquote-week5/target/classes/com/origamisoftware/teach/advanced/services/StockServiceFactory.class
new file mode 100644
index 0000000..37855d0
Binary files /dev/null and b/stockquote-week5/target/classes/com/origamisoftware/teach/advanced/services/StockServiceFactory.class differ
diff --git a/stockquote-week5/target/classes/com/origamisoftware/teach/advanced/util/DatabaseConnectionException.class b/stockquote-week5/target/classes/com/origamisoftware/teach/advanced/util/DatabaseConnectionException.class
new file mode 100644
index 0000000..bb210c5
Binary files /dev/null and b/stockquote-week5/target/classes/com/origamisoftware/teach/advanced/util/DatabaseConnectionException.class differ
diff --git a/stockquote-week5/target/classes/com/origamisoftware/teach/advanced/util/DatabaseInitializationException.class b/stockquote-week5/target/classes/com/origamisoftware/teach/advanced/util/DatabaseInitializationException.class
new file mode 100644
index 0000000..3f8091c
Binary files /dev/null and b/stockquote-week5/target/classes/com/origamisoftware/teach/advanced/util/DatabaseInitializationException.class differ
diff --git a/stockquote-week5/target/classes/com/origamisoftware/teach/advanced/util/DatabaseUtils.class b/stockquote-week5/target/classes/com/origamisoftware/teach/advanced/util/DatabaseUtils.class
new file mode 100644
index 0000000..a07930e
Binary files /dev/null and b/stockquote-week5/target/classes/com/origamisoftware/teach/advanced/util/DatabaseUtils.class differ
diff --git a/stockquote-week5/target/classes/com/origamisoftware/teach/advanced/util/ProgramConfiguration.class b/stockquote-week5/target/classes/com/origamisoftware/teach/advanced/util/ProgramConfiguration.class
new file mode 100644
index 0000000..7d57f7c
Binary files /dev/null and b/stockquote-week5/target/classes/com/origamisoftware/teach/advanced/util/ProgramConfiguration.class differ
diff --git a/stockquote-week5/target/test-classes/com/origamisoftware/teach/advanced/apps/stockquote/BasicStockQuoteApplicationTest.class b/stockquote-week5/target/test-classes/com/origamisoftware/teach/advanced/apps/stockquote/BasicStockQuoteApplicationTest.class
new file mode 100644
index 0000000..3a2e06c
Binary files /dev/null and b/stockquote-week5/target/test-classes/com/origamisoftware/teach/advanced/apps/stockquote/BasicStockQuoteApplicationTest.class differ
diff --git a/stockquote-week5/target/test-classes/com/origamisoftware/teach/advanced/model/StockQueryTest.class b/stockquote-week5/target/test-classes/com/origamisoftware/teach/advanced/model/StockQueryTest.class
new file mode 100644
index 0000000..d49fa98
Binary files /dev/null and b/stockquote-week5/target/test-classes/com/origamisoftware/teach/advanced/model/StockQueryTest.class differ
diff --git a/stockquote-week5/target/test-classes/com/origamisoftware/teach/advanced/model/StockQuoteTest.class b/stockquote-week5/target/test-classes/com/origamisoftware/teach/advanced/model/StockQuoteTest.class
new file mode 100644
index 0000000..b453f12
Binary files /dev/null and b/stockquote-week5/target/test-classes/com/origamisoftware/teach/advanced/model/StockQuoteTest.class differ
diff --git a/stockquote-week5/target/test-classes/com/origamisoftware/teach/advanced/services/DatabaseStockServiceTest.class b/stockquote-week5/target/test-classes/com/origamisoftware/teach/advanced/services/DatabaseStockServiceTest.class
new file mode 100644
index 0000000..dea8599
Binary files /dev/null and b/stockquote-week5/target/test-classes/com/origamisoftware/teach/advanced/services/DatabaseStockServiceTest.class differ
diff --git a/stockquote-week5/target/test-classes/com/origamisoftware/teach/advanced/services/StockServiceFactoryTest.class b/stockquote-week5/target/test-classes/com/origamisoftware/teach/advanced/services/StockServiceFactoryTest.class
new file mode 100644
index 0000000..13d9476
Binary files /dev/null and b/stockquote-week5/target/test-classes/com/origamisoftware/teach/advanced/services/StockServiceFactoryTest.class differ
diff --git a/stockquote-week5/target/test-classes/com/origamisoftware/teach/advanced/util/DatabaseUtilsTest.class b/stockquote-week5/target/test-classes/com/origamisoftware/teach/advanced/util/DatabaseUtilsTest.class
new file mode 100644
index 0000000..75ed0e2
Binary files /dev/null and b/stockquote-week5/target/test-classes/com/origamisoftware/teach/advanced/util/DatabaseUtilsTest.class differ
diff --git a/stockquote-week5/week-5-stock-ticker.iml b/stockquote-week5/week-5-stock-ticker.iml
new file mode 100644
index 0000000..bad55fd
--- /dev/null
+++ b/stockquote-week5/week-5-stock-ticker.iml
@@ -0,0 +1,21 @@
+
+