Added c3p0 datasource configuration to Spring default-config-xml.

Change-Id: Iab9038233b8f74a4645e920ae2e009882a08ccf5
diff --git a/README.md b/README.md
index dce8d43..cba4309 100644
--- a/README.md
+++ b/README.md
@@ -124,6 +124,16 @@
 java -jar target/Kustvakt-[lite/full]-[version].jar    
 </pre>
 
+To run Kustvakt with a custom spring XML config, the config must be included in the classpath. For instance:
+
+<pre>
+cd target/
+java -cp Kustvakt-full-[version].jar:config de.ids_mannheim.korap.server.KustvaktServer 
+--spring-config custom-spring-config.xml
+</pre>
+
+where ```custom-spring-config.xml``` is in the ```config``` folder.
+
 
 # Futher Setup
 
diff --git a/full/Changes b/full/Changes
index e458ca3..bc22985 100644
--- a/full/Changes
+++ b/full/Changes
@@ -33,6 +33,12 @@
 27/08/2018
     - Added statistic with VC reference tests (margaretha)
     - Fixed OAuth2 SQL files (margaretha) 
+28/08/2018
+    - Added c3p0 datasource configuration to Spring default-config-xml (margaretha)
+    - Added running Kustvakt server with custom spring config in the readme (margaretha)
+    - Removed old OAuth2 codes (margaretha)    
+    - Moved non-config test codes to misc (margaretha)
+    
 
 # version 0.60.5
 
diff --git a/full/src/main/java/de/ids_mannheim/korap/config/AuthCodeInfo.java b/full/src/main/java/de/ids_mannheim/korap/config/AuthCodeInfo.java
deleted file mode 100644
index 03c22d5..0000000
--- a/full/src/main/java/de/ids_mannheim/korap/config/AuthCodeInfo.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package de.ids_mannheim.korap.config;
-
-import lombok.Data;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * @author hanl
- * @date 13/05/2015
- */
-@Data
-public class AuthCodeInfo {
-    private String clientId;
-    private String scopes;
-    private Integer userId;
-    private Boolean status;
-    private String code;
-    private List<String> tokens;
-
-
-    public AuthCodeInfo () {
-        this.setStatus(true);
-        this.tokens = new ArrayList<>();
-    }
-
-
-    public AuthCodeInfo (String clientid, String authcode) {
-        this();
-        this.clientId = clientid;
-        this.code = authcode;
-    }
-}
diff --git a/full/src/main/java/de/ids_mannheim/korap/handlers/OAuth2Handler.java b/full/src/main/java/de/ids_mannheim/korap/handlers/OAuth2Handler.java
deleted file mode 100644
index 28e848b..0000000
--- a/full/src/main/java/de/ids_mannheim/korap/handlers/OAuth2Handler.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package de.ids_mannheim.korap.handlers;
-
-import de.ids_mannheim.korap.config.AuthCodeInfo;
-import de.ids_mannheim.korap.config.ClientInfo;
-import de.ids_mannheim.korap.config.KustvaktCacheable;
-import de.ids_mannheim.korap.exceptions.KustvaktException;
-import de.ids_mannheim.korap.interfaces.db.PersistenceClient;
-import de.ids_mannheim.korap.user.User;
-
-/**
- * extends OAuthDb to allow temporary caching of tokens
- * and authorization codes.
- * Authorization codes are not persisted in db,
- * but stored in file of ehcache
- * 
- * @author hanl
- * @date 04/05/2015
- */
-public class OAuth2Handler extends KustvaktCacheable {
-
-    private OAuthDb oauthdb;
-
-    public OAuth2Handler (PersistenceClient client) {
-        super("auth_codes", "key:auth_codes");
-        this.oauthdb = new OAuthDb(client);
-    }
-
-
-    // fixme: caching should not be obligatory here. alternative to caching if not available?
-    public AuthCodeInfo getAuthorization (String code) {
-        Object value = this.getCacheValue(code);
-        if (value != null)
-            return (AuthCodeInfo) value;
-        return null;
-    }
-
-
-    public void authorize (AuthCodeInfo info, User user)  throws KustvaktException {
-    	
-        info.setUserId(user.getId());
-        this.storeInCache(info.getCode(), info);
-    }
-
-
-    public boolean addToken (String code, String token, String refresh, int ttl)
-            throws KustvaktException {
-        Object o = this.getCacheValue(code);
-        if (o != null) {
-            AuthCodeInfo info = (AuthCodeInfo) o;
-            this.removeCacheEntry(code);
-            return oauthdb.addToken(token, refresh, info.getUserId(),
-                    info.getClientId(), info.getScopes(), ttl);
-        }
-        return false;
-    }
-
-
-    public void exchangeToken (String refresh) {
-        // todo:
-    }
-
-    public OAuthDb getPersistenceHandler(){
-        return this.oauthdb;
-    }
-
-}
diff --git a/full/src/main/resources/default-config.xml b/full/src/main/resources/default-config.xml
index ac243e3..8a30f95 100644
--- a/full/src/main/resources/default-config.xml
+++ b/full/src/main/resources/default-config.xml
@@ -18,9 +18,6 @@
 	<context:component-scan base-package="de.ids_mannheim.korap" />
 	<context:annotation-config />
 
