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.EnumSet;
27 import java.util.logging.Level;
28 import javax.swing.SwingUtilities;
29 import javax.swing.event.PopupMenuEvent;
30 import javax.swing.event.PopupMenuListener;
40 class DropdownToolbar
extends javax.swing.JPanel {
42 private static final long serialVersionUID = 1L;
43 private static final Logger logger = Logger.
getLogger(DropdownToolbar.class.getName());
44 private static DropdownToolbar instance;
45 private SearchSettingsChangeListener searchSettingsChangeListener;
46 private boolean active =
false;
47 private DropdownSingleTermSearchPanel dropPanel = null;
56 public synchronized static DropdownToolbar getDefault() {
57 if (instance == null) {
58 instance =
new DropdownToolbar();
68 private DropdownToolbar() {
70 customizeComponents();
77 private void customizeComponents() {
78 searchSettingsChangeListener =
new SearchSettingsChangeListener();
79 KeywordSearch.getServer().addServerActionListener(searchSettingsChangeListener);
80 Case.addEventTypeSubscriber(EnumSet.of(Case.Events.CURRENT_CASE), searchSettingsChangeListener);
82 DropdownListSearchPanel listsPanel = DropdownListSearchPanel.getDefault();
83 listsPanel.addSearchButtonActionListener((ActionEvent e) -> {
84 listsMenu.setVisible(
false);
88 listsMenu.setSize(listsPanel.getPreferredSize().width + 6, listsPanel.getPreferredSize().height + 6);
89 listsMenu.add(listsPanel);
90 listsMenu.addPopupMenuListener(
new PopupMenuListener() {
92 public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
93 listsButton.setSelected(
true);
97 public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
98 listsButton.setSelected(
false);
102 public void popupMenuCanceled(PopupMenuEvent e) {
103 listsButton.setSelected(
false);
107 dropPanel = DropdownSingleTermSearchPanel.getDefault();
108 dropPanel.addSearchButtonActionListener(
new ActionListener() {
110 public void actionPerformed(ActionEvent e) {
111 searchMenu.setVisible(
false);
114 searchMenu.setSize(dropPanel.getPreferredSize().width + 6, dropPanel.getPreferredSize().height + 6);
115 searchMenu.add(dropPanel);
116 searchMenu.addPopupMenuListener(
new PopupMenuListener() {
118 public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
119 searchDropButton.setSelected(
true);
123 public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
124 searchDropButton.setSelected(
false);
128 public void popupMenuCanceled(PopupMenuEvent e) {
129 searchDropButton.setSelected(
false);
135 private void maybeShowListsPopup(MouseEvent evt) {
136 if (!active || !listsButton.isEnabled()) {
139 if (evt != null && !SwingUtilities.isLeftMouseButton(evt)) {
142 listsMenu.show(listsButton, listsButton.getWidth() - listsMenu.getWidth(), listsButton.getHeight() - 1);
145 private void maybeShowSearchPopup(MouseEvent evt) {
146 if (!active || !searchDropButton.isEnabled()) {
149 if (evt != null && !SwingUtilities.isLeftMouseButton(evt)) {
152 searchMenu.show(searchDropButton, searchDropButton.getWidth() - searchMenu.getWidth(), searchDropButton.getHeight() - 1);
160 String changed = evt.getPropertyName();
162 if (null != evt.getNewValue()) {
163 boolean disableSearch =
false;
169 if (server.coreIsOpen() ==
false) {
170 disableSearch =
true;
173 Index indexInfo = server.getIndexInfo();
174 if (IndexFinder.getCurrentSolrVersion().equals(indexInfo.getSolrVersion())) {
180 boolean schemaIsCurrent = IndexFinder.getCurrentSchemaVersion().equals(indexInfo.getSchemaVersion());
181 listsButton.setEnabled(schemaIsCurrent);
182 searchDropButton.setEnabled(
true);
183 dropPanel.setRegexSearchEnabled(schemaIsCurrent);
190 disableSearch =
true;
197 logger.log(Level.SEVERE,
"Error getting text index info", ex);
198 disableSearch =
true;
202 searchDropButton.setEnabled(
false);
203 listsButton.setEnabled(
false);
211 dropPanel.clearSearchBox();
212 searchDropButton.setEnabled(
false);
213 listsButton.setEnabled(
false);
224 logger.log(Level.SEVERE,
"Error executing Solr query", ex);
241 @SuppressWarnings(
"unchecked")
243 private
void initComponents() {
245 listsMenu =
new javax.swing.JPopupMenu();
246 searchMenu =
new javax.swing.JPopupMenu();
247 listsButton =
new javax.swing.JButton();
248 searchDropButton =
new javax.swing.JButton();
249 jSeparator1 =
new javax.swing.JSeparator();
253 listsButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/keywordsearch/watchbutton-icon.png")));
254 listsButton.setText(
org.openide.util.NbBundle.getMessage(DropdownToolbar.class,
"ListBundleName"));
255 listsButton.setBorderPainted(
false);
256 listsButton.setContentAreaFilled(
false);
257 listsButton.setEnabled(
false);
258 listsButton.setRolloverIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/keywordsearch/watchbutton-icon-rollover.png")));
259 listsButton.setRolloverSelectedIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/keywordsearch/watchbutton-icon-pressed.png")));
260 listsButton.addMouseListener(
new java.awt.event.MouseAdapter() {
261 public void mousePressed(java.awt.event.MouseEvent evt) {
262 listsButtonMousePressed(evt);
265 listsButton.addActionListener(
new java.awt.event.ActionListener() {
266 public void actionPerformed(java.awt.event.ActionEvent evt) {
267 listsButtonActionPerformed(evt);
271 searchDropButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/keywordsearch/searchbutton-icon.png")));
272 searchDropButton.setText(
org.openide.util.NbBundle.getMessage(DropdownToolbar.class,
"KeywordSearchPanel.searchDropButton.text"));
273 searchDropButton.setBorderPainted(
false);
274 searchDropButton.setContentAreaFilled(
false);
275 searchDropButton.setEnabled(
false);
276 searchDropButton.setMaximumSize(
new java.awt.Dimension(146, 27));
277 searchDropButton.setMinimumSize(
new java.awt.Dimension(146, 27));
278 searchDropButton.setPreferredSize(
new java.awt.Dimension(146, 27));
279 searchDropButton.setRolloverIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/keywordsearch/searchbutton-icon-rollover.png")));
280 searchDropButton.setRolloverSelectedIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/keywordsearch/searchbutton-icon-pressed.png")));
281 searchDropButton.addMouseListener(
new java.awt.event.MouseAdapter() {
282 public void mousePressed(java.awt.event.MouseEvent evt) {
283 searchDropButtonMousePressed(evt);
287 jSeparator1.setOrientation(javax.swing.SwingConstants.VERTICAL);
289 javax.swing.GroupLayout layout =
new javax.swing.GroupLayout(
this);
290 this.setLayout(layout);
291 layout.setHorizontalGroup(
292 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
293 .addGroup(layout.createSequentialGroup()
294 .addComponent(listsButton)
295 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
296 .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 7, javax.swing.GroupLayout.PREFERRED_SIZE)
298 .addComponent(searchDropButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
301 layout.setVerticalGroup(
302 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
303 .addGroup(layout.createSequentialGroup()
304 .addGap(0, 0, Short.MAX_VALUE)
305 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING,
false)
306 .addComponent(listsButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
307 .addComponent(searchDropButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
308 .addComponent(jSeparator1)))
312 private void listsButtonMousePressed(java.awt.event.MouseEvent evt) {
313 maybeShowListsPopup(evt);
316 private void listsButtonActionPerformed(java.awt.event.ActionEvent evt) {
320 private void searchDropButtonMousePressed(java.awt.event.MouseEvent evt) {
321 maybeShowSearchPopup(evt);
325 private javax.swing.JSeparator jSeparator1;
326 private javax.swing.JButton listsButton;
327 private javax.swing.JPopupMenu listsMenu;
328 private javax.swing.JButton searchDropButton;
329 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)