19 package org.sleuthkit.autopsy.texttranslation.translators;
 
   21 import com.google.gson.JsonArray;
 
   22 import com.google.gson.JsonObject;
 
   23 import com.google.gson.JsonParser;
 
   25 import java.io.IOException;
 
   26 import javax.swing.JPanel;
 
   27 import okhttp3.MediaType;
 
   28 import okhttp3.OkHttpClient;
 
   29 import okhttp3.Request;
 
   30 import okhttp3.RequestBody;
 
   31 import okhttp3.Response;
 
   32 import org.openide.util.NbBundle.Messages;
 
   33 import org.openide.util.lookup.ServiceProvider;
 
   49     private static final String BASE_URL = 
"https://api.cognitive.microsofttranslator.com/translate?api-version=3.0&to=";
 
   50     private static final int MAX_STRING_LENGTH = 5000;
 
   54     private final OkHttpClient CLIENT = 
new OkHttpClient();
 
   72     static String getTranlatorUrl(String languageCode) {
 
   73         return BASE_URL + languageCode;
 
   88         MediaType mediaType = MediaType.parse(
"application/json");
 
   90         JsonArray jsonArray = 
new JsonArray();
 
   91         JsonObject jsonObject = 
new JsonObject();
 
   92         jsonObject.addProperty(
"Text", 
string);
 
   93         jsonArray.add(jsonObject);
 
   94         String bodyString = jsonArray.toString();
 
   96         RequestBody body = RequestBody.create(mediaType,
 
   98         Request request = 
new Request.Builder()
 
   99                 .url(getTranlatorUrl(settings.getTargetLanguageCode())).post(body)
 
  100                 .addHeader(
"Ocp-Apim-Subscription-Key", settings.getAuthenticationKey())
 
  101                 .addHeader(
"Content-type", 
"application/json").build();
 
  102         Response response = CLIENT.newCall(request).execute();
 
  103         return response.body().string();
 
  108         if (settings.getAuthenticationKey() == null || settings.getAuthenticationKey().isEmpty()) {
 
  109             throw new TranslationException(
"Bing Translator has not been configured, authentication key needs to be specified");
 
  111         String toTranslate = 
string.trim();
 
  119         if (toTranslate.length() > MAX_STRING_LENGTH) {
 
  120             toTranslate = toTranslate.substring(0, MAX_STRING_LENGTH);
 
  124             String response = postTranslationRequest(toTranslate);
 
  125             return parseJSONResponse(response);
 
  127             throw new TranslationException(
"Exception while attempting to translate using BingTranslator", ex);
 
  131     @Messages({
"BingTranslator.name.text=Bing Translator"})
 
  134         return Bundle.BingTranslator_name_text();
 
  139     public JPanel getSettingsPanel() {
 
  140         if(settingsPanel == null) {
 
  143         return settingsPanel;
 
  148         settings.setAuthenticationKey(settingsPanel.getAuthenticationKey());
 
  149         settings.setTargetLanguageCode(settingsPanel.getTargetLanguageCode());
 
  150         settings.saveSettings();
 
  170             JsonArray responses = JsonParser.parseString(json_text).getAsJsonArray();
 
  172             JsonObject response0 = responses.get(0).getAsJsonObject();
 
  173             JsonArray translations = response0.getAsJsonArray(
"translations");
 
  174             JsonObject translation0 = translations.get(0).getAsJsonObject();
 
  175             return translation0.get(
"text").getAsString();
 
  176         } 
catch (IllegalStateException | ClassCastException | NullPointerException | IndexOutOfBoundsException e) {
 
  183         return MAX_STRING_LENGTH;
 
BingTranslatorSettingsPanel settingsPanel
String translate(String string)
String postTranslationRequest(String string)
String parseJSONResponse(String json_text)