diff --git a/src/application/GanswerHandler.java b/src/application/GanswerHandler.java new file mode 100644 index 0000000..377fe54 --- /dev/null +++ b/src/application/GanswerHandler.java @@ -0,0 +1,176 @@ +package application; +import java.io.IOException; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import log.QueryLogger; + +import org.json.*; +import org.eclipse.jetty.server.Request; +import org.eclipse.jetty.server.handler.AbstractHandler; + +import rdf.Sparql; +import qa.GAnswer; +import qa.Globals; +import qa.Matches; + +public class GanswerHandler extends AbstractHandler{ + public static String errorHandle(String status,String message,String question,QueryLogger qlog){ + JSONObject exobj = new JSONObject(); + try { + exobj.put("status", status); + exobj.put("message", message); + exobj.put("questions", question); + if(qlog!=null&&qlog.rankedSparqls!=null&&qlog.rankedSparqls.size()>0){ + exobj.put("sparql", qlog.rankedSparqls.get(0).toStringForGStore2()); + } + } catch (Exception e1) { + } + return exobj.toString(); + } + + public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) + throws IOException, ServletException { + String question = ""; + QueryLogger qlog = null; + try{ + response.setContentType("text/html;charset=utf-8"); + response.setStatus(HttpServletResponse.SC_OK); + //step1: parsing input json + String data = request.getParameter("data"); + data = data.replace("%22","\""); + JSONObject jsonobj = new JSONObject(); + int needAnswer = 0; + int needSparql = 1; + question = "Show me all Czech movies"; + jsonobj = new JSONObject(data); + needAnswer = jsonobj.getInt("maxAnswerNum"); + needSparql = jsonobj.getInt("needSparql"); + question = jsonobj.getString("questions"); + Globals.MaxAnswerNum = needAnswer; + + //step2 run GAnswer Logic + String input = question; + GAnswer ga = new GAnswer(); + qlog = ga.getSparqlList(input); + if(qlog == null || qlog.rankedSparqls == null){ + try { + baseRequest.setHandled(true); + response.getWriter().println(errorHandle("500","UnvalidQuestionException: the question you input is invalid, please check",question,qlog)); + } catch (Exception e1) { + } + return; + } + int idx; + + //step2 construct response + JSONObject resobj = new JSONObject(); + resobj.put("status", "200"); + resobj.put("id","test"); + resobj.put("query",jsonobj.getString("questions")); + JSONObject tmpobj = new JSONObject(); + if(needAnswer > 0){ + if(qlog!=null && qlog.rankedSparqls.size()!=0){ + Sparql curSpq = null; + Matches m = null; + for(idx = 1;idx<=Math.min(qlog.rankedSparqls.size(), 5);idx+=1){ + curSpq = qlog.rankedSparqls.get(idx-1); + if(curSpq.tripleList.size()>0&&curSpq.questionFocus!=null){ + m = ga.getAnswerFromGStore2(curSpq); + } + if(m!=null&&m.answers!=null){ + qlog.sparql = curSpq; + qlog.match = m; + break; + } + } + curSpq = ga.getUntypedSparql(curSpq); + if(curSpq!=null){ + m = ga.getAnswerFromGStore2(curSpq); + } + if(m!=null&&m.answers!=null){ + qlog.sparql = curSpq; + qlog.match = m; + } + if(qlog.match==null) + qlog.match=new Matches(); + if(qlog.sparql==null) + qlog.sparql = qlog.rankedSparqls.get(0); + qlog.reviseAnswers(); + + //adding variables to result json + JSONArray vararr = new JSONArray(); + for(String var : qlog.sparql.variables){ + vararr.put(var); + } + resobj.put("vars", vararr); + + //adding answers to result json + JSONArray ansobj = new JSONArray(); + JSONObject bindingobj; + System.out.println(qlog.match.answersNum); + for(int i=0;i0){ + JSONArray spqarr = new JSONArray(); + for(idx=0;idx0){ + exobj.put("sparql", qlog.rankedSparqls.get(0).toStringForGStore2()); + } + } catch (Exception e1) { + } + return exobj.toString(); + } + + public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) + throws IOException, ServletException { + try{ + response.setContentType("text/html;charset=utf-8"); + response.setStatus(HttpServletResponse.SC_OK); + JSONObject infoobj = new JSONObject(); + + infoobj.put("version", Globals.Version); + infoobj.put("dictionary", Globals.DictionaryPath); + infoobj.put("dataset", Globals.Dataset); + infoobj.put("GDB system", Globals.GDBsystem); + + //TODO add more info + baseRequest.setHandled(true); + response.getWriter().println(infoobj.toString()); + } + catch(Exception e){ + if(e instanceof IOException){ + try { + baseRequest.setHandled(true); + response.getWriter().println(errorHandle("500","IOException","",null)); + } catch (Exception e1) { + } + } + else if(e instanceof JSONException){ + try { + baseRequest.setHandled(true); + response.getWriter().println(errorHandle("500","JSONException","",null)); + } catch (Exception e1) { + } + } + else if(e instanceof ServletException){ + try { + baseRequest.setHandled(true); + response.getWriter().println(errorHandle("500","ServletException","",null)); + } catch (Exception e1) { + } + } + else { + try { + baseRequest.setHandled(true); + response.getWriter().println(errorHandle("500","Unkown Exception","",null)); + } catch (Exception e1) { + } + } + } + } + +} diff --git a/src/application/HelloHandler.java b/src/application/HelloHandler.java new file mode 100644 index 0000000..b420609 --- /dev/null +++ b/src/application/HelloHandler.java @@ -0,0 +1,25 @@ +package application; + +import java.io.IOException; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + + +import org.eclipse.jetty.server.Request; +import org.eclipse.jetty.server.handler.AbstractHandler; + +public class HelloHandler extends AbstractHandler { + public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) + throws IOException, ServletException { + + response.setContentType("text/html;charset=utf-8"); + response.setStatus(HttpServletResponse.SC_OK); + baseRequest.setHandled(true); + String data = request.getParameter("data"); + response.getWriter().println("

Hello World

"); + response.getWriter().println("Request url: " + target); + response.getWriter().println(data); + } +} \ No newline at end of file diff --git a/src/application/HelloWorld.java b/src/application/HelloWorld.java new file mode 100644 index 0000000..22e467d --- /dev/null +++ b/src/application/HelloWorld.java @@ -0,0 +1,16 @@ +package application; + +import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.server.handler.ContextHandler; + +public class HelloWorld { + public static void main(String[] args) throws Exception { + Server server = new Server(8888); + ContextHandler context = new ContextHandler(); + context.setContextPath("/hello"); + context.setHandler(new HelloHandler()); + server.setHandler(context); + server.start(); + server.join(); + } +} diff --git a/src/qa/GAnswer.java b/src/qa/GAnswer.java index c5462c1..1f25e63 100644 --- a/src/qa/GAnswer.java +++ b/src/qa/GAnswer.java @@ -261,6 +261,7 @@ public class GAnswer { String[] varLineContents = rawLines[0].split("\t"); int varNum = varLineContents.length; ret.answers = new String[ansNum][varNum]; + ret.answersNum = ansNum; System.out.println("ansNum=" + ansNum); System.out.println("varNum=" + varNum); diff --git a/src/qa/Globals.java b/src/qa/Globals.java index d10c440..70dfdea 100644 --- a/src/qa/Globals.java +++ b/src/qa/Globals.java @@ -27,6 +27,10 @@ public class Globals { // entity linking system public static DBpediaLookup dblk; public static int MaxAnswerNum = 100; + public static String Dataset = "dbpedia 2016"; + public static String DictionaryPath = "default"; + public static String Version = "0.1.2"; + public static String GDBsystem = "gStore v0.7.2"; /* * evaluationMethod: