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

Copyright © 2012-2016 Basis Technology. Generated on: Fri Sep 29 2017
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.