-	<!-- <bean id="test" class="de.ids_mannheim.korap.web.Test"> <property name="config" 
-		ref="kustvakt_config" /> </bean> -->
-
 	<bean id="props"
 		class="org.springframework.beans.factory.config.PropertiesFactoryBean">
 		<property name="ignoreResourceNotFound" value="true" />
@@ -70,9 +67,23 @@
 		<property name="maxTotal" value="4" />
 		<property name="maxIdle" value="2" />
 		<property name="minIdle" value="1" />
-		<property name="maxWaitMillis" value="15000" />
+		<property name="maxWaitMillis" value="-1" />
 		<!--<property name="poolPreparedStatements" value="true"/> -->
 	</bean>
+	
+	<bean id="c3p0DataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
+		destroy-method="close" lazy-init="true">
+		<property name="driverClass" value="${jdbc.driverClassName}" />
+		<property name="jdbcUrl" value="${jdbc.url}" />
+		<property name="user" value="${jdbc.username}" />
+		<property name="password" value="${jdbc.password}" />
+		<property name="maxPoolSize" value="4" />
+		<property name="minPoolSize" value="1" />
+		<property name="maxStatements" value="100" />
+		<!-- <property name="testConnectionOnCheckOut" value="true" /> -->
+		<property name="idleConnectionTestPeriod" value="60" />
+		<property name="testConnectionOnCheckin" value="true" />
+	</bean>
 
 	<bean id="sqliteDataSource"
 		class="org.springframework.jdbc.datasource.SingleConnectionDataSource"
@@ -102,7 +113,9 @@
 		<!-- <property name="cleanOnValidationError" value="true" /> -->
 		<property name="locations" value="${jdbc.schemaPath}" />
 		<!-- <property name="dataSource" ref="dataSource" /> -->
-		<property name="dataSource" ref="sqliteDataSource" />
+		<!-- <property name="dataSource" ref="sqliteDataSource" /> -->
+		<property name="dataSource" ref="c3p0DataSource" />
+		
 	</bean>
 
 
@@ -115,7 +128,8 @@
 	<bean id="entityManagerFactory"
 		class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
 		<!-- <property name="dataSource" ref="dataSource" /> -->
-		<property name="dataSource" ref="sqliteDataSource" />
+		<!-- <property name="dataSource" ref="sqliteDataSource" /> -->
+		<property name="dataSource" ref="c3p0DataSource" />
 
 		<property name="packagesToScan">
 			<array>
@@ -140,11 +154,6 @@
 				<prop key="hibernate.cache.provider_class">${hibernate.cache.provider}</prop>
 				<prop key="hibernate.cache.region.factory_class">${hibernate.cache.region.factory}</prop>
 				<prop key="hibernate.jdbc.time_zone">${hibernate.jdbc.time_zone}</prop>
-				<!-- <prop key="net.sf.ehcache.configurationResourceName">classpath:ehcache.xml</prop> -->
-				
-				<prop key="connection.autoReconnect">true</prop>
-				<prop key="connection.autoReconnectForPools">true</prop>
-				<prop key="connection.is-connection-validation-required">true</prop>
 			</props>
 		</property>
 	</bean>
@@ -328,7 +337,8 @@
 	<bean id="txManager"
 		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
 		<!-- <property name="dataSource" ref="dataSource" /> -->
-		<property name="dataSource" ref="sqliteDataSource" />
+		<!-- <property name="dataSource" ref="sqliteDataSource" /> -->
+		<property name="dataSource" ref="c3p0DataSource" />
 	</bean>
 
 	<!-- mail -->
diff --git a/full/src/main/resources/properties/jdbc.properties b/full/src/main/resources/properties/jdbc.properties
index 1f5e8ab..aea7ab9 100644
--- a/full/src/main/resources/properties/jdbc.properties
+++ b/full/src/main/resources/properties/jdbc.properties
@@ -4,7 +4,7 @@
 
 #jdbc.database=mysql
 #jdbc.driverClassName=com.mysql.jdbc.Driver
-#jdbc.url=jdbc:mysql://localhost:3306/kustvakt?autoReconnect=true&useSSL=false&useLegacyDatetimeCode=false&serverTimezone=UTC
+#jdbc.url=jdbc:mysql://localhost:3306/kustvakt?useSSL=false&useLegacyDatetimeCode=false&serverTimezone=UTC
 #jdbc.username=korap
 #jdbc.password=password
 
diff --git a/full/src/test/java/de/ids_mannheim/korap/config/BeanInjectTest.java b/full/src/test/java/de/ids_mannheim/korap/misc/BeanInjectTest.java
similarity index 94%
rename from full/src/test/java/de/ids_mannheim/korap/config/BeanInjectTest.java
rename to full/src/test/java/de/ids_mannheim/korap/misc/BeanInjectTest.java
index 29a5e29..155e8be 100644
--- a/full/src/test/java/de/ids_mannheim/korap/config/BeanInjectTest.java
+++ b/full/src/test/java/de/ids_mannheim/korap/misc/BeanInjectTest.java
@@ -1,4 +1,4 @@
-package de.ids_mannheim.korap.config;
+package de.ids_mannheim.korap.misc;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
@@ -8,6 +8,7 @@
 import org.junit.Test;
 import org.springframework.aop.support.AopUtils;
 
