// Path: poli-libras-app/src/br/usp/libras/data/SignDao.java
// public class SignDao extends Dao<Sign> {
// 
//     SignDao(Session session) {
//         super(session, Sign.class);
//     }
// 
//     public List<Sign> searchByNearWord(String word) {
//         
//         String ejbql = "SELECT OBJECT(s) FROM Sign AS s, IN (s.words) w WHERE w.word LIKE '%" + word + "%'";
//         return (List<Sign>) session.createQuery(ejbql).list();
//     }
// 
//     public List<Sign> searchByWord(String word) {
//         
//         String ejbql = "SELECT OBJECT(s) FROM Sign AS s, IN (s.words) w WHERE w.word = '" + word + "'";
//         return (List<Sign>) session.createQuery(ejbql).list();
//     }
//     
//     public List<Sign> searchByNearName(String name) {
// 
//         String ejbql = "SELECT OBJECT(s) FROM Sign AS s WHERE s.name LIKE '%" + name + "%'";
//         return (List<Sign>) session.createQuery(ejbql).list();
//     }
//     
//     public Sign searchByName(String name) {
//         
//         String ejbql = "SELECT OBJECT(s) FROM Sign AS s WHERE s.name LIKE '" + name + "'";
//         return (Sign) session.createQuery(ejbql).uniqueResult();        
//     }
//     
// }
// 
// Path: poli-libras-app/src/br/usp/libras/data/SignDaoFactory.java
// public class SignDaoFactory<T> extends DaoFactory<T> {
// 
//     public SignDaoFactory(Session session) {
//         super(session);
//     }
// 
//     @Override
//     public Dao<T> getDao() {
//         return new Dao<T>(this.session, Sign.class);
//     }
//     
//     public SignDao getSignDao() {
//         return new SignDao(this.session);
//     }
// 
// }
// 
// Path: poli-libras-core/src/br/usp/libras/dic/SignDictionary.java
// public interface SignDictionary {
// 
//     /**
//      * Obtêm um sinal pelo seu nome
//      * @param name nome exato do sinal (ex: SENTAR-EM-RODA)
//      * @return o sinal correspondente ou null em caso de não haver sinal
//      */
//     public Sign signByName(String name);
// 
//     /**
//      * Obtêm os sinais cujos nomes se assemelham ao argumento
//      * @param name o nome aproximado do sinal (ex: SENTAR)
//      * @return os sinais correspondentes (ex: SENTAR, SENTAR-EM-RODA, SENTAR-NA-CADEIRA)
//      */
//     public List<Sign> nearSigns(String name);
//     
//     /**
//      * Traduz uma palavra em português para LIBRAS
//      * @param word palavra em português
//      * @return lista dos sinais que possivelmente correspondem à palavra dada
//      */
//     public List<Sign> translate(String word);
//     
//     /**
//      * Traduz uma palavra em português para LIBRAS
//      * Caso haja vários possíveis sinais correspondentes,
//      * a implementação decidirá qual sinal será retornado
//      * @param word palavra em português
//      * @return um sinal em LIBRAS que corresponde à palavra dada. Null, se não achar nada.
//      */
//     public Sign simpleTranslate(String word);
// 
// }


import java.util.ArrayList;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;
import br.usp.libras.data.SignDao;
import br.usp.libras.data.SignDaoFactory;
import br.usp.libras.sign.Sign;
import br.usp.libras.dic.SignDictionary;
package br.usp.libras.dic;




public class SQLiteDictionary implements SignDictionary{

	private static final String DATABASE_URL = "jdbc:sqlite:resources/wikilibras.db";
	//private static final String DATABASE_URL =  "jdbc:sqlite::resources:wikilibras.db";
	
	private SignDao dao;
	
