package com.transmem.action;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import java.io.IOException;
import java.sql.SQLException;
import java.sql.Connection;
import java.util.ArrayList;
import com.transmem.data.db.Databases;
import com.transmem.data.db.Sentences;
import com.transmem.data.db.Users;
import com.transmem.data.tm.*;
import com.transmem.nlp.LanguageException;
/**
* Action class for looking up examples for a sentence.
*
* @version 0.1
* @author Ted Wen
* @date Jan. 2007
*/
public class QueryCorpus extends BaseAction
{
private Logger log_ = Logger.getLogger(QueryCorpus.class.getName());
public QueryCorpus()
{
super();
}
/**
* Look up examples for a sentence.
* param vars: index of sentence
* Session vars: sentences
*/
public void execute(ServletParams param) throws ServletException, IOException
{
log_.entering("QueryCorpus","execute");
Session session = param.getSession();
Users usr = session.getUser();
if (usr == null) {
param.sendError(MessageCode.ERR_NOT_LOGIN);
return;
}
//break the sentence into words
ArrayList<Sentences> sentences = session.getSentenceList();
int index = 0;
try
{
index = Integer.parseInt(param.getParameter("index"));
if (index < 0 || index >= sentences.size())
{
param.sendError(MessageCode.ERR_INDEX_OUTOF_BOUNDS);
return;
}
}
catch (NumberFormatException e)
{
param.sendError(MessageCode.ERR_INDEX_OUTOF_BOUNDS);
return;
}
//check domain and permit options
String domain = param.getParameter("domain");
if (domain == null) domain = session.getSelectedDomain();
if (domain != null && !domain.equals(session.getSelectedDomain()))
{
session.setSelectedDomain(domain);
}
String permit = param.getParameter("permit");
if (permit == null) permit = session.getSelectedPermit();
if (permit != null && !permit.equals(session.getSelectedPermit()))
{
session.setSelectedPermit(permit);
}
log_.info("QueryCorpus, index="+index);
String st = sentences.get(index).getSentence();
//call Segmenter to break sentence into words
String langpair = session.getLangPair();
if (langpair==null || langpair.length()!=4)
{
param.sendError(MessageCode.ERR_NULL_ATTRIBUTE);
return;
}
Corpus corpus = session.getCorpus();
if (corpus != null)
{
session.removeCorpus();
}
try
{
corpus = new Corpus(getDatabases(param),langpair.substring(0,2),langpair.substring(2));
}
catch (SQLException e)
{
log_.severe(e.toString());
param.sendError(MessageCode.ERR_CORPUS_INIT);
return;
}
session.setCorpus(corpus);
setNextPage(null); //for Ajax return
param.setContentType("text/html;charset=utf-8");
param.setHeader("Cache-Control", "no-cache");
try
{
int pages = corpus.query(usr.getUserID(), usr.getGroup(), st, domain, permit);
session.setSentencePages(new Integer(pages));
session.setSentencePage(new Integer(0));
String examples = corpus.getPageAsHtml(0);
param.getWriter().write(examples);
}
catch (LanguageException le)
{
param.getWriter().write("0/0* No examples available.");
}
log_.info("End of QueryCorpus");
}
}