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);
 
  257         javax.swing.GroupLayout layout = 
new javax.swing.GroupLayout(
this);
 
  258         this.setLayout(layout);
 
  259         layout.setHorizontalGroup(
 
  260             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 
  261             .addGroup(layout.createSequentialGroup()
 
  263                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 
  264                     .addGroup(layout.createSequentialGroup()
 
  267                     .addGroup(layout.createSequentialGroup()
 
  268                         .addComponent(
warningLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 551, javax.swing.GroupLayout.PREFERRED_SIZE)
 
  269                         .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
 
  270                     .addGroup(layout.createSequentialGroup()
 
  271                         .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, 
false)
 
  272                             .addComponent(
testButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
 
  273                             .addComponent(
credentialsLabel, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
 
  274                             .addComponent(
targetLanguageLabel, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
 
  275                         .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 
  276                             .addGroup(layout.createSequentialGroup()
 
  277                                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 
  278                                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 
  279                                     .addGroup(layout.createSequentialGroup()
 
  281                                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 
  284                                     .addGroup(layout.createSequentialGroup()
 
  285                                         .addComponent(
targetLanguageComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 317, javax.swing.GroupLayout.PREFERRED_SIZE)
 
  286                                         .addGap(0, 0, Short.MAX_VALUE))))
 
  287                             .addGroup(layout.createSequentialGroup()
 
  290                                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 
  291                                 .addComponent(
testUntranslatedTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 140, javax.swing.GroupLayout.PREFERRED_SIZE)
 
  292                                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 
  294                                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 
  295                                 .addComponent(
testResultValueLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))))
 
  297         layout.setVerticalGroup(
 
  298             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 
  299             .addGroup(layout.createSequentialGroup()
 
  301                 .addComponent(
instructionsScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
 
  302                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
 
  303                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
 
  305                     .addComponent(
credentialsPathField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
 
  307                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
 
  308                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
 
  310                     .addComponent(
targetLanguageComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
 
  311                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
 
  312                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
 
  314                     .addComponent(
testUntranslatedTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
 
  318                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
 
  319                 .addComponent(
warningLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 18, javax.swing.GroupLayout.PREFERRED_SIZE)
 
  320                 .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
 
  324     @Messages({
"GoogleTranslatorSettingsPanel.json.description=JSON Files",
 
  325         "GoogleTranslatorSettingsPanel.fileChooser.confirmButton=Select"})
 
  327         JFileChooser fileChooser = 
new JFileChooser();
 
  328         fileChooser.setDragEnabled(
false);
 
  333         fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
 
  334         fileChooser.setMultiSelectionEnabled(
false);
 
  335         fileChooser.setFileFilter(
new FileNameExtensionFilter(Bundle.GoogleTranslatorSettingsPanel_json_description(), 
JSON_EXTENSION));
 
  336         int dialogResult = fileChooser.showDialog(
this, Bundle.GoogleTranslatorSettingsPanel_fileChooser_confirmButton());
 
  337         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;
 
  410                 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