From 77efa005fc4ae761c053beb944289ac8cd5cce3a Mon Sep 17 00:00:00 2001 From: adam-m Date: Thu, 1 Mar 2012 15:34:35 -0500 Subject: [PATCH] Add count of ingest messages (groups) to the ingest toolbar button --- .../autopsy/ingest/Bundle.properties | 2 + .../autopsy/ingest/IngestMessagePanel.java | 47 ++++++++ .../autopsy/ingest/IngestMessagesAction.java | 27 ++--- .../autopsy/ingest/IngestMessagesToolbar.form | 66 ++++++++++ .../autopsy/ingest/IngestMessagesToolbar.java | 113 ++++++++++++++++++ .../sleuthkit/autopsy/ingest/eye-icon-16.png | Bin 0 -> 660 bytes .../org/sleuthkit/autopsy/ingest/layer.xml | 16 +-- 7 files changed, 246 insertions(+), 25 deletions(-) create mode 100644 Ingest/src/org/sleuthkit/autopsy/ingest/IngestMessagesToolbar.form create mode 100644 Ingest/src/org/sleuthkit/autopsy/ingest/IngestMessagesToolbar.java create mode 100644 Ingest/src/org/sleuthkit/autopsy/ingest/eye-icon-16.png diff --git a/Ingest/src/org/sleuthkit/autopsy/ingest/Bundle.properties b/Ingest/src/org/sleuthkit/autopsy/ingest/Bundle.properties index 26945d6178..23c517b19b 100644 --- a/Ingest/src/org/sleuthkit/autopsy/ingest/Bundle.properties +++ b/Ingest/src/org/sleuthkit/autopsy/ingest/Bundle.properties @@ -27,3 +27,5 @@ IngestMessagePanel.sortByLabel.text=Sort by: IngestMessagePanel.sortByComboBox.toolTipText=Sort messages by time (chronological order) or message priority IngestDialogPanel.advancedButton.text=Advanced AdvancedConfigurationDialog.applyButton.text=Apply +IngestMessagesToolbar.ingestMessagesButton.text=0 +IngestMessagesToolbar.ingestMessagesButton.toolTipText=Ingest Messages diff --git a/Ingest/src/org/sleuthkit/autopsy/ingest/IngestMessagePanel.java b/Ingest/src/org/sleuthkit/autopsy/ingest/IngestMessagePanel.java index 273c5e64b9..55727cd0ce 100644 --- a/Ingest/src/org/sleuthkit/autopsy/ingest/IngestMessagePanel.java +++ b/Ingest/src/org/sleuthkit/autopsy/ingest/IngestMessagePanel.java @@ -21,6 +21,8 @@ package org.sleuthkit.autopsy.ingest; import java.awt.Color; import java.awt.Component; import java.awt.Font; +import java.beans.PropertyChangeListener; +import java.beans.PropertyChangeSupport; import java.util.ArrayList; import java.util.Collections; import java.util.Date; @@ -51,6 +53,9 @@ class IngestMessagePanel extends javax.swing.JPanel { private static Font notVisitedFont = new Font("Arial", Font.BOLD, 11); private static Color ERROR_COLOR = new Color(255, 90, 90); private int lastRowSelected = -1; + + private static PropertyChangeSupport messagePcs = new PropertyChangeSupport(IngestMessagePanel.class); + static final String MESSAGE_CHANGE_EVT = "MESSAGE_CHANGE_EVT"; //number of unread messages changed /** Creates new form IngestMessagePanel */ public IngestMessagePanel(IngestMessageMainPanel mainPanel) { @@ -75,6 +80,10 @@ class IngestMessagePanel extends javax.swing.JPanel { IngestMessageGroup getMessageGroup(int rowNumber) { return tableModel.getMessageGroup(rowNumber); } + + synchronized static void addPropertyChangeSupportListener(PropertyChangeListener l) { + messagePcs.addPropertyChangeListener(l); + } /** This method is called from within the constructor to * initialize the form. @@ -215,18 +224,25 @@ class IngestMessagePanel extends javax.swing.JPanel { } public void addMessage(IngestMessage m) { + final int origMsgGroups = tableModel.getNumberUnreadGroups(); tableModel.addMessage(m); + messagePcs.firePropertyChange(TOOL_TIP_TEXT_KEY, origMsgGroups, tableModel.getNumberUnreadGroups()); + //autoscroll //messageTable.scrollRectToVisible(messageTable.getCellRect(messageTable.getRowCount() - 1, messageTable.getColumnCount(), true)); } public void clearMessages() { + final int origMsgGroups = tableModel.getNumberUnreadGroups(); tableModel.clearMessages(); + messagePcs.firePropertyChange(TOOL_TIP_TEXT_KEY, origMsgGroups, 0); } private void setVisited(int rowNumber) { + final int origMsgGroups = tableModel.getNumberUnreadGroups(); tableModel.setVisited(rowNumber); lastRowSelected = rowNumber; + messagePcs.firePropertyChange(TOOL_TIP_TEXT_KEY, origMsgGroups, tableModel.getNumberUnreadGroups()); } private class MessageTableModel extends AbstractTableModel { @@ -257,8 +273,38 @@ class IngestMessagePanel extends javax.swing.JPanel { @Override public int getRowCount() { + return getNumberGroups(); + } + + int getNumberGroups() { return messageData.size(); } + + int getNumberMessages() { + int total = 0; + for (TableEntry e : messageData) { + total += e.messageGroup.count; + } + return total; + } + + int getNumberUnreadMessages() { + int total = 0; + for (TableEntry e : messageData) { + if (e.visited == false) + total += e.messageGroup.count; + } + return total; + } + + int getNumberUnreadGroups() { + int total = 0; + for (TableEntry e : messageData) { + if (e.visited == false) + ++total; + } + return total; + } @Override public String getColumnName(int column) { @@ -715,4 +761,5 @@ class IngestMessagePanel extends javax.swing.JPanel { } } } + } diff --git a/Ingest/src/org/sleuthkit/autopsy/ingest/IngestMessagesAction.java b/Ingest/src/org/sleuthkit/autopsy/ingest/IngestMessagesAction.java index 3202ce165e..0939caccf8 100644 --- a/Ingest/src/org/sleuthkit/autopsy/ingest/IngestMessagesAction.java +++ b/Ingest/src/org/sleuthkit/autopsy/ingest/IngestMessagesAction.java @@ -20,14 +20,10 @@ package org.sleuthkit.autopsy.ingest; +import java.awt.Component; import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.util.logging.Logger; -import org.openide.awt.ActionID; -import org.openide.awt.ActionReference; -import org.openide.awt.ActionReferences; -import org.openide.awt.ActionRegistration; -import org.openide.util.NbBundle.Messages; +import javax.swing.AbstractAction; +import org.openide.util.actions.Presenter; import org.openide.windows.Mode; import org.openide.windows.WindowManager; @@ -40,18 +36,15 @@ import org.openide.windows.WindowManager; // @ActionReference(path = "Toolbars/File", position = 575) //}) //@Messages("CTL_IngestMessagesAction=Messages") -public final class IngestMessagesAction implements ActionListener { +public final class IngestMessagesAction extends AbstractAction implements Presenter.Toolbar { @Override public void actionPerformed(ActionEvent e) { - IngestMessageTopComponent tc = IngestMessageTopComponent.findInstance(); - - Mode mode = WindowManager.getDefault().findMode("floatingLeftBottom"); - if (mode != null) { - //TopComponent[] tcs = mode.getTopComponents(); - mode.dockInto(tc); - tc.open(); - //tc.requestActive(); - } + + } + + @Override + public Component getToolbarPresenter() { + return new IngestMessagesToolbar(); } } diff --git a/Ingest/src/org/sleuthkit/autopsy/ingest/IngestMessagesToolbar.form b/Ingest/src/org/sleuthkit/autopsy/ingest/IngestMessagesToolbar.form new file mode 100644 index 0000000000..1defadefe8 --- /dev/null +++ b/Ingest/src/org/sleuthkit/autopsy/ingest/IngestMessagesToolbar.form @@ -0,0 +1,66 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Ingest/src/org/sleuthkit/autopsy/ingest/IngestMessagesToolbar.java b/Ingest/src/org/sleuthkit/autopsy/ingest/IngestMessagesToolbar.java new file mode 100644 index 0000000000..2eb4a62d39 --- /dev/null +++ b/Ingest/src/org/sleuthkit/autopsy/ingest/IngestMessagesToolbar.java @@ -0,0 +1,113 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier sleuthkit org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sleuthkit.autopsy.ingest; + +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import org.openide.windows.Mode; +import org.openide.windows.WindowManager; + +/** + * Toolbar for Ingest + * + */ +public class IngestMessagesToolbar extends javax.swing.JPanel { + + /** Creates new form IngestMessagesToolbar */ + public IngestMessagesToolbar() { + initComponents(); + customizeComponents(); + } + + /** This method is called from within the constructor to + * initialize the form. + * WARNING: Do NOT modify this code. The content of this method is + * always regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + ingestMessagesButton = new javax.swing.JButton(); + + setPreferredSize(new java.awt.Dimension(93, 23)); + + ingestMessagesButton.setFont(new java.awt.Font("Tahoma", 0, 10)); // NOI18N + ingestMessagesButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/ingest/eye-icon-16.png"))); // NOI18N + ingestMessagesButton.setText(org.openide.util.NbBundle.getMessage(IngestMessagesToolbar.class, "IngestMessagesToolbar.ingestMessagesButton.text")); // NOI18N + ingestMessagesButton.setToolTipText(org.openide.util.NbBundle.getMessage(IngestMessagesToolbar.class, "IngestMessagesToolbar.ingestMessagesButton.toolTipText")); // NOI18N + ingestMessagesButton.setAlignmentX(0.5F); + ingestMessagesButton.setHorizontalAlignment(javax.swing.SwingConstants.LEFT); + ingestMessagesButton.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT); + ingestMessagesButton.setMargin(new java.awt.Insets(1, 0, 1, 14)); + ingestMessagesButton.setMaximumSize(new java.awt.Dimension(65, 23)); + ingestMessagesButton.setMinimumSize(new java.awt.Dimension(65, 23)); + ingestMessagesButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + ingestMessagesButtonActionPerformed(evt); + } + }); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(ingestMessagesButton, javax.swing.GroupLayout.DEFAULT_SIZE, 93, Short.MAX_VALUE) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(ingestMessagesButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + ); + }// //GEN-END:initComponents + + private void ingestMessagesButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_ingestMessagesButtonActionPerformed + showIngestMessages(); + }//GEN-LAST:event_ingestMessagesButtonActionPerformed + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton ingestMessagesButton; + // End of variables declaration//GEN-END:variables + + + private void customizeComponents() { + + IngestMessagePanel.addPropertyChangeSupportListener(new PropertyChangeListener() { + + @Override + public void propertyChange(PropertyChangeEvent evt) { + final int numberMessages = (Integer)evt.getNewValue(); + ingestMessagesButton.setText(Integer.toString(numberMessages)); + } + + }); + } + + private void showIngestMessages() { + IngestMessageTopComponent tc = IngestMessageTopComponent.findInstance(); + + Mode mode = WindowManager.getDefault().findMode("floatingLeftBottom"); + if (mode != null) { + //TopComponent[] tcs = mode.getTopComponents(); + mode.dockInto(tc); + tc.open(); + //tc.requestActive(); + } + } +} diff --git a/Ingest/src/org/sleuthkit/autopsy/ingest/eye-icon-16.png b/Ingest/src/org/sleuthkit/autopsy/ingest/eye-icon-16.png new file mode 100644 index 0000000000000000000000000000000000000000..54bcab4344483733b8eee85b648f3b7fc1afb588 GIT binary patch literal 660 zcmV;F0&D$=P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf0x3yEK~y+TrIX)F zQ*ju^Kj(NhcIJ*_XViYUrDEhL=m$wKZ6XETcp+T`-2{5qr8oT#5z<9hbx~9ob(?tO zjb?)i!Lp0c8BEz+Y?eveoI9Q~&*^MpS|kK};f0r%_j$hW`|x}P%MO|du?cJg+BAW1 z)Cm>Mz^E1*uSl{NkIV7TW&a@9wbj`8l0?tW<5y(dtsWa>QLSvTQPyxqd-3-SAPEOt zzX^0hr~K|A6tfiC2UsdgJe~fC)FLo4c#)HePAK;Vyd5b0w{be0hcvJZ79Ni>SM@S= z?k>qvl$$S8WKLgWO1;GOM;~~oDrrsd1H!!Wm93T%j;N#_Y;h!gn6vC@eEQc8k` zFpot2eOS~(D>haW1*mL4)ex3Q%9KpabRA&qQ_g@h_dzpaR z%JKCP^gD*Ql_B)a`xE_6qcB?qxc z5Qp8{k0XurzZP%a%K3cWN~hBli$yd|vqjPyX&A=dje>w_n#i(@D2lk - + - - + + - - + + @@ -77,7 +77,7 @@ - +