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

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

Improve error handling for calls to the Reo Tuhituhi API

File size: 3.9 KB
Line 
1package org.atea.nlptools.koreromaoriinterface;
2
3import java.io.FileInputStream;
4import java.io.IOException;
5import java.io.PrintWriter;
6import java.lang.reflect.Type;
7import java.util.ArrayList;
8import java.util.List;
9import java.util.Properties;
10
11import javax.servlet.ServletException;
12import javax.servlet.annotation.MultipartConfig;
13import javax.servlet.http.HttpServlet;
14import javax.servlet.http.HttpServletRequest;
15import javax.servlet.http.HttpServletResponse;
16import javax.servlet.http.Part;
17
18import com.google.gson.FieldNamingPolicy;
19import com.google.gson.Gson;
20import com.google.gson.GsonBuilder;
21import com.google.gson.reflect.TypeToken;
22
23import org.apache.logging.log4j.LogManager;
24import org.apache.logging.log4j.Logger;
25import org.atea.nlptools.koreromaoriinterface.exceptions.ReoTuhituhiException;
26import org.atea.nlptools.koreromaoriinterface.models.AudioFilePart;
27import org.atea.nlptools.koreromaoriinterface.models.MyTranscriptionResponse;
28import org.atea.nlptools.koreromaoriinterface.models.TranscriptionResult;
29import org.atea.nlptools.koreromaoriinterface.services.ReoTuhituhiApiService;
30
31@MultipartConfig
32public class TranscriptionServlet extends HttpServlet
33{
34 private static final long serialVersionUID = 1L;
35
36 private static final Logger logger = LogManager.getLogger(TranscriptionServlet.class);
37 private static final Type transcriptionListType = new TypeToken<List<TranscriptionResult>>(){}.getType();
38
39 private final Gson jsonSerialiser;
40
41 private ReoTuhituhiApiService transcriptionService;
42
43 public TranscriptionServlet()
44 {
45 jsonSerialiser = new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES).create();
46 }
47
48 @Override
49 public void init()
50 {
51 Properties prop = new Properties();
52
53 try {
54 FileInputStream fis = new FileInputStream("../webapps/gs3-koreromaori/config.properties");
55 prop.load(fis);
56 fis.close();
57 } catch (IOException e) {
58 e.printStackTrace();
59 }
60
61 String apiEndpoint = prop.getProperty("tuhituhi.api.endpoint");
62 String apiKey = prop.getProperty("tuhituhi.api.key");
63
64 this.transcriptionService = new ReoTuhituhiApiService(jsonSerialiser, apiEndpoint, apiKey);
65 }
66
67 @Override
68 protected void doGet(HttpServletRequest request, HttpServletResponse response)
69 throws IOException
70 {
71 response.sendError(403);
72 }
73
74 @Override
75 protected void doPost(HttpServletRequest request, HttpServletResponse response)
76 throws ServletException, IOException
77 {
78 logger.trace("POST request received.");
79
80 response.setContentType("application/json; charset=UTF-8");
81 PrintWriter writer = response.getWriter();
82
83 String audioFileKeysParameter = request.getParameter("audioFileKeys");
84 if (audioFileKeysParameter == null) {
85 response.sendError(400, "Form data was incorrect: missing audioFileKeys part.");
86 return;
87 }
88 String[] audioFileKeys = audioFileKeysParameter.split("\\|");
89
90 // Create our own representation of each part
91 ArrayList<AudioFilePart> audioFileParts = new ArrayList<AudioFilePart>(audioFileKeys.length);
92 for (String audioFileKey : audioFileKeys)
93 {
94 Part p = request.getPart(audioFileKey);
95 AudioFilePart audioFilePart = AudioFilePart.fromPart(p);
96 audioFileParts.add(audioFilePart);
97 }
98
99 try
100 {
101 List<AudioFilePart> results = transcriptionService.getTranscriptions(audioFileParts);
102
103 List<MyTranscriptionResponse> responses = new ArrayList<MyTranscriptionResponse>(results.size());
104 for (AudioFilePart result : results) {
105 responses.add(MyTranscriptionResponse.FromTranscriptionResult(result.getTranscriptionResult(), result.fileName));
106 }
107
108 String json = jsonSerialiser.toJson(responses, transcriptionListType);
109 writer.append(json);
110 }
111 catch (ReoTuhituhiException rtex)
112 {
113 response.sendError(502, "Call to the Reo Tuhituhi API failed.");
114 }
115 catch (Exception ex)
116 {
117 response.sendError(500, "Failed to process the request.");
118 logger.error("Failed to complete API call", ex);
119 }
120 }
121}
Note: See TracBrowser for help on using the repository browser.