Autopsy  4.21.0
Graphical digital forensics platform for The Sleuth Kit and other tools.
LocalFilesPanel.java
Go to the documentation of this file.
1 /*
2  * Autopsy Forensic Browser
3  *
4  * Copyright 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.casemodule;
20 
21 import java.io.File;
22 import java.util.Arrays;
23 import java.util.Collections;
24 import java.util.Comparator;
25 import java.util.List;
26 import javax.swing.JFileChooser;
27 import org.openide.util.NbBundle;
30 import java.util.logging.Level;
31 import java.util.stream.Collectors;
32 import java.util.stream.Stream;
33 import javax.swing.AbstractListModel;
34 import javax.swing.JOptionPane;
37 
41 @SuppressWarnings("PMD.SingularField") // UI widgets cause lots of false positives
42 final class LocalFilesPanel extends javax.swing.JPanel {
43 
44  private static final long serialVersionUID = 1L;
45 
46  private boolean enableNext = false;
47  private static final Logger logger = Logger.getLogger(LocalFilesPanel.class.getName());
48  private String displayName = "";
49  private final LocalFilesModel listModel = new LocalFilesModel();
50 
54  LocalFilesPanel() {
55  initComponents();
56  customInit();
57  }
58 
59  private void customInit() {
60  localFileChooser.setMultiSelectionEnabled(true);
61  errorLabel.setVisible(false);
62  this.fileList.setModel(listModel);
63  listModel.clear();
64  this.displayNameLabel.setText(NbBundle.getMessage(this.getClass(), "LocalFilesPanel.displayNameLabel.text"));
65  }
66 
72  @SuppressWarnings("unchecked")
73  // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
74  private void initComponents() {
75  java.awt.GridBagConstraints gridBagConstraints;
76 
77  localFileChooser = new javax.swing.JFileChooser();
78  selectButton = new javax.swing.JButton();
79  deleteButon = new javax.swing.JButton();
80  clearButton = new javax.swing.JButton();
81  javax.swing.JScrollPane fileListScrollpane = new javax.swing.JScrollPane();
82  fileList = new javax.swing.JList<>();
83  javax.swing.JPanel displayNamePanel = new javax.swing.JPanel();
84  changeNameButton = new javax.swing.JButton();
85  displayNameLabel = new javax.swing.JLabel();
86  javax.swing.JPanel padding = new javax.swing.JPanel();
87  javax.swing.JLabel timeStampToIncludeLabel = new javax.swing.JLabel();
88  modifiedTimeCheckBox = new javax.swing.JCheckBox();
89  createTimeCheckBox = new javax.swing.JCheckBox();
90  accessTimeCheckBox = new javax.swing.JCheckBox();
91  javax.swing.JLabel timeStampNoteLabel = new javax.swing.JLabel();
92  errorLabel = new javax.swing.JLabel();
93  javax.swing.JPanel paddingBottom = new javax.swing.JPanel();
94 
95  localFileChooser.setApproveButtonText(org.openide.util.NbBundle.getMessage(LocalFilesPanel.class, "LocalFilesPanel.localFileChooser.approveButtonText")); // NOI18N
96  localFileChooser.setApproveButtonToolTipText(org.openide.util.NbBundle.getMessage(LocalFilesPanel.class, "LocalFilesPanel.localFileChooser.approveButtonToolTipText")); // NOI18N
97  localFileChooser.setDialogTitle(org.openide.util.NbBundle.getMessage(LocalFilesPanel.class, "LocalFilesPanel.localFileChooser.dialogTitle")); // NOI18N
98  localFileChooser.setFileSelectionMode(javax.swing.JFileChooser.FILES_AND_DIRECTORIES);
99 
100  setLayout(new java.awt.GridBagLayout());
101 
102  org.openide.awt.Mnemonics.setLocalizedText(selectButton, org.openide.util.NbBundle.getMessage(LocalFilesPanel.class, "LocalFilesPanel.selectButton.text")); // NOI18N
103  selectButton.setToolTipText(org.openide.util.NbBundle.getMessage(LocalFilesPanel.class, "LocalFilesPanel.selectButton.toolTipText")); // NOI18N
104  selectButton.setActionCommand(org.openide.util.NbBundle.getMessage(LocalFilesPanel.class, "LocalFilesPanel.selectButton.actionCommand")); // NOI18N
105  selectButton.setMaximumSize(new java.awt.Dimension(70, 23));
106  selectButton.setMinimumSize(new java.awt.Dimension(70, 23));
107  selectButton.setPreferredSize(new java.awt.Dimension(70, 23));
108  selectButton.addActionListener(new java.awt.event.ActionListener() {
109  public void actionPerformed(java.awt.event.ActionEvent evt) {
110  selectButtonActionPerformed(evt);
111  }
112  });
113  gridBagConstraints = new java.awt.GridBagConstraints();
114  gridBagConstraints.gridx = 1;
115  gridBagConstraints.gridy = 0;
116  gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
117  gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
118  gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
119  add(selectButton, gridBagConstraints);
120 
121  org.openide.awt.Mnemonics.setLocalizedText(deleteButon, org.openide.util.NbBundle.getMessage(LocalFilesPanel.class, "LocalFilesPanel.deleteButon.text")); // NOI18N
122  deleteButon.setMaximumSize(new java.awt.Dimension(70, 23));
123  deleteButon.setMinimumSize(new java.awt.Dimension(70, 23));
124  deleteButon.addActionListener(new java.awt.event.ActionListener() {
125  public void actionPerformed(java.awt.event.ActionEvent evt) {
126  deleteButonActionPerformed(evt);
127  }
128  });
129  gridBagConstraints = new java.awt.GridBagConstraints();
130  gridBagConstraints.gridx = 1;
131  gridBagConstraints.gridy = 1;
132  gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
133  gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
134  gridBagConstraints.insets = new java.awt.Insets(0, 5, 5, 5);
135  add(deleteButon, gridBagConstraints);
136 
137  org.openide.awt.Mnemonics.setLocalizedText(clearButton, org.openide.util.NbBundle.getMessage(LocalFilesPanel.class, "LocalFilesPanel.clearButton.text")); // NOI18N
138  clearButton.setToolTipText(org.openide.util.NbBundle.getMessage(LocalFilesPanel.class, "LocalFilesPanel.clearButton.toolTipText")); // NOI18N
139  clearButton.setMaximumSize(new java.awt.Dimension(70, 23));
140  clearButton.setMinimumSize(new java.awt.Dimension(70, 23));
141  clearButton.setPreferredSize(new java.awt.Dimension(70, 23));
142  clearButton.addActionListener(new java.awt.event.ActionListener() {
143  public void actionPerformed(java.awt.event.ActionEvent evt) {
144  clearButtonActionPerformed(evt);
145  }
146  });
147  gridBagConstraints = new java.awt.GridBagConstraints();
148  gridBagConstraints.gridx = 1;
149  gridBagConstraints.gridy = 2;
150  gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
151  gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
152  gridBagConstraints.insets = new java.awt.Insets(0, 5, 5, 5);
153  add(clearButton, gridBagConstraints);
154 
155  fileListScrollpane.setMaximumSize(new java.awt.Dimension(32767, 100));
156  fileListScrollpane.setMinimumSize(new java.awt.Dimension(100, 100));
157  fileListScrollpane.setPreferredSize(new java.awt.Dimension(258, 100));
158 
159  fileListScrollpane.setViewportView(fileList);
160 
161  gridBagConstraints = new java.awt.GridBagConstraints();
162  gridBagConstraints.gridx = 0;
163  gridBagConstraints.gridy = 0;
164  gridBagConstraints.gridheight = 3;
165  gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
166  gridBagConstraints.weightx = 1.0;
167  gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 0);
168  add(fileListScrollpane, gridBagConstraints);
169 
170  displayNamePanel.setLayout(new java.awt.GridBagLayout());
171 
172  org.openide.awt.Mnemonics.setLocalizedText(changeNameButton, org.openide.util.NbBundle.getMessage(LocalFilesPanel.class, "LocalFilesPanel.changeNameButton.text")); // NOI18N
173  changeNameButton.addActionListener(new java.awt.event.ActionListener() {
174  public void actionPerformed(java.awt.event.ActionEvent evt) {
175  changeNameButtonActionPerformed(evt);
176  }
177  });
178  gridBagConstraints = new java.awt.GridBagConstraints();
179  gridBagConstraints.gridx = 1;
180  gridBagConstraints.gridy = 0;
181  gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
182  gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
183  gridBagConstraints.insets = new java.awt.Insets(0, 5, 0, 0);
184  displayNamePanel.add(changeNameButton, gridBagConstraints);
185 
186  org.openide.awt.Mnemonics.setLocalizedText(displayNameLabel, org.openide.util.NbBundle.getMessage(LocalFilesPanel.class, "LocalFilesPanel.displayNameLabel.text")); // NOI18N
187  gridBagConstraints = new java.awt.GridBagConstraints();
188  gridBagConstraints.gridx = 0;
189  gridBagConstraints.gridy = 0;
190  gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
191  displayNamePanel.add(displayNameLabel, gridBagConstraints);
192 
193  padding.setMinimumSize(new java.awt.Dimension(0, 0));
194  padding.setPreferredSize(new java.awt.Dimension(0, 0));
195 
196  javax.swing.GroupLayout paddingLayout = new javax.swing.GroupLayout(padding);
197  padding.setLayout(paddingLayout);
198  paddingLayout.setHorizontalGroup(
199  paddingLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
200  .addGap(0, 0, Short.MAX_VALUE)
201  );
202  paddingLayout.setVerticalGroup(
203  paddingLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
204  .addGap(0, 0, Short.MAX_VALUE)
205  );
206 
207  gridBagConstraints = new java.awt.GridBagConstraints();
208  gridBagConstraints.gridx = 2;
209  gridBagConstraints.gridy = 0;
210  gridBagConstraints.weightx = 1.0;
211  displayNamePanel.add(padding, gridBagConstraints);
212 
213  gridBagConstraints = new java.awt.GridBagConstraints();
214  gridBagConstraints.gridx = 0;
215  gridBagConstraints.gridy = 3;
216  gridBagConstraints.gridwidth = 2;
217  gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
218  gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
219  gridBagConstraints.weightx = 1.0;
220  gridBagConstraints.insets = new java.awt.Insets(0, 5, 5, 5);
221  add(displayNamePanel, gridBagConstraints);
222 
223  org.openide.awt.Mnemonics.setLocalizedText(timeStampToIncludeLabel, org.openide.util.NbBundle.getMessage(LocalFilesPanel.class, "LocalFilesPanel.timeStampToIncludeLabel.text")); // NOI18N
224  gridBagConstraints = new java.awt.GridBagConstraints();
225  gridBagConstraints.gridx = 0;
226  gridBagConstraints.gridy = 4;
227  gridBagConstraints.gridwidth = 2;
228  gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
229  gridBagConstraints.insets = new java.awt.Insets(0, 5, 5, 5);
230  add(timeStampToIncludeLabel, gridBagConstraints);
231 
232  org.openide.awt.Mnemonics.setLocalizedText(modifiedTimeCheckBox, org.openide.util.NbBundle.getMessage(LocalFilesPanel.class, "LocalFilesPanel.modifiedTimeCheckBox.text")); // NOI18N
233  gridBagConstraints = new java.awt.GridBagConstraints();
234  gridBagConstraints.gridx = 0;
235  gridBagConstraints.gridy = 5;
236  gridBagConstraints.gridwidth = 2;
237  gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
238  gridBagConstraints.insets = new java.awt.Insets(0, 15, 5, 5);
239  add(modifiedTimeCheckBox, gridBagConstraints);
240 
241  org.openide.awt.Mnemonics.setLocalizedText(createTimeCheckBox, org.openide.util.NbBundle.getMessage(LocalFilesPanel.class, "LocalFilesPanel.createTimeCheckBox.text")); // NOI18N
242  gridBagConstraints = new java.awt.GridBagConstraints();
243  gridBagConstraints.gridx = 0;
244  gridBagConstraints.gridy = 6;
245  gridBagConstraints.gridwidth = 2;
246  gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
247  gridBagConstraints.insets = new java.awt.Insets(0, 15, 5, 5);
248  add(createTimeCheckBox, gridBagConstraints);
249 
250  org.openide.awt.Mnemonics.setLocalizedText(accessTimeCheckBox, org.openide.util.NbBundle.getMessage(LocalFilesPanel.class, "LocalFilesPanel.accessTimeCheckBox.text")); // NOI18N
251  gridBagConstraints = new java.awt.GridBagConstraints();
252  gridBagConstraints.gridx = 0;
253  gridBagConstraints.gridy = 7;
254  gridBagConstraints.gridwidth = 2;
255  gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
256  gridBagConstraints.insets = new java.awt.Insets(0, 15, 5, 5);
257  add(accessTimeCheckBox, gridBagConstraints);
258 
259  org.openide.awt.Mnemonics.setLocalizedText(timeStampNoteLabel, org.openide.util.NbBundle.getMessage(LocalFilesPanel.class, "LocalFilesPanel.timeStampNoteLabel.text")); // NOI18N
260  gridBagConstraints = new java.awt.GridBagConstraints();
261  gridBagConstraints.gridx = 0;
262  gridBagConstraints.gridy = 8;
263  gridBagConstraints.gridwidth = 2;
264  gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
265  gridBagConstraints.insets = new java.awt.Insets(10, 5, 5, 5);
266  add(timeStampNoteLabel, gridBagConstraints);
267 
268  errorLabel.setForeground(new java.awt.Color(255, 0, 0));
269  org.openide.awt.Mnemonics.setLocalizedText(errorLabel, org.openide.util.NbBundle.getMessage(LocalFilesPanel.class, "LocalFilesPanel.errorLabel.text")); // NOI18N
270  gridBagConstraints = new java.awt.GridBagConstraints();
271  gridBagConstraints.gridx = 0;
272  gridBagConstraints.gridy = 9;
273  gridBagConstraints.gridwidth = 2;
274  gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
275  gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
276  gridBagConstraints.weightx = 1.0;
277  gridBagConstraints.insets = new java.awt.Insets(0, 5, 5, 5);
278  add(errorLabel, gridBagConstraints);
279 
280  paddingBottom.setMinimumSize(new java.awt.Dimension(0, 0));
281 
282  javax.swing.GroupLayout paddingBottomLayout = new javax.swing.GroupLayout(paddingBottom);
283  paddingBottom.setLayout(paddingBottomLayout);
284  paddingBottomLayout.setHorizontalGroup(
285  paddingBottomLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
286  .addGap(0, 0, Short.MAX_VALUE)
287  );
288  paddingBottomLayout.setVerticalGroup(
289  paddingBottomLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
290  .addGap(0, 0, Short.MAX_VALUE)
291  );
292 
293  gridBagConstraints = new java.awt.GridBagConstraints();
294  gridBagConstraints.gridx = 0;
295  gridBagConstraints.gridy = 10;
296  gridBagConstraints.fill = java.awt.GridBagConstraints.VERTICAL;
297  gridBagConstraints.weighty = 1.0;
298  add(paddingBottom, gridBagConstraints);
299  }// </editor-fold>//GEN-END:initComponents
300 
301  private void selectButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_selectButtonActionPerformed
302  int returnVal = localFileChooser.showOpenDialog(this);
303 
304  if (returnVal == JFileChooser.APPROVE_OPTION) {
305  File[] files = localFileChooser.getSelectedFiles();
306  this.listModel.add(files);
307  }
308 
309  enableNext = !this.listModel.getFiles().isEmpty();
310 
311  try {
312  firePropertyChange(DataSourceProcessor.DSP_PANEL_EVENT.UPDATE_UI.toString(), false, true);
313  } catch (Exception e) {
314  logger.log(Level.SEVERE, "LocalFilesPanel listener threw exception", e); //NON-NLS
315  MessageNotifyUtil.Notify.show(NbBundle.getMessage(this.getClass(), "LocalFilesPanel.moduleErr"),
316  NbBundle.getMessage(this.getClass(), "LocalFilesPanel.moduleErr.msg"),
317  MessageNotifyUtil.MessageType.ERROR);
318  }
319  }//GEN-LAST:event_selectButtonActionPerformed
320 
321  private void clearButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_clearButtonActionPerformed
322  reset();
323  }//GEN-LAST:event_clearButtonActionPerformed
324 
325  private void changeNameButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_changeNameButtonActionPerformed
326  final String selectedDisplayName = JOptionPane.showInputDialog("New Display Name: ");
327  if (selectedDisplayName != null && !selectedDisplayName.isEmpty()) {
328  this.displayName = selectedDisplayName;
329  this.displayNameLabel.setText("Display Name: " + this.displayName);
330  }
331  }//GEN-LAST:event_changeNameButtonActionPerformed
332 
333  private void deleteButonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deleteButonActionPerformed
334  this.listModel.remove(this.fileList.getSelectedIndices());
335  this.fileList.clearSelection();
336 
337  enableNext = !this.listModel.getFiles().isEmpty();
338 
339  try {
340  firePropertyChange(DataSourceProcessor.DSP_PANEL_EVENT.UPDATE_UI.toString(), false, true);
341  } catch (Exception e) {
342  logger.log(Level.SEVERE, "LocalFilesPanel listener threw exception", e); //NON-NLS
343  MessageNotifyUtil.Notify.show(NbBundle.getMessage(this.getClass(), "LocalFilesPanel.moduleErr"),
344  NbBundle.getMessage(this.getClass(), "LocalFilesPanel.moduleErr.msg"),
345  MessageNotifyUtil.MessageType.ERROR);
346  }
347  }//GEN-LAST:event_deleteButonActionPerformed
348 
352  void reset() {
353  this.listModel.clear();
354  enableNext = false;
355  errorLabel.setVisible(false);
356  displayName = "";
357  this.displayNameLabel.setText(NbBundle.getMessage(this.getClass(), "LocalFilesPanel.displayNameLabel.text"));
358  try {
359  firePropertyChange(DataSourceProcessor.DSP_PANEL_EVENT.UPDATE_UI.toString(), false, true);
360  } catch (Exception e) {
361  logger.log(Level.SEVERE, "LocalFilesPanel listener threw exception", e); //NON-NLS
362  MessageNotifyUtil.Notify.show(NbBundle.getMessage(this.getClass(), "LocalFilesPanel.moduleErr"),
363  NbBundle.getMessage(this.getClass(), "LocalFilesPanel.moduleErr.msg"),
364  MessageNotifyUtil.MessageType.ERROR);
365  }
366  }
367 
374  List<String> getContentPaths() {
375  return this.listModel.getFiles().stream()
376  .map(File::getAbsolutePath)
377  .collect(Collectors.toList());
378  }
379 
385  Boolean getCreateTimestamps() {
386  return createTimeCheckBox.isSelected();
387  }
388 
394  Boolean getModifiedTimestamps() {
395  return modifiedTimeCheckBox.isSelected();
396  }
397 
403  Boolean getAccessTimestamps() {
404  return accessTimeCheckBox.isSelected();
405  }
406 
413  boolean validatePanel() {
414  // display warning if there is one (but don't disable "next" button)
415  warnIfPathIsInvalid(getContentPaths());
416  return enableNext;
417  }
418 
425  @NbBundle.Messages({
426  "LocalFilesPanel.pathValidation.dataSourceOnCDriveError=Warning: Path to multi-user data source is on \"C:\" drive",
427  "LocalFilesPanel.pathValidation.getOpenCase=WARNING: Exception while gettting open case."
428  })
429  private void warnIfPathIsInvalid(final List<String> pathsList) {
430  errorLabel.setVisible(false);
431 
432  try {
433  final Case.CaseType currentCaseType = Case.getCurrentCaseThrows().getCaseType();
434 
435  for (String currentPath : pathsList) {
436  if (!PathValidator.isValidForCaseType(currentPath, currentCaseType)) {
437  errorLabel.setVisible(true);
438  errorLabel.setText(Bundle.LocalFilesPanel_pathValidation_dataSourceOnCDriveError());
439  return;
440  }
441  }
442  } catch (NoCurrentCaseException ex) {
443  errorLabel.setVisible(true);
444  errorLabel.setText(Bundle.LocalFilesPanel_pathValidation_getOpenCase());
445  }
446  }
447 
453  String getFileSetName() {
454  return this.displayName;
455  }
456 
461  private static class FileRecord {
462 
463  private final File file;
464 
465  FileRecord(File file) {
466  this.file = file;
467  }
468 
469  @Override
470  public String toString() {
471  return file == null ? "" : file.getAbsolutePath();
472  }
473 
477  File getFile() {
478  return file;
479  }
480  }
481 
485  private static class LocalFilesModel extends AbstractListModel<FileRecord> {
486 
487  private List<File> items = Collections.emptyList();
488 
489  @Override
490  public int getSize() {
491  return items.size();
492  }
493 
494  @Override
495  public FileRecord getElementAt(int index) {
496  File f = items.get(index);
497  return new FileRecord(f);
498  }
499 
505  void add(File... files) {
506  items = Stream.concat(items.stream(), Stream.of(files))
507  .sorted(Comparator.comparing(f -> f.getAbsolutePath().toLowerCase()))
508  .distinct()
509  .collect(Collectors.toList());
510 
511  this.fireContentsChanged(this, 0, items.size() - 1);
512  }
513 
518  void remove(int[] selectedIndices) {
519  if (selectedIndices != null) {
520  Iterable<Integer> sortedIndices = (Iterable<Integer>) () -> Arrays.stream(selectedIndices)
521  .mapToObj(i -> i)
522  // reverse order to remove highest index to lowest index
523  .sorted((a,b) -> Integer.compare(b, a))
524  .iterator();
525 
526  int prevIdxMax = items.size() - 1;
527  for (Integer idx: sortedIndices) {
528  if (idx != null && idx >= 0 && idx < this.items.size()) {
529  this.items.remove((int) idx);
530  }
531  }
532 
533  this.fireContentsChanged(this, 0, prevIdxMax);
534  }
535  }
536 
540  List<File> getFiles() {
541  return items;
542  }
543 
547  void clear() {
548  items.clear();
549  this.fireContentsChanged(this, 0, 0);
550  }
551 
552  }
553 
554  // Variables declaration - do not modify//GEN-BEGIN:variables
555  private javax.swing.JCheckBox accessTimeCheckBox;
556  private javax.swing.JButton changeNameButton;
557  private javax.swing.JButton clearButton;
558  private javax.swing.JCheckBox createTimeCheckBox;
559  private javax.swing.JButton deleteButon;
560  private javax.swing.JLabel displayNameLabel;
561  private javax.swing.JLabel errorLabel;
562  private javax.swing.JList<FileRecord> fileList;
563  private javax.swing.JFileChooser localFileChooser;
564  private javax.swing.JCheckBox modifiedTimeCheckBox;
565  private javax.swing.JButton selectButton;
566  // End of variables declaration//GEN-END:variables
567 }

Copyright © 2012-2022 Basis Technology. Generated on: Tue Feb 6 2024
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.