	public SQLiteDictionary(){
		
		Configuration configSqlite = new AnnotationConfiguration().setProperty("hibernate.connection.url", DATABASE_URL);
		SessionFactory sessions = configSqlite.configure().buildSessionFactory();
		Session session = sessions.openSession();        
        SignDaoFactory<Sign> factory = new SignDaoFactory<Sign>(session);
// Path: poli-libras-app/src/br/usp/libras/data/SignDao.java
// public class SignDao extends Dao<Sign> {
// 
//     SignDao(Session session) {
//         super(session, Sign.class);
//     }
// 
//     public List<Sign> searchByNearWord(String word) {
//         
//         String ejbql = "SELECT OBJECT(s) FROM Sign AS s, IN (s.words) w WHERE w.word LIKE '%" + word + "%'";
//         return (List<Sign>) session.createQuery(ejbql).list();
//     }
// 
//     public List<Sign> searchByWord(String word) {
//         
//         String ejbql = "SELECT OBJECT(s) FROM Sign AS s, IN (s.words) w WHERE w.word = '" + word + "'";
//         return (List<Sign>) session.createQuery(ejbql).list();
//     }
//     
//     public List<Sign> searchByNearName(String name) {
// 
//         String ejbql = "SELECT OBJECT(s) FROM Sign AS s WHERE s.name LIKE '%" + name + "%'";
//         return (List<Sign>) session.createQuery(ejbql).list();
//     }
//     
//     public Sign searchByName(String name) {
//         
//         String ejbql = "SELECT OBJECT(s) FROM Sign AS s WHERE s.name LIKE '" + name + "'";
//         return (Sign) session.createQuery(ejbql).uniqueResult();        
//     }
//     
// }
// 
// Path: poli-libras-app/src/br/usp/libras/data/SignDaoFactory.java
// public class SignDaoFactory<T> extends DaoFactory<T> {
// 
//     public SignDaoFactory(Session session) {
//         super(session);
//     }
// 
//     @Override
//     public Dao<T> getDao() {
//         return new Dao<T>(this.session, Sign.class);
//     }
//     
//     public SignDao getSignDao() {
//         return new SignDao(this.session);
//     }
// 
// }
// 
// Path: poli-libras-core/src/br/usp/libras/dic/SignDictionary.java
// public interface SignDictionary {
// 
//     /**
//      * Obtêm um sinal pelo seu nome
//      * @param name nome exato do sinal (ex: SENTAR-EM-RODA)
//      * @return o sinal correspondente ou null em caso de não haver sinal
//      */
//     public Sign signByName(String name);
// 
//     /**
//      * Obtêm os sinais cujos nomes se assemelham ao argumento
//      * @param name o nome aproximado do sinal (ex: SENTAR)
//      * @return os sinais correspondentes (ex: SENTAR, SENTAR-EM-RODA, SENTAR-NA-CADEIRA)
//      */
//     public List<Sign> nearSigns(String name);
//     
//     /**
//      * Traduz uma palavra em português para LIBRAS
//      * @param word palavra em português
//      * @return lista dos sinais que possivelmente correspondem à palavra dada
//      */
//     public List<Sign> translate(String word);
//     
//     /**
//      * Traduz uma palavra em português para LIBRAS
//      * Caso haja vários possíveis sinais correspondentes,
//      * a implementação decidirá qual sinal será retornado
//      * @param word palavra em português
//      * @return um sinal em LIBRAS que corresponde à palavra dada. Null, se não achar nada.
//      */
//     public Sign simpleTranslate(String word);
// 
// }


// Path: poli-libras-app/src/br/usp/libras/dic/SQLiteDictionary.java
import java.util.ArrayList;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;
import br.usp.libras.data.SignDao;
import br.usp.libras.data.SignDaoFactory;
import br.usp.libras.sign.Sign;
import br.usp.libras.dic.SignDictionary;

package br.usp.libras.dic;




public class SQLiteDictionary implements SignDictionary{

	private static final String DATABASE_URL = "jdbc:sqlite:resources/wikilibras.db";
	//private static final String DATABASE_URL =  "jdbc:sqlite::resources:wikilibras.db";
	
	private SignDao dao;
	
	public SQLiteDictionary(){
		
		Configuration configSqlite = new AnnotationConfiguration().setProperty("hibernate.connection.url", DATABASE_URL);
		SessionFactory sessions = configSqlite.configure().buildSessionFactory();
		Session session = sessions.openSession();        
        SignDaoFactory<Sign> factory = new SignDaoFactory<Sign>(session);
        this.dao = factory.getSignDao();