// Path: poli-libras-app/src/br/usp/libras/dic/SQLiteDictionary.java
// 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();
// 
// 	}
// 
// 	@Override
// 	public List<Sign> nearSigns(String arg0) {
// 		
// 		List<Sign> signs = dao.searchByNearName(arg0);
//         if (signs != null)
//             return signs;
//         else
//             return new ArrayList<Sign>();
// 	}
// 
// 	@Override
// 	public Sign signByName(String arg0) {
// 		
// 		return dao.searchByName(arg0);
// 	}
// 
// 	@Override
// 	public Sign simpleTranslate(String arg0) {
// 		List<Sign> signs = dao.searchByWord(arg0);
//         if (signs.isEmpty())
//             return null;
//         else
//             return signs.get(0);
// 	}
// 
// 	@Override
// 	public List<Sign> translate(String arg0) {
// 		
// 		List<Sign> signs = dao.searchByWord(arg0);
//         if (signs != null)
//             return signs;
//         else
//             return new ArrayList<Sign>();
// 	}
// 
// 	
// 
// }
// 
// 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-core/src/br/usp/libras/translator/Translator.java
// public class Translator {
// 
//     private SyntacticTranformer transformer = new SynTransfPortLibras();
//     private Contextualiser context;
//     private boolean verbose = false;
// 
//     public Translator() 
//     {
//     	context = new Contextualiser();
//     }
//     
//     public Translator(SignDictionary dic) {
//         context = new Contextualiser(dic);
//     }
// 
//     public void setVerbose() {
//         verbose = true;
//     }
// 
//     public List<Sign> translate(String text) {
// 
//         List<TokenMorph >tokens = transformer.transform(text);
//     
//         if (verbose) {
//             System.out.println("Transformer");
//             for (TokenMorph tokenMorph : tokens) {
//                 System.out.println(tokenMorph);
//             }
//         }
// 
//         List<Sign> signs = context.contextualise(tokens);
// 
//         return signs;
//     }
// }


import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import br.usp.libras.dic.SQLiteDictionary;
import br.usp.libras.dic.SignDictionary;
import br.usp.libras.jonah.VirtualJonah;
import br.usp.libras.translator.Translator;
	     panelCommands.add(dictionaryLabel,grid);
	     
	     grid.fill = GridBagConstraints.HORIZONTAL;
	     grid.gridx=1;
	     grid.gridy=1;
	     panelCommands.add(dictionaryCombo,grid);
	     
	     grid.ipady= 20;
	     grid.fill = GridBagConstraints.HORIZONTAL;
	     grid.gridheight = 3;
	     grid.gridx=3;
	     grid.gridy=0;
	     panelCommands.add(infoButton,grid);
	     grid.ipady=0;
	     
	     panel.add(applet);
	     panel.add(panelCommands);
	     
	     frame.add(panel);
	     frame.setSize(applet.getSize().width, applet.getSize().height +90);
	     
	     signButton.addActionListener( new ActionListener(){
	 	    
				@Override
				public void actionPerformed(ActionEvent e) {
					
					String setence = signField.getText();
					Translator translator;
					
					if(dictionaryCombo.getSelectedIndex()==0){
// Path: poli-libras-app/src/br/usp/libras/dic/SQLiteDictionary.java
// 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();
// 
// 	}
// 
// 	@Override
// 	public List<Sign> nearSigns(String arg0) {
// 		
// 		List<Sign> signs = dao.searchByNearName(arg0);
//         if (signs != null)
//             return signs;
//         else
//             return new ArrayList<Sign>();
// 	}
// 
// 	@Override
// 	public Sign signByName(String arg0) {
// 		
// 		return dao.searchByName(arg0);
// 	}
// 
// 	@Override
// 	public Sign simpleTranslate(String arg0) {
// 		List<Sign> signs = dao.searchByWord(arg0);
//         if (signs.isEmpty())
//             return null;
//         else
//             return signs.get(0);
// 	}
// 
// 	@Override
// 	public List<Sign> translate(String arg0) {
// 		
// 		List<Sign> signs = dao.searchByWord(arg0);
//         if (signs != null)
//             return signs;
//         else
//             return new ArrayList<Sign>();
// 	}
// 
// 	
// 
// }
// 
// 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-core/src/br/usp/libras/translator/Translator.java
// public class Translator {
// 
//     private SyntacticTranformer transformer = new SynTransfPortLibras();
//     private Contextualiser context;
//     private boolean verbose = false;
// 
//     public Translator() 
//     {
//     	context = new Contextualiser();
//     }
//     
//     public Translator(SignDictionary dic) {
//         context = new Contextualiser(dic);
//     }
// 
//     public void setVerbose() {
//         verbose = true;
//     }
// 
//     public List<Sign> translate(String text) {
// 
//         List<TokenMorph >tokens = transformer.transform(text);
//     
//         if (verbose) {
//             System.out.println("Transformer");
//             for (TokenMorph tokenMorph : tokens) {
//                 System.out.println(tokenMorph);
//             }
//         }
// 
//         List<Sign> signs = context.contextualise(tokens);
// 
//         return signs;
//     }
// }


// Path: poli-libras-app/src/br/usp/libras/gui/PoliLibrasApp.java
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import br.usp.libras.dic.SQLiteDictionary;
import br.usp.libras.dic.SignDictionary;
import br.usp.libras.jonah.VirtualJonah;
import br.usp.libras.translator.Translator;

	     panelCommands.add(dictionaryLabel,grid);
	     
	     grid.fill = GridBagConstraints.HORIZONTAL;
	     grid.gridx=1;
	     grid.gridy=1;
	     panelCommands.add(dictionaryCombo,grid);
	     
	     grid.ipady= 20;
	     grid.fill = GridBagConstraints.HORIZONTAL;
	     grid.gridheight = 3;
	     grid.gridx=3;
	     grid.gridy=0;
	     panelCommands.add(infoButton,grid);
	     grid.ipady=0;
	     
	     panel.add(applet);
	     panel.add(panelCommands);
	     
	     frame.add(panel);
	     frame.setSize(applet.getSize().width, applet.getSize().height +90);
	     
	     signButton.addActionListener( new ActionListener(){
	 	    
				@Override
				public void actionPerformed(ActionEvent e) {
					
					String setence = signField.getText();
					Translator translator;
					
					if(dictionaryCombo.getSelectedIndex()==0){
						SignDictionary dic = new SQLiteDictionary();