root/SPARQLBuilderWWW/src/java/org/biohackathon/SPARQLBuilder/www/CLServlet.java @ 275

リビジョン 274, 7.8 KB (コミッタ: atsuko, 9 年 前)

新API仕様に対応

行番号 
1/*
2 * To change this license header, choose License Headers in Project Properties.
3 * To change this template file, choose Tools | Templates
4 * and open the template in the editor.
5 */
6
7package org.biohackathon.SPARQLBuilder.www;
8
9import java.io.IOException;
10import java.io.PrintWriter;
11import java.math.BigDecimal;
12import java.util.*;
13import javax.json.*;
14import javax.servlet.ServletException;
15import javax.servlet.annotation.WebServlet;
16import javax.servlet.http.HttpServlet;
17import javax.servlet.http.HttpServletRequest;
18import javax.servlet.http.HttpServletResponse;
19import javax.servlet.http.HttpSession;
20import org.biohackathon.SPARQLBuilder.OWL.*;
21
22/**
23 *
24 * @author atsuko
25 */
26@WebServlet(name = "CLServlet", urlPatterns = {"/clist"})
27public class CLServlet extends HttpServlet {
28
29    private static final String FILENAME = "cdata/";
30   
31    /**
32     * Processes requests for both HTTP <code>GET</code> and <code>POST</code>
33     * methods.
34     *
35     * @param request servlet request
36     * @param response servlet response
37     * @throws ServletException if a servlet-specific error occurs
38     * @throws IOException if an I/O error occurs
39     */
40    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
41            throws ServletException, IOException {
42        response.setContentType("text/html;charset=UTF-8");
43        try (PrintWriter out = response.getWriter()) {
44            /* TODO output your page here. You may use following sample code. */
45            out.println("<!DOCTYPE html>");
46            out.println("<html>");
47            out.println("<head>");
48            out.println("<title>Servlet CLServlet</title>");           
49            out.println("</head>");
50            out.println("<body>");
51            out.println("<h1>Servlet CLServlet at " + request.getContextPath() + "</h1>");
52            out.println("</body>");
53            out.println("</html>");
54        }
55    }
56
57    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
58    /**
59     * Handles the HTTP <code>GET</code> method.
60     *
61     * @param request servlet request
62     * @param response servlet response
63     * @throws ServletException if a servlet-specific error occurs
64     * @throws IOException if an I/O error occurs
65     */
66    @Override
67    protected void doGet(HttpServletRequest request, HttpServletResponse response)
68            throws ServletException, IOException {
69        //processRequest(request, response);
70        response.setContentType("application/json;charset=UTF-8");
71        response.setHeader("Access-Control-Allow-Origin", "*");
72        response.setHeader("Access-Control-Allow-Methods", "GET");
73        response.setHeader("Access-Control-Allow-Headers", request.getHeader("Access-Control-Request-Headers"));
74        response.setHeader("Access-Control-Max-Age", "-1");     
75        PrintWriter out = response.getWriter();
76        String ep = request.getParameter("ep");
77       
78        HttpSession session = request.getSession();
79        QueryPathGenerator qpg = (QueryPathGenerator)session.getAttribute("qpg");
80        SortedSet<String> sortedClasses = null;
81               
82        if ( qpg == null ){
83            qpg = new QueryPathGenerator();
84        }
85        if ( ep == null ){
86            JsonBuilderFactory jbfactory = Json.createBuilderFactory(null);
87
88            String[] eplist = qpg.getFactory().getEndpointURIList();
89            TreeSet<String> classes = new TreeSet<String>();
90            for ( int i = 0; i < eplist.length; i++ ){
91                try{
92                    qpg.setSPARQLendpoint(eplist[i]);
93                    SClass[] cls = qpg.getClasses(null);
94                    qpg.setClassLabels(cls); // HENKO TODO
95                    for (int j = 0; j < cls.length; j++ ){
96                        classes.add(qpg.getClassLabel(cls[j].getClassURI()).concat("\t")
97                                .concat(cls[j].getClassURI()).concat("\t")
98                                .concat(new Integer(cls[j].getNumOfInstances()).toString())
99                                .concat("\t").concat(eplist[i]));
100                    }
101                }catch(Exception e){
102                    e.printStackTrace();
103                    System.err.println(e);
104                }
105            }
106            JsonArray ja = getJsonArrayFromClasses(jbfactory, classes);
107            out.print(ja);
108            return;
109        }
110        String classURI = request.getParameter("class");
111        qpg.setSPARQLendpoint(ep);
112        SClass[] classes = null;
113        if ( classURI != null ){
114            qpg.setOWLClassGraph(classURI);
115            classes = qpg.getReachableClasses();
116        }else{
117            classes = qpg.getClasses(null);
118        }
119        sortedClasses = qpg.getSortedClasses(classes);
120       
121        JsonBuilderFactory jbfactory = Json.createBuilderFactory(null);
122        JsonArray ja = getJsonArrayFromSortedClasses(jbfactory, sortedClasses, ep);
123        out.print(ja);
124    }
125
126    /**
127     * Handles the HTTP <code>POST</code> method.
128     *
129     * @param request servlet request
130     * @param response servlet response
131     * @throws ServletException if a servlet-specific error occurs
132     * @throws IOException if an I/O error occurs
133     */
134    @Override
135    protected void doPost(HttpServletRequest request, HttpServletResponse response)
136            throws ServletException, IOException {
137        processRequest(request, response);
138    }
139
140    /**
141     * Returns a short description of the servlet.
142     *
143     * @return a String containing servlet description
144     */
145    @Override
146    public String getServletInfo() {
147        return "Short description";
148    }// </editor-fold>
149
150   
151    private JsonArray getJsonArrayFromSortedClasses(JsonBuilderFactory jbfactory,
152             SortedSet<String> sortedClasses, String ep){
153        JsonArrayBuilder jab = jbfactory.createArrayBuilder();
154        Iterator<String> cit = sortedClasses.iterator();
155        List<String> tmpclasses = new LinkedList<String>();
156        JsonObjectBuilder job = jbfactory.createObjectBuilder();
157        while( cit.hasNext() ){
158            String classinfo = cit.next();
159            String[] data = classinfo.split("\t");
160            if (data.length != 3 ){
161                System.out.println("data is wrong?");
162            }
163            if (data[0].matches("^[0-9]*$")){
164                tmpclasses.add(classinfo);
165            }else{
166                job.add("ep", ep);
167                job.add("uri", data[2]);
168                job.add("label", data[0]);
169                job.add("number", data[1]);
170                jab.add(job);
171            }
172        }
173        cit = tmpclasses.iterator();
174        while( cit.hasNext() ){
175            String classinfo = cit.next();
176            String[] data = classinfo.split("\t");
177            if (data.length != 3 ){
178                System.out.println("data is wrong?");
179            }
180            job.add("ep", ep);
181            job.add("uri", data[2]);
182            job.add("label", data[0]);
183            job.add("number", data[1]);
184            jab.add(job);
185        }       
186        JsonArray ja = jab.build();
187        return ja;
188    }
189
190    private JsonArray getJsonArrayFromClasses(JsonBuilderFactory jbfactory, TreeSet<String> cl){
191        JsonArrayBuilder jab = jbfactory.createArrayBuilder();
192        JsonObjectBuilder job = jbfactory.createObjectBuilder();
193        Iterator<String> cit = cl.iterator();
194       
195        while( cit.hasNext() ){
196            String classinfo = cit.next();
197            String[] data = classinfo.split("\t");
198            if (data.length != 4 ){
199                System.out.println("data is wrong?"); // KOKO
200            }else{
201                job.add("ep", data[3]);
202                job.add("uri", data[1]);
203                job.add("label", data[0]);
204                job.add("number", data[2]);
205                jab.add(job);
206            }
207        }
208        JsonArray ja = jab.build();
209        return ja;
210    }   
211}
212
Note: リポジトリブラウザについてのヘルプは TracBrowser を参照してください。