19 package org.sleuthkit.autopsy.keywordsearch;
21 import java.awt.event.ActionEvent;
22 import java.awt.event.ActionListener;
23 import java.awt.event.MouseEvent;
24 import java.beans.PropertyChangeEvent;
25 import java.beans.PropertyChangeListener;
26 import java.util.logging.Level;
27 import javax.swing.SwingUtilities;
28 import javax.swing.event.PopupMenuEvent;
29 import javax.swing.event.PopupMenuListener;
39 class DropdownToolbar
extends javax.swing.JPanel {
41 private static final long serialVersionUID = 1L;
42 private static final Logger logger = Logger.
getLogger(DropdownToolbar.class.getName());
43 private static DropdownToolbar instance;
44 private SearchSettingsChangeListener searchSettingsChangeListener;
45 private boolean active =
false;
46 private DropdownSingleTermSearchPanel dropPanel = null;
55 public synchronized static DropdownToolbar getDefault() {
56 if (instance == null) {
57 instance =
new DropdownToolbar();
67 private DropdownToolbar() {
69 customizeComponents();
76 private void customizeComponents() {
77 searchSettingsChangeListener =
new SearchSettingsChangeListener();
78 KeywordSearch.getServer().addServerActionListener(searchSettingsChangeListener);
79 Case.addPropertyChangeListener(searchSettingsChangeListener);
81 DropdownListSearchPanel listsPanel = DropdownListSearchPanel.getDefault();
82 listsPanel.addSearchButtonActionListener((ActionEvent e) -> {
83 listsMenu.setVisible(
false);
87 listsMenu.setSize(listsPanel.getPreferredSize().width + 6, listsPanel.getPreferredSize().height + 6);
88 listsMenu.add(listsPanel);
89 listsMenu.addPopupMenuListener(
new PopupMenuListener() {
91 public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
92 listsButton.setSelected(
true);
96 public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
97 listsButton.setSelected(
false);
101 public void popupMenuCanceled(PopupMenuEvent e) {
102 listsButton.setSelected(
false);
106 dropPanel = DropdownSingleTermSearchPanel.getDefault();
107 dropPanel.addSearchButtonActionListener(
new ActionListener() {
109 public void actionPerformed(ActionEvent e) {
110 searchMenu.setVisible(
false);
113 searchMenu.setSize(dropPanel.getPreferredSize().width + 6, dropPanel.getPreferredSize().height + 6);
114 searchMenu.add(dropPanel);
115 searchMenu.addPopupMenuListener(
new PopupMenuListener() {
117 public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
118 searchDropButton.setSelected(
true);
122 public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
123 searchDropButton.setSelected(
false);
127 public void popupMenuCanceled(PopupMenuEvent e) {
128 searchDropButton.setSelected(
false);
134 private void maybeShowListsPopup(MouseEvent evt) {
135 if (!active || !listsButton.isEnabled()) {
138 if (evt != null && !SwingUtilities.isLeftMouseButton(evt)) {
141 listsMenu.show(listsButton, listsButton.getWidth() - listsMenu.getWidth(), listsButton.getHeight() - 1);
144 private void maybeShowSearchPopup(MouseEvent evt) {
145 if (!active || !searchDropButton.isEnabled()) {
148 if (evt != null && !SwingUtilities.isLeftMouseButton(evt)) {
151 searchMenu.show(searchDropButton, searchDropButton.getWidth() - searchMenu.getWidth(), searchDropButton.getHeight() - 1);
159 String changed = evt.getPropertyName();
161 if (null != evt.getNewValue()) {
162 boolean disableSearch =
false;
168 if (server.coreIsOpen() ==
false) {
169 disableSearch =
true;
172 Index indexInfo = server.getIndexInfo();
173 if (IndexFinder.getCurrentSolrVersion().equals(indexInfo.getSolrVersion())) {
179 boolean schemaIsCurrent = IndexFinder.getCurrentSchemaVersion().equals(indexInfo.getSchemaVersion());
180 listsButton.setEnabled(schemaIsCurrent);
181 searchDropButton.setEnabled(
true);
182 dropPanel.setRegexSearchEnabled(schemaIsCurrent);
189 disableSearch =
true;
196 logger.log(Level.SEVERE,
"Error getting text index info", ex);
197 disableSearch =
true;
201 searchDropButton.setEnabled(
false);
202 listsButton.setEnabled(
false);
210 dropPanel.clearSearchBox();
211 searchDropButton.setEnabled(
false);
212 listsButton.setEnabled(
false);
223 logger.log(Level.SEVERE,
"Error executing Solr query", ex);
240 @SuppressWarnings(
"unchecked")
242 private
void initComponents() {
244 listsMenu =
new javax.swing.JPopupMenu();
245 searchMenu =
new javax.swing.JPopupMenu();
246 listsButton =
new javax.swing.JButton();
247 searchDropButton =
new javax.swing.JButton();
248 jSeparator1 =
new javax.swing.JSeparator();
252 listsButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/keywordsearch/watchbutton-icon.png")));
253 listsButton.setText(
org.openide.util.NbBundle.getMessage(DropdownToolbar.class,
"ListBundleName"));
254 listsButton.setBorderPainted(
false);
255 listsButton.setContentAreaFilled(
false);
256 listsButton.setEnabled(
false);
257 listsButton.setRolloverIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/keywordsearch/watchbutton-icon-rollover.png")));
258 listsButton.setRolloverSelectedIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/keywordsearch/watchbutton-icon-pressed.png")));
259 listsButton.addMouseListener(
new java.awt.event.MouseAdapter() {
260 public void mousePressed(java.awt.event.MouseEvent evt) {
261 listsButtonMousePressed(evt);
264 listsButton.addActionListener(
new java.awt.event.ActionListener() {
265 public void actionPerformed(java.awt.event.ActionEvent evt) {
266 listsButtonActionPerformed(evt);
270 searchDropButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/keywordsearch/searchbutton-icon.png")));
271 searchDropButton.setText(
org.openide.util.NbBundle.getMessage(DropdownToolbar.class,
"KeywordSearchPanel.searchDropButton.text"));
272 searchDropButton.setBorderPainted(
false);
273 searchDropButton.setContentAreaFilled(
false);
274 searchDropButton.setEnabled(
false);
275 searchDropButton.setMaximumSize(
new java.awt.Dimension(146, 27));
276 searchDropButton.setMinimumSize(
new java.awt.Dimension(146, 27));
277 searchDropButton.setPreferredSize(
new java.awt.Dimension(146, 27));
278 searchDropButton.setRolloverIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/keywordsearch/searchbutton-icon-rollover.png")));
279 searchDropButton.setRolloverSelectedIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/keywordsearch/searchbutton-icon-pressed.png")));
280 searchDropButton.addMouseListener(
new java.awt.event.MouseAdapter() {
281 public void mousePressed(java.awt.event.MouseEvent evt) {
282 searchDropButtonMousePressed(evt);
286 jSeparator1.setOrientation(javax.swing.SwingConstants.VERTICAL);
288 javax.swing.GroupLayout layout =
new javax.swing.GroupLayout(
this);
289 this.setLayout(layout);
290 layout.setHorizontalGroup(
291 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
292 .addGroup(layout.createSequentialGroup()
293 .addComponent(listsButton)
294 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
295 .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 7, javax.swing.GroupLayout.PREFERRED_SIZE)
297 .addComponent(searchDropButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
300 layout.setVerticalGroup(
301 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
302 .addGroup(layout.createSequentialGroup()
303 .addGap(0, 0, Short.MAX_VALUE)
304 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING,
false)
305 .addComponent(listsButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
306 .addComponent(searchDropButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
307 .addComponent(jSeparator1)))
311 private void listsButtonMousePressed(java.awt.event.MouseEvent evt) {
312 maybeShowListsPopup(evt);
315 private void listsButtonActionPerformed(java.awt.event.ActionEvent evt) {
319 private void searchDropButtonMousePressed(java.awt.event.MouseEvent evt) {
320 maybeShowSearchPopup(evt);
324 private javax.swing.JSeparator jSeparator1;
325 private javax.swing.JButton listsButton;
326 private javax.swing.JPopupMenu listsMenu;
327 private javax.swing.JButton searchDropButton;
328 private javax.swing.JPopupMenu searchMenu;
int queryNumIndexedFiles()
static boolean runningWithGUI
static void fireNumIndexedFilesChange(Integer oldNum, Integer newNum)
static synchronized Server getServer()
static final String CORE_EVT
synchronized static Logger getLogger(String name)