Autopsy  4.7.0
Graphical digital forensics platform for The Sleuth Kit and other tools.
DataContentViewerString.java
Go to the documentation of this file.
1 /*
2  * Autopsy Forensic Browser
3  *
4  * Copyright 2011-2018 Basis Technology Corp.
5  * Contact: carrier <at> sleuthkit <dot> org
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  */
19 package org.sleuthkit.autopsy.corecomponents;
20 
21 import java.awt.*;
22 import java.awt.event.ActionEvent;
23 import java.awt.event.ActionListener;
24 import java.util.List;
25 import java.util.logging.Level;
26 
27 import org.openide.util.NbBundle;
29 import javax.swing.JMenuItem;
30 import javax.swing.JOptionPane;
31 import org.openide.nodes.Node;
32 import org.openide.util.lookup.ServiceProvider;
38 import org.sleuthkit.datamodel.Content;
39 import org.sleuthkit.datamodel.TskException;
40 
44 @ServiceProvider(service = DataContentViewer.class, position = 2)
45 @SuppressWarnings("PMD.SingularField") // UI widgets cause lots of false positives
46 public class DataContentViewerString extends javax.swing.JPanel implements DataContentViewer {
47 
48  private static long currentOffset = 0;
49  private static final long PAGE_LENGTH = 16384;
50  private final byte[] data = new byte[(int) PAGE_LENGTH];
51  private static int currentPage = 1;
52  private Content dataSource;
53  //string extract utility
54  private final StringExtract stringExtract = new StringExtract();
55  private static final Logger logger = Logger.getLogger(DataContentViewerString.class.getName());
56 
61  initComponents();
62  customizeComponents();
63  this.resetComponent();
64  logger.log(Level.INFO, "Created StringView instance: {0}", this); //NON-NLS
65  }
66 
67  private void customizeComponents() {
68  outputViewPane.setComponentPopupMenu(rightClickMenu);
69  ActionListener actList = new ActionListener() {
70  @Override
71  public void actionPerformed(ActionEvent e) {
72  JMenuItem jmi = (JMenuItem) e.getSource();
73  if (jmi.equals(copyMenuItem)) {
74  outputViewPane.copy();
75  } else if (jmi.equals(selectAllMenuItem)) {
76  outputViewPane.selectAll();
77  }
78  }
79  };
80  copyMenuItem.addActionListener(actList);
81  selectAllMenuItem.addActionListener(actList);
82 
83  List<SCRIPT> supportedScripts = StringExtract.getSupportedScripts();
84  for (SCRIPT s : supportedScripts) {
85  languageCombo.addItem(s);
86  }
87 
88  }
89 
95  @SuppressWarnings("unchecked")
96  // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
97  private void initComponents() {
98 
99  rightClickMenu = new javax.swing.JPopupMenu();
100  copyMenuItem = new javax.swing.JMenuItem();
101  selectAllMenuItem = new javax.swing.JMenuItem();
102  jScrollPane1 = new javax.swing.JScrollPane();
103  outputViewPane = new javax.swing.JTextPane();
104  jScrollPane2 = new javax.swing.JScrollPane();
105  jPanel2 = new javax.swing.JPanel();
106  totalPageLabel = new javax.swing.JLabel();
107  ofLabel = new javax.swing.JLabel();
108  currentPageLabel = new javax.swing.JLabel();
109  pageLabel = new javax.swing.JLabel();
110  nextPageButton = new javax.swing.JButton();
111  pageLabel2 = new javax.swing.JLabel();
112  prevPageButton = new javax.swing.JButton();
113  goToPageLabel = new javax.swing.JLabel();
114  goToPageTextField = new javax.swing.JTextField();
115  languageCombo = new javax.swing.JComboBox<>();
116  languageLabel = new javax.swing.JLabel();
117 
118  copyMenuItem.setText(org.openide.util.NbBundle.getMessage(DataContentViewerString.class, "DataContentViewerString.copyMenuItem.text")); // NOI18N
119  rightClickMenu.add(copyMenuItem);
120 
121  selectAllMenuItem.setText(org.openide.util.NbBundle.getMessage(DataContentViewerString.class, "DataContentViewerString.selectAllMenuItem.text")); // NOI18N
122  rightClickMenu.add(selectAllMenuItem);
123 
124  setMinimumSize(new java.awt.Dimension(5, 5));
125  setPreferredSize(new java.awt.Dimension(100, 144));
126 
127  jScrollPane1.setPreferredSize(new java.awt.Dimension(640, 402));
128 
129  outputViewPane.setEditable(false);
130  outputViewPane.setFont(new java.awt.Font("Courier New", 0, 11)); // NOI18N
131  outputViewPane.setPreferredSize(new java.awt.Dimension(638, 400));
132  jScrollPane1.setViewportView(outputViewPane);
133 
134  jScrollPane2.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
135  jScrollPane2.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);
136 
137  totalPageLabel.setText(org.openide.util.NbBundle.getMessage(DataContentViewerString.class, "DataContentViewerString.totalPageLabel.text_1")); // NOI18N
138 
139  ofLabel.setText(org.openide.util.NbBundle.getMessage(DataContentViewerString.class, "DataContentViewerString.ofLabel.text_1")); // NOI18N
140 
141  currentPageLabel.setText(org.openide.util.NbBundle.getMessage(DataContentViewerString.class, "DataContentViewerString.currentPageLabel.text_1")); // NOI18N
142  currentPageLabel.setMaximumSize(new java.awt.Dimension(18, 14));
143  currentPageLabel.setPreferredSize(new java.awt.Dimension(18, 14));
144 
145  pageLabel.setText(org.openide.util.NbBundle.getMessage(DataContentViewerString.class, "DataContentViewerString.pageLabel.text_1")); // NOI18N
146  pageLabel.setMaximumSize(new java.awt.Dimension(33, 14));
147  pageLabel.setMinimumSize(new java.awt.Dimension(33, 14));
148 
149  nextPageButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/corecomponents/btn_step_forward.png"))); // NOI18N
150  nextPageButton.setText(org.openide.util.NbBundle.getMessage(DataContentViewerString.class, "DataContentViewerString.nextPageButton.text")); // NOI18N
151  nextPageButton.setBorderPainted(false);
152  nextPageButton.setContentAreaFilled(false);
153  nextPageButton.setDisabledIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/corecomponents/btn_step_forward_disabled.png"))); // NOI18N
154  nextPageButton.setMargin(new java.awt.Insets(2, 0, 2, 0));
155  nextPageButton.setPreferredSize(new java.awt.Dimension(55, 23));
156  nextPageButton.setRolloverIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/corecomponents/btn_step_forward_hover.png"))); // NOI18N
157  nextPageButton.addActionListener(new java.awt.event.ActionListener() {
158  public void actionPerformed(java.awt.event.ActionEvent evt) {
159  nextPageButtonActionPerformed(evt);
160  }
161  });
162 
163  pageLabel2.setText(org.openide.util.NbBundle.getMessage(DataContentViewerString.class, "DataContentViewerString.pageLabel2.text")); // NOI18N
164  pageLabel2.setMaximumSize(new java.awt.Dimension(29, 14));
165  pageLabel2.setMinimumSize(new java.awt.Dimension(29, 14));
166 
167  prevPageButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/corecomponents/btn_step_back.png"))); // NOI18N
168  prevPageButton.setText(org.openide.util.NbBundle.getMessage(DataContentViewerString.class, "DataContentViewerString.prevPageButton.text")); // NOI18N
169  prevPageButton.setBorderPainted(false);
170  prevPageButton.setContentAreaFilled(false);
171  prevPageButton.setDisabledIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/corecomponents/btn_step_back_disabled.png"))); // NOI18N
172  prevPageButton.setMargin(new java.awt.Insets(2, 0, 2, 0));
173  prevPageButton.setPreferredSize(new java.awt.Dimension(55, 23));
174  prevPageButton.setRolloverIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/corecomponents/btn_step_back_hover.png"))); // NOI18N
175  prevPageButton.addActionListener(new java.awt.event.ActionListener() {
176  public void actionPerformed(java.awt.event.ActionEvent evt) {
177  prevPageButtonActionPerformed(evt);
178  }
179  });
180 
181  goToPageLabel.setText(org.openide.util.NbBundle.getMessage(DataContentViewerString.class, "DataContentViewerString.goToPageLabel.text")); // NOI18N
182 
183  goToPageTextField.setText(org.openide.util.NbBundle.getMessage(DataContentViewerString.class, "DataContentViewerString.goToPageTextField.text")); // NOI18N
184  goToPageTextField.addActionListener(new java.awt.event.ActionListener() {
185  public void actionPerformed(java.awt.event.ActionEvent evt) {
186  goToPageTextFieldActionPerformed(evt);
187  }
188  });
189 
190  languageCombo.setToolTipText(org.openide.util.NbBundle.getMessage(DataContentViewerString.class, "DataContentViewerString.languageCombo.toolTipText")); // NOI18N
191  languageCombo.addActionListener(new java.awt.event.ActionListener() {
192  public void actionPerformed(java.awt.event.ActionEvent evt) {
193  languageComboActionPerformed(evt);
194  }
195  });
196 
197  languageLabel.setText(org.openide.util.NbBundle.getMessage(DataContentViewerString.class, "DataContentViewerString.languageLabel.text")); // NOI18N
198  languageLabel.setToolTipText(org.openide.util.NbBundle.getMessage(DataContentViewerString.class, "DataContentViewerString.languageLabel.toolTipText")); // NOI18N
199 
200  javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
201  jPanel2.setLayout(jPanel2Layout);
202  jPanel2Layout.setHorizontalGroup(
203  jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
204  .addGroup(jPanel2Layout.createSequentialGroup()
205  .addContainerGap()
206  .addComponent(pageLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
207  .addGap(18, 18, 18)
208  .addComponent(currentPageLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
209  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
210  .addComponent(ofLabel)
211  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
212  .addComponent(totalPageLabel)
213  .addGap(50, 50, 50)
214  .addComponent(pageLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
215  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
216  .addComponent(prevPageButton, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
217  .addGap(0, 0, 0)
218  .addComponent(nextPageButton, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
219  .addGap(18, 18, 18)
220  .addComponent(goToPageLabel)
221  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
222  .addComponent(goToPageTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 79, javax.swing.GroupLayout.PREFERRED_SIZE)
223  .addGap(33, 33, 33)
224  .addComponent(languageLabel)
225  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
226  .addComponent(languageCombo, javax.swing.GroupLayout.PREFERRED_SIZE, 155, javax.swing.GroupLayout.PREFERRED_SIZE)
227  .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
228  );
229  jPanel2Layout.setVerticalGroup(
230  jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
231  .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
232  .addComponent(pageLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
233  .addComponent(currentPageLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
234  .addComponent(ofLabel)
235  .addComponent(totalPageLabel))
236  .addComponent(pageLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
237  .addComponent(nextPageButton, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
238  .addComponent(prevPageButton, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
239  .addComponent(goToPageLabel)
240  .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
241  .addComponent(goToPageTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
242  .addComponent(languageCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
243  .addComponent(languageLabel))
244  );
245 
246  jScrollPane2.setViewportView(jPanel2);
247 
248  javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
249  this.setLayout(layout);
250  layout.setHorizontalGroup(
251  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
252  .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
253  .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 100, Short.MAX_VALUE)
254  );
255  layout.setVerticalGroup(
256  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
257  .addGroup(layout.createSequentialGroup()
258  .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
259  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
260  .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 25, Short.MAX_VALUE))
261  );
262  }// </editor-fold>//GEN-END:initComponents
263 
264  private void prevPageButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_prevPageButtonActionPerformed
265  //@@@ this is part of the code dealing with the data viewer. could be copied/removed to implement the scrollbar
266  currentOffset -= PAGE_LENGTH;
267  currentPage = currentPage - 1;
268  currentPageLabel.setText(Integer.toString(currentPage));
269  setDataView(dataSource, currentOffset);
270  }//GEN-LAST:event_prevPageButtonActionPerformed
271 
272  private void nextPageButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_nextPageButtonActionPerformed
273  //@@@ this is part of the code dealing with the data viewer. could be copied/removed to implement the scrollbar
274  currentOffset += PAGE_LENGTH;
275  currentPage = currentPage + 1;
276  currentPageLabel.setText(Integer.toString(currentPage));
277  setDataView(dataSource, currentOffset);
278  }//GEN-LAST:event_nextPageButtonActionPerformed
279 
280  private void goToPageTextFieldActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_goToPageTextFieldActionPerformed
281  String pageNumberStr = goToPageTextField.getText();
282  int pageNumber;
283  int maxPage = Math.round((dataSource.getSize() - 1) / PAGE_LENGTH) + 1;
284  try {
285  pageNumber = Integer.parseInt(pageNumberStr);
286  } catch (NumberFormatException ex) {
287  pageNumber = maxPage + 1;
288  }
289  if (pageNumber > maxPage || pageNumber < 1) {
290  JOptionPane.showMessageDialog(this,
291  NbBundle.getMessage(this.getClass(),
292  "DataContentViewerString.goToPageTextField.msgDlg",
293  maxPage),
294  NbBundle.getMessage(this.getClass(),
295  "DataContentViewerString.goToPageTextField.err"),
296  JOptionPane.WARNING_MESSAGE);
297  return;
298  }
299  currentOffset = (pageNumber - 1) * PAGE_LENGTH;
300  currentPage = pageNumber;
301  currentPageLabel.setText(Integer.toString(currentPage));
302  setDataView(dataSource, currentOffset);
303  }//GEN-LAST:event_goToPageTextFieldActionPerformed
304 
305  private void languageComboActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_languageComboActionPerformed
306 
307  if (dataSource != null) {
308  setDataView(dataSource, currentOffset);
309  }
310  }//GEN-LAST:event_languageComboActionPerformed
311 
312  // Variables declaration - do not modify//GEN-BEGIN:variables
313  private javax.swing.JMenuItem copyMenuItem;
314  private javax.swing.JLabel currentPageLabel;
315  private javax.swing.JLabel goToPageLabel;
316  private javax.swing.JTextField goToPageTextField;
317  private javax.swing.JPanel jPanel2;
318  private javax.swing.JScrollPane jScrollPane1;
319  private javax.swing.JScrollPane jScrollPane2;
320  private javax.swing.JComboBox<SCRIPT> languageCombo;
321  private javax.swing.JLabel languageLabel;
322  private javax.swing.JButton nextPageButton;
323  private javax.swing.JLabel ofLabel;
324  private javax.swing.JTextPane outputViewPane;
325  private javax.swing.JLabel pageLabel;
326  private javax.swing.JLabel pageLabel2;
327  private javax.swing.JButton prevPageButton;
328  private javax.swing.JPopupMenu rightClickMenu;
329  private javax.swing.JMenuItem selectAllMenuItem;
330  private javax.swing.JLabel totalPageLabel;
331  // End of variables declaration//GEN-END:variables
332 
339  private void setDataView(Content dataSource, long offset) {
340  if (dataSource == null) {
341  return;
342  }
343 
344  // change the cursor to "waiting cursor" for this operation
345  this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
346 
347  this.dataSource = dataSource;
348 
349  int bytesRead = 0;
350  // set the data on the bottom and show it
351  String text = "";
352  if (dataSource.getSize() > 0) {
353  try {
354  bytesRead = dataSource.read(data, offset, PAGE_LENGTH); // read the data
355  } catch (TskException ex) {
356  text = NbBundle.getMessage(this.getClass(),
357  "DataContentViewerString.setDataView.errorText", currentOffset,
358  currentOffset + PAGE_LENGTH);
359  logger.log(Level.WARNING, "Error while trying to show the String content.", ex); //NON-NLS
360  }
361  }
362 
363  if (bytesRead > 0) {
364  //text = DataConversion.getString(data, bytesRead, 4);
365  final SCRIPT selScript = (SCRIPT) languageCombo.getSelectedItem();
366  stringExtract.setEnabledScript(selScript);
367  StringExtractResult res = stringExtract.extract(data, bytesRead, 0);
368  text = res.getText();
369  if (text.trim().isEmpty()) {
370  text = NbBundle.getMessage(this.getClass(),
371  "DataContentViewerString.setDataView.errorNoText", currentOffset,
372  currentOffset + PAGE_LENGTH);
373  }
374  } else {
375  text = NbBundle.getMessage(this.getClass(), "DataContentViewerString.setDataView.errorText", currentOffset,
376  currentOffset + PAGE_LENGTH);
377  }
378 
379  // disable or enable the next button
380  if (offset + PAGE_LENGTH < dataSource.getSize()) {
381  nextPageButton.setEnabled(true);
382  } else {
383  nextPageButton.setEnabled(false);
384  }
385 
386  if (offset == 0) {
387  prevPageButton.setEnabled(false);
388  currentPage = 1; // reset the page number
389  } else {
390  prevPageButton.setEnabled(true);
391  }
392 
393  int totalPage = Math.round((dataSource.getSize() - 1) / PAGE_LENGTH) + 1;
394  totalPageLabel.setText(Integer.toString(totalPage));
395  currentPageLabel.setText(Integer.toString(currentPage));
396  outputViewPane.setText(text); // set the output view
397  setComponentsVisibility(true); // shows the components that not needed
398  outputViewPane.moveCaretPosition(0);
399 
400  this.setCursor(null);
401  }
402 
403  private void setDataView(StringContent dataSource) {
404  this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
405  try {
406  this.dataSource = null;
407 
408  // set the data on the bottom and show it
409  String text = dataSource.getString();
410 
411  nextPageButton.setEnabled(false);
412 
413  prevPageButton.setEnabled(false);
414  currentPage = 1;
415 
416  int totalPage = 1;
417  totalPageLabel.setText(Integer.toString(totalPage));
418  currentPageLabel.setText(Integer.toString(currentPage));
419  outputViewPane.setText(text); // set the output view
420  setComponentsVisibility(true); // shows the components that not needed
421  outputViewPane.moveCaretPosition(0);
422  } finally {
423  this.setCursor(null);
424  }
425  }
426 
432  private void setComponentsVisibility(boolean isVisible) {
433  currentPageLabel.setVisible(isVisible);
434  totalPageLabel.setVisible(isVisible);
435  ofLabel.setVisible(isVisible);
436  prevPageButton.setVisible(isVisible);
437  nextPageButton.setVisible(isVisible);
438  pageLabel.setVisible(isVisible);
439  pageLabel2.setVisible(isVisible);
440  goToPageTextField.setVisible(isVisible);
441  goToPageLabel.setVisible(isVisible);
442  languageCombo.setVisible(isVisible);
443  languageLabel.setVisible(isVisible);
444  }
445 
446  @Override
447  public void setNode(Node selectedNode) {
448  if ((selectedNode == null) || (!isSupported(selectedNode))) {
449  resetComponent();
450  return;
451  }
452 
453  Content content = DataContentViewerUtility.getDefaultContent(selectedNode);
454  if (content != null) {
455  this.setDataView(content, 0);
456  return;
457  } else {
458  StringContent scontent = selectedNode.getLookup().lookup(StringContent.class);
459  if (scontent != null) {
460  this.setDataView(scontent);
461  return;
462  }
463  }
464  resetComponent();
465  }
466 
467  @Override
468  public String getTitle() {
469  return NbBundle.getMessage(this.getClass(), "DataContentViewerString.title");
470  }
471 
472  @Override
473  public String getToolTip() {
474  return NbBundle.getMessage(this.getClass(), "DataContentViewerString.toolTip");
475  }
476 
477  @Override
478  public DataContentViewer createInstance() {
479  return new DataContentViewerString();
480  }
481 
482  @Override
483  public void resetComponent() {
484  // clear / reset the fields
485  currentPage = 1;
486  currentOffset = 0;
487  this.dataSource = null;
488  currentPageLabel.setText("");
489  totalPageLabel.setText("");
490  prevPageButton.setEnabled(false);
491  nextPageButton.setEnabled(false);
492  outputViewPane.setText(""); // reset the output view
493  setComponentsVisibility(false); // hides the components that not needed
494  }
495 
496  @Override
497  public boolean isSupported(Node node) {
498  if (node == null) {
499  return false;
500  }
501  Content content = node.getLookup().lookup(Content.class);
502  return (content != null && content.getSize() > 0);
503  }
504 
505  @Override
506  public int isPreferred(Node node) {
507  return 1;
508  }
509 
510  @Override
511  public Component getComponent() {
512  return this;
513  }
514 
515 
516  /*
517  * Show the right click menu only if evt is the correct mouse event
518  */
519  private void maybeShowPopup(java.awt.event.MouseEvent evt) {
520  if (evt.isPopupTrigger()) {
521  rightClickMenu.setLocation(evt.getLocationOnScreen());
522  rightClickMenu.setVisible(true);
523  copyMenuItem.setEnabled(outputViewPane.getSelectedText() != null);
524  } else {
525  rightClickMenu.setVisible(false);
526  }
527  }
528 }
StringExtractResult extract(byte[] buff, int len, int offset)
synchronized static Logger getLogger(String name)
Definition: Logger.java:124

Copyright © 2012-2016 Basis Technology. Generated on: Mon Jun 18 2018
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.