19 package org.sleuthkit.autopsy.discovery;
21 import com.google.common.eventbus.Subscribe;
22 import java.awt.Cursor;
23 import java.awt.Image;
24 import java.awt.event.ItemEvent;
25 import java.util.ArrayList;
26 import java.util.List;
27 import java.util.concurrent.CancellationException;
28 import java.util.concurrent.ExecutionException;
29 import java.util.logging.Level;
30 import javax.swing.DefaultComboBoxModel;
31 import javax.swing.JOptionPane;
32 import javax.swing.SwingUtilities;
33 import javax.swing.SwingWorker;
34 import org.openide.util.NbBundle.Messages;
47 final class ResultsPanel
extends javax.swing.JPanel {
49 private static final long serialVersionUID = 1L;
50 private final static Logger logger = Logger.getLogger(ResultsPanel.class.getName());
51 private final VideoThumbnailViewer videoThumbnailViewer;
52 private final ImageThumbnailViewer imageThumbnailViewer;
53 private final DocumentPreviewViewer documentPreviewViewer;
54 private List<FileSearchFiltering.FileFilter> searchFilters;
55 private FileSearch.AttributeType groupingAttribute;
56 private FileGroup.GroupSortingAlgorithm groupSort;
57 private FileSorter.SortingMethod fileSortMethod;
58 private GroupKey selectedGroupKey;
59 private int currentPage = 0;
60 private int previousPageSize = 10;
61 private FileSearchData.FileType resultType;
62 private int groupSize = 0;
63 private PageWorker pageWorker;
64 private final List<SwingWorker<Void, Void>> resultContentWorkers =
new ArrayList<>();
69 @Messages({
"ResultsPanel.viewFileInDir.name=View File in Directory",
70 "ResultsPanel.openInExternalViewer.name=Open in External Viewer"})
73 imageThumbnailViewer =
new ImageThumbnailViewer();
74 videoThumbnailViewer =
new VideoThumbnailViewer();
75 documentPreviewViewer =
new DocumentPreviewViewer();
76 videoThumbnailViewer.addListSelectionListener((e) -> {
77 if (resultType == FileSearchData.FileType.VIDEO) {
78 if (!e.getValueIsAdjusting()) {
80 DiscoveryEventUtils.getDiscoveryEventBus().post(new DiscoveryEventUtils.PopulateInstancesListEvent(getInstancesForSelected()));
83 DiscoveryEventUtils.getDiscoveryEventBus().post(new DiscoveryEventUtils.ClearInstanceSelectionEvent());
87 imageThumbnailViewer.addListSelectionListener((e) -> {
88 if (resultType == FileSearchData.FileType.IMAGE) {
89 if (!e.getValueIsAdjusting()) {
91 DiscoveryEventUtils.getDiscoveryEventBus().post(new DiscoveryEventUtils.PopulateInstancesListEvent(getInstancesForSelected()));
94 DiscoveryEventUtils.getDiscoveryEventBus().post(new DiscoveryEventUtils.ClearInstanceSelectionEvent());
99 documentPreviewViewer.addListSelectionListener((e) -> {
100 if (resultType == FileSearchData.FileType.DOCUMENTS) {
101 if (!e.getValueIsAdjusting()) {
103 DiscoveryEventUtils.getDiscoveryEventBus().post(new DiscoveryEventUtils.PopulateInstancesListEvent(getInstancesForSelected()));
106 DiscoveryEventUtils.getDiscoveryEventBus().post(new DiscoveryEventUtils.ClearInstanceSelectionEvent());
119 private List<AbstractFile> getInstancesForSelected() {
120 if (null != resultType) {
121 switch (resultType) {
123 return videoThumbnailViewer.getInstancesForSelected();
125 return imageThumbnailViewer.getInstancesForSelected();
127 return documentPreviewViewer.getInstancesForSelected();
132 return new ArrayList<>();
141 void handleSearchStartedEvent(DiscoveryEventUtils.SearchStartedEvent searchStartedEvent) {
142 SwingUtilities.invokeLater(() -> {
143 setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
153 void handlePageRetrievedEvent(DiscoveryEventUtils.PageRetrievedEvent pageRetrievedEvent) {
154 SwingUtilities.invokeLater(() -> {
156 DiscoveryEventUtils.getDiscoveryEventBus().post(
new DiscoveryEventUtils.PopulateInstancesListEvent(getInstancesForSelected()));
158 currentPage = pageRetrievedEvent.getPageNumber();
161 if (null != pageRetrievedEvent.getType()) {
162 switch (pageRetrievedEvent.getType()) {
164 populateImageViewer(pageRetrievedEvent.getSearchResults());
165 resultsViewerPanel.add(imageThumbnailViewer);
168 populateVideoViewer(pageRetrievedEvent.getSearchResults());
169 resultsViewerPanel.add(videoThumbnailViewer);
172 populateDocumentViewer(pageRetrievedEvent.getSearchResults());
173 resultsViewerPanel.add(documentPreviewViewer);
179 resultsViewerPanel.revalidate();
180 resultsViewerPanel.repaint();
189 synchronized void resetResultViewer() {
190 resultsViewerPanel.remove(imageThumbnailViewer);
191 resultsViewerPanel.remove(videoThumbnailViewer);
192 resultsViewerPanel.remove(documentPreviewViewer);
194 for (SwingWorker<Void, Void> thumbWorker : resultContentWorkers) {
195 if (!thumbWorker.isDone()) {
196 thumbWorker.cancel(
true);
200 resultContentWorkers.clear();
201 videoThumbnailViewer.clearViewer();
202 imageThumbnailViewer.clearViewer();
203 documentPreviewViewer.clearViewer();
212 synchronized void populateVideoViewer(List<ResultFile> files) {
213 for (ResultFile file : files) {
214 VideoThumbnailWorker thumbWorker =
new VideoThumbnailWorker(file);
215 thumbWorker.execute();
217 resultContentWorkers.add(thumbWorker);
227 synchronized void populateImageViewer(List<ResultFile> files) {
228 for (ResultFile file : files) {
229 ImageThumbnailWorker thumbWorker =
new ImageThumbnailWorker(file);
230 thumbWorker.execute();
232 resultContentWorkers.add(thumbWorker);
242 synchronized void populateDocumentViewer(List<ResultFile> files) {
243 for (ResultFile file : files) {
244 DocumentPreviewWorker documentWorker =
new DocumentPreviewWorker(file);
245 documentWorker.execute();
247 resultContentWorkers.add(documentWorker);
257 void handleGroupSelectedEvent(DiscoveryEventUtils.GroupSelectedEvent groupSelectedEvent) {
258 SwingUtilities.invokeLater(() -> {
259 searchFilters = groupSelectedEvent.getFilters();
260 groupingAttribute = groupSelectedEvent.getGroupingAttr();
261 groupSort = groupSelectedEvent.getGroupSort();
262 fileSortMethod = groupSelectedEvent.getFileSort();
263 selectedGroupKey = groupSelectedEvent.getGroupKey();
264 resultType = groupSelectedEvent.getResultType();
265 groupSize = groupSelectedEvent.getGroupSize();
277 void handleNoResultsEvent(DiscoveryEventUtils.NoResultsEvent noResultsEvent) {
278 SwingUtilities.invokeLater(() -> {
282 videoThumbnailViewer.clearViewer();
283 imageThumbnailViewer.clearViewer();
284 documentPreviewViewer.clearViewer();
285 resultsViewerPanel.revalidate();
286 resultsViewerPanel.repaint();
296 void handleSearchCompleteEvent(DiscoveryEventUtils.SearchCompleteEvent searchCompleteEvent) {
297 SwingUtilities.invokeLater(() -> {
298 setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
309 private synchronized void setPage(
int startingEntry
311 int pageSize = pageSizeComboBox.getItemAt(pageSizeComboBox.getSelectedIndex());
312 synchronized (
this) {
313 if (pageWorker != null && !pageWorker.isDone()) {
314 pageWorker.cancel(
true);
316 CentralRepository centralRepo = null;
317 if (CentralRepository.isEnabled()) {
319 centralRepo = CentralRepository.getInstance();
320 }
catch (CentralRepoException ex) {
322 logger.log(Level.SEVERE,
"Error loading central repository database, no central repository options will be available for Discovery", ex);
325 if (groupSize != 0) {
326 pageWorker =
new PageWorker(searchFilters, groupingAttribute, groupSort, fileSortMethod, selectedGroupKey, startingEntry, pageSize, resultType, centralRepo);
327 pageWorker.execute();
329 SwingUtilities.invokeLater(() -> {
330 pageSizeComboBox.setEnabled(
true);
339 @Messages({
"# {0} - currentPage",
340 "# {1} - totalPages",
341 "ResultsPanel.currentPage.displayValue=Page: {0} of {1}"})
342 private void updateControls() {
343 previousPageSize = pageSizeComboBox.getItemAt(pageSizeComboBox.getSelectedIndex());
344 int pageSize = pageSizeComboBox.getItemAt(pageSizeComboBox.getSelectedIndex());
346 double maxPageDouble = groupSize == 0 ? 1 : Math.ceil((
double) groupSize / pageSize);
347 currentPageLabel.setText(Bundle.ResultsPanel_currentPage_displayValue(currentPage + 1, maxPageDouble));
348 previousPageButton.setEnabled(currentPage != 0);
349 nextPageButton.setEnabled(groupSize > ((currentPage + 1) * pageSize));
350 gotoPageField.setEnabled(groupSize > pageSize);
351 pageSizeComboBox.setEnabled(
true);
359 @SuppressWarnings(
"unchecked")
361 private
void initComponents() {
362 java.awt.GridBagConstraints gridBagConstraints;
364 javax.swing.JPanel pagingPanel =
new javax.swing.JPanel();
365 previousPageButton =
new javax.swing.JButton();
366 currentPageLabel =
new javax.swing.JLabel();
367 nextPageButton =
new javax.swing.JButton();
368 javax.swing.JLabel pageControlsLabel =
new javax.swing.JLabel();
369 javax.swing.JLabel gotoPageLabel =
new javax.swing.JLabel();
370 gotoPageField =
new javax.swing.JTextField();
371 javax.swing.JLabel pageSizeLabel =
new javax.swing.JLabel();
372 pageSizeComboBox =
new javax.swing.JComboBox<>();
373 javax.swing.Box.Filler filler1 =
new javax.swing.Box.Filler(
new java.awt.Dimension(0, 0),
new java.awt.Dimension(0, 0),
new java.awt.Dimension(32767, 0));
374 javax.swing.Box.Filler filler2 =
new javax.swing.Box.Filler(
new java.awt.Dimension(0, 0),
new java.awt.Dimension(0, 0),
new java.awt.Dimension(32767, 0));
375 javax.swing.Box.Filler filler3 =
new javax.swing.Box.Filler(
new java.awt.Dimension(0, 0),
new java.awt.Dimension(0, 0),
new java.awt.Dimension(32767, 0));
376 javax.swing.Box.Filler filler4 =
new javax.swing.Box.Filler(
new java.awt.Dimension(0, 0),
new java.awt.Dimension(0, 0),
new java.awt.Dimension(32767, 0));
377 resultsViewerPanel =
new javax.swing.JPanel();
379 setMinimumSize(
new java.awt.Dimension(700, 200));
380 setPreferredSize(
new java.awt.Dimension(700, 700));
381 setLayout(
new java.awt.BorderLayout());
383 pagingPanel.setBorder(javax.swing.BorderFactory.createEtchedBorder());
384 pagingPanel.setMinimumSize(
new java.awt.Dimension(400, 39));
385 pagingPanel.setPreferredSize(
new java.awt.Dimension(700, 39));
386 pagingPanel.setLayout(
new java.awt.GridBagLayout());
388 previousPageButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/corecomponents/btn_step_back.png")));
389 previousPageButton.setBorder(null);
390 previousPageButton.setDisabledIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/corecomponents/btn_step_back_disabled.png")));
391 previousPageButton.setEnabled(
false);
392 previousPageButton.setFocusable(
false);
393 previousPageButton.setRolloverIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/corecomponents/btn_step_back_hover.png")));
394 previousPageButton.addActionListener(
new java.awt.event.ActionListener() {
395 public void actionPerformed(java.awt.event.ActionEvent evt) {
396 previousPageButtonActionPerformed(evt);
399 gridBagConstraints =
new java.awt.GridBagConstraints();
400 gridBagConstraints.gridx = 3;
401 gridBagConstraints.gridy = 0;
402 gridBagConstraints.gridheight = 2;
403 gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
404 gridBagConstraints.insets =
new java.awt.Insets(6, 12, 6, 0);
405 pagingPanel.add(previousPageButton, gridBagConstraints);
407 org.openide.awt.Mnemonics.setLocalizedText(currentPageLabel,
org.openide.util.NbBundle.getMessage(ResultsPanel.class,
"ResultsPanel.currentPageLabel.text"));
408 currentPageLabel.setMaximumSize(
new java.awt.Dimension(190, 23));
409 currentPageLabel.setMinimumSize(
new java.awt.Dimension(90, 23));
410 currentPageLabel.setPreferredSize(
new java.awt.Dimension(100, 23));
411 gridBagConstraints =
new java.awt.GridBagConstraints();
412 gridBagConstraints.gridx = 0;
413 gridBagConstraints.gridy = 0;
414 gridBagConstraints.gridheight = 2;
415 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
416 gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
417 gridBagConstraints.insets =
new java.awt.Insets(6, 14, 6, 0);
418 pagingPanel.add(currentPageLabel, gridBagConstraints);
420 nextPageButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/corecomponents/btn_step_forward.png")));
421 nextPageButton.setBorder(null);
422 nextPageButton.setDisabledIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/corecomponents/btn_step_forward_disabled.png")));
423 nextPageButton.setEnabled(
false);
424 nextPageButton.setFocusable(
false);
425 nextPageButton.setRolloverIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/corecomponents/btn_step_forward_hover.png")));
426 nextPageButton.addActionListener(
new java.awt.event.ActionListener() {
427 public void actionPerformed(java.awt.event.ActionEvent evt) {
428 nextPageButtonActionPerformed(evt);
431 gridBagConstraints =
new java.awt.GridBagConstraints();
432 gridBagConstraints.gridx = 4;
433 gridBagConstraints.gridy = 0;
434 gridBagConstraints.gridheight = 2;
435 gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
436 gridBagConstraints.insets =
new java.awt.Insets(6, 0, 6, 0);
437 pagingPanel.add(nextPageButton, gridBagConstraints);
439 pageControlsLabel.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING);
440 org.openide.awt.Mnemonics.setLocalizedText(pageControlsLabel,
org.openide.util.NbBundle.getMessage(ResultsPanel.class,
"ResultsPanel.pageControlsLabel.text"));
441 pageControlsLabel.setMaximumSize(
new java.awt.Dimension(133, 23));
442 pageControlsLabel.setMinimumSize(
new java.awt.Dimension(33, 23));
443 pageControlsLabel.setPreferredSize(
new java.awt.Dimension(60, 23));
444 gridBagConstraints =
new java.awt.GridBagConstraints();
445 gridBagConstraints.gridx = 2;
446 gridBagConstraints.gridy = 0;
447 gridBagConstraints.gridheight = 2;
448 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
449 gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHEAST;
450 gridBagConstraints.insets =
new java.awt.Insets(6, 18, 6, 0);
451 pagingPanel.add(pageControlsLabel, gridBagConstraints);
453 gotoPageLabel.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING);
454 org.openide.awt.Mnemonics.setLocalizedText(gotoPageLabel,
org.openide.util.NbBundle.getMessage(ResultsPanel.class,
"ResultsPanel.gotoPageLabel.text"));
455 gotoPageLabel.setMaximumSize(
new java.awt.Dimension(170, 23));
456 gotoPageLabel.setMinimumSize(
new java.awt.Dimension(70, 23));
457 gotoPageLabel.setPreferredSize(
new java.awt.Dimension(100, 23));
458 gridBagConstraints =
new java.awt.GridBagConstraints();
459 gridBagConstraints.gridx = 6;
460 gridBagConstraints.gridy = 0;
461 gridBagConstraints.gridheight = 2;
462 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
463 gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHEAST;
464 gridBagConstraints.insets =
new java.awt.Insets(6, 18, 6, 0);
465 pagingPanel.add(gotoPageLabel, gridBagConstraints);
467 gotoPageField.setEnabled(
false);
468 gotoPageField.setMinimumSize(
new java.awt.Dimension(30, 22));
469 gotoPageField.setName(
"");
470 gotoPageField.setPreferredSize(
new java.awt.Dimension(26, 22));
471 gotoPageField.addActionListener(
new java.awt.event.ActionListener() {
472 public void actionPerformed(java.awt.event.ActionEvent evt) {
473 gotoPageFieldActionPerformed(evt);
476 gridBagConstraints =
new java.awt.GridBagConstraints();
477 gridBagConstraints.gridx = 7;
478 gridBagConstraints.gridy = 0;
479 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
480 gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
481 gridBagConstraints.insets =
new java.awt.Insets(6, 5, 0, 0);
482 pagingPanel.add(gotoPageField, gridBagConstraints);
484 pageSizeLabel.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING);
485 org.openide.awt.Mnemonics.setLocalizedText(pageSizeLabel,
org.openide.util.NbBundle.getMessage(ResultsPanel.class,
"ResultsPanel.pageSizeLabel.text"));
486 pageSizeLabel.setMaximumSize(
new java.awt.Dimension(160, 23));
487 pageSizeLabel.setMinimumSize(
new java.awt.Dimension(60, 23));
488 pageSizeLabel.setPreferredSize(
new java.awt.Dimension(90, 23));
489 gridBagConstraints =
new java.awt.GridBagConstraints();
490 gridBagConstraints.gridx = 9;
491 gridBagConstraints.gridy = 0;
492 gridBagConstraints.gridheight = 2;
493 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
494 gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHEAST;
495 gridBagConstraints.insets =
new java.awt.Insets(6, 18, 6, 0);
496 pagingPanel.add(pageSizeLabel, gridBagConstraints);
498 pageSizeComboBox.setModel(
new DefaultComboBoxModel<Integer>(
new Integer[] {25,50,75,100,125,150,175,200}));
499 pageSizeComboBox.setSelectedIndex(3);
500 pageSizeComboBox.addItemListener(
new java.awt.event.ItemListener() {
501 public void itemStateChanged(java.awt.event.ItemEvent evt) {
502 pageSizeChanged(evt);
505 gridBagConstraints =
new java.awt.GridBagConstraints();
506 gridBagConstraints.gridx = 10;
507 gridBagConstraints.gridy = 0;
508 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
509 gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
510 gridBagConstraints.insets =
new java.awt.Insets(6, 5, 0, 277);
511 pagingPanel.add(pageSizeComboBox, gridBagConstraints);
512 gridBagConstraints =
new java.awt.GridBagConstraints();
513 gridBagConstraints.gridx = 11;
514 gridBagConstraints.gridy = 0;
515 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
516 gridBagConstraints.weightx = 0.1;
517 pagingPanel.add(filler1, gridBagConstraints);
518 gridBagConstraints =
new java.awt.GridBagConstraints();
519 gridBagConstraints.gridx = 1;
520 gridBagConstraints.gridy = 0;
521 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
522 pagingPanel.add(filler2, gridBagConstraints);
523 gridBagConstraints =
new java.awt.GridBagConstraints();
524 gridBagConstraints.gridx = 5;
525 gridBagConstraints.gridy = 0;
526 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
527 pagingPanel.add(filler3, gridBagConstraints);
528 gridBagConstraints =
new java.awt.GridBagConstraints();
529 gridBagConstraints.gridx = 8;
530 gridBagConstraints.gridy = 0;
531 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
532 pagingPanel.add(filler4, gridBagConstraints);
534 add(pagingPanel, java.awt.BorderLayout.PAGE_START);
536 resultsViewerPanel.setMinimumSize(
new java.awt.Dimension(0, 160));
537 resultsViewerPanel.setPreferredSize(
new java.awt.Dimension(700, 700));
538 resultsViewerPanel.setLayout(
new java.awt.BorderLayout());
539 add(resultsViewerPanel, java.awt.BorderLayout.CENTER);
547 private void previousPageButtonActionPerformed(java.awt.event.ActionEvent evt) {
548 if (currentPage > 0) {
549 disablePagingControls();
550 int previousPage = currentPage - 1;
551 int pageSize = pageSizeComboBox.getItemAt(pageSizeComboBox.getSelectedIndex());
552 setPage(previousPage * pageSize);
561 private void nextPageButtonActionPerformed(java.awt.event.ActionEvent evt) {
562 disablePagingControls();
563 int nextPage = currentPage + 1;
564 int pageSize = pageSizeComboBox.getItemAt(pageSizeComboBox.getSelectedIndex());
565 setPage(nextPage * pageSize);
573 @Messages({
"# {0} - selectedPage",
575 "ResultsPanel.invalidPageNumber.message=The selected page number {0} does not exist. Please select a value from 1 to {1}.",
576 "ResultsPanel.invalidPageNumber.title=Invalid Page Number"})
577 private void gotoPageFieldActionPerformed(java.awt.event.ActionEvent evt) {
580 newPage = Integer.parseInt(gotoPageField.getText());
581 }
catch (NumberFormatException e) {
585 int pageSize = pageSizeComboBox.getItemAt(pageSizeComboBox.getSelectedIndex());
586 if ((newPage - 1) < 0 || groupSize <= ((newPage - 1) * pageSize)) {
587 JOptionPane.showMessageDialog(
this,
588 Bundle.ResultsPanel_invalidPageNumber_message(newPage, Math.ceil((
double) groupSize / pageSize)),
589 Bundle.ResultsPanel_invalidPageNumber_title(),
590 JOptionPane.WARNING_MESSAGE);
593 disablePagingControls();
594 setPage((newPage - 1) * pageSize);
597 private void pageSizeChanged(java.awt.event.ItemEvent evt) {
598 if (evt.getStateChange() == ItemEvent.SELECTED) {
599 disablePagingControls();
600 int previousPage = currentPage - 1;
601 int pageSize = pageSizeComboBox.getItemAt(pageSizeComboBox.getSelectedIndex());
602 if (previousPageSize != pageSize) {
605 setPage(previousPage * pageSize);
612 private void disablePagingControls() {
613 nextPageButton.setEnabled(
false);
614 previousPageButton.setEnabled(
false);
615 gotoPageField.setEnabled(
false);
616 pageSizeComboBox.setEnabled(
false);
620 private javax.swing.JLabel currentPageLabel;
621 private javax.swing.JTextField gotoPageField;
622 private javax.swing.JButton nextPageButton;
623 private javax.swing.JComboBox<Integer> pageSizeComboBox;
624 private javax.swing.JButton previousPageButton;
625 private javax.swing.JPanel resultsViewerPanel;
643 thumbnailWrapper =
new VideoThumbnailsWrapper(file);
644 videoThumbnailViewer.addVideo(thumbnailWrapper);
649 FileSearch.getVideoThumbnails(thumbnailWrapper);
657 }
catch (InterruptedException | ExecutionException ex) {
658 logger.log(Level.WARNING,
"Video Worker Exception for file: " + thumbnailWrapper.getResultFile().getFirstInstance().getId(), ex);
659 }
catch (CancellationException ignored) {
662 videoThumbnailViewer.repaint();
681 thumbnailWrapper =
new ImageThumbnailWrapper(file);
682 imageThumbnailViewer.addImage(thumbnailWrapper);
688 if (thumbnail != null) {
689 thumbnailWrapper.setImageThumbnail(thumbnail);
698 }
catch (InterruptedException | ExecutionException ex) {
699 logger.log(Level.WARNING,
"Image Worker Exception for file: " + thumbnailWrapper.getResultFile().getFirstInstance().getId(), ex);
700 }
catch (CancellationException ignored) {
703 imageThumbnailViewer.repaint();
723 documentWrapper =
new DocumentWrapper(file);
724 documentPreviewViewer.addDocument(documentWrapper);
727 @Messages({
"ResultsPanel.unableToCreate.text=Unable to create summary."})
730 TextSummary preview = FileSearch.summarize(documentWrapper.getResultFile().getFirstInstance());
731 if (preview == null) {
732 preview =
new TextSummary(Bundle.ResultsPanel_unableToCreate_text(), null, 0);
734 documentWrapper.setSummary(preview);
738 @Messages({
"ResultsPanel.documentPreview.text=Document preview creation cancelled."})
743 }
catch (InterruptedException | ExecutionException ex) {
744 documentWrapper.setSummary(
new TextSummary(ex.getMessage(), null, 0));
745 logger.log(Level.WARNING,
"Document Worker Exception", ex);
746 }
catch (CancellationException ignored) {
747 documentWrapper.setSummary(
new TextSummary(Bundle.ResultsPanel_documentPreview_text(), null, 0));
750 documentPreviewViewer.repaint();
final DocumentWrapper documentWrapper
final ImageThumbnailWrapper thumbnailWrapper
final VideoThumbnailsWrapper thumbnailWrapper
static BufferedImage getThumbnail(Content content, int iconSize)
static final int ICON_SIZE_LARGE