source: gs3-extensions/atea-nlp-tools/trunk/src/koreromaori-proxy/src/main/java/org/atea/nlptools/koreromaoriinterface/TranscriptionServlet.java@ 35239

Last change on this file since 35239 was 35239, checked in by davidb, 3 years ago

Adding proxy servlet for the Korero Maori Reo Tuhituhi API (initail commit)

File size: 3.1 KB
Line 
1package org.atea.nlptools.koreromaoriinterface;
2
3import java.io.IOException;
4import java.io.InputStream;
5import java.io.PrintWriter;
6import java.lang.reflect.Type;
7import java.util.ArrayList;
8import java.util.List;
9
10import javax.servlet.ServletException;
11import javax.servlet.annotation.MultipartConfig;
12import javax.servlet.http.HttpServlet;
13import javax.servlet.http.HttpServletRequest;
14import javax.servlet.http.HttpServletResponse;
15
16import com.google.gson.FieldNamingPolicy;
17import com.google.gson.Gson;
18import com.google.gson.GsonBuilder;
19import com.google.gson.reflect.TypeToken;
20
21import org.apache.logging.log4j.LogManager;
22import org.apache.logging.log4j.Logger;
23import org.atea.nlptools.koreromaoriinterface.models.MyTranscriptionResponse;
24import org.atea.nlptools.koreromaoriinterface.models.TranscriptionResult;
25import org.atea.nlptools.koreromaoriinterface.services.ReoTuhituhiApiService;
26
27@MultipartConfig
28public class TranscriptionServlet extends HttpServlet
29{
30 private static final long serialVersionUID = 1L;
31
32 private static final Logger logger = LogManager.getLogger(TranscriptionServlet.class);
33 private static final Type transcriptionListType = new TypeToken<List<TranscriptionResult>>(){}.getType();
34
35 private final Gson jsonSerialiser;
36 private final ReoTuhituhiApiService transcriptionService;
37
38 public TranscriptionServlet()
39 {
40 jsonSerialiser = new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES).create();
41 this.transcriptionService = new ReoTuhituhiApiService(jsonSerialiser);
42 }
43
44 @Override
45 protected void doGet(HttpServletRequest request, HttpServletResponse response)
46 throws IOException
47 {
48 response.sendError(403);
49 }
50
51 @Override
52 protected void doPost(HttpServletRequest request, HttpServletResponse response)
53 throws ServletException, IOException
54 {
55 logger.trace("POST request received.");
56
57 response.setContentType("application/json; charset=UTF-8");
58 PrintWriter writer = response.getWriter();
59
60 String audioFileKeysParameter = request.getParameter("audioFileKeys");
61 if (audioFileKeysParameter == null) {
62 response.sendError(400, "Form data was incorrect: missing audioFileKeys part.");
63 return;
64 }
65 String[] audioFileKeys = audioFileKeysParameter.split("\\|");
66
67 ArrayList<InputStream> audioFileStreams = new ArrayList<InputStream>(audioFileKeys.length);
68 for (String audioFileKey : audioFileKeys)
69 {
70 audioFileStreams.add(request.getPart(audioFileKey).getInputStream());
71 }
72
73 try
74 {
75 List<TranscriptionResult> results = transcriptionService.GetTranscriptions(audioFileStreams);
76 List<MyTranscriptionResponse> responses = new ArrayList<MyTranscriptionResponse>(results.size());
77
78 for (TranscriptionResult result : results) {
79 responses.add(MyTranscriptionResponse.FromTranscriptionResult(result, "placeholder")); // TODO: Insert correct file name
80 }
81
82 String json = jsonSerialiser.toJson(responses, transcriptionListType);
83 writer.append(json);
84 }
85 catch (Exception ex)
86 {
87 response.sendError(500, "Call to the Reo Tuhituhi API failed." + ex);
88 logger.error("Failed to complete API call", ex);
89 }
90 }
91}
Note: See TracBrowser for help on using the repository browser.