/*
* YAQP - Yet Another QSAR Project:
* Machine Learning algorithms designed for the prediction of toxicological
* features of chemical compounds become available on the Web. Yaqp is developed
* under OpenTox (http://opentox.org) which is an FP7-funded EU research project.
* This project was developed at the Automatic Control Lab in the Chemical Engineering
* School of National Technical University of Athens. Please read README for more
* information.
*
* Copyright (C) 2009-2010 Pantelis Sopasakis & Charalampos Chomenides
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* Contact:
* Pantelis Sopasakis
* chvng@mail.ntua.gr
* Address: Iroon Politechniou St. 9, Zografou, Athens Greece
* tel. +30 210 7723236
*/
package org.opentox.db.handlers;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.opentox.db.exceptions.DbException;
import org.opentox.db.util.EmailSupervisor;
import org.opentox.db.util.Page;
import org.opentox.db.util.PrepStmt;
import org.opentox.ontology.components.*;
import org.opentox.db.util.TheDbConnector;
import org.opentox.ontology.exceptions.ImproperEntityException;
import org.opentox.ontology.exceptions.YaqpOntException;
import org.opentox.ontology.namespaces.OTAlgorithmTypes;
import org.opentox.ontology.util.AlgorithmParameter;
import org.opentox.ontology.util.YaqpAlgorithms;
import org.opentox.ontology.util.vocabulary.ConstantParameters;
import static org.junit.Assert.*;
/**
*
* @author hampos
*/
public class ReaderHandlerTest {
public ReaderHandlerTest() {
}
@BeforeClass
public static void setUpClass() throws Exception {
TheDbConnector.init();
// Jennifer.INSTANCE.start();
// Thread.sleep(3000);
}
@AfterClass
public static void tearDownClass() throws Exception {
}
@Before
public void setUp() {
}
@After
public void tearDown() {
}
/**
* Get all users from the DB in a Component List.
*/
@Test
public void searchAPI_1(){
System.out.println("** seach user - 1 (Non skroutz)");
try {
ComponentList<YaqpComponent > list = ReaderHandler.search(new User(), new Page(), false);
assertTrue(list.size()>0);
for (YaqpComponent comp : list){
User u = (User) comp;
assertTrue(u.getEmail()!=null);
assertTrue(EmailSupervisor.checkMail(u.getEmail()));
}
} catch (DbException ex) {
Logger.getLogger(ReaderHandlerTest.class.getName()).log(Level.SEVERE, null, ex);
fail();
} catch (ImproperEntityException ex) {
Logger.getLogger(ReaderHandlerTest.class.getName()).log(Level.SEVERE, null, ex);
fail();
}
}
/**
* User the skroutz variant of the search method to get a
* list of usernames from the database.
*/
@Test
public void searchAPI_2(){
System.out.println("** seach user - 2 (Skroutz)");
try {
ComponentList<YaqpComponent > list = ReaderHandler.search(new User(), new Page(), true);
assertTrue(list.size()>0);
for (YaqpComponent comp : list){
User u = (User) comp;
assertTrue(u.getUserName()!=null);
}
} catch (DbException ex) {
Logger.getLogger(ReaderHandlerTest.class.getName()).log(Level.SEVERE, null, ex);
fail();
} catch (ImproperEntityException ex) {
Logger.getLogger(ReaderHandlerTest.class.getName()).log(Level.SEVERE, null, ex);
fail();
}
}
@Test
public void searchAPI_3(){
System.out.println("** seach user - 3 (Skroutz & ask for non-included info)");
try {
ComponentList<YaqpComponent > list = ReaderHandler.search(new User(), new Page(), true);
assertTrue(list.size()>0);
for (YaqpComponent comp : list){
User u = (User) comp;
assertEquals(u.getEmail(), null);
}
} catch (DbException ex) {
Logger.getLogger(ReaderHandlerTest.class.getName()).log(Level.SEVERE, null, ex);
fail();
} catch (ImproperEntityException ex) {
Logger.getLogger(ReaderHandlerTest.class.getName()).log(Level.SEVERE, null, ex);
fail();
}
}
@Test
public void searchAPI_4(){
System.out.println("** seach user - 4 (Get one user)");
String username ="john";
try {
User prototype = new User();
prototype.setUserName(username);
ComponentList<YaqpComponent > list = ReaderHandler.search(prototype, new Page(), true);
assertEquals(list.size(), 1);
for (YaqpComponent comp : list){
User u = (User) comp;
assertEquals(u.getUserName(), username);
}
} catch (DbException ex) {
Logger.getLogger(ReaderHandlerTest.class.getName()).log(Level.SEVERE, null, ex);
fail();
} catch (ImproperEntityException ex) {
Logger.getLogger(ReaderHandlerTest.class.getName()).log(Level.SEVERE, null, ex);
fail();
}
}
@Test
public void searchAPI_5(){
System.out.println("** seach qsar models - 1");
try {
ComponentList<YaqpComponent > list = ReaderHandler.search(new QSARModel(), new Page(), false);
assertTrue(list.size()>0);
for (YaqpComponent comp : list){
QSARModel q = (QSARModel) comp;
assertEquals(q.getCode().length(), 36);
if (q.getAlgorithm().equals(YaqpAlgorithms.SVM) || q.getAlgorithm().equals(YaqpAlgorithms.SVC) )
assertTrue(Double.parseDouble(q.getParams().get("gamma").paramValue.toString())>0);
assertTrue(q.getId()>0);
}
} catch (DbException ex) {
Logger.getLogger(ReaderHandlerTest.class.getName()).log(Level.SEVERE, null, ex);
fail();
} catch (ImproperEntityException ex) {
Logger.getLogger(ReaderHandlerTest.class.getName()).log(Level.SEVERE, null, ex);
fail();
}
}
@Test
public void searchAPI_6(){
System.out.println("** seach qsar models - 2 (skroutz)");
try {
ComponentList<YaqpComponent > list = ReaderHandler.search(new QSARModel(), new Page(), false);
assertTrue(list.size()>0);
for (YaqpComponent comp : list){
QSARModel q = (QSARModel) comp;
assertTrue(q.getId()>0);
}
} catch (DbException ex) {
Logger.getLogger(ReaderHandlerTest.class.getName()).log(Level.SEVERE, null, ex);
fail();
} catch (ImproperEntityException ex) {
Logger.getLogger(ReaderHandlerTest.class.getName()).log(Level.SEVERE, null, ex);
fail();
}
}
@Test
public void searchAPI_7(){
System.out.println("** seach qsar models - 3 (ask for MLR models)");
try {
QSARModel prototype = new QSARModel();
prototype.setAlgorithm(YaqpAlgorithms.MLR);
ComponentList<YaqpComponent > list = ReaderHandler.search(prototype, new Page(), false);
assertTrue(list.size()>0);
for (YaqpComponent comp : list){
QSARModel q = (QSARModel) comp;
assertTrue(q.getId()>0);
}
} catch (DbException ex) {
Logger.getLogger(ReaderHandlerTest.class.getName()).log(Level.SEVERE, null, ex);
fail();
} catch (ImproperEntityException ex) {
Logger.getLogger(ReaderHandlerTest.class.getName()).log(Level.SEVERE, null, ex);
fail();
}
}
@Test
public void searchAPI_8(){
System.out.println("** seach qsar models - 3 (ask for SVM models)");
try {
QSARModel prototype = new QSARModel();
prototype.setAlgorithm(YaqpAlgorithms.SVM);
ComponentList<YaqpComponent > list = ReaderHandler.search(prototype, new Page(), false);
assertTrue(list.size()>0);
for (YaqpComponent comp : list){
QSARModel q = (QSARModel) comp;
assertTrue(q.getId()>0);
assertTrue(Double.parseDouble(q.getParams().get("gamma").paramValue.toString())>0);
}
} catch (DbException ex) {
Logger.getLogger(ReaderHandlerTest.class.getName()).log(Level.SEVERE, null, ex);
fail();
} catch (ImproperEntityException ex) {
Logger.getLogger(ReaderHandlerTest.class.getName()).log(Level.SEVERE, null, ex);
fail();
}
}
@Test
public void searchAPI_9(){
System.out.println("** seach tasks - 1 (full search)");
try {
Task prototype = new Task();
ComponentList<YaqpComponent > list = ReaderHandler.search(prototype, new Page(), false);
assertTrue(list.size()>0);
for (YaqpComponent comp : list){
Task q = (Task) comp;
assertTrue(q.getName()!=null);
assertTrue(!q.getName().equals(""));
assertEquals(q.getName().length(), 36);
}
} catch (DbException ex) {
Logger.getLogger(ReaderHandlerTest.class.getName()).log(Level.SEVERE, null, ex);
fail();
} catch (ImproperEntityException ex) {
Logger.getLogger(ReaderHandlerTest.class.getName()).log(Level.SEVERE, null, ex);
fail();
}
}
/**
* Get all users - check if it works
* @throws DbException
*/
@Test
public void searchForUser() throws DbException {
System.out.println("-- serch user - test 1 --");
User prototype = new User();
ComponentList<User> list = ReaderHandler.searchUser(prototype, new Page(0, 0));
for (User user : list.getComponentList()) {
System.out.println(user);
}
}
//
// /**
// * Check if the page size works.
// * @throws DbException
// */
// @Test
// public void searchUser_size() throws DbException {
// System.out.println("-- serch user - test 2 --");
// User prototype = new User();
// ComponentList<User> list = ReaderHandler.searchUser(prototype, new Page(1, 0));
// assertTrue(list.getComponentList().size() == 1);
// }
//
// @Test
// public void unknownEmail() throws DbException {
// System.out.println("-- serch user - test 3 --");
// User prototype = new User();
// prototype.setEmail("unknown@user.mail.tnt");
// ComponentList<User> list = ReaderHandler.searchUser(prototype, new Page(1, 0));
// assertTrue(list.getComponentList().size() == 0);
// }
//
// @Test
// public void unknownName() throws DbException {
// System.out.println("-- serch user - test 3 --");
// User prototype = new User();
// prototype.setUserName("mitsos");
// ComponentList<User> list = ReaderHandler.searchUser(prototype, new Page(1, 0));
// assertTrue(list.getComponentList().size() == 0);
// }
//
// /**
// * Assure that null prototype throws NPE.
// * @throws DbException
// */
// @Test
// public void searchNullUser() throws DbException {
// System.out.println("-- serch user - test 4 --");
// User prototype = null;
// try {
// ComponentList<User> list = ReaderHandler.searchUser(prototype, new Page(0, 0));
// } catch (Exception ex) {
// assertTrue(ex instanceof NullPointerException);
// }
// }
//
// @Test
// public void getAlgorithmOntologiesTest() throws YaqpOntException, DbException {
// System.out.println("-- check whether all ontologies are in the DB --");
// ComponentList<AlgorithmOntology> algont = ReaderHandler.searchAlgorithmOntology(new AlgorithmOntology(), new Page(0, 0));
// assertEquals(algont.getComponentList().size(), OTAlgorithmTypes.getAllAlgorithmTypes().size());
//
// }
//
// @Test
// public void getUserGroupsTest() throws DbException {
// System.out.println("-- user groups page size --");
// ComponentList<UserGroup> userGroups = ReaderHandler.searchUserGroup(new UserGroup(), new Page(1, 0));
// ArrayList<UserGroup> list = userGroups.getComponentList();
// assertEquals(list.size(), 1);
// }
//
// @Test
// public void getAlgOntRelationTest() throws YaqpOntException, DbException {
// System.out.println("---------------- search for ontologies for given algorithm ------------");
// ComponentList<AlgorithmOntology> ontologies = ReaderHandler.getAlgOntRelation(new Algorithm(YaqpAlgorithms.mlr_metadata()), new Page(0, 0));
// for (AlgorithmOntology ont : ontologies.getComponentList()) {
// System.out.println(ont);
// }
// }
//
// @Test
// public void getOntAlgRelationTest() throws Exception {
// System.out.println("---------------- search for algorithms for given ontology ------------");
// AlgorithmOntology ontology = new AlgorithmOntology("Regression");
// ComponentList<Algorithm> algorithms = ReaderHandler.getOntAlgRelation(ontology, new Page(0, 0));
// for (Algorithm alg : algorithms.getComponentList()) {
// System.out.println(alg);
// }
// }
//
// @Test
// public void getAlgorithmsTest() throws DbException {
// System.out.println("---------------- get all algorithms ------------");
// ComponentList<Algorithm> algorithms = ReaderHandler.getAlgorithms();
// for (Algorithm alg : algorithms.getComponentList()) {
// System.out.println(alg);
// }
// }
//
// @Test
// public void getFeaturesTest() throws DbException {
// System.out.println("---------------- search features ------------");
// ComponentList<Feature> features = ReaderHandler.searchFeature(new Feature(), new Page(0, 0));
// for (Feature f : features.getComponentList()) {
// System.out.println(f);
// }
// }
//
// @Test
// public void getQSARMods() throws DbException {
// System.out.println("---------------- search QSARModels ------------");
// QSARModel model = new QSARModel();
// Map<String, AlgorithmParameter> map = new HashMap<String, AlgorithmParameter>();
//
// //AlgorithmParameter<Double> p = map.get("gamma");
// AlgorithmParameter p = new AlgorithmParameter("LINEAR");
//
// map.put("kernel", p);
//
// model.setParams(map);
// //model.setId(109);
// //model.setModelStatus(QSARModel.ModelStatus.UNDER_DEVELOPMENT);
// ComponentList<QSARModel> models = ReaderHandler.searchQSARModel(model, new Page());
// for (QSARModel m : models.getComponentList()) {
// System.out.println(m.getId());
// System.out.println(m.getDependentFeature());
// System.out.println(m.getParams().get("gamma").paramValue);
// }
// }
//
// @Test
// public void getQSARModsSkroutz() throws DbException {
// System.out.println("---------------- search QSARModels SKROUTZ------------");
// QSARModel model = new QSARModel();
// Map<String, AlgorithmParameter> map = new HashMap<String, AlgorithmParameter>();
//
// //AlgorithmParameter<Double> p = map.get("gamma");
// AlgorithmParameter p = new AlgorithmParameter(2.5);
//
// map.put("gamma_max", p);
//
// // model.setParams(map);
// //model.setId(109);
// model.setMinId(2);
// //model.setModelStatus(QSARModel.ModelStatus.UNDER_DEVELOPMENT);
// ComponentList<QSARModel> models = ReaderHandler.searchQSARModelSkroutz(model, new Page());
// for (QSARModel m : models.getComponentList()) {
// System.out.println(m.getId());
// }
// }
//
// @Test
// public void getOmega() throws DbException {
// System.out.println("---------------- search OMEGA ------------");
//
// OmegaModel model = new OmegaModel();
// ComponentList<OmegaModel> models = ReaderHandler.searchOmega(model, new Page());
// for (OmegaModel m : models.getComponentList()) {
// System.out.println(m.getId());
// System.out.println(m.getCode());
// System.out.println(m.getUser().getFirstName());
// System.out.println(m.getDataset());
// System.out.println(m.getTimestamp());
// }
// }
//
// @Test
// public void getOmegaSkroutz() throws DbException {
// System.out.println("---------------- search OMEGA SKROUTZ ------------");
//
// OmegaModel model = new OmegaModel();
// ComponentList<OmegaModel> models = ReaderHandler.searchOmegaSkroutz(model, new Page());
// for (OmegaModel m : models.getComponentList()) {
// System.out.println(m.getId());
// System.out.println(m.getCode());
// }
// }
//
//@Test
public void getTasks() throws DbException {
System.out.println("---------------- search TASK ------------");
Task task = new Task();
User u = new User();
//u.setEmail("john@foo.goo.gr");
task.setUser(u);
ComponentList<Task> tasks = ReaderHandler.searchTask(task, new Page());
for (Task t : tasks.getComponentList()) {
System.out.println(t);
}
}
//
// @Test
// public void getTasksSkroutz() throws DbException {
// System.out.println("---------------- search TASK SKROUTZ------------");
//
// Task task = new Task();
// User u = new User();
//
// u.setEmail("john@foo.goo.gr");
// task.setUser(u);
// ComponentList<Task> tasks = ReaderHandler.searchTaskSkroutz(task, new Page());
// for (Task t : tasks.getComponentList()) {
// System.out.println(t.getName());
// System.out.println(t.getUser().getEmail());
// System.out.println(t.getAlgorithm().getMeta().getName());
// }
// }
//
// @Test
// public void SEARCH() throws DbException, ImproperEntityException, YaqpOntException {
// System.out.println("---------------------- SEARCH ------------------");
//
// Task task = new Task();
// ComponentList<YaqpComponent> tasks = ReaderHandler.search(task, null, false);
// for (YaqpComponent y : tasks.getComponentList()) {
// Task t = (Task)y;
// System.out.println(t.getName());
// System.out.println(t.getUser().getEmail());
// System.out.println(t.getAlgorithm().getMeta().getName());
// }
//
// User prototype = new User();
// prototype.setFirstName("mike");
// ComponentList<YaqpComponent> list = ReaderHandler.search(prototype, new Page(), false);
// for (YaqpComponent y : list.getComponentList()) {
// User user = (User)y;
// System.out.println(user);
// }
// }
}