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