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

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

Implement support for returning proper audio file name

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