diff --git a/Core/src/org/sleuthkit/autopsy/discovery/AbstractDiscoveryFiltersPanel.java b/Core/src/org/sleuthkit/autopsy/discovery/AbstractDiscoveryFilterPanel.java similarity index 76% rename from Core/src/org/sleuthkit/autopsy/discovery/AbstractDiscoveryFiltersPanel.java rename to Core/src/org/sleuthkit/autopsy/discovery/AbstractDiscoveryFilterPanel.java index 1e12f4e685..fa287b1bff 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/AbstractDiscoveryFiltersPanel.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/AbstractDiscoveryFilterPanel.java @@ -15,7 +15,7 @@ import javax.swing.event.ListSelectionListener; * * @author wschaefer */ -abstract class AbstractDiscoveryFiltersPanel extends javax.swing.JPanel { +abstract class AbstractDiscoveryFilterPanel extends javax.swing.JPanel { private static final long serialVersionUID = 1L; @@ -56,4 +56,17 @@ abstract class AbstractDiscoveryFiltersPanel extends javax.swing.JPanel { abstract FileSearchFiltering.FileFilter getFilter(); + void removeListeners() { + if (getCheckbox() != null) { + for (ActionListener listener : getCheckbox().getActionListeners()) { + getCheckbox().removeActionListener(listener); + } + } + if (getList() != null) { + for (ListSelectionListener listener : getList().getListSelectionListeners()) { + getList().removeListSelectionListener(listener); + } + } + } + } diff --git a/Core/src/org/sleuthkit/autopsy/discovery/AbstractFilterPanel.java b/Core/src/org/sleuthkit/autopsy/discovery/AbstractFiltersPanel.java similarity index 59% rename from Core/src/org/sleuthkit/autopsy/discovery/AbstractFilterPanel.java rename to Core/src/org/sleuthkit/autopsy/discovery/AbstractFiltersPanel.java index 1ab44b8218..321eff09a1 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/AbstractFilterPanel.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/AbstractFiltersPanel.java @@ -20,86 +20,88 @@ import javax.swing.event.ListSelectionListener; * * @author wschaefer */ -abstract class AbstractFilterPanel extends javax.swing.JPanel implements ActionListener { +abstract class AbstractFiltersPanel extends javax.swing.JPanel implements ActionListener, ListSelectionListener { - AbstractFilterPanel() { - constraints.fill = GridBagConstraints.VERTICAL; - constraints.gridx = 0; - constraints.gridy = 0; - constraints.gridheight = 2; - constraints.gridwidth = LABEL_WIDTH; - constraints.weightx = LABEL_WEIGHT; - constraints.anchor = GridBagConstraints.NORTHWEST; - constraints.insets = new Insets(0, 8, 12, 8); - } + private static boolean isInitialized = false; private static final double LABEL_WEIGHT = 0; - private static final double PANEL_WEIGHT = 0; + private static final double PANEL_WEIGHT = .1; private static final int LABEL_WIDTH = 1; private static final int PANEL_WIDTH = 2; private static final int NUMBER_OF_COLUMNS = 6; private static final long serialVersionUID = 1L; private final GridBagLayout layout = new GridBagLayout(); private final GridBagConstraints constraints = new GridBagConstraints(); - private final List filters = new ArrayList<>(); + private final List filters = new ArrayList<>(); abstract FileSearchData.FileType getFileType(); - void addFilter(AbstractDiscoveryFiltersPanel filterPanel, boolean isSelected, int[] indicesSelected) { + final synchronized void addFilter(AbstractDiscoveryFilterPanel filterPanel, boolean isSelected, int[] indicesSelected) { + if (!isInitialized) { + constraints.fill = GridBagConstraints.VERTICAL; + constraints.gridx = 0; + constraints.gridy = 0; + constraints.gridheight = 2; + constraints.gridwidth = LABEL_WIDTH; + constraints.weightx = LABEL_WEIGHT; + constraints.anchor = GridBagConstraints.NORTHWEST; + constraints.insets = new Insets(0, 8, 12, 8); + isInitialized = true; + } filterPanel.configurePanel(isSelected, indicesSelected); - filterPanel.addListeners(this, new ListSelectionListener() { - @Override - public void valueChanged(ListSelectionEvent evt) { - if (!evt.getValueIsAdjusting()) { - validateFields(); - } - } - }); - filters.add(filterPanel); - addToGridBagLayout(filterPanel.getCheckbox(), null); - addToGridBagLayout(filterPanel, null); - constraints.weightx = .9; - constraints.fill = GridBagConstraints.BOTH; - addToGridBagLayout(new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 0), new java.awt.Dimension(32767, 0)), null); + filterPanel.addListeners(this, this); constraints.fill = GridBagConstraints.VERTICAL; + filters.add(filterPanel); constraints.weightx = LABEL_WEIGHT; + constraints.gridwidth = LABEL_WIDTH; + addToGridBagLayout(filterPanel.getCheckbox(), null); + nextSpot(LABEL_WIDTH); + constraints.fill = GridBagConstraints.BOTH; + constraints.weightx = PANEL_WEIGHT; + constraints.gridwidth = PANEL_WIDTH; + addToGridBagLayout(filterPanel, null); + nextSpot(PANEL_WIDTH); updateLayout(); } - void endPanel() { + private void nextSpot(int width) { + constraints.gridx += width; + if (constraints.gridx >= NUMBER_OF_COLUMNS) { + constraints.weightx = .9; + constraints.gridwidth = LABEL_WIDTH; + add(new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 0), new java.awt.Dimension(32767, 0)), constraints); + constraints.fill = GridBagConstraints.VERTICAL; + constraints.gridy += constraints.gridheight; + constraints.gridx = 0; + } + } + + final synchronized void endPanel() { //add filler at end - constraints.gridy++; + constraints.gridy += constraints.gridheight; constraints.fill = GridBagConstraints.BOTH; constraints.weightx = .9; constraints.weighty = .9; add(new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 0), new java.awt.Dimension(32767, 32767)), constraints); } - void clearFilters() { + final synchronized void clearFilters() { + for (AbstractDiscoveryFilterPanel filterPanel : filters){ + filterPanel.removeListeners(); + } filters.clear(); } private void addToGridBagLayout(Component componentToAdd, Component additionalComponentToAdd) { - if (constraints.gridx % 2 == 0) { - constraints.weightx = LABEL_WEIGHT; - constraints.gridwidth = LABEL_WIDTH; - } else { - constraints.weightx = PANEL_WEIGHT; - constraints.gridwidth = PANEL_WIDTH; - } if (additionalComponentToAdd != null) { - constraints.gridheight = 1; + constraints.gridheight /= 2; add(componentToAdd, constraints); - constraints.gridy++; + constraints.gridy += constraints.gridheight; add(additionalComponentToAdd, constraints); - constraints.gridy--; - constraints.gridheight = 2; + constraints.gridy -= constraints.gridheight; + constraints.gridheight *= 2; } else { add(componentToAdd, constraints); } - constraints.gridx = (constraints.gridx + LABEL_WIDTH) % NUMBER_OF_COLUMNS; - if (constraints.gridx == 0) { - constraints.gridy += constraints.gridheight; - } } private void updateLayout() { @@ -113,6 +115,7 @@ abstract class AbstractFilterPanel extends javax.swing.JPanel implements ActionL * @param error */ private void setInvalid(String error) { + System.out.println("ERROR FIRED " + error); firePropertyChange("FilterError", error, error); } @@ -120,26 +123,41 @@ abstract class AbstractFilterPanel extends javax.swing.JPanel implements ActionL * The settings are valid so enable the Search button */ private void setValid() { + System.out.println("VALID FIRED"); firePropertyChange("FilterError", null, null); } private void validateFields() { String errorString; - for (AbstractDiscoveryFiltersPanel filterPanel : filters) { + System.out.println("VALIDATE FIELDS"); + for (AbstractDiscoveryFilterPanel filterPanel : filters) { errorString = filterPanel.checkForError(); if (errorString != null) { setInvalid(errorString); return; } + System.out.println("FILTER VALID"); } setValid(); } @Override public void actionPerformed(ActionEvent e) { + System.out.println("ACTION PERFORMED"); validateFields(); } + + boolean isObjectsFilterSupported(){ + return false; + } + boolean isHashSetFilterSupported(){ + return false; + } + + boolean isInterestingItemsFilterSupported(){ + return false; + } /** * Get a list of all filters selected by the user. * @@ -150,10 +168,10 @@ abstract class AbstractFilterPanel extends javax.swing.JPanel implements ActionL * * @return the list of filters */ - List getFilters() { + synchronized List getFilters() { List filtersToUse = new ArrayList<>(); filtersToUse.add(new FileSearchFiltering.FileTypeFilter(getFileType())); - for (AbstractDiscoveryFiltersPanel filterPanel : filters) { + for (AbstractDiscoveryFilterPanel filterPanel : filters) { if (filterPanel.getCheckbox().isSelected()) { FileSearchFiltering.FileFilter filter = filterPanel.getFilter(); if (filter != null) { @@ -164,4 +182,12 @@ abstract class AbstractFilterPanel extends javax.swing.JPanel implements ActionL return filtersToUse; } + @Override + public void valueChanged(ListSelectionEvent evt) { + System.out.println("VALUE CHANGED"); + if (!evt.getValueIsAdjusting()) { + validateFields(); + } + } + } diff --git a/Core/src/org/sleuthkit/autopsy/discovery/Bundle.properties b/Core/src/org/sleuthkit/autopsy/discovery/Bundle.properties index fb326d2d47..91acce8122 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/Bundle.properties +++ b/Core/src/org/sleuthkit/autopsy/discovery/Bundle.properties @@ -73,7 +73,6 @@ UserCreatedFilterPanel.userCreatedCheckbox.text=Possibly User Created # and open the template in the editor. HashSetFilterPanel.hashSetCheckbox.text=Hash Set: InterestingItemFilterPanel.interestingItemsCheckbox.text=Interesting Item: -ObjectDetectedFilterPanel.objectsCheckbox.text=Object Detected: ParentFolderFilterPanel.parentCheckbox.text=Parent Folder: ParentFolderFilterPanel.deleteButton.text=Delete ParentFolderFilterPanel.excludeRadioButton.text=Exclude @@ -93,3 +92,8 @@ ParentFolderFilterPanel.parentLabel.text_1=(All will be used) InterestingItemsFilterPanel.interestingItemsCheckbox.text=Interesting Item: UserCreatedFilterPanel.userCreatedCheckbox.text_1=Possibly User Created PastOccurrencesFilterPanel.pastOccurrencesCheckbox.text=Past Occurrences: +ObjectDetectedFilterPanel.text=Object Detected: +DiscoveryDialog.sortingPanel.border.title=Grouping +DiscoveryDialog.groupByLabel.text=Group By: +DiscoveryDialog.orderByLabel.text=Order Within Groups By: +DiscoveryDialog.orderGroupsByLabel.text=Order Groups By: diff --git a/Core/src/org/sleuthkit/autopsy/discovery/Bundle.properties-MERGED b/Core/src/org/sleuthkit/autopsy/discovery/Bundle.properties-MERGED index 12bbf80636..1361d60a5b 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/Bundle.properties-MERGED +++ b/Core/src/org/sleuthkit/autopsy/discovery/Bundle.properties-MERGED @@ -227,7 +227,6 @@ UserCreatedFilterPanel.userCreatedCheckbox.text=Possibly User Created # and open the template in the editor. HashSetFilterPanel.hashSetCheckbox.text=Hash Set: InterestingItemFilterPanel.interestingItemsCheckbox.text=Interesting Item: -ObjectDetectedFilterPanel.objectsCheckbox.text=Object Detected: ParentFolderFilterPanel.parentCheckbox.text=Parent Folder: ParentFolderFilterPanel.deleteButton.text=Delete ParentFolderFilterPanel.excludeRadioButton.text=Exclude @@ -247,6 +246,11 @@ ParentFolderFilterPanel.parentLabel.text_1=(All will be used) InterestingItemsFilterPanel.interestingItemsCheckbox.text=Interesting Item: UserCreatedFilterPanel.userCreatedCheckbox.text_1=Possibly User Created PastOccurrencesFilterPanel.pastOccurrencesCheckbox.text=Past Occurrences: +ObjectDetectedFilterPanel.text=Object Detected: +DiscoveryDialog.sortingPanel.border.title=Grouping +DiscoveryDialog.groupByLabel.text=Group By: +DiscoveryDialog.orderByLabel.text=Order Within Groups By: +DiscoveryDialog.orderGroupsByLabel.text=Order Groups By: VideoThumbnailPanel.bytes.text=bytes VideoThumbnailPanel.deleted.text=All instances of file are deleted. VideoThumbnailPanel.gigaBytes.text=GB diff --git a/Core/src/org/sleuthkit/autopsy/discovery/DataSourceFilterPanel.java b/Core/src/org/sleuthkit/autopsy/discovery/DataSourceFilterPanel.java index 5319a3878b..84d7ef4656 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/DataSourceFilterPanel.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/DataSourceFilterPanel.java @@ -21,7 +21,7 @@ import org.sleuthkit.datamodel.TskCoreException; * * @author wschaefer */ -final class DataSourceFilterPanel extends AbstractDiscoveryFiltersPanel { +final class DataSourceFilterPanel extends AbstractDiscoveryFilterPanel { private static final long serialVersionUID = 1L; private final static Logger logger = Logger.getLogger(DataSourceFilterPanel.class.getName()); diff --git a/Core/src/org/sleuthkit/autopsy/discovery/DiscoveryDialog.form b/Core/src/org/sleuthkit/autopsy/discovery/DiscoveryDialog.form index 8a39302910..3212106574 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/DiscoveryDialog.form +++ b/Core/src/org/sleuthkit/autopsy/discovery/DiscoveryDialog.form @@ -4,10 +4,10 @@ - + - + @@ -158,20 +158,26 @@ - + - - - - - + + + + + + + + + + - + + @@ -217,6 +223,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Core/src/org/sleuthkit/autopsy/discovery/DiscoveryDialog.java b/Core/src/org/sleuthkit/autopsy/discovery/DiscoveryDialog.java index f7cdb64582..80b25db6c7 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/DiscoveryDialog.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/DiscoveryDialog.java @@ -28,6 +28,9 @@ import org.apache.commons.lang.StringUtils; import org.sleuthkit.autopsy.centralrepository.datamodel.CentralRepoException; import org.sleuthkit.autopsy.centralrepository.datamodel.CentralRepository; import org.sleuthkit.autopsy.coreutils.Logger; +import org.sleuthkit.autopsy.discovery.FileGroup.GroupSortingAlgorithm; +import org.sleuthkit.autopsy.discovery.FileSearch.GroupingAttributeType; +import org.sleuthkit.autopsy.discovery.FileSorter.SortingMethod; final class DiscoveryDialog extends javax.swing.JDialog { @@ -41,6 +44,7 @@ final class DiscoveryDialog extends javax.swing.JDialog { private SearchWorker searchWorker = null; private static DiscoveryDialog discoveryDialog; private FileSearchData.FileType fileType = FileSearchData.FileType.IMAGE; + private final PropertyChangeListener listener; private DiscoveryDialog() { this(null, true); @@ -59,10 +63,12 @@ final class DiscoveryDialog extends javax.swing.JDialog { private DiscoveryDialog(java.awt.Frame parent, boolean modal) { super(parent, modal); initComponents(); - PropertyChangeListener listener = new PropertyChangeListener() { + listener = new PropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent evt) { + System.out.println("PROPERTY CHANGE EVENT"); if (evt.getNewValue() instanceof String) { + System.out.println("IS A STRING"); String errorMessage = (String) evt.getNewValue(); if (StringUtils.isBlank(errorMessage)) { setValid(); @@ -73,11 +79,10 @@ final class DiscoveryDialog extends javax.swing.JDialog { } }; - imageFilterPanel.addPropertyChangeListener(listener); - videoFilterPanel.addPropertyChangeListener(listener); - documentFilterPanel.addPropertyChangeListener(listener); + for (GroupSortingAlgorithm groupSortAlgorithm : GroupSortingAlgorithm.values()) { + groupSortingComboBox.addItem(groupSortAlgorithm); + } updateSearchSettings(); - } /** @@ -97,9 +102,34 @@ final class DiscoveryDialog extends javax.swing.JDialog { fileType = FileSearchData.FileType.IMAGE; remove(imageFilterPanel); remove(videoFilterPanel); + videoFilterPanel.removePropertyChangeListener(listener); remove(documentFilterPanel); + documentFilterPanel.removePropertyChangeListener(listener); add(imageFilterPanel, CENTER); + imageFilterPanel.removePropertyChangeListener(listener); + imageFilterPanel.addPropertyChangeListener(listener); + groupByCombobox.removeAllItems(); + // Set up the grouping attributes + for (FileSearch.GroupingAttributeType type : FileSearch.GroupingAttributeType.getOptionsForGrouping()) { + if ((type != GroupingAttributeType.FREQUENCY || CentralRepository.isEnabled()) + && (type != GroupingAttributeType.OBJECT_DETECTED || imageFilterPanel.isObjectsFilterSupported()) + && (type != GroupingAttributeType.INTERESTING_ITEM_SET || imageFilterPanel.isInterestingItemsFilterSupported()) + && (type != GroupingAttributeType.HASH_LIST_NAME || imageFilterPanel.isHashSetFilterSupported())) { + groupByCombobox.addItem(type); + } + } + + orderByCombobox.removeAllItems(); + // Set up the file order list + for (FileSorter.SortingMethod method : FileSorter.SortingMethod.getOptionsForOrdering()) { + if (method != SortingMethod.BY_FREQUENCY || CentralRepository.isEnabled()) { + orderByCombobox.addItem(method); + } + } + + groupSortingComboBox.setSelectedIndex(0); pack(); + repaint(); } /** @@ -119,10 +149,17 @@ final class DiscoveryDialog extends javax.swing.JDialog { searchButton = new javax.swing.JButton(); errorLabel = new javax.swing.JLabel(); javax.swing.JButton cancelButton = new javax.swing.JButton(); + javax.swing.JPanel sortingPanel = new javax.swing.JPanel(); + groupByCombobox = new javax.swing.JComboBox<>(); + orderByCombobox = new javax.swing.JComboBox<>(); + javax.swing.JLabel orderGroupsByLabel = new javax.swing.JLabel(); + javax.swing.JLabel orderByLabel = new javax.swing.JLabel(); + javax.swing.JLabel groupByLabel = new javax.swing.JLabel(); + groupSortingComboBox = new javax.swing.JComboBox<>(); setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); - setMinimumSize(new java.awt.Dimension(800, 600)); - setPreferredSize(new java.awt.Dimension(1000, 600)); + setMinimumSize(new java.awt.Dimension(1000, 300)); + setPreferredSize(new java.awt.Dimension(1200, 600)); imagesButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/images/pictures-icon.png"))); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(imagesButton, org.openide.util.NbBundle.getMessage(DiscoveryDialog.class, "DiscoveryDialog.imagesButton.text")); // NOI18N @@ -206,23 +243,72 @@ final class DiscoveryDialog extends javax.swing.JDialog { } }); + sortingPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(DiscoveryDialog.class, "DiscoveryDialog.sortingPanel.border.title"))); // NOI18N + sortingPanel.setPreferredSize(new java.awt.Dimension(345, 112)); + + org.openide.awt.Mnemonics.setLocalizedText(orderGroupsByLabel, org.openide.util.NbBundle.getMessage(DiscoveryDialog.class, "DiscoveryDialog.orderGroupsByLabel.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(orderByLabel, org.openide.util.NbBundle.getMessage(DiscoveryDialog.class, "DiscoveryDialog.orderByLabel.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(groupByLabel, org.openide.util.NbBundle.getMessage(DiscoveryDialog.class, "DiscoveryDialog.groupByLabel.text")); // NOI18N + + javax.swing.GroupLayout sortingPanelLayout = new javax.swing.GroupLayout(sortingPanel); + sortingPanel.setLayout(sortingPanelLayout); + sortingPanelLayout.setHorizontalGroup( + sortingPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(sortingPanelLayout.createSequentialGroup() + .addContainerGap() + .addGroup(sortingPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(sortingPanelLayout.createSequentialGroup() + .addComponent(groupByLabel) + .addGap(88, 88, 88) + .addGroup(sortingPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(groupSortingComboBox, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(groupByCombobox, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(orderByLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(orderByCombobox, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addComponent(orderGroupsByLabel)) + .addContainerGap()) + ); + sortingPanelLayout.setVerticalGroup( + sortingPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(sortingPanelLayout.createSequentialGroup() + .addGap(6, 6, 6) + .addGroup(sortingPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(groupByCombobox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(groupByLabel) + .addComponent(orderByCombobox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(orderByLabel)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(sortingPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(groupSortingComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(orderGroupsByLabel)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(jPanel1Layout.createSequentialGroup() + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup() .addContainerGap() - .addComponent(errorLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 828, Short.MAX_VALUE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(cancelButton) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(searchButton) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(sortingPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 976, Short.MAX_VALUE) + .addGroup(jPanel1Layout.createSequentialGroup() + .addComponent(errorLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 828, Short.MAX_VALUE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(cancelButton) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(searchButton))) .addContainerGap()) ); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(jPanel1Layout.createSequentialGroup() - .addContainerGap() + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup() + .addComponent(sortingPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 95, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(errorLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) @@ -239,7 +325,9 @@ final class DiscoveryDialog extends javax.swing.JDialog { private void imagesButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_imagesButtonActionPerformed // resetTopComponent(); remove(videoFilterPanel); + videoFilterPanel.removePropertyChangeListener(listener); remove(documentFilterPanel); + documentFilterPanel.removePropertyChangeListener(listener); add(imageFilterPanel, CENTER); imagesButton.setSelected(true); imagesButton.setEnabled(false); @@ -252,11 +340,16 @@ final class DiscoveryDialog extends javax.swing.JDialog { documentsButton.setEnabled(true); documentsButton.setBackground(UNSELECTED_COLOR); fileType = FileSearchData.FileType.IMAGE; + imageFilterPanel.addPropertyChangeListener(listener); + pack(); + repaint(); }//GEN-LAST:event_imagesButtonActionPerformed private void videosButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_videosButtonActionPerformed remove(imageFilterPanel); + imageFilterPanel.removePropertyChangeListener(listener); remove(documentFilterPanel); + documentFilterPanel.removePropertyChangeListener(listener); add(videoFilterPanel, CENTER); imagesButton.setSelected(false); imagesButton.setEnabled(true); @@ -268,13 +361,19 @@ final class DiscoveryDialog extends javax.swing.JDialog { documentsButton.setSelected(false); documentsButton.setEnabled(true); documentsButton.setBackground(UNSELECTED_COLOR); + videoFilterPanel.addPropertyChangeListener(listener); fileType = FileSearchData.FileType.VIDEO; + pack(); + repaint(); }//GEN-LAST:event_videosButtonActionPerformed private void documentsButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_documentsButtonActionPerformed remove(imageFilterPanel); - remove(documentFilterPanel); + imageFilterPanel.removePropertyChangeListener(listener); + remove(videoFilterPanel); + videoFilterPanel.removePropertyChangeListener(listener); add(documentFilterPanel, CENTER); + documentFilterPanel.removePropertyChangeListener(listener); documentsButton.setSelected(true); documentsButton.setEnabled(false); documentsButton.setBackground(SELECTED_COLOR); @@ -286,6 +385,9 @@ final class DiscoveryDialog extends javax.swing.JDialog { imagesButton.setEnabled(true); imagesButton.setBackground(UNSELECTED_COLOR); fileType = FileSearchData.FileType.DOCUMENTS; + documentFilterPanel.addPropertyChangeListener(listener); + pack(); + repaint(); }//GEN-LAST:event_documentsButtonActionPerformed private void searchButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_searchButtonActionPerformed @@ -347,6 +449,7 @@ final class DiscoveryDialog extends javax.swing.JDialog { * The settings are valid so enable the Search button */ private void setValid() { + System.out.println("SET VALID"); errorLabel.setText(""); searchButton.setEnabled(true); } @@ -358,6 +461,7 @@ final class DiscoveryDialog extends javax.swing.JDialog { * @param error */ private void setInvalid(String error) { + System.out.println("SET INVALID"); errorLabel.setText(error); searchButton.setEnabled(false); } @@ -365,8 +469,11 @@ final class DiscoveryDialog extends javax.swing.JDialog { // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton documentsButton; private javax.swing.JLabel errorLabel; + private javax.swing.JComboBox groupByCombobox; + private javax.swing.JComboBox groupSortingComboBox; private javax.swing.JButton imagesButton; private javax.swing.JPanel jPanel1; + private javax.swing.JComboBox orderByCombobox; private javax.swing.JButton searchButton; private javax.swing.JButton videosButton; // End of variables declaration//GEN-END:variables diff --git a/Core/src/org/sleuthkit/autopsy/discovery/DocumentFilterPanel.form b/Core/src/org/sleuthkit/autopsy/discovery/DocumentFilterPanel.form index 4f9abb50dc..5f3eab1a5f 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/DocumentFilterPanel.form +++ b/Core/src/org/sleuthkit/autopsy/discovery/DocumentFilterPanel.form @@ -1,6 +1,6 @@ -
+ diff --git a/Core/src/org/sleuthkit/autopsy/discovery/DocumentFilterPanel.java b/Core/src/org/sleuthkit/autopsy/discovery/DocumentFilterPanel.java index 89201b8681..fa23484e14 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/DocumentFilterPanel.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/DocumentFilterPanel.java @@ -11,7 +11,7 @@ import org.sleuthkit.autopsy.centralrepository.datamodel.CentralRepository; * * @author wschaefer */ -final class DocumentFilterPanel extends AbstractFilterPanel { +final class DocumentFilterPanel extends AbstractFiltersPanel { private static final long serialVersionUID = 1L; private static final FileSearchData.FileType FILE_TYPE = FileSearchData.FileType.DOCUMENTS; @@ -20,10 +20,8 @@ final class DocumentFilterPanel extends AbstractFilterPanel { * Creates new form DocumentFilterPanel */ DocumentFilterPanel() { - super(); initComponents(); - SizeFilterPanel sizeFilterPanel = new SizeFilterPanel(FileSearchData.FileType.DOCUMENTS); - addFilter(sizeFilterPanel, false, null); + addFilter(new SizeFilterPanel(FileSearchData.FileType.DOCUMENTS), false, null); addFilter(new DataSourceFilterPanel(), false, null); int[] pastOccurrencesIndices; if (!CentralRepository.isEnabled()) { diff --git a/Core/src/org/sleuthkit/autopsy/discovery/HashSetFilterPanel.java b/Core/src/org/sleuthkit/autopsy/discovery/HashSetFilterPanel.java index 5cd43a66c9..3ca2505799 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/HashSetFilterPanel.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/HashSetFilterPanel.java @@ -20,7 +20,7 @@ import org.sleuthkit.datamodel.TskCoreException; * * @author wschaefer */ -public class HashSetFilterPanel extends AbstractDiscoveryFiltersPanel { +public class HashSetFilterPanel extends AbstractDiscoveryFilterPanel { private static final long serialVersionUID = 1L; private final static Logger logger = Logger.getLogger(HashSetFilterPanel.class.getName()); diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ImageFilterPanel.java b/Core/src/org/sleuthkit/autopsy/discovery/ImageFilterPanel.java index 442c738eaf..0845407451 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ImageFilterPanel.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/ImageFilterPanel.java @@ -11,7 +11,7 @@ import org.sleuthkit.autopsy.centralrepository.datamodel.CentralRepository; * * @author wschaefer */ -final class ImageFilterPanel extends AbstractFilterPanel { +final class ImageFilterPanel extends AbstractFiltersPanel { private static final long serialVersionUID = 1L; private static final FileSearchData.FileType FILE_TYPE = FileSearchData.FileType.IMAGE; @@ -20,12 +20,11 @@ final class ImageFilterPanel extends AbstractFilterPanel { * Creates new form ImageFilterPanel */ ImageFilterPanel() { - super(); initComponents(); SizeFilterPanel sizeFilterPanel = new SizeFilterPanel(FILE_TYPE); int[] sizeIndicesSelected = {1, 2, 3, 4, 5}; addFilter(sizeFilterPanel, true, sizeIndicesSelected); - addFilter(new DataSourceFilterPanel(), false, null); + addFilter(new ObjectDetectedFilterPanel(), false, null); int[] pastOccurrencesIndices; if (!CentralRepository.isEnabled()) { pastOccurrencesIndices = new int[]{0}; @@ -36,7 +35,8 @@ final class ImageFilterPanel extends AbstractFilterPanel { addFilter(new UserCreatedFilterPanel(), false, null); addFilter(new HashSetFilterPanel(), false, null); addFilter(new InterestingItemsFilterPanel(), false, null); - addFilter(new ObjectDetectedFilterPanel(), false, null); + + addFilter(new DataSourceFilterPanel(), false, null); addFilter(new ParentFolderFilterPanel(), false, null); endPanel(); } diff --git a/Core/src/org/sleuthkit/autopsy/discovery/InterestingItemsFilterPanel.java b/Core/src/org/sleuthkit/autopsy/discovery/InterestingItemsFilterPanel.java index c305d4e997..721e6ff486 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/InterestingItemsFilterPanel.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/InterestingItemsFilterPanel.java @@ -20,7 +20,7 @@ import org.sleuthkit.datamodel.TskCoreException; * * @author wschaefer */ -public class InterestingItemsFilterPanel extends AbstractDiscoveryFiltersPanel { +public class InterestingItemsFilterPanel extends AbstractDiscoveryFilterPanel { private static final long serialVersionUID = 1L; private final static Logger logger = Logger.getLogger(InterestingItemsFilterPanel.class.getName()); diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ObjectDetectedFilterPanel.form b/Core/src/org/sleuthkit/autopsy/discovery/ObjectDetectedFilterPanel.form index cd5b0421d1..0244e0ece0 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ObjectDetectedFilterPanel.form +++ b/Core/src/org/sleuthkit/autopsy/discovery/ObjectDetectedFilterPanel.form @@ -5,8 +5,22 @@ - + + + + + + + + + + + + + + + @@ -14,6 +28,9 @@ + + + @@ -33,20 +50,26 @@ - - - - + - + + + + + + + + + + diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ObjectDetectedFilterPanel.java b/Core/src/org/sleuthkit/autopsy/discovery/ObjectDetectedFilterPanel.java index 0b207c7d12..1381869cc1 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ObjectDetectedFilterPanel.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/ObjectDetectedFilterPanel.java @@ -20,7 +20,7 @@ import org.sleuthkit.datamodel.TskCoreException; * * @author wschaefer */ -public class ObjectDetectedFilterPanel extends AbstractDiscoveryFiltersPanel { +public class ObjectDetectedFilterPanel extends AbstractDiscoveryFilterPanel { private static final long serialVersionUID = 1L; private final static Logger logger = Logger.getLogger(ObjectDetectedFilterPanel.class.getName()); @@ -66,15 +66,28 @@ public class ObjectDetectedFilterPanel extends AbstractDiscoveryFiltersPanel { objectsScrollPane = new javax.swing.JScrollPane(); objectsList = new javax.swing.JList<>(); - org.openide.awt.Mnemonics.setLocalizedText(objectsCheckbox, org.openide.util.NbBundle.getMessage(ObjectDetectedFilterPanel.class, "ObjectDetectedFilterPanel.objectsCheckbox.text")); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(objectsCheckbox, org.openide.util.NbBundle.getMessage(ObjectDetectedFilterPanel.class, "ObjectDetectedFilterPanel.text")); // NOI18N + objectsCheckbox.setHorizontalAlignment(javax.swing.SwingConstants.LEFT); + objectsCheckbox.setHorizontalTextPosition(javax.swing.SwingConstants.LEFT); + objectsCheckbox.setMaximumSize(new java.awt.Dimension(103, 25)); + objectsCheckbox.setMinimumSize(new java.awt.Dimension(103, 25)); + objectsCheckbox.setName(""); // NOI18N + objectsCheckbox.setPreferredSize(new java.awt.Dimension(103, 25)); + objectsCheckbox.setVerticalAlignment(javax.swing.SwingConstants.TOP); + objectsCheckbox.setVerticalTextPosition(javax.swing.SwingConstants.TOP); objectsCheckbox.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { objectsCheckboxActionPerformed(evt); } }); + setMinimumSize(new java.awt.Dimension(200, 30)); setPreferredSize(new java.awt.Dimension(300, 60)); + objectsScrollPane.setMinimumSize(new java.awt.Dimension(0, 0)); + objectsScrollPane.setName(""); // NOI18N + objectsScrollPane.setPreferredSize(new java.awt.Dimension(260, 50)); + objectsList.setModel(new DefaultListModel()); objectsList.setEnabled(false); objectsList.setVisibleRowCount(2); @@ -84,13 +97,11 @@ public class ObjectDetectedFilterPanel extends AbstractDiscoveryFiltersPanel { this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addComponent(objectsScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 300, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(0, 12, Short.MAX_VALUE)) + .addComponent(objectsScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 300, Short.MAX_VALUE) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(objectsScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 60, Short.MAX_VALUE) + .addComponent(objectsScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 64, Short.MAX_VALUE) ); }// //GEN-END:initComponents diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ParentFolderFilterPanel.java b/Core/src/org/sleuthkit/autopsy/discovery/ParentFolderFilterPanel.java index 89cb847a0d..5613e666ae 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ParentFolderFilterPanel.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/ParentFolderFilterPanel.java @@ -17,11 +17,12 @@ import org.sleuthkit.autopsy.discovery.FileSearchFiltering.ParentSearchTerm; * * @author wschaefer */ -public class ParentFolderFilterPanel extends AbstractDiscoveryFiltersPanel { +public class ParentFolderFilterPanel extends AbstractDiscoveryFilterPanel { private static final long serialVersionUID = 1L; private DefaultListModel parentListModel; - + private static final String[] DEFAULT_IGNORED_PATHS = {"/Windows/", "/Program Files/"}; //NON-NLS + /** * Creates new form ParentFolderFilterPanel */ @@ -37,6 +38,9 @@ public class ParentFolderFilterPanel extends AbstractDiscoveryFiltersPanel { fullRadioButton.setSelected(true); includeRadioButton.setSelected(true); parentListModel = (DefaultListModel) parentList.getModel(); + for (String ignorePath : DEFAULT_IGNORED_PATHS) { + parentListModel.add(parentListModel.size(), new ParentSearchTerm(ignorePath, false, false)); + } } /** diff --git a/Core/src/org/sleuthkit/autopsy/discovery/PastOccurrencesFilterPanel.java b/Core/src/org/sleuthkit/autopsy/discovery/PastOccurrencesFilterPanel.java index 2db4ea535f..8014444108 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/PastOccurrencesFilterPanel.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/PastOccurrencesFilterPanel.java @@ -16,7 +16,7 @@ import org.sleuthkit.autopsy.discovery.FileSearchData.Frequency; * * @author wschaefer */ -public class PastOccurrencesFilterPanel extends AbstractDiscoveryFiltersPanel { +public class PastOccurrencesFilterPanel extends AbstractDiscoveryFilterPanel { private static final long serialVersionUID = 1L; diff --git a/Core/src/org/sleuthkit/autopsy/discovery/SizeFilterPanel.form b/Core/src/org/sleuthkit/autopsy/discovery/SizeFilterPanel.form index 433b653299..d3a628f715 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/SizeFilterPanel.form +++ b/Core/src/org/sleuthkit/autopsy/discovery/SizeFilterPanel.form @@ -7,6 +7,19 @@ + + + + + + + + + + + + + @@ -14,6 +27,9 @@ + + + @@ -33,7 +49,7 @@ - + @@ -47,6 +63,11 @@ + + + + + diff --git a/Core/src/org/sleuthkit/autopsy/discovery/SizeFilterPanel.java b/Core/src/org/sleuthkit/autopsy/discovery/SizeFilterPanel.java index 1d9039fc3a..27ca9feb64 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/SizeFilterPanel.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/SizeFilterPanel.java @@ -17,7 +17,7 @@ import org.sleuthkit.autopsy.discovery.FileSearchData.FileSize; * * @author wschaefer */ -final class SizeFilterPanel extends AbstractDiscoveryFiltersPanel { +final class SizeFilterPanel extends AbstractDiscoveryFilterPanel { private static final long serialVersionUID = 1L; @@ -43,14 +43,24 @@ final class SizeFilterPanel extends AbstractDiscoveryFiltersPanel { sizeList = new javax.swing.JList<>(); org.openide.awt.Mnemonics.setLocalizedText(sizeCheckbox, org.openide.util.NbBundle.getMessage(SizeFilterPanel.class, "SizeFilterPanel.sizeCheckbox.text")); // NOI18N + sizeCheckbox.setHorizontalAlignment(javax.swing.SwingConstants.LEFT); + sizeCheckbox.setHorizontalTextPosition(javax.swing.SwingConstants.LEFT); + sizeCheckbox.setMaximumSize(new java.awt.Dimension(103, 25)); + sizeCheckbox.setMinimumSize(new java.awt.Dimension(103, 25)); + sizeCheckbox.setPreferredSize(new java.awt.Dimension(103, 25)); + sizeCheckbox.setVerticalAlignment(javax.swing.SwingConstants.TOP); + sizeCheckbox.setVerticalTextPosition(javax.swing.SwingConstants.TOP); sizeCheckbox.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { sizeCheckboxActionPerformed(evt); } }); + setMinimumSize(new java.awt.Dimension(200, 30)); setPreferredSize(new java.awt.Dimension(300, 60)); + sizeScrollPane.setPreferredSize(new java.awt.Dimension(300, 60)); + sizeList.setModel(new DefaultListModel()); sizeList.setEnabled(false); sizeList.setVisibleRowCount(5); @@ -60,12 +70,12 @@ final class SizeFilterPanel extends AbstractDiscoveryFiltersPanel { this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(sizeScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 300, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(sizeScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() - .addComponent(sizeScrollPane) + .addComponent(sizeScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGap(0, 0, 0)) ); }// //GEN-END:initComponents diff --git a/Core/src/org/sleuthkit/autopsy/discovery/UserCreatedFilterPanel.java b/Core/src/org/sleuthkit/autopsy/discovery/UserCreatedFilterPanel.java index 64c9f593fd..bf4ffde7be 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/UserCreatedFilterPanel.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/UserCreatedFilterPanel.java @@ -13,7 +13,7 @@ import javax.swing.JList; * * @author wschaefer */ -public class UserCreatedFilterPanel extends AbstractDiscoveryFiltersPanel { +public class UserCreatedFilterPanel extends AbstractDiscoveryFilterPanel { private static final long serialVersionUID = 1L; diff --git a/Core/src/org/sleuthkit/autopsy/discovery/VideoFilterPanel.form b/Core/src/org/sleuthkit/autopsy/discovery/VideoFilterPanel.form index 4f9abb50dc..5f3eab1a5f 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/VideoFilterPanel.form +++ b/Core/src/org/sleuthkit/autopsy/discovery/VideoFilterPanel.form @@ -1,6 +1,6 @@ - + diff --git a/Core/src/org/sleuthkit/autopsy/discovery/VideoFilterPanel.java b/Core/src/org/sleuthkit/autopsy/discovery/VideoFilterPanel.java index 365bbcfd4c..79df6ec5a4 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/VideoFilterPanel.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/VideoFilterPanel.java @@ -11,7 +11,7 @@ import org.sleuthkit.autopsy.centralrepository.datamodel.CentralRepository; * * @author wschaefer */ -final class VideoFilterPanel extends AbstractFilterPanel { +final class VideoFilterPanel extends AbstractFiltersPanel { private static final long serialVersionUID = 1L; private static final FileSearchData.FileType FILE_TYPE = FileSearchData.FileType.VIDEO; @@ -20,10 +20,8 @@ final class VideoFilterPanel extends AbstractFilterPanel { * Creates new form VideoFilterPanel */ VideoFilterPanel() { - super(); initComponents(); - SizeFilterPanel sizeFilterPanel = new SizeFilterPanel(FileSearchData.FileType.VIDEO); - addFilter(sizeFilterPanel, true, null); + addFilter(new SizeFilterPanel(FileSearchData.FileType.VIDEO), true, null); addFilter(new DataSourceFilterPanel(), false, null); int[] pastOccurrencesIndices; if (!CentralRepository.isEnabled()) {