19 package org.sleuthkit.autopsy.texttranslation.translators;
21 import com.google.auth.Credentials;
22 import com.google.auth.oauth2.ServiceAccountCredentials;
23 import com.google.cloud.translate.Language;
24 import com.google.cloud.translate.Translate;
25 import com.google.cloud.translate.TranslateOptions;
26 import com.google.cloud.translate.Translation;
27 import java.awt.event.ItemListener;
29 import java.io.FileInputStream;
30 import java.io.FileNotFoundException;
31 import java.io.IOException;
32 import java.io.InputStream;
33 import java.util.ArrayList;
34 import java.util.List;
35 import java.util.logging.Level;
37 import javax.swing.JFileChooser;
38 import javax.swing.filechooser.FileNameExtensionFilter;
39 import org.apache.commons.lang3.StringUtils;
40 import org.openide.util.NbBundle.Messages;
59 targetLanguageCode = languageCode;
70 @Messages({
"GoogleTranslatorSettingsPanel.errorMessage.fileNotFound=Credentials file not found, please set the location to be a valid JSON credentials file.",
71 "GoogleTranslatorSettingsPanel.errorMessage.unableToReadCredentials=Unable to read credentials from credentials file, please set the location to be a valid JSON credentials file.",
72 "GoogleTranslatorSettingsPanel.errorMessage.unableToMakeCredentials=Unable to construct credentials object from credentials file, please set the location to be a valid JSON credentials file.",
73 "GoogleTranslatorSettingsPanel.errorMessage.unknownFailureGetting=Failure getting list of supported languages with current credentials file.",})
77 InputStream credentialStream;
80 }
catch (FileNotFoundException ignored) {
81 warningLabel.setText(Bundle.GoogleTranslatorSettingsPanel_errorMessage_fileNotFound());
86 creds = ServiceAccountCredentials.fromStream(credentialStream);
87 }
catch (IOException ignored) {
88 warningLabel.setText(Bundle.GoogleTranslatorSettingsPanel_errorMessage_unableToMakeCredentials());
92 warningLabel.setText(Bundle.GoogleTranslatorSettingsPanel_errorMessage_unableToReadCredentials());
93 logger.log(Level.WARNING,
"Credentials were not successfully made, no translations will be available from the GoogleTranslator");
96 TranslateOptions.Builder builder = TranslateOptions.newBuilder();
97 builder.setCredentials(creds);
98 builder.setTargetLanguage(targetLanguageCode);
100 return builder.build().getService();
102 }
catch (Throwable throwable) {
104 warningLabel.setText(Bundle.GoogleTranslatorSettingsPanel_errorMessage_unknownFailureGetting());
105 logger.log(Level.WARNING,
"Throwable caught while getting list of supported languages", throwable);
113 @Messages({
"GoogleTranslatorSettingsPanel.errorMessage.noFileSelected=A JSON file must be selected to provide your credentials for Google Translate.",
114 "GoogleTranslatorSettingsPanel.errorMessage.unknownFailurePopulating=Failure populating list of supported languages with current credentials file."})
119 List<Language> listSupportedLanguages;
121 if (tempService != null) {
122 listSupportedLanguages = tempService.listSupportedLanguages();
124 listSupportedLanguages =
new ArrayList<>();
127 if (!listSupportedLanguages.isEmpty()) {
128 listSupportedLanguages.forEach((lang) -> {
139 warningLabel.setText(Bundle.GoogleTranslatorSettingsPanel_errorMessage_noFileSelected());
142 }
catch (Throwable throwable) {
143 warningLabel.setText(Bundle.GoogleTranslatorSettingsPanel_errorMessage_unknownFailurePopulating());
144 logger.log(Level.WARNING,
"Throwable caught while populating list of supported languages", throwable);
184 @SuppressWarnings(
"unchecked")
206 public void actionPerformed(java.awt.event.ActionEvent evt) {
212 browseButton.addActionListener(
new java.awt.event.ActionListener() {
213 public void actionPerformed(java.awt.event.ActionEvent evt) {
222 warningLabel.setForeground(
new java.awt.Color(255, 0, 0));
238 testButton.addActionListener(
new java.awt.event.ActionListener() {
239 public void actionPerformed(java.awt.event.ActionEvent evt) {
245 instructionsScrollPane.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
256 javax.swing.GroupLayout layout =
new javax.swing.GroupLayout(
this);
257 this.setLayout(layout);
258 layout.setHorizontalGroup(
259 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
260 .addGroup(layout.createSequentialGroup()
262 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
263 .addGroup(layout.createSequentialGroup()
266 .addGroup(layout.createSequentialGroup()
267 .addComponent(
warningLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 551, javax.swing.GroupLayout.PREFERRED_SIZE)
268 .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
269 .addGroup(layout.createSequentialGroup()
270 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING,
false)
271 .addComponent(
testButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
272 .addComponent(
credentialsLabel, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
273 .addComponent(
targetLanguageLabel, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
274 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
275 .addGroup(layout.createSequentialGroup()
276 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
277 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
278 .addGroup(layout.createSequentialGroup()
280 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
283 .addGroup(layout.createSequentialGroup()
284 .addComponent(
targetLanguageComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 317, javax.swing.GroupLayout.PREFERRED_SIZE)
285 .addGap(0, 0, Short.MAX_VALUE))))
286 .addGroup(layout.createSequentialGroup()
289 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
290 .addComponent(
testUntranslatedTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 140, javax.swing.GroupLayout.PREFERRED_SIZE)
291 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
293 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
294 .addComponent(
testResultValueLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))))
296 layout.setVerticalGroup(
297 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
298 .addGroup(layout.createSequentialGroup()
300 .addComponent(
instructionsScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
301 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
302 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
304 .addComponent(
credentialsPathField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
306 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
307 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
309 .addComponent(
targetLanguageComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
310 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
311 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
313 .addComponent(
testUntranslatedTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
317 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
318 .addComponent(
warningLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 18, javax.swing.GroupLayout.PREFERRED_SIZE)
319 .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
323 @Messages({
"GoogleTranslatorSettingsPanel.json.description=JSON Files",
324 "GoogleTranslatorSettingsPanel.fileChooser.confirmButton=Select"})
326 JFileChooser fileChooser =
new JFileChooser();
327 fileChooser.setDragEnabled(
false);
332 fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
333 fileChooser.setMultiSelectionEnabled(
false);
334 fileChooser.setFileFilter(
new FileNameExtensionFilter(Bundle.GoogleTranslatorSettingsPanel_json_description(),
JSON_EXTENSION));
335 int dialogResult = fileChooser.showDialog(
this, Bundle.GoogleTranslatorSettingsPanel_fileChooser_confirmButton());
336 if (dialogResult == JFileChooser.APPROVE_OPTION) {
340 firePropertyChange(
"SettingChanged",
true,
false);
344 @Messages({
"GoogleTranslatorSettingsPanel.errorMessage.translationFailure=Translation failure with specified credentials"})
348 if (tempTranslate != null) {
353 }
catch (Exception ex) {
354 warningLabel.setText(Bundle.GoogleTranslatorSettingsPanel_errorMessage_translationFailure());
355 logger.log(Level.WARNING, Bundle.GoogleTranslatorSettingsPanel_errorMessage_translationFailure(), ex);
385 String getTargetLanguageCode() {
394 String getCredentialsPath() {
407 if (!StringUtils.isBlank(selectedCode) && !selectedCode.equals(targetLanguageCode)) {
408 targetLanguageCode = selectedCode;
411 firePropertyChange(
"SettingChanged",
true,
false);
javax.swing.JTextArea instructionsTextArea
String targetLanguageCode
void populateTargetLanguageComboBox()
javax.swing.JLabel testResultValueLabel
javax.swing.JTextField testUntranslatedTextField
javax.swing.JButton browseButton
final ItemListener listener
javax.swing.JLabel targetLanguageLabel
void browseButtonActionPerformed(java.awt.event.ActionEvent evt)
Translate getTemporaryTranslationService()
GoogleTranslatorSettingsPanel(String credentialsPath, String languageCode)
javax.swing.JScrollPane instructionsScrollPane
javax.swing.JButton testButton
javax.swing.JComboBox< org.sleuthkit.autopsy.texttranslation.translators.LanguageWrapper > targetLanguageComboBox
void selectLanguageByCode(String code)
void enableControls(boolean enabled)
void credentialsPathFieldActionPerformed(java.awt.event.ActionEvent evt)
static final long serialVersionUID
javax.swing.JLabel warningLabel
static final String DEFUALT_TEST_STRING
static final Logger logger
javax.swing.JTextField credentialsPathField
javax.swing.JLabel credentialsLabel
javax.swing.JLabel untranslatedLabel
void testButtonActionPerformed(java.awt.event.ActionEvent evt)
synchronized static Logger getLogger(String name)
void itemStateChanged(java.awt.event.ItemEvent evt)
javax.swing.JLabel resultLabel
static final String JSON_EXTENSION