+import de.ids_mannheim.korap.config.BeansFactory;
 import de.ids_mannheim.korap.handlers.DocumentDao;
 import de.ids_mannheim.korap.handlers.UserDetailsDao;
 import de.ids_mannheim.korap.handlers.UserSettingsDao;
diff --git a/full/src/test/java/de/ids_mannheim/korap/config/ClassLoaderTest.java b/full/src/test/java/de/ids_mannheim/korap/misc/ClassLoaderTest.java
similarity index 86%
rename from full/src/test/java/de/ids_mannheim/korap/config/ClassLoaderTest.java
rename to full/src/test/java/de/ids_mannheim/korap/misc/ClassLoaderTest.java
index fe2e35d..cae64f1 100644
--- a/full/src/test/java/de/ids_mannheim/korap/config/ClassLoaderTest.java
+++ b/full/src/test/java/de/ids_mannheim/korap/misc/ClassLoaderTest.java
@@ -1,10 +1,13 @@
-package de.ids_mannheim.korap.config;
+package de.ids_mannheim.korap.misc;
 
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
 import org.junit.Test;
 
+import de.ids_mannheim.korap.config.BeanConfigTest;
+import de.ids_mannheim.korap.config.ContextHolder;
+import de.ids_mannheim.korap.config.DefaultHandler;
 import de.ids_mannheim.korap.exceptions.KustvaktException;
 import de.ids_mannheim.korap.handlers.JDBCAuditing;
 import de.ids_mannheim.korap.interfaces.db.AuditingIface;
diff --git a/full/src/test/java/de/ids_mannheim/korap/config/ConfigTest.java b/full/src/test/java/de/ids_mannheim/korap/misc/ConfigTest.java
similarity index 93%
rename from full/src/test/java/de/ids_mannheim/korap/config/ConfigTest.java
rename to full/src/test/java/de/ids_mannheim/korap/misc/ConfigTest.java
index 380d5fb..734f78c 100644
--- a/full/src/test/java/de/ids_mannheim/korap/config/ConfigTest.java
+++ b/full/src/test/java/de/ids_mannheim/korap/misc/ConfigTest.java
@@ -1,4 +1,4 @@
-package de.ids_mannheim.korap.config;
+package de.ids_mannheim.korap.misc;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotEquals;
@@ -13,6 +13,8 @@
 import org.junit.Ignore;
 import org.junit.Test;
 
+import de.ids_mannheim.korap.config.BeanConfigTest;
+import de.ids_mannheim.korap.config.ConfigLoader;
 import de.ids_mannheim.korap.exceptions.KustvaktException;
 import de.ids_mannheim.korap.interfaces.EncryptionIface;
 import de.ids_mannheim.korap.utils.ServiceInfo;
diff --git a/full/src/test/java/de/ids_mannheim/korap/misc/ServiceSuite.java b/full/src/test/java/de/ids_mannheim/korap/misc/ServiceSuite.java
index 5ebf48e..662b96a 100644
--- a/full/src/test/java/de/ids_mannheim/korap/misc/ServiceSuite.java
+++ b/full/src/test/java/de/ids_mannheim/korap/misc/ServiceSuite.java
@@ -1,5 +1,4 @@
 package de.ids_mannheim.korap.misc;
-import de.ids_mannheim.korap.config.ConfigTest;
 import org.junit.runner.RunWith;
 import org.junit.runners.Suite;
 
diff --git a/full/src/test/java/de/ids_mannheim/korap/config/StringUtilsTest.java b/full/src/test/java/de/ids_mannheim/korap/misc/StringUtilsTest.java
similarity index 97%
rename from full/src/test/java/de/ids_mannheim/korap/config/StringUtilsTest.java
rename to full/src/test/java/de/ids_mannheim/korap/misc/StringUtilsTest.java
index 80a3a87..b6859bb 100644
--- a/full/src/test/java/de/ids_mannheim/korap/config/StringUtilsTest.java
+++ b/full/src/test/java/de/ids_mannheim/korap/misc/StringUtilsTest.java
@@ -1,4 +1,4 @@
-package de.ids_mannheim.korap.config;
+package de.ids_mannheim.korap.misc;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
diff --git a/full/src/test/java/de/ids_mannheim/korap/web/controller/ResourceRemoteApiTest.java b/full/src/test/java/de/ids_mannheim/korap/web/controller/ResourceRemoteApiTest.java
deleted file mode 100644
index 4fc436f..0000000
--- a/full/src/test/java/de/ids_mannheim/korap/web/controller/ResourceRemoteApiTest.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package de.ids_mannheim.korap.web.controller;
-
-import org.junit.Test;
-
-/**
- * @author hanl
- * @date 08/02/2016
- */
-public class ResourceRemoteApiTest {
-
-
-
-    @Test
-    public void testResourceGetFromDemo () {
-
-    }
-}