mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-14 17:06:16 +00:00
Merge https://github.com/sleuthkit/autopsy into manynodesfix
Conflicts: Core/src/org/sleuthkit/autopsy/corecomponents/DataResultPanel.java
This commit is contained in:
commit
1c6fcbe15f
@ -1,66 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
|
||||
<Form version="1.5" maxVersion="1.8" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
|
||||
<AuxValues>
|
||||
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/>
|
||||
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
|
||||
<AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="true"/>
|
||||
<AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/>
|
||||
<AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
|
||||
<AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
|
||||
<AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
|
||||
</AuxValues>
|
||||
|
||||
<Layout>
|
||||
<DimensionLayout dim="0">
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<Group type="102" alignment="0" attributes="0">
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<Group type="102" attributes="0">
|
||||
<EmptySpace min="10" pref="10" max="-2" attributes="0"/>
|
||||
<Component id="statusLabel" pref="472" max="32767" attributes="0"/>
|
||||
</Group>
|
||||
<Group type="102" attributes="0">
|
||||
<Component id="crDbLabel" min="-2" max="-2" attributes="0"/>
|
||||
<EmptySpace min="0" pref="0" max="32767" attributes="0"/>
|
||||
</Group>
|
||||
</Group>
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
</Group>
|
||||
</Group>
|
||||
</DimensionLayout>
|
||||
<DimensionLayout dim="1">
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<Group type="102" alignment="0" attributes="0">
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Component id="crDbLabel" min="-2" max="-2" attributes="0"/>
|
||||
<EmptySpace type="unrelated" max="-2" attributes="0"/>
|
||||
<Component id="statusLabel" min="-2" max="-2" attributes="0"/>
|
||||
<EmptySpace pref="67" max="32767" attributes="0"/>
|
||||
</Group>
|
||||
</Group>
|
||||
</DimensionLayout>
|
||||
</Layout>
|
||||
<SubComponents>
|
||||
<Component class="javax.swing.JLabel" name="statusLabel">
|
||||
<Properties>
|
||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="AddImageDonePanel.statusLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
</Component>
|
||||
<Component class="javax.swing.JLabel" name="crDbLabel">
|
||||
<Properties>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Tahoma" size="14" style="1"/>
|
||||
</Property>
|
||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="AddImageDonePanel.crDbLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
</Component>
|
||||
</SubComponents>
|
||||
</Form>
|
@ -1,76 +0,0 @@
|
||||
/*
|
||||
* Autopsy Forensic Browser
|
||||
*
|
||||
* Copyright 2012 Basis Technology Corp.
|
||||
* Contact: carrier <at> sleuthkit <dot> 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.casemodule;
|
||||
|
||||
public class AddImageDonePanel extends javax.swing.JPanel {
|
||||
|
||||
/**
|
||||
* Creates new form AddImageDonePanel
|
||||
*/
|
||||
public AddImageDonePanel() {
|
||||
initComponents();
|
||||
}
|
||||
|
||||
/**
|
||||
* 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")
|
||||
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
|
||||
private void initComponents() {
|
||||
|
||||
statusLabel = new javax.swing.JLabel();
|
||||
crDbLabel = new javax.swing.JLabel();
|
||||
|
||||
org.openide.awt.Mnemonics.setLocalizedText(statusLabel, org.openide.util.NbBundle.getMessage(AddImageDonePanel.class, "AddImageDonePanel.statusLabel.text")); // NOI18N
|
||||
|
||||
crDbLabel.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
|
||||
org.openide.awt.Mnemonics.setLocalizedText(crDbLabel, org.openide.util.NbBundle.getMessage(AddImageDonePanel.class, "AddImageDonePanel.crDbLabel.text")); // NOI18N
|
||||
|
||||
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
|
||||
this.setLayout(layout);
|
||||
layout.setHorizontalGroup(
|
||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(layout.createSequentialGroup()
|
||||
.addContainerGap()
|
||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(layout.createSequentialGroup()
|
||||
.addGap(10, 10, 10)
|
||||
.addComponent(statusLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 472, Short.MAX_VALUE))
|
||||
.addGroup(layout.createSequentialGroup()
|
||||
.addComponent(crDbLabel)
|
||||
.addGap(0, 0, Short.MAX_VALUE)))
|
||||
.addContainerGap())
|
||||
);
|
||||
layout.setVerticalGroup(
|
||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(layout.createSequentialGroup()
|
||||
.addContainerGap()
|
||||
.addComponent(crDbLabel)
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
||||
.addComponent(statusLabel)
|
||||
.addContainerGap(67, Short.MAX_VALUE))
|
||||
);
|
||||
}// </editor-fold>//GEN-END:initComponents
|
||||
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||
private javax.swing.JLabel crDbLabel;
|
||||
private javax.swing.JLabel statusLabel;
|
||||
// End of variables declaration//GEN-END:variables
|
||||
}
|
@ -15,6 +15,7 @@
|
||||
</Properties>
|
||||
<SyntheticProperties>
|
||||
<SyntheticProperty name="formSizePolicy" type="int" value="1"/>
|
||||
<SyntheticProperty name="generateCenter" type="boolean" value="false"/>
|
||||
</SyntheticProperties>
|
||||
<AuxValues>
|
||||
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/>
|
||||
|
@ -107,7 +107,7 @@ public class AddImageErrorsDialog extends javax.swing.JDialog {
|
||||
}//GEN-LAST:event_closeButtonActionPerformed
|
||||
|
||||
|
||||
void setErrors(String errors) {
|
||||
public void setErrors(String errors) {
|
||||
errorsText.setText(errors);
|
||||
}
|
||||
|
||||
|
@ -1,144 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
|
||||
<Form version="1.5" maxVersion="1.8" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
|
||||
<AuxValues>
|
||||
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/>
|
||||
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
|
||||
<AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="true"/>
|
||||
<AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/>
|
||||
<AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
|
||||
<AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
|
||||
<AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
|
||||
</AuxValues>
|
||||
|
||||
<Layout>
|
||||
<DimensionLayout dim="0">
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<Group type="102" alignment="0" attributes="0">
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<Component id="crDbProgressBar" alignment="0" max="32767" attributes="1"/>
|
||||
<Component id="jScrollPane1" alignment="0" max="32767" attributes="0"/>
|
||||
<Group type="102" alignment="0" attributes="0">
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<Component id="crDbLabel" alignment="0" min="-2" max="-2" attributes="0"/>
|
||||
<Component id="jLabel1" alignment="0" min="-2" pref="552" max="-2" attributes="1"/>
|
||||
<Component id="jLabel5" alignment="0" min="-2" max="-2" attributes="0"/>
|
||||
<Component id="Label_CurrentDirectory_Static" alignment="0" min="-2" max="-2" attributes="0"/>
|
||||
</Group>
|
||||
<EmptySpace min="0" pref="0" max="32767" attributes="0"/>
|
||||
</Group>
|
||||
<Component id="infoPanel" alignment="0" min="-2" max="32767" attributes="0"/>
|
||||
</Group>
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
</Group>
|
||||
</Group>
|
||||
</DimensionLayout>
|
||||
<DimensionLayout dim="1">
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<Group type="102" alignment="0" attributes="0">
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Component id="crDbLabel" min="-2" max="-2" attributes="0"/>
|
||||
<EmptySpace type="unrelated" max="-2" attributes="0"/>
|
||||
<Component id="jLabel1" min="-2" max="-2" attributes="0"/>
|
||||
<EmptySpace type="unrelated" min="-2" max="-2" attributes="0"/>
|
||||
<Component id="jLabel5" min="-2" pref="14" max="-2" attributes="0"/>
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Component id="crDbProgressBar" min="-2" pref="24" max="-2" attributes="1"/>
|
||||
<EmptySpace type="unrelated" max="-2" attributes="0"/>
|
||||
<Component id="infoPanel" min="-2" max="-2" attributes="0"/>
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Component id="Label_CurrentDirectory_Static" min="-2" max="-2" attributes="0"/>
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Component id="jScrollPane1" min="-2" pref="63" max="-2" attributes="0"/>
|
||||
<EmptySpace max="32767" attributes="0"/>
|
||||
</Group>
|
||||
</Group>
|
||||
</DimensionLayout>
|
||||
</Layout>
|
||||
<SubComponents>
|
||||
<Component class="javax.swing.JLabel" name="crDbLabel">
|
||||
<Properties>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Tahoma" size="14" style="1"/>
|
||||
</Property>
|
||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="AddImageLoadingPanel.crDbLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
</Component>
|
||||
<Component class="javax.swing.JLabel" name="jLabel1">
|
||||
<Properties>
|
||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="AddImageLoadingPanel.jLabel1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
</Component>
|
||||
<Component class="javax.swing.JLabel" name="jLabel5">
|
||||
<Properties>
|
||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="AddImageLoadingPanel.jLabel5.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
</Component>
|
||||
<Component class="javax.swing.JProgressBar" name="crDbProgressBar">
|
||||
</Component>
|
||||
<Container class="javax.swing.JPanel" name="infoPanel">
|
||||
|
||||
<Layout>
|
||||
<DimensionLayout dim="0">
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<EmptySpace min="0" pref="707" max="32767" attributes="0"/>
|
||||
</Group>
|
||||
</DimensionLayout>
|
||||
<DimensionLayout dim="1">
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<EmptySpace min="0" pref="15" max="32767" attributes="0"/>
|
||||
</Group>
|
||||
</DimensionLayout>
|
||||
</Layout>
|
||||
</Container>
|
||||
<Component class="javax.swing.JLabel" name="Label_CurrentDirectory_Static">
|
||||
<Properties>
|
||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="AddImageLoadingPanel.Label_CurrentDirectory_Static.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
</Component>
|
||||
<Container class="javax.swing.JScrollPane" name="jScrollPane1">
|
||||
<Properties>
|
||||
<Property name="horizontalScrollBarPolicy" type="int" value="31"/>
|
||||
<Property name="verticalScrollBarPolicy" type="int" value="21"/>
|
||||
</Properties>
|
||||
<AuxValues>
|
||||
<AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/>
|
||||
</AuxValues>
|
||||
|
||||
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
|
||||
<SubComponents>
|
||||
<Component class="javax.swing.JTextArea" name="TextArea_CurrentDirectory">
|
||||
<Properties>
|
||||
<Property name="editable" type="boolean" value="false"/>
|
||||
<Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
|
||||
<Color blue="f0" green="f0" red="f0" type="rgb"/>
|
||||
</Property>
|
||||
<Property name="columns" type="int" value="20"/>
|
||||
<Property name="lineWrap" type="boolean" value="true"/>
|
||||
<Property name="rows" type="int" value="5"/>
|
||||
<Property name="wrapStyleWord" type="boolean" value="true"/>
|
||||
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
|
||||
<Border info="org.netbeans.modules.form.compat2.border.EmptyBorderInfo">
|
||||
<EmptyBorder bottom="0" left="0" right="0" top="0"/>
|
||||
</Border>
|
||||
</Property>
|
||||
<Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
|
||||
<Color id="Text Cursor"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
</Component>
|
||||
</SubComponents>
|
||||
</Container>
|
||||
</SubComponents>
|
||||
</Form>
|
@ -1,230 +0,0 @@
|
||||
/*
|
||||
* Autopsy Forensic Browser
|
||||
*
|
||||
* Copyright 2012 Basis Technology Corp.
|
||||
* Contact: carrier <at> sleuthkit <dot> 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.casemodule;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import javax.swing.Box;
|
||||
import javax.swing.BoxLayout;
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JProgressBar;
|
||||
|
||||
public class AddImageLoadingPanel extends javax.swing.JPanel {
|
||||
private JLabel progressLabel = null;
|
||||
private JButton errorButton = null;
|
||||
|
||||
/**
|
||||
* Creates new form AddImageLoadingPanel
|
||||
*/
|
||||
public AddImageLoadingPanel() {
|
||||
initComponents();
|
||||
customizeComponents();
|
||||
}
|
||||
|
||||
private void customizeComponents() {
|
||||
progressLabel = new JLabel();
|
||||
infoPanel.setLayout(new BoxLayout(infoPanel, BoxLayout.PAGE_AXIS));
|
||||
infoPanel.add(progressLabel);
|
||||
infoPanel.add(Box.createRigidArea(new Dimension(10, 10))); //spacer
|
||||
this.jScrollPane1.setBorder(null);
|
||||
this.TextArea_CurrentDirectory.setBackground(this.getBackground());
|
||||
}
|
||||
|
||||
void resetInfoPanel() {
|
||||
if (errorButton != null) {
|
||||
infoPanel.remove(errorButton);
|
||||
errorButton = null;
|
||||
}
|
||||
progressLabel.setText("");
|
||||
}
|
||||
|
||||
public JProgressBar getCrDbProgressBar() {
|
||||
return this.crDbProgressBar;
|
||||
}
|
||||
|
||||
public JLabel getProgressLabel() {
|
||||
return this.progressLabel;
|
||||
}
|
||||
|
||||
/**
|
||||
* Changes the progress bar text and color.
|
||||
*
|
||||
* @param text the text to be shown
|
||||
* @param value the current value of the progress bar
|
||||
* @param color the color of the progress bar text
|
||||
*/
|
||||
public void changeProgressBarTextAndColor(String text, int value, Color color) {
|
||||
progressLabel.setText(text);
|
||||
progressLabel.setForeground(color);
|
||||
crDbProgressBar.setValue(value);
|
||||
}
|
||||
|
||||
/**
|
||||
* append progress text to progress label
|
||||
* @param text
|
||||
*/
|
||||
public void appendProgressText(String text) {
|
||||
progressLabel.setText(progressLabel.getText() + " " + text);
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the currently processing directory
|
||||
* @param dir the text to update with
|
||||
*/
|
||||
public void changeCurrentDir(String dir){
|
||||
this.TextArea_CurrentDirectory.setText(dir);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sets the CurrentlyProcessing tag and text area to be invisible
|
||||
*/
|
||||
public void setProcessInvis(){
|
||||
this.Label_CurrentDirectory_Static.setVisible(false);
|
||||
this.TextArea_CurrentDirectory.setText("");
|
||||
this.TextArea_CurrentDirectory.setVisible(false);
|
||||
}
|
||||
|
||||
void setErrors(final String errors, boolean critical) {
|
||||
crDbProgressBar.setValue(100); //always invoked when process completed
|
||||
if (critical) {
|
||||
progressLabel.setText("*Failed to add image (critical errors encountered). Click below to view the log.");
|
||||
}
|
||||
else {
|
||||
progressLabel.setText("*Data Source added (non-critical errors encountered). Click below to view the log.");
|
||||
}
|
||||
errorButton = new JButton();
|
||||
errorButton.setText("View Log");
|
||||
infoPanel.add(errorButton);
|
||||
errorButton.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
//JOptionPane.showMessageDialog(null, errors, "Add image non-critical errors", JOptionPane.WARNING_MESSAGE);
|
||||
AddImageErrorsDialog dialog = new AddImageErrorsDialog(null, true);
|
||||
dialog.setErrors(errors);
|
||||
dialog.setVisible(true);
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 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")
|
||||
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
|
||||
private void initComponents() {
|
||||
|
||||
crDbLabel = new javax.swing.JLabel();
|
||||
jLabel1 = new javax.swing.JLabel();
|
||||
jLabel5 = new javax.swing.JLabel();
|
||||
crDbProgressBar = new javax.swing.JProgressBar();
|
||||
infoPanel = new javax.swing.JPanel();
|
||||
Label_CurrentDirectory_Static = new javax.swing.JLabel();
|
||||
jScrollPane1 = new javax.swing.JScrollPane();
|
||||
TextArea_CurrentDirectory = new javax.swing.JTextArea();
|
||||
|
||||
crDbLabel.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
|
||||
org.openide.awt.Mnemonics.setLocalizedText(crDbLabel, org.openide.util.NbBundle.getMessage(AddImageLoadingPanel.class, "AddImageLoadingPanel.crDbLabel.text")); // NOI18N
|
||||
|
||||
org.openide.awt.Mnemonics.setLocalizedText(jLabel1, org.openide.util.NbBundle.getMessage(AddImageLoadingPanel.class, "AddImageLoadingPanel.jLabel1.text")); // NOI18N
|
||||
|
||||
org.openide.awt.Mnemonics.setLocalizedText(jLabel5, org.openide.util.NbBundle.getMessage(AddImageLoadingPanel.class, "AddImageLoadingPanel.jLabel5.text")); // NOI18N
|
||||
|
||||
javax.swing.GroupLayout infoPanelLayout = new javax.swing.GroupLayout(infoPanel);
|
||||
infoPanel.setLayout(infoPanelLayout);
|
||||
infoPanelLayout.setHorizontalGroup(
|
||||
infoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGap(0, 707, Short.MAX_VALUE)
|
||||
);
|
||||
infoPanelLayout.setVerticalGroup(
|
||||
infoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGap(0, 15, Short.MAX_VALUE)
|
||||
);
|
||||
|
||||
org.openide.awt.Mnemonics.setLocalizedText(Label_CurrentDirectory_Static, org.openide.util.NbBundle.getMessage(AddImageLoadingPanel.class, "AddImageLoadingPanel.Label_CurrentDirectory_Static.text")); // NOI18N
|
||||
|
||||
jScrollPane1.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
|
||||
jScrollPane1.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);
|
||||
|
||||
TextArea_CurrentDirectory.setEditable(false);
|
||||
TextArea_CurrentDirectory.setBackground(new java.awt.Color(240, 240, 240));
|
||||
TextArea_CurrentDirectory.setColumns(20);
|
||||
TextArea_CurrentDirectory.setLineWrap(true);
|
||||
TextArea_CurrentDirectory.setRows(5);
|
||||
TextArea_CurrentDirectory.setWrapStyleWord(true);
|
||||
TextArea_CurrentDirectory.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0));
|
||||
TextArea_CurrentDirectory.setCursor(new java.awt.Cursor(java.awt.Cursor.TEXT_CURSOR));
|
||||
jScrollPane1.setViewportView(TextArea_CurrentDirectory);
|
||||
|
||||
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
|
||||
this.setLayout(layout);
|
||||
layout.setHorizontalGroup(
|
||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(layout.createSequentialGroup()
|
||||
.addContainerGap()
|
||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addComponent(crDbProgressBar, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
||||
.addComponent(jScrollPane1)
|
||||
.addGroup(layout.createSequentialGroup()
|
||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addComponent(crDbLabel)
|
||||
.addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 552, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addComponent(jLabel5)
|
||||
.addComponent(Label_CurrentDirectory_Static))
|
||||
.addGap(0, 0, Short.MAX_VALUE))
|
||||
.addComponent(infoPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
||||
.addContainerGap())
|
||||
);
|
||||
layout.setVerticalGroup(
|
||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(layout.createSequentialGroup()
|
||||
.addContainerGap()
|
||||
.addComponent(crDbLabel)
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
||||
.addComponent(jLabel1)
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
||||
.addComponent(jLabel5, javax.swing.GroupLayout.PREFERRED_SIZE, 14, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||
.addComponent(crDbProgressBar, javax.swing.GroupLayout.PREFERRED_SIZE, 24, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
||||
.addComponent(infoPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||
.addComponent(Label_CurrentDirectory_Static)
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 63, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
||||
);
|
||||
}// </editor-fold>//GEN-END:initComponents
|
||||
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||
private javax.swing.JLabel Label_CurrentDirectory_Static;
|
||||
private javax.swing.JTextArea TextArea_CurrentDirectory;
|
||||
private javax.swing.JLabel crDbLabel;
|
||||
private javax.swing.JProgressBar crDbProgressBar;
|
||||
private javax.swing.JPanel infoPanel;
|
||||
private javax.swing.JLabel jLabel1;
|
||||
private javax.swing.JLabel jLabel5;
|
||||
private javax.swing.JScrollPane jScrollPane1;
|
||||
// End of variables declaration//GEN-END:variables
|
||||
}
|
@ -1,45 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
|
||||
<Form version="1.5" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
|
||||
<AuxValues>
|
||||
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/>
|
||||
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
|
||||
<AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="true"/>
|
||||
<AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/>
|
||||
<AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
|
||||
<AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
|
||||
<AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
|
||||
</AuxValues>
|
||||
|
||||
<Layout>
|
||||
<DimensionLayout dim="0">
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<Component id="mainPanel" alignment="0" max="32767" attributes="0"/>
|
||||
</Group>
|
||||
</DimensionLayout>
|
||||
<DimensionLayout dim="1">
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<Component id="mainPanel" alignment="0" max="32767" attributes="0"/>
|
||||
</Group>
|
||||
</DimensionLayout>
|
||||
</Layout>
|
||||
<SubComponents>
|
||||
<Container class="javax.swing.JPanel" name="mainPanel">
|
||||
|
||||
<Layout>
|
||||
<DimensionLayout dim="0">
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<EmptySpace min="0" pref="334" max="32767" attributes="0"/>
|
||||
</Group>
|
||||
</DimensionLayout>
|
||||
<DimensionLayout dim="1">
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<EmptySpace min="0" pref="277" max="32767" attributes="0"/>
|
||||
</Group>
|
||||
</DimensionLayout>
|
||||
</Layout>
|
||||
</Container>
|
||||
</SubComponents>
|
||||
</Form>
|
@ -1,166 +0,0 @@
|
||||
/*
|
||||
* Autopsy Forensic Browser
|
||||
*
|
||||
* Copyright 2011 Basis Technology Corp.
|
||||
* Contact: carrier <at> sleuthkit <dot> 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.casemodule;
|
||||
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.Color;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JProgressBar;
|
||||
|
||||
/**
|
||||
* The "Add Image" wizard panel 2. Provides checkbox to enable indexing, button
|
||||
* to start process, and progress bar.
|
||||
*/
|
||||
final class AddImageVisualPanel2 extends JPanel {
|
||||
|
||||
private AddImageLoadingPanel loadingPanel;
|
||||
private AddImageDonePanel donePanel;
|
||||
|
||||
/**
|
||||
* Creates new form AddImageVisualPanel2
|
||||
*/
|
||||
AddImageVisualPanel2() {
|
||||
loadingPanel = new AddImageLoadingPanel();
|
||||
donePanel = new AddImageDonePanel();
|
||||
initComponents();
|
||||
customizeComponents();
|
||||
}
|
||||
|
||||
private void customizeComponents() {
|
||||
mainPanel.setLayout(new BorderLayout());
|
||||
mainPanel.removeAll();
|
||||
mainPanel.add(loadingPanel, BorderLayout.CENTER);
|
||||
mainPanel.validate();
|
||||
mainPanel.repaint();
|
||||
}
|
||||
|
||||
AddImageLoadingPanel getLoadingPanel() {
|
||||
return loadingPanel;
|
||||
}
|
||||
|
||||
AddImageDonePanel getDonePanel() {
|
||||
return donePanel;
|
||||
}
|
||||
|
||||
void done() {
|
||||
mainPanel.removeAll();
|
||||
mainPanel.add(donePanel, BorderLayout.CENTER);
|
||||
mainPanel.validate();
|
||||
mainPanel.repaint();
|
||||
}
|
||||
|
||||
void resetInfoPanel() {
|
||||
loadingPanel.resetInfoPanel();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the name of the this panel. This name will be shown on the left
|
||||
* panel of the "Add Image" wizard panel.
|
||||
*
|
||||
* @return name the name of this panel
|
||||
*/
|
||||
@Override
|
||||
public String getName() {
|
||||
return "Add Data Source";
|
||||
}
|
||||
|
||||
public JProgressBar getCrDbProgressBar() {
|
||||
return loadingPanel.getCrDbProgressBar();
|
||||
}
|
||||
|
||||
public JLabel getProgressLabel() {
|
||||
return loadingPanel.getProgressLabel();
|
||||
}
|
||||
|
||||
/**
|
||||
* Changes the progress bar text and color.
|
||||
*
|
||||
* @param text the text to be shown
|
||||
* @param value the current value of the progress bar
|
||||
* @param color the color of the progress bar text
|
||||
*/
|
||||
public void changeProgressBarTextAndColor(String text, int value, Color color) {
|
||||
loadingPanel.changeProgressBarTextAndColor(text, value, color);
|
||||
}
|
||||
|
||||
/**
|
||||
* append progress text to progress label
|
||||
* @param text
|
||||
*/
|
||||
public void appendProgressText(String text) {
|
||||
loadingPanel.appendProgressText(text);
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the currently processing directory
|
||||
* @param dir the text to update with
|
||||
*/
|
||||
public void changeCurrentDir(String dir){
|
||||
loadingPanel.changeCurrentDir(dir);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the CurrentlyProcessing tag and text area to be invisible
|
||||
*/
|
||||
public void setProcessInvis(){
|
||||
loadingPanel.setProcessInvis();
|
||||
}
|
||||
|
||||
void setErrors(final String errors, boolean critical) {
|
||||
loadingPanel.setErrors(errors, critical);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 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.
|
||||
*/
|
||||
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
|
||||
private void initComponents() {
|
||||
|
||||
mainPanel = new javax.swing.JPanel();
|
||||
|
||||
javax.swing.GroupLayout mainPanelLayout = new javax.swing.GroupLayout(mainPanel);
|
||||
mainPanel.setLayout(mainPanelLayout);
|
||||
mainPanelLayout.setHorizontalGroup(
|
||||
mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGap(0, 334, Short.MAX_VALUE)
|
||||
);
|
||||
mainPanelLayout.setVerticalGroup(
|
||||
mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGap(0, 277, Short.MAX_VALUE)
|
||||
);
|
||||
|
||||
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
|
||||
this.setLayout(layout);
|
||||
layout.setHorizontalGroup(
|
||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addComponent(mainPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
||||
);
|
||||
layout.setVerticalGroup(
|
||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addComponent(mainPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
||||
);
|
||||
}// </editor-fold>//GEN-END:initComponents
|
||||
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||
private javax.swing.JPanel mainPanel;
|
||||
// End of variables declaration//GEN-END:variables
|
||||
}
|
@ -29,17 +29,26 @@ import org.openide.util.HelpCtx;
|
||||
import org.openide.util.Lookup;
|
||||
|
||||
/**
|
||||
* The "Add Data Source" wizard panel2. Handles processing the image in a worker
|
||||
* thread, and any errors that may occur during the add process.
|
||||
* The final panel of the add image wizard. It displays a progress bar and
|
||||
* status updates.
|
||||
*
|
||||
* All the real work is kicked off in the previous panel:
|
||||
* {@link AddImageWizardIngestConfigPanel} (which is a bit weird if you ask m
|
||||
* -jm)
|
||||
*/
|
||||
class AddImageWizardPanel2 implements WizardDescriptor.Panel<WizardDescriptor> {
|
||||
class AddImageWizardAddingProgressPanel implements WizardDescriptor.Panel<WizardDescriptor> {
|
||||
|
||||
/**
|
||||
* flag to indicate that the image adding process is finished and this panel
|
||||
* is completed(valid)
|
||||
*/
|
||||
private boolean imgAdded = false;
|
||||
|
||||
/**
|
||||
* The visual component that displays this panel. If you need to access the
|
||||
* component from this class, just use getComponent().
|
||||
*/
|
||||
private AddImageVisualPanel2 component;
|
||||
private AddImageWizardAddingProgressVisual component;
|
||||
private final Set<ChangeListener> listeners = new HashSet<>(1); // or can use ChangeSupport in NB 6.0
|
||||
|
||||
/**
|
||||
* Get the visual component for the panel. In this template, the component
|
||||
@ -47,12 +56,14 @@ class AddImageWizardPanel2 implements WizardDescriptor.Panel<WizardDescriptor> {
|
||||
* but never displayed, or not all panels are displayed, it is better to
|
||||
* create only those which really need to be visible.
|
||||
*
|
||||
* It also separates the view from the control - jm
|
||||
*
|
||||
* @return component the UI component of this wizard panel
|
||||
*/
|
||||
@Override
|
||||
public AddImageVisualPanel2 getComponent() {
|
||||
public AddImageWizardAddingProgressVisual getComponent() {
|
||||
if (component == null) {
|
||||
component = new AddImageVisualPanel2();
|
||||
component = new AddImageWizardAddingProgressVisual();
|
||||
}
|
||||
return component;
|
||||
}
|
||||
@ -89,8 +100,8 @@ class AddImageWizardPanel2 implements WizardDescriptor.Panel<WizardDescriptor> {
|
||||
* Updates the UI to display the add image process has begun.
|
||||
*/
|
||||
void setStateStarted() {
|
||||
component.getCrDbProgressBar().setIndeterminate(true);
|
||||
component.changeProgressBarTextAndColor("*This process take some time for large data sources.", 0, Color.black);
|
||||
component.getProgressBar().setIndeterminate(true);
|
||||
component.setProgressBarTextAndColor("*This process take some time for large data sources.", 0, Color.black);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -98,9 +109,9 @@ class AddImageWizardPanel2 implements WizardDescriptor.Panel<WizardDescriptor> {
|
||||
*/
|
||||
void setStateFinished() {
|
||||
imgAdded = true;
|
||||
getComponent().setStateFinished();
|
||||
fireChangeEvent();
|
||||
}
|
||||
private final Set<ChangeListener> listeners = new HashSet<ChangeListener>(1); // or can use ChangeSupport in NB 6.0
|
||||
|
||||
/**
|
||||
* Adds a listener to changes of the panel's validity.
|
||||
@ -149,22 +160,34 @@ class AddImageWizardPanel2 implements WizardDescriptor.Panel<WizardDescriptor> {
|
||||
*/
|
||||
@Override
|
||||
public void readSettings(WizardDescriptor settings) {
|
||||
settings.setOptions(new Object[] {WizardDescriptor.PREVIOUS_OPTION, WizardDescriptor.NEXT_OPTION, WizardDescriptor.FINISH_OPTION, WizardDescriptor.CANCEL_OPTION});
|
||||
if(imgAdded) {
|
||||
getComponent().done();
|
||||
settings.setOptions(new Object[]{WizardDescriptor.PREVIOUS_OPTION, WizardDescriptor.NEXT_OPTION, WizardDescriptor.FINISH_OPTION, WizardDescriptor.CANCEL_OPTION});
|
||||
if (imgAdded) {
|
||||
getComponent().setStateFinished();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* this doesn't appear to store anything? plus, there are no settings in
|
||||
* this panel -jm
|
||||
*
|
||||
* @param settings the setting to be stored to
|
||||
*/
|
||||
@Override
|
||||
public void storeSettings(WizardDescriptor settings) {
|
||||
//why do we do this?
|
||||
getComponent().resetInfoPanel();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* forward errors to visual component
|
||||
*
|
||||
* should this be modified to handle a list of errors? -jm
|
||||
*
|
||||
*
|
||||
* @param errorString the error string to be displayed
|
||||
* @param critical true if this is a critical error
|
||||
*/
|
||||
void setErrors(String errorString, boolean critical) {
|
||||
getComponent().showErrors(errorString, critical);
|
||||
}
|
||||
}
|
@ -0,0 +1,240 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
|
||||
<Form version="1.5" maxVersion="1.8" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
|
||||
<AuxValues>
|
||||
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/>
|
||||
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
|
||||
<AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="true"/>
|
||||
<AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/>
|
||||
<AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
|
||||
<AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
|
||||
<AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
|
||||
</AuxValues>
|
||||
|
||||
<Layout>
|
||||
<DimensionLayout dim="0">
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<Group type="102" alignment="0" attributes="0">
|
||||
<EmptySpace min="0" pref="0" max="-2" attributes="0"/>
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<Component id="loadingPanel" min="-2" max="-2" attributes="0"/>
|
||||
<Component id="donePanel" min="-2" max="-2" attributes="0"/>
|
||||
</Group>
|
||||
<EmptySpace min="0" pref="0" max="32767" attributes="0"/>
|
||||
</Group>
|
||||
</Group>
|
||||
</DimensionLayout>
|
||||
<DimensionLayout dim="1">
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<Group type="102" alignment="0" attributes="0">
|
||||
<EmptySpace min="0" pref="0" max="-2" attributes="0"/>
|
||||
<Component id="loadingPanel" min="-2" max="-2" attributes="0"/>
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Component id="donePanel" min="-2" max="-2" attributes="0"/>
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
</Group>
|
||||
</Group>
|
||||
</DimensionLayout>
|
||||
</Layout>
|
||||
<SubComponents>
|
||||
<Container class="javax.swing.JPanel" name="donePanel">
|
||||
|
||||
<Layout>
|
||||
<DimensionLayout dim="0">
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<Group type="102" alignment="0" attributes="0">
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<Group type="102" attributes="0">
|
||||
<EmptySpace min="0" pref="0" max="-2" attributes="0"/>
|
||||
<Component id="viewLogButton" min="-2" max="-2" attributes="0"/>
|
||||
</Group>
|
||||
<Component id="crDbLabel" alignment="0" min="-2" max="-2" attributes="0"/>
|
||||
<Component id="statusLabel" alignment="0" min="-2" pref="463" max="-2" attributes="0"/>
|
||||
</Group>
|
||||
<EmptySpace max="32767" attributes="0"/>
|
||||
</Group>
|
||||
</Group>
|
||||
</DimensionLayout>
|
||||
<DimensionLayout dim="1">
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<Group type="102" alignment="0" attributes="0">
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Component id="crDbLabel" min="-2" max="-2" attributes="0"/>
|
||||
<EmptySpace type="unrelated" max="-2" attributes="0"/>
|
||||
<Component id="statusLabel" min="-2" max="-2" attributes="0"/>
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Component id="viewLogButton" min="-2" max="-2" attributes="0"/>
|
||||
<EmptySpace max="32767" attributes="0"/>
|
||||
</Group>
|
||||
</Group>
|
||||
</DimensionLayout>
|
||||
</Layout>
|
||||
<SubComponents>
|
||||
<Component class="javax.swing.JLabel" name="statusLabel">
|
||||
<Properties>
|
||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="AddImageWizardAddingProgressVisual.statusLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
</Component>
|
||||
<Component class="javax.swing.JLabel" name="crDbLabel">
|
||||
<Properties>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Tahoma" size="14" style="1"/>
|
||||
</Property>
|
||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="AddImageWizardAddingProgressVisual.crDbLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
</Component>
|
||||
<Component class="javax.swing.JButton" name="viewLogButton">
|
||||
<Properties>
|
||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="AddImageWizardAddingProgressVisual.viewLogButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
</Component>
|
||||
</SubComponents>
|
||||
</Container>
|
||||
<Container class="javax.swing.JPanel" name="loadingPanel">
|
||||
|
||||
<Layout>
|
||||
<DimensionLayout dim="0">
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<Group type="102" attributes="0">
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<Group type="102" alignment="1" attributes="0">
|
||||
<EmptySpace min="0" pref="0" max="32767" attributes="0"/>
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<Component id="addingDataSourceLabel" alignment="0" min="-2" max="-2" attributes="0"/>
|
||||
<Component id="jLabel1" alignment="0" min="-2" pref="552" max="-2" attributes="1"/>
|
||||
<Component id="jLabel5" alignment="0" min="-2" max="-2" attributes="0"/>
|
||||
<Component id="progressBar" alignment="0" min="-2" pref="489" max="-2" attributes="1"/>
|
||||
</Group>
|
||||
</Group>
|
||||
<Group type="102" attributes="0">
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<Group type="102" attributes="0">
|
||||
<Component id="progressLabel" min="-2" max="-2" attributes="0"/>
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Component id="infoPanel" min="-2" max="-2" attributes="0"/>
|
||||
</Group>
|
||||
<Component id="TextArea_CurrentDirectory" alignment="0" min="-2" pref="487" max="-2" attributes="0"/>
|
||||
</Group>
|
||||
<EmptySpace min="0" pref="0" max="32767" attributes="0"/>
|
||||
</Group>
|
||||
</Group>
|
||||
</Group>
|
||||
</Group>
|
||||
</DimensionLayout>
|
||||
<DimensionLayout dim="1">
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<Group type="102" attributes="0">
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Component id="addingDataSourceLabel" min="-2" max="-2" attributes="0"/>
|
||||
<EmptySpace type="unrelated" max="-2" attributes="0"/>
|
||||
<Component id="jLabel1" min="-2" max="-2" attributes="0"/>
|
||||
<EmptySpace type="unrelated" min="-2" max="-2" attributes="0"/>
|
||||
<Component id="jLabel5" min="-2" pref="14" max="-2" attributes="0"/>
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Component id="progressBar" min="-2" pref="24" max="-2" attributes="1"/>
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Component id="TextArea_CurrentDirectory" min="-2" pref="91" max="-2" attributes="0"/>
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<Group type="102" attributes="0">
|
||||
<Component id="infoPanel" min="-2" max="-2" attributes="0"/>
|
||||
<EmptySpace min="0" pref="0" max="32767" attributes="0"/>
|
||||
</Group>
|
||||
<Component id="progressLabel" max="32767" attributes="0"/>
|
||||
</Group>
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
</Group>
|
||||
</Group>
|
||||
</DimensionLayout>
|
||||
</Layout>
|
||||
<SubComponents>
|
||||
<Component class="javax.swing.JLabel" name="addingDataSourceLabel">
|
||||
<Properties>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Tahoma" size="14" style="1"/>
|
||||
</Property>
|
||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="AddImageWizardAddingProgressVisual.addingDataSourceLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
</Component>
|
||||
<Component class="javax.swing.JLabel" name="progressLabel">
|
||||
<Properties>
|
||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="AddImageWizardAddingProgressVisual.progressLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||
</Property>
|
||||
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
||||
<Dimension value="null"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
</Component>
|
||||
<Component class="javax.swing.JLabel" name="jLabel1">
|
||||
<Properties>
|
||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="AddImageWizardAddingProgressVisual.jLabel1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
</Component>
|
||||
<Component class="javax.swing.JLabel" name="jLabel5">
|
||||
<Properties>
|
||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="AddImageWizardAddingProgressVisual.jLabel5.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
</Component>
|
||||
<Component class="javax.swing.JProgressBar" name="progressBar">
|
||||
</Component>
|
||||
<Container class="javax.swing.JPanel" name="infoPanel">
|
||||
|
||||
<Layout>
|
||||
<DimensionLayout dim="0">
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<EmptySpace min="0" pref="73" max="32767" attributes="0"/>
|
||||
</Group>
|
||||
</DimensionLayout>
|
||||
<DimensionLayout dim="1">
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<EmptySpace min="0" pref="25" max="32767" attributes="0"/>
|
||||
</Group>
|
||||
</DimensionLayout>
|
||||
</Layout>
|
||||
</Container>
|
||||
<Component class="javax.swing.JTextArea" name="TextArea_CurrentDirectory">
|
||||
<Properties>
|
||||
<Property name="editable" type="boolean" value="false"/>
|
||||
<Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
|
||||
<Color blue="f0" green="f0" red="f0" type="rgb"/>
|
||||
</Property>
|
||||
<Property name="lineWrap" type="boolean" value="true"/>
|
||||
<Property name="rows" type="int" value="5"/>
|
||||
<Property name="wrapStyleWord" type="boolean" value="true"/>
|
||||
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
|
||||
<Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
|
||||
<TitledBorder title="Currently Adding:">
|
||||
<Border PropertyName="innerBorder" info="org.netbeans.modules.form.compat2.border.EtchedBorderInfo">
|
||||
<EtchetBorder/>
|
||||
</Border>
|
||||
<ResourceString PropertyName="titleX" bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="AddImageWizardAddingProgressVisual.TextArea_CurrentDirectory.border.title" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||
</TitledBorder>
|
||||
</Border>
|
||||
</Property>
|
||||
<Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
|
||||
<Color id="Text Cursor"/>
|
||||
</Property>
|
||||
<Property name="focusable" type="boolean" value="false"/>
|
||||
</Properties>
|
||||
</Component>
|
||||
</SubComponents>
|
||||
</Container>
|
||||
</SubComponents>
|
||||
</Form>
|
@ -0,0 +1,302 @@
|
||||
/*
|
||||
* Autopsy Forensic Browser
|
||||
*
|
||||
* Copyright 2012 Basis Technology Corp.
|
||||
* Contact: carrier <at> sleuthkit <dot> 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.casemodule;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import javax.swing.JProgressBar;
|
||||
|
||||
/**
|
||||
* visual component to display progress bar and status updates while adding an
|
||||
* image in the wizard
|
||||
*/
|
||||
public class AddImageWizardAddingProgressVisual extends javax.swing.JPanel {
|
||||
|
||||
/**
|
||||
* Returns the name of the this panel. This name will be shown on the left
|
||||
* panel of the "Add Image" wizard panel.
|
||||
*
|
||||
* @return name the name of this panel
|
||||
*/
|
||||
@Override
|
||||
public String getName() {
|
||||
return "Add Data Source";
|
||||
}
|
||||
|
||||
/**
|
||||
* hide the progress components and show the "done" components
|
||||
*/
|
||||
void setStateFinished() {
|
||||
loadingPanel.setVisible(false);
|
||||
donePanel.setVisible(true);
|
||||
//force repaint just in case
|
||||
validate();
|
||||
repaint();
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates new form AddImageLoadingPanel
|
||||
*/
|
||||
public AddImageWizardAddingProgressVisual() {
|
||||
initComponents();
|
||||
customizeComponents();
|
||||
}
|
||||
|
||||
private void customizeComponents() {
|
||||
//done and log button are both hidden to start
|
||||
donePanel.setVisible(false);
|
||||
viewLogButton.setVisible(false);
|
||||
//match visual background of panel
|
||||
this.TextArea_CurrentDirectory.setBackground(this.getBackground());
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* reset some of the visual components.
|
||||
*
|
||||
* is this ever invoked?
|
||||
*/
|
||||
void resetInfoPanel() {
|
||||
viewLogButton.setVisible(false);
|
||||
progressLabel.setText("");
|
||||
}
|
||||
|
||||
public JProgressBar getProgressBar() {
|
||||
return this.progressBar;
|
||||
}
|
||||
|
||||
/**
|
||||
* update the progress bar and label text and color.
|
||||
*
|
||||
* @param text the text to be shown
|
||||
* @param value the current value of the progress bar
|
||||
* @param color the color of the progress bar text
|
||||
*/
|
||||
public void setProgressBarTextAndColor(String text, int value, Color color) {
|
||||
progressLabel.setText(text);
|
||||
progressLabel.setForeground(color);
|
||||
progressBar.setValue(value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the currently processing directory
|
||||
*
|
||||
* @param dir the text to update with
|
||||
*/
|
||||
public void setCurrentDirText(String dir) {
|
||||
this.TextArea_CurrentDirectory.setText(dir);
|
||||
}
|
||||
|
||||
/**
|
||||
* reconfigure the components to indicate error(s) and show "view log
|
||||
* button"
|
||||
*
|
||||
*
|
||||
* @param errors a string containing a description of the error(s)
|
||||
* @param critical true to indicate the error(s) are critical
|
||||
*/
|
||||
void showErrors(final String errors, boolean critical) {
|
||||
progressBar.setValue(100); //always invoked when process completed
|
||||
if (critical) {
|
||||
statusLabel.setText("*Failed to add image (critical errors encountered). Click below to view the log.");
|
||||
} else {
|
||||
statusLabel.setText("*Data Source added (non-critical errors encountered). Click below to view the log.");
|
||||
}
|
||||
|
||||
viewLogButton.setVisible(true);
|
||||
|
||||
viewLogButton.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
//show error dialog
|
||||
AddImageErrorsDialog dialog = new AddImageErrorsDialog(null, true);
|
||||
dialog.setErrors(errors);
|
||||
dialog.setVisible(true);
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 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")
|
||||
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
|
||||
private void initComponents() {
|
||||
|
||||
donePanel = new javax.swing.JPanel();
|
||||
statusLabel = new javax.swing.JLabel();
|
||||
crDbLabel = new javax.swing.JLabel();
|
||||
viewLogButton = new javax.swing.JButton();
|
||||
loadingPanel = new javax.swing.JPanel();
|
||||
addingDataSourceLabel = new javax.swing.JLabel();
|
||||
progressLabel = new javax.swing.JLabel();
|
||||
jLabel1 = new javax.swing.JLabel();
|
||||
jLabel5 = new javax.swing.JLabel();
|
||||
progressBar = new javax.swing.JProgressBar();
|
||||
infoPanel = new javax.swing.JPanel();
|
||||
TextArea_CurrentDirectory = new javax.swing.JTextArea();
|
||||
|
||||
org.openide.awt.Mnemonics.setLocalizedText(statusLabel, org.openide.util.NbBundle.getMessage(AddImageWizardAddingProgressVisual.class, "AddImageWizardAddingProgressVisual.statusLabel.text")); // NOI18N
|
||||
|
||||
crDbLabel.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
|
||||
org.openide.awt.Mnemonics.setLocalizedText(crDbLabel, org.openide.util.NbBundle.getMessage(AddImageWizardAddingProgressVisual.class, "AddImageWizardAddingProgressVisual.crDbLabel.text")); // NOI18N
|
||||
|
||||
org.openide.awt.Mnemonics.setLocalizedText(viewLogButton, org.openide.util.NbBundle.getMessage(AddImageWizardAddingProgressVisual.class, "AddImageWizardAddingProgressVisual.viewLogButton.text")); // NOI18N
|
||||
|
||||
javax.swing.GroupLayout donePanelLayout = new javax.swing.GroupLayout(donePanel);
|
||||
donePanel.setLayout(donePanelLayout);
|
||||
donePanelLayout.setHorizontalGroup(
|
||||
donePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(donePanelLayout.createSequentialGroup()
|
||||
.addContainerGap()
|
||||
.addGroup(donePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(donePanelLayout.createSequentialGroup()
|
||||
.addGap(0, 0, 0)
|
||||
.addComponent(viewLogButton))
|
||||
.addComponent(crDbLabel)
|
||||
.addComponent(statusLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 463, javax.swing.GroupLayout.PREFERRED_SIZE))
|
||||
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
||||
);
|
||||
donePanelLayout.setVerticalGroup(
|
||||
donePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(donePanelLayout.createSequentialGroup()
|
||||
.addContainerGap()
|
||||
.addComponent(crDbLabel)
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
||||
.addComponent(statusLabel)
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||
.addComponent(viewLogButton)
|
||||
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
||||
);
|
||||
|
||||
addingDataSourceLabel.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
|
||||
org.openide.awt.Mnemonics.setLocalizedText(addingDataSourceLabel, org.openide.util.NbBundle.getMessage(AddImageWizardAddingProgressVisual.class, "AddImageWizardAddingProgressVisual.addingDataSourceLabel.text")); // NOI18N
|
||||
|
||||
org.openide.awt.Mnemonics.setLocalizedText(progressLabel, org.openide.util.NbBundle.getMessage(AddImageWizardAddingProgressVisual.class, "AddImageWizardAddingProgressVisual.progressLabel.text")); // NOI18N
|
||||
progressLabel.setPreferredSize(null);
|
||||
|
||||
org.openide.awt.Mnemonics.setLocalizedText(jLabel1, org.openide.util.NbBundle.getMessage(AddImageWizardAddingProgressVisual.class, "AddImageWizardAddingProgressVisual.jLabel1.text")); // NOI18N
|
||||
|
||||
org.openide.awt.Mnemonics.setLocalizedText(jLabel5, org.openide.util.NbBundle.getMessage(AddImageWizardAddingProgressVisual.class, "AddImageWizardAddingProgressVisual.jLabel5.text")); // NOI18N
|
||||
|
||||
javax.swing.GroupLayout infoPanelLayout = new javax.swing.GroupLayout(infoPanel);
|
||||
infoPanel.setLayout(infoPanelLayout);
|
||||
infoPanelLayout.setHorizontalGroup(
|
||||
infoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGap(0, 73, Short.MAX_VALUE)
|
||||
);
|
||||
infoPanelLayout.setVerticalGroup(
|
||||
infoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGap(0, 25, Short.MAX_VALUE)
|
||||
);
|
||||
|
||||
TextArea_CurrentDirectory.setEditable(false);
|
||||
TextArea_CurrentDirectory.setBackground(new java.awt.Color(240, 240, 240));
|
||||
TextArea_CurrentDirectory.setLineWrap(true);
|
||||
TextArea_CurrentDirectory.setRows(5);
|
||||
TextArea_CurrentDirectory.setWrapStyleWord(true);
|
||||
TextArea_CurrentDirectory.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEtchedBorder(), org.openide.util.NbBundle.getMessage(AddImageWizardAddingProgressVisual.class, "AddImageWizardAddingProgressVisual.TextArea_CurrentDirectory.border.title"))); // NOI18N
|
||||
TextArea_CurrentDirectory.setCursor(new java.awt.Cursor(java.awt.Cursor.TEXT_CURSOR));
|
||||
TextArea_CurrentDirectory.setFocusable(false);
|
||||
|
||||
javax.swing.GroupLayout loadingPanelLayout = new javax.swing.GroupLayout(loadingPanel);
|
||||
loadingPanel.setLayout(loadingPanelLayout);
|
||||
loadingPanelLayout.setHorizontalGroup(
|
||||
loadingPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(loadingPanelLayout.createSequentialGroup()
|
||||
.addContainerGap()
|
||||
.addGroup(loadingPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, loadingPanelLayout.createSequentialGroup()
|
||||
.addGap(0, 0, Short.MAX_VALUE)
|
||||
.addGroup(loadingPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addComponent(addingDataSourceLabel)
|
||||
.addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 552, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addComponent(jLabel5)
|
||||
.addComponent(progressBar, javax.swing.GroupLayout.PREFERRED_SIZE, 489, javax.swing.GroupLayout.PREFERRED_SIZE)))
|
||||
.addGroup(loadingPanelLayout.createSequentialGroup()
|
||||
.addGroup(loadingPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(loadingPanelLayout.createSequentialGroup()
|
||||
.addComponent(progressLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||
.addComponent(infoPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
|
||||
.addComponent(TextArea_CurrentDirectory, javax.swing.GroupLayout.PREFERRED_SIZE, 487, javax.swing.GroupLayout.PREFERRED_SIZE))
|
||||
.addGap(0, 0, Short.MAX_VALUE))))
|
||||
);
|
||||
loadingPanelLayout.setVerticalGroup(
|
||||
loadingPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(loadingPanelLayout.createSequentialGroup()
|
||||
.addContainerGap()
|
||||
.addComponent(addingDataSourceLabel)
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
||||
.addComponent(jLabel1)
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
||||
.addComponent(jLabel5, javax.swing.GroupLayout.PREFERRED_SIZE, 14, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||
.addComponent(progressBar, javax.swing.GroupLayout.PREFERRED_SIZE, 24, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||
.addComponent(TextArea_CurrentDirectory, javax.swing.GroupLayout.PREFERRED_SIZE, 91, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||
.addGroup(loadingPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(loadingPanelLayout.createSequentialGroup()
|
||||
.addComponent(infoPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addGap(0, 0, Short.MAX_VALUE))
|
||||
.addComponent(progressLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
||||
.addContainerGap())
|
||||
);
|
||||
|
||||
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
|
||||
this.setLayout(layout);
|
||||
layout.setHorizontalGroup(
|
||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(layout.createSequentialGroup()
|
||||
.addGap(0, 0, 0)
|
||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addComponent(loadingPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addComponent(donePanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
|
||||
.addGap(0, 0, Short.MAX_VALUE))
|
||||
);
|
||||
layout.setVerticalGroup(
|
||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(layout.createSequentialGroup()
|
||||
.addGap(0, 0, 0)
|
||||
.addComponent(loadingPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||
.addComponent(donePanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addContainerGap())
|
||||
);
|
||||
}// </editor-fold>//GEN-END:initComponents
|
||||
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||
private javax.swing.JTextArea TextArea_CurrentDirectory;
|
||||
private javax.swing.JLabel addingDataSourceLabel;
|
||||
private javax.swing.JLabel crDbLabel;
|
||||
private javax.swing.JPanel donePanel;
|
||||
private javax.swing.JPanel infoPanel;
|
||||
private javax.swing.JLabel jLabel1;
|
||||
private javax.swing.JLabel jLabel5;
|
||||
private javax.swing.JPanel loadingPanel;
|
||||
private javax.swing.JProgressBar progressBar;
|
||||
private javax.swing.JLabel progressLabel;
|
||||
private javax.swing.JLabel statusLabel;
|
||||
private javax.swing.JButton viewLogButton;
|
||||
// End of variables declaration//GEN-END:variables
|
||||
}
|
@ -37,13 +37,13 @@ import org.sleuthkit.autopsy.coreutils.ModuleSettings;
|
||||
* The "Add Image" wizard panel1 handling the logic of selecting image file(s)
|
||||
* to add to Case, and pick the time zone.
|
||||
*/
|
||||
class AddImageWizardPanel1 implements WizardDescriptor.Panel<WizardDescriptor>, PropertyChangeListener {
|
||||
class AddImageWizardChooseDataSourcePanel implements WizardDescriptor.Panel<WizardDescriptor>, PropertyChangeListener {
|
||||
|
||||
/**
|
||||
* The visual component that displays this panel. If you need to access the
|
||||
* component from this class, just use getComponent().
|
||||
*/
|
||||
private AddImageVisualPanel1 component;
|
||||
private AddImageWizardChooseDataSourceVisual component;
|
||||
private boolean isNextEnable = false;
|
||||
private static final String PROP_LASTDATASOURCE_PATH = "LBL_LastDataSource_PATH";
|
||||
private static final String PROP_LASTDATASOURCE_TYPE = "LBL_LastDataSource_TYPE";
|
||||
@ -59,9 +59,9 @@ class AddImageWizardPanel1 implements WizardDescriptor.Panel<WizardDescriptor>,
|
||||
* @return component the UI component of this wizard panel
|
||||
*/
|
||||
@Override
|
||||
public AddImageVisualPanel1 getComponent() {
|
||||
public AddImageWizardChooseDataSourceVisual getComponent() {
|
||||
if (component == null) {
|
||||
component = new AddImageVisualPanel1(this);
|
||||
component = new AddImageWizardChooseDataSourceVisual(this);
|
||||
}
|
||||
component.addPropertyChangeListener(this);
|
||||
return component;
|
||||
@ -194,7 +194,7 @@ class AddImageWizardPanel1 implements WizardDescriptor.Panel<WizardDescriptor>,
|
||||
try {
|
||||
cleanupTask.cleanup();
|
||||
} catch (Exception ex) {
|
||||
Logger logger = Logger.getLogger(AddImageWizardPanel1.class.getName());
|
||||
Logger logger = Logger.getLogger(AddImageWizardChooseDataSourcePanel.class.getName());
|
||||
logger.log(Level.WARNING, "Error cleaning up image task", ex);
|
||||
} finally {
|
||||
cleanupTask.disable();
|
@ -7,7 +7,7 @@
|
||||
<Component class="javax.swing.JLabel" name="jLabel2">
|
||||
<Properties>
|
||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="AddImageVisualPanel1.jLabel2.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="AddImageWizardChooseDataSourceVisual.jLabel2.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
</Component>
|
||||
@ -85,14 +85,14 @@
|
||||
<Component class="javax.swing.JLabel" name="nextLabel">
|
||||
<Properties>
|
||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="AddImageVisualPanel1.nextLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="AddImageWizardChooseDataSourceVisual.nextLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
</Component>
|
||||
<Component class="javax.swing.JLabel" name="timeZoneLabel">
|
||||
<Properties>
|
||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="AddImageVisualPanel1.timeZoneLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="AddImageWizardChooseDataSourceVisual.timeZoneLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
</Component>
|
||||
@ -110,17 +110,17 @@
|
||||
<Component class="javax.swing.JCheckBox" name="noFatOrphansCheckbox">
|
||||
<Properties>
|
||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="AddImageVisualPanel1.noFatOrphansCheckbox.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="AddImageWizardChooseDataSourceVisual.noFatOrphansCheckbox.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||
</Property>
|
||||
<Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="AddImageVisualPanel1.noFatOrphansCheckbox.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="AddImageWizardChooseDataSourceVisual.noFatOrphansCheckbox.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
</Component>
|
||||
<Component class="javax.swing.JLabel" name="descLabel">
|
||||
<Properties>
|
||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="AddImageVisualPanel1.descLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="AddImageWizardChooseDataSourceVisual.descLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
</Component>
|
||||
@ -170,7 +170,7 @@
|
||||
<Component class="javax.swing.JLabel" name="typeTabel">
|
||||
<Properties>
|
||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="AddImageVisualPanel1.typeTabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="AddImageWizardChooseDataSourceVisual.typeTabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
</Component>
|
||||
@ -215,7 +215,7 @@
|
||||
<Font name="Tahoma" size="14" style="1"/>
|
||||
</Property>
|
||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="AddImageVisualPanel1.imgInfoLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="AddImageWizardChooseDataSourceVisual.imgInfoLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
</Component>
|
@ -34,13 +34,16 @@ import javax.swing.event.ListDataListener;
|
||||
import org.sleuthkit.autopsy.casemodule.ContentTypePanel.ContentType;
|
||||
|
||||
/**
|
||||
* The "Add Image" wizard panel 1. This class is used to design the "form" of
|
||||
* the panel 1 for "Add Image" wizard panel.
|
||||
* visual component for the first panel of add image wizard. Allows user to pick
|
||||
* data source and timezone.
|
||||
*
|
||||
*/
|
||||
final class AddImageVisualPanel1 extends JPanel {
|
||||
|
||||
enum EVENT {UPDATE_UI, FOCUS_NEXT};
|
||||
final class AddImageWizardChooseDataSourceVisual extends JPanel {
|
||||
|
||||
enum EVENT {
|
||||
|
||||
UPDATE_UI, FOCUS_NEXT
|
||||
};
|
||||
static final List<String> rawExt = Arrays.asList(new String[]{".img", ".dd", ".001", ".aa", ".raw"});
|
||||
static final String rawDesc = "Raw Images (*.img, *.dd, *.001, *.aa, *.raw)";
|
||||
static GeneralFilter rawFilter = new GeneralFilter(rawExt, rawDesc);
|
||||
@ -48,28 +51,29 @@ final class AddImageVisualPanel1 extends JPanel {
|
||||
static final String encaseDesc = "Encase Images (*.e01)";
|
||||
static GeneralFilter encaseFilter = new GeneralFilter(encaseExt, encaseDesc);
|
||||
static final List<String> allExt = new ArrayList<String>();
|
||||
|
||||
static {
|
||||
allExt.addAll(rawExt);
|
||||
allExt.addAll(encaseExt);
|
||||
}
|
||||
static final String allDesc = "All Supported Types";
|
||||
static GeneralFilter allFilter = new GeneralFilter(allExt, allDesc);
|
||||
private AddImageWizardPanel1 wizPanel;
|
||||
private AddImageWizardChooseDataSourcePanel wizPanel;
|
||||
private ContentTypeModel model;
|
||||
|
||||
private ContentTypePanel currentPanel;
|
||||
|
||||
/**
|
||||
* Creates new form AddImageVisualPanel1
|
||||
*
|
||||
* @param wizPanel corresponding WizardPanel to handle logic of wizard step
|
||||
*/
|
||||
AddImageVisualPanel1(AddImageWizardPanel1 wizPanel) {
|
||||
AddImageWizardChooseDataSourceVisual(AddImageWizardChooseDataSourcePanel wizPanel) {
|
||||
initComponents();
|
||||
this.wizPanel = wizPanel;
|
||||
createTimeZoneList();
|
||||
customInit();
|
||||
}
|
||||
|
||||
|
||||
private void customInit() {
|
||||
model = new ContentTypeModel();
|
||||
typeComboBox.setModel(model);
|
||||
@ -77,9 +81,10 @@ final class AddImageVisualPanel1 extends JPanel {
|
||||
typePanel.setLayout(new BorderLayout());
|
||||
updateCurrentPanel(ImageFilePanel.getDefault());
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Changes the current panel to the given panel.
|
||||
*
|
||||
* @param panel instance of ImageTypePanel to change to
|
||||
*/
|
||||
private void updateCurrentPanel(ContentTypePanel panel) {
|
||||
@ -89,17 +94,15 @@ final class AddImageVisualPanel1 extends JPanel {
|
||||
typePanel.validate();
|
||||
typePanel.repaint();
|
||||
currentPanel.addPropertyChangeListener(new PropertyChangeListener() {
|
||||
|
||||
@Override
|
||||
public void propertyChange(PropertyChangeEvent evt) {
|
||||
if(evt.getPropertyName().equals(AddImageVisualPanel1.EVENT.UPDATE_UI.toString())) {
|
||||
if (evt.getPropertyName().equals(AddImageWizardChooseDataSourceVisual.EVENT.UPDATE_UI.toString())) {
|
||||
updateUI(null);
|
||||
}
|
||||
if(evt.getPropertyName().equals(AddImageVisualPanel1.EVENT.FOCUS_NEXT.toString())) {
|
||||
if (evt.getPropertyName().equals(AddImageWizardChooseDataSourceVisual.EVENT.FOCUS_NEXT.toString())) {
|
||||
wizPanel.moveFocusToNext();
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
currentPanel.select();
|
||||
if (currentPanel.getContentType().equals(ContentType.LOCAL)) {
|
||||
@ -107,8 +110,7 @@ final class AddImageVisualPanel1 extends JPanel {
|
||||
noFatOrphansCheckbox.setEnabled(false);
|
||||
descLabel.setEnabled(false);
|
||||
timeZoneComboBox.setEnabled(false);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
noFatOrphansCheckbox.setEnabled(true);
|
||||
descLabel.setEnabled(true);
|
||||
timeZoneComboBox.setEnabled(true);
|
||||
@ -120,7 +122,7 @@ final class AddImageVisualPanel1 extends JPanel {
|
||||
* Returns the name of the this panel. This name will be shown on the left
|
||||
* panel of the "Add Image" wizard panel.
|
||||
*
|
||||
* @return name the name of this panel
|
||||
* @return name the name of this panel
|
||||
*/
|
||||
@Override
|
||||
public String getName() {
|
||||
@ -135,8 +137,8 @@ final class AddImageVisualPanel1 extends JPanel {
|
||||
public String getContentPaths() {
|
||||
return currentPanel.getContentPaths();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
/**
|
||||
* Gets the data sources type selected
|
||||
*
|
||||
* @return data source selected
|
||||
@ -144,24 +146,25 @@ final class AddImageVisualPanel1 extends JPanel {
|
||||
public ContentType getContentType() {
|
||||
return currentPanel.getContentType();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Reset the data sources panel selected
|
||||
*/
|
||||
public void reset() {
|
||||
currentPanel.reset();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sets the image path of the current panel.
|
||||
*
|
||||
* @param s the image path to set
|
||||
*/
|
||||
public void setContentPath(String s) {
|
||||
currentPanel.setContentPath(s);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
* @return true if no fat orphans processing is selected
|
||||
*/
|
||||
boolean getNoFatOrphans() {
|
||||
@ -171,7 +174,7 @@ final class AddImageVisualPanel1 extends JPanel {
|
||||
/**
|
||||
* Gets the time zone that selected on the drop down list.
|
||||
*
|
||||
* @return timeZone the time zone that selected
|
||||
* @return timeZone the time zone that selected
|
||||
*/
|
||||
public String getSelectedTimezone() {
|
||||
String tz = timeZoneComboBox.getSelectedItem().toString();
|
||||
@ -194,17 +197,13 @@ final class AddImageVisualPanel1 extends JPanel {
|
||||
String item = String.format("(GMT%+d:%02d) %s", hour, minutes, id);
|
||||
|
||||
/*
|
||||
DateFormat dfm = new SimpleDateFormat("z");
|
||||
dfm.setTimeZone(zone);
|
||||
boolean hasDaylight = zone.useDaylightTime();
|
||||
String first = dfm.format(new Date(2010, 1, 1));
|
||||
String second = dfm.format(new Date(2011, 6, 6));
|
||||
int mid = hour * -1;
|
||||
String result = first + Integer.toString(mid);
|
||||
if(hasDaylight){
|
||||
result = result + second;
|
||||
}
|
||||
timeZoneComboBox.addItem(item + " (" + result + ")");
|
||||
* DateFormat dfm = new SimpleDateFormat("z");
|
||||
* dfm.setTimeZone(zone); boolean hasDaylight =
|
||||
* zone.useDaylightTime(); String first = dfm.format(new Date(2010,
|
||||
* 1, 1)); String second = dfm.format(new Date(2011, 6, 6)); int mid
|
||||
* = hour * -1; String result = first + Integer.toString(mid);
|
||||
* if(hasDaylight){ result = result + second; }
|
||||
* timeZoneComboBox.addItem(item + " (" + result + ")");
|
||||
*/
|
||||
timeZoneComboBox.addItem(item);
|
||||
}
|
||||
@ -219,7 +218,7 @@ final class AddImageVisualPanel1 extends JPanel {
|
||||
timeZoneComboBox.setSelectedItem(formatted);
|
||||
}
|
||||
|
||||
/**
|
||||
/**
|
||||
* 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.
|
||||
@ -240,24 +239,24 @@ final class AddImageVisualPanel1 extends JPanel {
|
||||
typeComboBox = new javax.swing.JComboBox<ContentTypePanel>();
|
||||
imgInfoLabel = new javax.swing.JLabel();
|
||||
|
||||
org.openide.awt.Mnemonics.setLocalizedText(jLabel2, org.openide.util.NbBundle.getMessage(AddImageVisualPanel1.class, "AddImageVisualPanel1.jLabel2.text")); // NOI18N
|
||||
org.openide.awt.Mnemonics.setLocalizedText(jLabel2, org.openide.util.NbBundle.getMessage(AddImageWizardChooseDataSourceVisual.class, "AddImageWizardChooseDataSourceVisual.jLabel2.text")); // NOI18N
|
||||
|
||||
setPreferredSize(new java.awt.Dimension(588, 328));
|
||||
|
||||
org.openide.awt.Mnemonics.setLocalizedText(nextLabel, org.openide.util.NbBundle.getMessage(AddImageVisualPanel1.class, "AddImageVisualPanel1.nextLabel.text")); // NOI18N
|
||||
org.openide.awt.Mnemonics.setLocalizedText(nextLabel, org.openide.util.NbBundle.getMessage(AddImageWizardChooseDataSourceVisual.class, "AddImageWizardChooseDataSourceVisual.nextLabel.text")); // NOI18N
|
||||
|
||||
org.openide.awt.Mnemonics.setLocalizedText(timeZoneLabel, org.openide.util.NbBundle.getMessage(AddImageVisualPanel1.class, "AddImageVisualPanel1.timeZoneLabel.text")); // NOI18N
|
||||
org.openide.awt.Mnemonics.setLocalizedText(timeZoneLabel, org.openide.util.NbBundle.getMessage(AddImageWizardChooseDataSourceVisual.class, "AddImageWizardChooseDataSourceVisual.timeZoneLabel.text")); // NOI18N
|
||||
|
||||
timeZoneComboBox.setMaximumRowCount(30);
|
||||
|
||||
org.openide.awt.Mnemonics.setLocalizedText(noFatOrphansCheckbox, org.openide.util.NbBundle.getMessage(AddImageVisualPanel1.class, "AddImageVisualPanel1.noFatOrphansCheckbox.text")); // NOI18N
|
||||
noFatOrphansCheckbox.setToolTipText(org.openide.util.NbBundle.getMessage(AddImageVisualPanel1.class, "AddImageVisualPanel1.noFatOrphansCheckbox.toolTipText")); // NOI18N
|
||||
org.openide.awt.Mnemonics.setLocalizedText(noFatOrphansCheckbox, org.openide.util.NbBundle.getMessage(AddImageWizardChooseDataSourceVisual.class, "AddImageWizardChooseDataSourceVisual.noFatOrphansCheckbox.text")); // NOI18N
|
||||
noFatOrphansCheckbox.setToolTipText(org.openide.util.NbBundle.getMessage(AddImageWizardChooseDataSourceVisual.class, "AddImageWizardChooseDataSourceVisual.noFatOrphansCheckbox.toolTipText")); // NOI18N
|
||||
|
||||
org.openide.awt.Mnemonics.setLocalizedText(descLabel, org.openide.util.NbBundle.getMessage(AddImageVisualPanel1.class, "AddImageVisualPanel1.descLabel.text")); // NOI18N
|
||||
org.openide.awt.Mnemonics.setLocalizedText(descLabel, org.openide.util.NbBundle.getMessage(AddImageWizardChooseDataSourceVisual.class, "AddImageWizardChooseDataSourceVisual.descLabel.text")); // NOI18N
|
||||
|
||||
inputPanel.setBorder(javax.swing.BorderFactory.createEtchedBorder());
|
||||
|
||||
org.openide.awt.Mnemonics.setLocalizedText(typeTabel, org.openide.util.NbBundle.getMessage(AddImageVisualPanel1.class, "AddImageVisualPanel1.typeTabel.text")); // NOI18N
|
||||
org.openide.awt.Mnemonics.setLocalizedText(typeTabel, org.openide.util.NbBundle.getMessage(AddImageWizardChooseDataSourceVisual.class, "AddImageWizardChooseDataSourceVisual.typeTabel.text")); // NOI18N
|
||||
|
||||
typePanel.setMinimumSize(new java.awt.Dimension(0, 65));
|
||||
typePanel.setPreferredSize(new java.awt.Dimension(521, 65));
|
||||
@ -301,7 +300,7 @@ final class AddImageVisualPanel1 extends JPanel {
|
||||
);
|
||||
|
||||
imgInfoLabel.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
|
||||
org.openide.awt.Mnemonics.setLocalizedText(imgInfoLabel, org.openide.util.NbBundle.getMessage(AddImageVisualPanel1.class, "AddImageVisualPanel1.imgInfoLabel.text")); // NOI18N
|
||||
org.openide.awt.Mnemonics.setLocalizedText(imgInfoLabel, org.openide.util.NbBundle.getMessage(AddImageWizardChooseDataSourceVisual.class, "AddImageWizardChooseDataSourceVisual.imgInfoLabel.text")); // NOI18N
|
||||
|
||||
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
|
||||
this.setLayout(layout);
|
||||
@ -346,7 +345,6 @@ final class AddImageVisualPanel1 extends JPanel {
|
||||
.addGap(0, 0, 0))
|
||||
);
|
||||
}// </editor-fold>//GEN-END:initComponents
|
||||
|
||||
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||
private javax.swing.ButtonGroup buttonGroup1;
|
||||
private javax.swing.JLabel descLabel;
|
||||
@ -367,21 +365,21 @@ final class AddImageVisualPanel1 extends JPanel {
|
||||
* fields on this panel. This is also the method to check whether all the
|
||||
* fields on this panel are correctly filled and decides whether to enable
|
||||
* the "Next" button or not.
|
||||
*
|
||||
* @param e the document event
|
||||
*
|
||||
* @param e the document event
|
||||
*/
|
||||
public void updateUI(DocumentEvent e) {
|
||||
this.wizPanel.enableNextButton(currentPanel.enableNext());
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* ComboBoxModel to control typeComboBox and supply ImageTypePanels.
|
||||
*/
|
||||
private class ContentTypeModel implements ComboBoxModel<ContentTypePanel> {
|
||||
|
||||
private ContentTypePanel selected;
|
||||
private ContentTypePanel[] types = ContentTypePanel.getPanels();
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public void setSelectedItem(Object anItem) {
|
||||
selected = (ContentTypePanel) anItem;
|
||||
@ -410,6 +408,5 @@ final class AddImageVisualPanel1 extends JPanel {
|
||||
@Override
|
||||
public void removeListDataListener(ListDataListener l) {
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -41,7 +41,6 @@ import org.sleuthkit.autopsy.casemodule.ContentTypePanel.ContentType;
|
||||
import org.sleuthkit.autopsy.casemodule.services.FileManager;
|
||||
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||
import org.sleuthkit.autopsy.coreutils.PlatformUtil;
|
||||
import org.sleuthkit.autopsy.ingest.IngestDialog;
|
||||
import org.sleuthkit.datamodel.AbstractFile;
|
||||
import org.sleuthkit.datamodel.Content;
|
||||
import org.sleuthkit.datamodel.Image;
|
||||
@ -52,12 +51,14 @@ import org.sleuthkit.datamodel.TskDataException;
|
||||
import org.sleuthkit.datamodel.TskException;
|
||||
|
||||
/**
|
||||
* The "Add Image" wizard panel3. Presents the options to finish/cancel
|
||||
* image-add and run ingest.
|
||||
* second panel of add image wizard, allows user to configure ingest modules.
|
||||
*
|
||||
* TODO: review this for dead code. think about moving logic of adding image to
|
||||
* 3rd panel( {@link AddImageWizardAddingProgressPanel}) separate class -jm
|
||||
*/
|
||||
class AddImageWizardPanel3 implements WizardDescriptor.Panel<WizardDescriptor> {
|
||||
class AddImageWizardIngestConfigPanel implements WizardDescriptor.Panel<WizardDescriptor> {
|
||||
|
||||
private static final Logger logger = Logger.getLogger(AddImageWizardPanel3.class.getName());
|
||||
private static final Logger logger = Logger.getLogger(AddImageWizardIngestConfigPanel.class.getName());
|
||||
private IngestConfigurator ingestConfig;
|
||||
/**
|
||||
* The visual component that displays this panel. If you need to access the
|
||||
@ -76,27 +77,25 @@ class AddImageWizardPanel3 implements WizardDescriptor.Panel<WizardDescriptor> {
|
||||
private boolean noFatOrphans;
|
||||
// task that will clean up the created database file if the wizard is cancelled before it finishes
|
||||
private AddImageAction.CleanupTask cleanupImage; // initialized to null in readSettings()
|
||||
// flag to control the availiablity of next action
|
||||
private boolean imgAdded; // initalized to false in readSettings()
|
||||
private CurrentDirectoryFetcher fetcher;
|
||||
private AddImageProcess process;
|
||||
private AddImageAction action;
|
||||
private AddImageTask addImageTask;
|
||||
private AddLocalFilesTask addLocalFilesTask;
|
||||
private AddImageWizardPanel2 wizPanel;
|
||||
private AddImageWizardAddingProgressPanel progressPanel;
|
||||
|
||||
AddImageWizardPanel3(AddImageAction action, AddImageWizardPanel2 wizPanel) {
|
||||
AddImageWizardIngestConfigPanel(AddImageAction action, AddImageWizardAddingProgressPanel proPanel) {
|
||||
this.action = action;
|
||||
this.wizPanel = wizPanel;
|
||||
this.progressPanel = proPanel;
|
||||
ingestConfig = Lookup.getDefault().lookup(IngestConfigurator.class);
|
||||
List<String> messages = ingestConfig.setContext(AddImageWizardPanel3.class.getCanonicalName());
|
||||
List<String> messages = ingestConfig.setContext(AddImageWizardIngestConfigPanel.class.getCanonicalName());
|
||||
if (messages.isEmpty() == false) {
|
||||
StringBuilder warning = new StringBuilder();
|
||||
for (String message : messages) {
|
||||
warning.append(message).append("\n");
|
||||
}
|
||||
JOptionPane.showMessageDialog(null, warning.toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -110,7 +109,7 @@ class AddImageWizardPanel3 implements WizardDescriptor.Panel<WizardDescriptor> {
|
||||
@Override
|
||||
public Component getComponent() {
|
||||
if (component == null) {
|
||||
component = new AddImageVisualPanel3(ingestConfig.getIngestConfigPanel());
|
||||
component = new AddImageWizardIngestConfigVisual(ingestConfig.getIngestConfigPanel());
|
||||
}
|
||||
return component;
|
||||
}
|
||||
@ -183,7 +182,7 @@ class AddImageWizardPanel3 implements WizardDescriptor.Panel<WizardDescriptor> {
|
||||
settings.setOptions(new Object[]{WizardDescriptor.PREVIOUS_OPTION, WizardDescriptor.NEXT_OPTION, WizardDescriptor.FINISH_OPTION, cancel});
|
||||
cleanupImage = null;
|
||||
readyToIngest = false;
|
||||
imgAdded = false;
|
||||
|
||||
newContents.clear();
|
||||
dataSourcePath = (String) settings.getProperty(AddImageAction.DATASOURCEPATH_PROP);
|
||||
dataSourceType = (ContentType) settings.getProperty(AddImageAction.DATASOURCETYPE_PROP);
|
||||
@ -228,7 +227,8 @@ class AddImageWizardPanel3 implements WizardDescriptor.Panel<WizardDescriptor> {
|
||||
ingested = true;
|
||||
ingestConfig.setContent(newContents);
|
||||
ingestConfig.start();
|
||||
wizPanel.getComponent().appendProgressText(" Ingest started.");
|
||||
progressPanel.setStateFinished();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -240,10 +240,10 @@ class AddImageWizardPanel3 implements WizardDescriptor.Panel<WizardDescriptor> {
|
||||
|
||||
AddImageTask task;
|
||||
JProgressBar prog;
|
||||
AddImageVisualPanel2 wiz;
|
||||
AddImageWizardAddingProgressVisual wiz;
|
||||
AddImageProcess proc;
|
||||
|
||||
CurrentDirectoryFetcher(JProgressBar prog, AddImageVisualPanel2 wiz, AddImageProcess proc) {
|
||||
CurrentDirectoryFetcher(JProgressBar prog, AddImageWizardAddingProgressVisual wiz, AddImageProcess proc) {
|
||||
this.wiz = wiz;
|
||||
this.proc = proc;
|
||||
this.prog = prog;
|
||||
@ -260,7 +260,7 @@ class AddImageWizardPanel3 implements WizardDescriptor.Panel<WizardDescriptor> {
|
||||
EventQueue.invokeLater(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
wiz.changeCurrentDir(proc.currentDirectory());
|
||||
wiz.setCurrentDirText(proc.currentDirectory());
|
||||
}
|
||||
});
|
||||
|
||||
@ -271,14 +271,6 @@ class AddImageWizardPanel3 implements WizardDescriptor.Panel<WizardDescriptor> {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* When done, set the Wizards processing tags to be invisible
|
||||
*/
|
||||
@Override
|
||||
protected void done() {
|
||||
wiz.setProcessInvis();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -301,7 +293,7 @@ class AddImageWizardPanel3 implements WizardDescriptor.Panel<WizardDescriptor> {
|
||||
private Logger logger = Logger.getLogger(AddLocalFilesTask.class.getName());
|
||||
|
||||
protected AddLocalFilesTask(WizardDescriptor settings) {
|
||||
this.progressBar = wizPanel.getComponent().getCrDbProgressBar();
|
||||
this.progressBar = progressPanel.getComponent().getProgressBar();
|
||||
currentCase = Case.getCurrentCase();
|
||||
this.settings = settings;
|
||||
}
|
||||
@ -310,6 +302,7 @@ class AddImageWizardPanel3 implements WizardDescriptor.Panel<WizardDescriptor> {
|
||||
* Starts the addImage process, but does not commit the results.
|
||||
*
|
||||
* @return
|
||||
*
|
||||
* @throws Exception
|
||||
*/
|
||||
@Override
|
||||
@ -326,10 +319,10 @@ class AddImageWizardPanel3 implements WizardDescriptor.Panel<WizardDescriptor> {
|
||||
};
|
||||
|
||||
cancelledWhileRunning.enable();
|
||||
final LocalFilesAddProgressUpdater progUpdater = new LocalFilesAddProgressUpdater(this.progressBar, wizPanel.getComponent());
|
||||
final LocalFilesAddProgressUpdater progUpdater = new LocalFilesAddProgressUpdater(this.progressBar, progressPanel.getComponent());
|
||||
try {
|
||||
final FileManager fileManager = currentCase.getServices().getFileManager();
|
||||
wizPanel.setStateStarted();
|
||||
progressPanel.setStateStarted();
|
||||
String[] paths = dataSourcePath.split(LocalFilesPanel.FILES_SEP);
|
||||
List<String> absLocalPaths = new ArrayList<String>();
|
||||
for (String path : paths) {
|
||||
@ -361,31 +354,33 @@ class AddImageWizardPanel3 implements WizardDescriptor.Panel<WizardDescriptor> {
|
||||
protected void postProcess() {
|
||||
progressBar.setIndeterminate(false);
|
||||
setProgress(100);
|
||||
|
||||
|
||||
//clear updates
|
||||
wizPanel.getComponent().setProcessInvis();
|
||||
// progressPanel.getComponent().setProcessInvis();
|
||||
|
||||
if (interrupted || hasCritError) {
|
||||
logger.log(Level.INFO, "Handling errors or interruption that occured in logical files process");
|
||||
if (hasCritError) {
|
||||
//core error
|
||||
wizPanel.getComponent().setErrors(errorString, true);
|
||||
progressPanel.getComponent().showErrors(errorString, true);
|
||||
}
|
||||
return;
|
||||
} else if (errorString != null) {
|
||||
//data error (non-critical)
|
||||
logger.log(Level.INFO, "Handling non-critical errors that occured in logical files process");
|
||||
wizPanel.getComponent().setErrors(errorString, false);
|
||||
} else {
|
||||
if (errorString != null) {
|
||||
//data error (non-critical)
|
||||
logger.log(Level.INFO, "Handling non-critical errors that occured in logical files process");
|
||||
progressPanel.getComponent().showErrors(errorString, false);
|
||||
}
|
||||
}
|
||||
try {
|
||||
// When everything happens without an error:
|
||||
if (errorString == null) { // complete progress bar
|
||||
wizPanel.getComponent().changeProgressBarTextAndColor("*Logical Files added.", 100, Color.black);
|
||||
progressPanel.getComponent().setProgressBarTextAndColor("*Logical Files added.", 100, Color.black);
|
||||
}
|
||||
|
||||
// Get attention for the process finish
|
||||
java.awt.Toolkit.getDefaultToolkit().beep(); //BEEP!
|
||||
AddImageVisualPanel2 panel = wizPanel.getComponent();
|
||||
AddImageWizardAddingProgressVisual panel = progressPanel.getComponent();
|
||||
if (panel != null) {
|
||||
Window w = SwingUtilities.getWindowAncestor(panel);
|
||||
if (w != null) {
|
||||
@ -393,7 +388,7 @@ class AddImageWizardPanel3 implements WizardDescriptor.Panel<WizardDescriptor> {
|
||||
}
|
||||
}
|
||||
|
||||
wizPanel.setStateFinished();
|
||||
progressPanel.setStateFinished();
|
||||
|
||||
//notify the case
|
||||
if (!newContents.isEmpty()) {
|
||||
@ -406,7 +401,7 @@ class AddImageWizardPanel3 implements WizardDescriptor.Panel<WizardDescriptor> {
|
||||
} catch (Exception ex) {
|
||||
//handle unchecked exceptions
|
||||
logger.log(Level.WARNING, "Unexpected errors occurred while running post add image cleanup. ", ex);
|
||||
wizPanel.getComponent().changeProgressBarTextAndColor("*Failed to add image.", 0, Color.black); // set error message
|
||||
progressPanel.getComponent().setProgressBarTextAndColor("*Failed to add image.", 0, Color.black); // set error message
|
||||
logger.log(Level.SEVERE, "Error adding image to case", ex);
|
||||
}
|
||||
}
|
||||
@ -418,9 +413,9 @@ class AddImageWizardPanel3 implements WizardDescriptor.Panel<WizardDescriptor> {
|
||||
|
||||
private int count = 0;
|
||||
private JProgressBar prog;
|
||||
private AddImageVisualPanel2 wiz;
|
||||
private AddImageWizardAddingProgressVisual wiz;
|
||||
|
||||
LocalFilesAddProgressUpdater(JProgressBar prog, AddImageVisualPanel2 wiz) {
|
||||
LocalFilesAddProgressUpdater(JProgressBar prog, AddImageWizardAddingProgressVisual wiz) {
|
||||
this.wiz = wiz;
|
||||
this.prog = prog;
|
||||
}
|
||||
@ -431,7 +426,7 @@ class AddImageWizardPanel3 implements WizardDescriptor.Panel<WizardDescriptor> {
|
||||
EventQueue.invokeLater(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
wiz.changeCurrentDir(newFile.getParentPath() + "/" + newFile.getName());
|
||||
wiz.setCurrentDirText(newFile.getParentPath() + "/" + newFile.getName());
|
||||
}
|
||||
});
|
||||
|
||||
@ -452,25 +447,25 @@ class AddImageWizardPanel3 implements WizardDescriptor.Panel<WizardDescriptor> {
|
||||
private boolean interrupted = false;
|
||||
private boolean hasCritError = false;
|
||||
private String errorString = null;
|
||||
private long start;
|
||||
private WizardDescriptor settings;
|
||||
private WizardDescriptor wizDescriptor;
|
||||
private Logger logger = Logger.getLogger(AddImageTask.class.getName());
|
||||
|
||||
protected AddImageTask(WizardDescriptor settings) {
|
||||
this.progressBar = wizPanel.getComponent().getCrDbProgressBar();
|
||||
this.progressBar = progressPanel.getComponent().getProgressBar();
|
||||
currentCase = Case.getCurrentCase();
|
||||
this.settings = settings;
|
||||
this.wizDescriptor = settings;
|
||||
}
|
||||
|
||||
/**
|
||||
* Starts the addImage process, but does not commit the results.
|
||||
*
|
||||
* @return
|
||||
*
|
||||
* @throws Exception
|
||||
*/
|
||||
@Override
|
||||
protected Integer doInBackground() {
|
||||
start = System.currentTimeMillis();
|
||||
|
||||
this.setProgress(0);
|
||||
|
||||
|
||||
@ -504,10 +499,10 @@ class AddImageWizardPanel3 implements WizardDescriptor.Panel<WizardDescriptor> {
|
||||
}
|
||||
|
||||
process = currentCase.makeAddImageProcess(timeZone, true, noFatOrphans);
|
||||
fetcher = new CurrentDirectoryFetcher(this.progressBar, wizPanel.getComponent(), process);
|
||||
fetcher = new CurrentDirectoryFetcher(this.progressBar, progressPanel.getComponent(), process);
|
||||
cancelledWhileRunning.enable();
|
||||
try {
|
||||
wizPanel.setStateStarted();
|
||||
progressPanel.setStateStarted();
|
||||
fetcher.execute();
|
||||
process.run(new String[]{dataSourcePath});
|
||||
} catch (TskCoreException ex) {
|
||||
@ -540,7 +535,8 @@ class AddImageWizardPanel3 implements WizardDescriptor.Panel<WizardDescriptor> {
|
||||
* would have reverted it.
|
||||
*
|
||||
* @param settings property set to get AddImageProcess and CleanupTask
|
||||
* from
|
||||
* from
|
||||
*
|
||||
* @throws Exception if commit or adding the image to the case failed
|
||||
*/
|
||||
private void commitImage(WizardDescriptor settings) throws Exception {
|
||||
@ -591,13 +587,15 @@ class AddImageWizardPanel3 implements WizardDescriptor.Panel<WizardDescriptor> {
|
||||
revert();
|
||||
if (hasCritError) {
|
||||
//core error
|
||||
wizPanel.getComponent().setErrors(errorString, true);
|
||||
progressPanel.getComponent().showErrors(errorString, true);
|
||||
}
|
||||
return;
|
||||
} else if (errorString != null) {
|
||||
//data error (non-critical)
|
||||
logger.log(Level.INFO, "Handling non-critical errors that occured in add image process");
|
||||
wizPanel.getComponent().setErrors(errorString, false);
|
||||
} else {
|
||||
if (errorString != null) {
|
||||
//data error (non-critical)
|
||||
logger.log(Level.INFO, "Handling non-critical errors that occured in add image process");
|
||||
progressPanel.setErrors(errorString, false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -617,12 +615,12 @@ class AddImageWizardPanel3 implements WizardDescriptor.Panel<WizardDescriptor> {
|
||||
cleanupImage.enable();
|
||||
|
||||
if (errorString == null) { // complete progress bar
|
||||
wizPanel.getComponent().changeProgressBarTextAndColor("*Data Source added.", 100, Color.black);
|
||||
progressPanel.getComponent().setProgressBarTextAndColor("*Data Source added.", 100, Color.black);
|
||||
}
|
||||
|
||||
// Get attention for the process finish
|
||||
java.awt.Toolkit.getDefaultToolkit().beep(); //BEEP!
|
||||
AddImageVisualPanel2 panel = wizPanel.getComponent();
|
||||
AddImageWizardAddingProgressVisual panel = progressPanel.getComponent();
|
||||
if (panel != null) {
|
||||
Window w = SwingUtilities.getWindowAncestor(panel);
|
||||
if (w != null) {
|
||||
@ -631,7 +629,7 @@ class AddImageWizardPanel3 implements WizardDescriptor.Panel<WizardDescriptor> {
|
||||
}
|
||||
|
||||
// Tell the panel we're done
|
||||
wizPanel.setStateFinished();
|
||||
progressPanel.setStateFinished();
|
||||
|
||||
// Commit the image
|
||||
if (!newContents.isEmpty()) //already commited
|
||||
@ -643,7 +641,7 @@ class AddImageWizardPanel3 implements WizardDescriptor.Panel<WizardDescriptor> {
|
||||
if (process != null) { // and if we're done configuring ingest
|
||||
// commit anything
|
||||
try {
|
||||
commitImage(settings);
|
||||
commitImage(wizDescriptor);
|
||||
} catch (Exception ex) {
|
||||
// Log error/display warning
|
||||
logger.log(Level.SEVERE, "Error adding image to case.", ex);
|
||||
@ -660,7 +658,7 @@ class AddImageWizardPanel3 implements WizardDescriptor.Panel<WizardDescriptor> {
|
||||
|
||||
logger.log(Level.WARNING, "Unexpected errors occurred while running post add image cleanup. ", ex);
|
||||
|
||||
wizPanel.getComponent().changeProgressBarTextAndColor("*Failed to add image.", 0, Color.black); // set error message
|
||||
progressPanel.getComponent().setProgressBarTextAndColor("*Failed to add image.", 0, Color.black); // set error message
|
||||
|
||||
// Log error/display warning
|
||||
|
@ -53,14 +53,14 @@
|
||||
<Font name="Tahoma" size="14" style="1"/>
|
||||
</Property>
|
||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="AddImageVisualPanel3.titleLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="AddImageWizardIngestConfigVisual.titleLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
</Component>
|
||||
<Component class="javax.swing.JLabel" name="subtitleLabel">
|
||||
<Properties>
|
||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="AddImageVisualPanel3.subtitleLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="AddImageWizardIngestConfigVisual.subtitleLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
</Component>
|
@ -16,46 +16,52 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.sleuthkit.autopsy.casemodule;
|
||||
|
||||
import java.awt.BorderLayout;
|
||||
import javax.swing.JPanel;
|
||||
|
||||
/**
|
||||
* Data Source added, ingest configure wizard visual panel 3
|
||||
* visual component of 2nd panle in add image wizard. allows the user to
|
||||
* configure ingest modules. delegates most details to ingestPanel attribute.
|
||||
*
|
||||
*
|
||||
*/
|
||||
public class AddImageVisualPanel3 extends javax.swing.JPanel {
|
||||
public class AddImageWizardIngestConfigVisual extends javax.swing.JPanel {
|
||||
|
||||
//could this be something more specific than JPanel? - jm
|
||||
private JPanel ingestPanel = null;
|
||||
|
||||
/** Creates new form AddImageVisualPanel3 */
|
||||
public AddImageVisualPanel3(JPanel ingestPanel) {
|
||||
/**
|
||||
* Creates new form AddImageVisualPanel3
|
||||
*/
|
||||
public AddImageWizardIngestConfigVisual(JPanel ingestPanel) {
|
||||
this.ingestPanel = ingestPanel;
|
||||
initComponents();
|
||||
customizeComponents();
|
||||
}
|
||||
|
||||
|
||||
private void customizeComponents() {
|
||||
configPanel.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
|
||||
configPanel.setLayout(new BorderLayout());
|
||||
configPanel.add(ingestPanel, BorderLayout.CENTER);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
/**
|
||||
* Returns the name of the this panel. This name will be shown on the left
|
||||
* panel of the "Add Image" wizard panel.
|
||||
*
|
||||
* @return name the name of this panel
|
||||
* @return name the name of this panel
|
||||
*/
|
||||
@Override
|
||||
public String getName() {
|
||||
return "Configure Ingest Modules";
|
||||
}
|
||||
|
||||
/** 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.
|
||||
/**
|
||||
* 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")
|
||||
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
|
||||
@ -68,9 +74,9 @@ public class AddImageVisualPanel3 extends javax.swing.JPanel {
|
||||
setPreferredSize(new java.awt.Dimension(569, 300));
|
||||
|
||||
titleLabel.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
|
||||
titleLabel.setText(org.openide.util.NbBundle.getMessage(AddImageVisualPanel3.class, "AddImageVisualPanel3.titleLabel.text")); // NOI18N
|
||||
titleLabel.setText(org.openide.util.NbBundle.getMessage(AddImageWizardIngestConfigVisual.class, "AddImageWizardIngestConfigVisual.titleLabel.text")); // NOI18N
|
||||
|
||||
subtitleLabel.setText(org.openide.util.NbBundle.getMessage(AddImageVisualPanel3.class, "AddImageVisualPanel3.subtitleLabel.text")); // NOI18N
|
||||
subtitleLabel.setText(org.openide.util.NbBundle.getMessage(AddImageWizardIngestConfigVisual.class, "AddImageWizardIngestConfigVisual.subtitleLabel.text")); // NOI18N
|
||||
|
||||
configPanel.setPreferredSize(new java.awt.Dimension(569, 255));
|
||||
|
@ -47,10 +47,10 @@ class AddImageWizardIterator implements WizardDescriptor.Iterator<WizardDescript
|
||||
*/
|
||||
private List<WizardDescriptor.Panel<WizardDescriptor>> getPanels() {
|
||||
if (panels == null) {
|
||||
AddImageWizardPanel2 wizPanel = new AddImageWizardPanel2();
|
||||
AddImageWizardAddingProgressPanel wizPanel = new AddImageWizardAddingProgressPanel();
|
||||
panels = new ArrayList<WizardDescriptor.Panel<WizardDescriptor>>();
|
||||
panels.add(new AddImageWizardPanel1());
|
||||
panels.add(new AddImageWizardPanel3(action, wizPanel));
|
||||
panels.add(new AddImageWizardChooseDataSourcePanel());
|
||||
panels.add(new AddImageWizardIngestConfigPanel(action, wizPanel));
|
||||
panels.add(wizPanel);
|
||||
|
||||
String[] steps = new String[panels.size()];
|
||||
|
@ -94,8 +94,6 @@ NewJPanel.jFormattedTextField1.text=jFormattedTextField1
|
||||
NewJPanel.jButton1.text=Rename
|
||||
NewJPanel.jLabel4.text=Database:
|
||||
AddImageVisualPanel2.indexImageCheckBox.text=Index image for keyword search
|
||||
AddImageVisualPanel3.titleLabel.text=Configure Ingest Modules
|
||||
AddImageVisualPanel3.subtitleLabel.text=Configure the ingest modules you would like to run on this data source.
|
||||
CasePropertiesForm.caseNumberLabel.text=Case Number:
|
||||
CasePropertiesForm.examinerLabel.text=Examiner:
|
||||
CasePropertiesForm.caseNumberTextField.text=
|
||||
@ -116,23 +114,11 @@ ImageFilePanel.pathLabel.text=Browse for an image file:
|
||||
ImageFilePanel.browseButton.text=Browse
|
||||
ImageFilePanel.pathTextField.text=
|
||||
LocalDiskPanel.diskLabel.text=Select a local disk:
|
||||
AddImageVisualPanel1.nextLabel.text=<html> Press 'Next' to analyze the input data, extract volume and file system data, and populate a local database.</html>
|
||||
MissingImageDialog.selectButton.text=Select Image
|
||||
MissingImageDialog.typeTabel.text=Select input type to add:
|
||||
MissingImageDialog.titleLabel.text=Search for missing image
|
||||
AddImageVisualPanel1.jLabel2.text=jLabel2
|
||||
AddImageVisualPanel1.descLabel.text=(faster results, although some data will not be searched)
|
||||
AddImageVisualPanel1.timeZoneLabel.text=Please select the input timezone:
|
||||
AddImageVisualPanel1.noFatOrphansCheckbox.toolTipText=
|
||||
AddImageVisualPanel1.noFatOrphansCheckbox.text=Ignore orphan files in FAT file systems
|
||||
MissingImageDialog.cancelButton.text=Cancel
|
||||
LocalDiskPanel.errorLabel.text=Error Label
|
||||
AddImageVisualPanel1.typeTabel.text=Select source type to add:
|
||||
AddImageVisualPanel1.imgInfoLabel.text=Enter Data Source Information:
|
||||
AddImageLoadingPanel.crDbLabel.text=Adding Data Source
|
||||
AddImageLoadingPanel.Label_CurrentDirectory_Static.text=Currently Adding:
|
||||
AddImageLoadingPanel.jLabel5.text=Processing Data Source and Adding to Database
|
||||
AddImageLoadingPanel.jLabel1.text=File system information is being added to a local database. File analysis will start when this finishes.
|
||||
AddImageDonePanel.statusLabel.text=File system has been added to the local database. Files are being analyzed.
|
||||
AddImageDonePanel.crDbLabel.text=Adding Data Source - Complete
|
||||
LocalFilesPanel.infoLabel.text=Add local files and folders:
|
||||
@ -145,3 +131,21 @@ LocalFilesPanel.selectedPaths.toolTipText=
|
||||
LocalFilesPanel.localFileChooser.approveButtonText=Select
|
||||
LocalFilesPanel.localFileChooser.approveButtonToolTipText=
|
||||
LocalFilesPanel.selectButton.actionCommand=Add
|
||||
AddImageWizardIngestConfigVisual.subtitleLabel.text=Configure the ingest modules you would like to run on this data source.
|
||||
AddImageWizardIngestConfigVisual.titleLabel.text=Configure Ingest Modules
|
||||
AddImageWizardAddingProgressVisual.statusLabel.text=File system has been added to the local database. Files are being analyzed.
|
||||
AddImageWizardAddingProgressVisual.crDbLabel.text=Adding Data Source - Complete
|
||||
AddImageWizardAddingProgressVisual.addingDataSourceLabel.text=Adding Data Source
|
||||
AddImageWizardAddingProgressVisual.jLabel1.text=File system information is being added to a local database. File analysis will start when this finishes.
|
||||
AddImageWizardAddingProgressVisual.jLabel5.text=Processing Data Source and Adding to Database
|
||||
AddImageWizardChooseDataSourceVisual.noFatOrphansCheckbox.toolTipText=
|
||||
AddImageWizardChooseDataSourceVisual.noFatOrphansCheckbox.text=Ignore orphan files in FAT file systems
|
||||
AddImageWizardChooseDataSourceVisual.descLabel.text=(faster results, although some data will not be searched)
|
||||
AddImageWizardChooseDataSourceVisual.typeTabel.text=Select source type to add:
|
||||
AddImageWizardChooseDataSourceVisual.jLabel2.text=jLabel2
|
||||
AddImageWizardChooseDataSourceVisual.timeZoneLabel.text=Please select the input timezone:
|
||||
AddImageWizardChooseDataSourceVisual.nextLabel.text=<html> Press 'Next' to analyze the input data, extract volume and file system data, and populate a local database.</html>
|
||||
AddImageWizardChooseDataSourceVisual.imgInfoLabel.text=Enter Data Source Information:
|
||||
AddImageWizardAddingProgressVisual.progressLabel.text=<progress>
|
||||
AddImageWizardAddingProgressVisual.TextArea_CurrentDirectory.border.title=Currently Adding:
|
||||
AddImageWizardAddingProgressVisual.viewLogButton.text=View Log
|
||||
|
@ -43,9 +43,9 @@ public class ImageFilePanel extends ContentTypePanel implements DocumentListener
|
||||
fc.setDragEnabled(false);
|
||||
fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
|
||||
fc.setMultiSelectionEnabled(false);
|
||||
fc.addChoosableFileFilter(AddImageVisualPanel1.rawFilter);
|
||||
fc.addChoosableFileFilter(AddImageVisualPanel1.encaseFilter);
|
||||
fc.setFileFilter(AddImageVisualPanel1.allFilter);
|
||||
fc.addChoosableFileFilter(AddImageWizardChooseDataSourceVisual.rawFilter);
|
||||
fc.addChoosableFileFilter(AddImageWizardChooseDataSourceVisual.encaseFilter);
|
||||
fc.setFileFilter(AddImageWizardChooseDataSourceVisual.allFilter);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -131,7 +131,7 @@ public class ImageFilePanel extends ContentTypePanel implements DocumentListener
|
||||
String path = fc.getSelectedFile().getPath();
|
||||
pathTextField.setText(path);
|
||||
}
|
||||
pcs.firePropertyChange(AddImageVisualPanel1.EVENT.FOCUS_NEXT.toString(), false, true);
|
||||
pcs.firePropertyChange(AddImageWizardChooseDataSourceVisual.EVENT.FOCUS_NEXT.toString(), false, true);
|
||||
}//GEN-LAST:event_browseButtonActionPerformed
|
||||
|
||||
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||
@ -194,17 +194,17 @@ public class ImageFilePanel extends ContentTypePanel implements DocumentListener
|
||||
*/
|
||||
@Override
|
||||
public void insertUpdate(DocumentEvent e) {
|
||||
pcs.firePropertyChange(AddImageVisualPanel1.EVENT.UPDATE_UI.toString(), false, true);
|
||||
pcs.firePropertyChange(AddImageWizardChooseDataSourceVisual.EVENT.UPDATE_UI.toString(), false, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeUpdate(DocumentEvent e) {
|
||||
pcs.firePropertyChange(AddImageVisualPanel1.EVENT.UPDATE_UI.toString(), false, true);
|
||||
pcs.firePropertyChange(AddImageWizardChooseDataSourceVisual.EVENT.UPDATE_UI.toString(), false, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void changedUpdate(DocumentEvent e) {
|
||||
pcs.firePropertyChange(AddImageVisualPanel1.EVENT.UPDATE_UI.toString(), false, true);
|
||||
pcs.firePropertyChange(AddImageWizardChooseDataSourceVisual.EVENT.UPDATE_UI.toString(), false, true);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -234,7 +234,7 @@ public class LocalDiskPanel extends ContentTypePanel {
|
||||
if(ready) {
|
||||
selected = anItem;
|
||||
enableNext = true;
|
||||
pcs.firePropertyChange(AddImageVisualPanel1.EVENT.UPDATE_UI.toString(), false, true);
|
||||
pcs.firePropertyChange(AddImageWizardChooseDataSourceVisual.EVENT.UPDATE_UI.toString(), false, true);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -98,7 +98,7 @@ public class LocalFilesPanel extends ContentTypePanel {
|
||||
currentFiles.clear();
|
||||
selectedPaths.setText("");
|
||||
enableNext = false;
|
||||
pcs.firePropertyChange(AddImageVisualPanel1.EVENT.UPDATE_UI.toString(), false, true);
|
||||
pcs.firePropertyChange(AddImageWizardChooseDataSourceVisual.EVENT.UPDATE_UI.toString(), false, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -231,7 +231,7 @@ public class LocalFilesPanel extends ContentTypePanel {
|
||||
else {
|
||||
enableNext = false;
|
||||
}
|
||||
pcs.firePropertyChange(AddImageVisualPanel1.EVENT.UPDATE_UI.toString(), false, true);
|
||||
pcs.firePropertyChange(AddImageWizardChooseDataSourceVisual.EVENT.UPDATE_UI.toString(), false, true);
|
||||
}//GEN-LAST:event_selectButtonActionPerformed
|
||||
|
||||
private void clearButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_clearButtonActionPerformed
|
||||
|
@ -108,10 +108,10 @@ public class MissingImageDialog extends javax.swing.JDialog {
|
||||
|
||||
@Override
|
||||
public void propertyChange(PropertyChangeEvent evt) {
|
||||
if(evt.getPropertyName().equals(AddImageVisualPanel1.EVENT.UPDATE_UI.toString())) {
|
||||
if(evt.getPropertyName().equals(AddImageWizardChooseDataSourceVisual.EVENT.UPDATE_UI.toString())) {
|
||||
updateSelectButton();
|
||||
}
|
||||
if(evt.getPropertyName().equals(AddImageVisualPanel1.EVENT.FOCUS_NEXT.toString())) {
|
||||
if(evt.getPropertyName().equals(AddImageWizardChooseDataSourceVisual.EVENT.FOCUS_NEXT.toString())) {
|
||||
moveFocusToSelect();
|
||||
}
|
||||
}
|
||||
|
@ -38,6 +38,7 @@ import org.sleuthkit.datamodel.LocalFile;
|
||||
import org.sleuthkit.datamodel.VirtualDirectory;
|
||||
import org.sleuthkit.datamodel.LayoutFile;
|
||||
import org.sleuthkit.datamodel.SleuthkitCase;
|
||||
import org.sleuthkit.datamodel.Transaction;
|
||||
import org.sleuthkit.datamodel.TskCoreException;
|
||||
import org.sleuthkit.datamodel.TskFileRange;
|
||||
|
||||
@ -77,13 +78,15 @@ public class FileManager implements Closeable {
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds a set of files that meets the name criteria.
|
||||
* @param dataSource Root data source to limit search results to (Image,
|
||||
* VirtualDirectory, etc.).
|
||||
* @param fileName Pattern of the name of the file or directory to match (case
|
||||
* insensitive, used in LIKE SQL statement).
|
||||
* Finds a set of files that meets the name criteria.
|
||||
*
|
||||
* @param dataSource Root data source to limit search results to (Image,
|
||||
* VirtualDirectory, etc.).
|
||||
* @param fileName Pattern of the name of the file or directory to match
|
||||
* (case insensitive, used in LIKE SQL statement).
|
||||
*
|
||||
* @return a list of AbstractFile for files/directories whose name matches
|
||||
* the given fileName
|
||||
* the given fileName
|
||||
*/
|
||||
public synchronized List<AbstractFile> findFiles(Content dataSource, String fileName) throws TskCoreException {
|
||||
if (tskCase == null) {
|
||||
@ -92,17 +95,19 @@ public class FileManager implements Closeable {
|
||||
return tskCase.findFiles(dataSource, fileName);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Finds a set of files that meets the name criteria.
|
||||
* @param dataSource Root data source to limit search results to (Image,
|
||||
* VirtualDirectory, etc.).
|
||||
* @param fileName Pattern of the name of the file or directory to match (case
|
||||
* insensitive, used in LIKE SQL statement).
|
||||
* @param dirName Pattern of the name of the parent directory to use as the root
|
||||
* of the search (case insensitive, used in LIKE SQL statement).
|
||||
* Finds a set of files that meets the name criteria.
|
||||
*
|
||||
* @param dataSource Root data source to limit search results to (Image,
|
||||
* VirtualDirectory, etc.).
|
||||
* @param fileName Pattern of the name of the file or directory to match
|
||||
* (case insensitive, used in LIKE SQL statement).
|
||||
* @param dirName Pattern of the name of the parent directory to use as
|
||||
* the root of the search (case insensitive, used in LIKE
|
||||
* SQL statement).
|
||||
*
|
||||
* @return a list of AbstractFile for files/directories whose name matches
|
||||
* fileName and whose parent directory contains dirName.
|
||||
* fileName and whose parent directory contains dirName.
|
||||
*/
|
||||
public synchronized List<AbstractFile> findFiles(Content dataSource, String fileName, String dirName) throws TskCoreException {
|
||||
if (tskCase == null) {
|
||||
@ -112,14 +117,17 @@ public class FileManager implements Closeable {
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds a set of files that meets the name criteria.
|
||||
* @param dataSource Root data source to limit search results to (Image,
|
||||
* VirtualDirectory, etc.).
|
||||
* @param fileName Pattern of the name of the file or directory to match (case
|
||||
* insensitive, used in LIKE SQL statement).
|
||||
* @param parentFile Object of root/parent directory to restrict search to.
|
||||
* Finds a set of files that meets the name criteria.
|
||||
*
|
||||
* @param dataSource Root data source to limit search results to (Image,
|
||||
* VirtualDirectory, etc.).
|
||||
* @param fileName Pattern of the name of the file or directory to match
|
||||
* (case insensitive, used in LIKE SQL statement).
|
||||
* @param parentFile Object of root/parent directory to restrict search to.
|
||||
*
|
||||
* @return a list of AbstractFile for files/directories whose name matches
|
||||
* fileName and that were inside a directory described by parentFsContent.
|
||||
* fileName and that were inside a directory described by
|
||||
* parentFsContent.
|
||||
*/
|
||||
public synchronized List<AbstractFile> findFiles(Content dataSource, String fileName, AbstractFile parentFile) throws TskCoreException {
|
||||
if (tskCase == null) {
|
||||
@ -130,9 +138,10 @@ public class FileManager implements Closeable {
|
||||
|
||||
/**
|
||||
* @param dataSource data source Content (Image, parent-less
|
||||
* VirtualDirectory) where to find files
|
||||
* @param filePath The full path to the file(s) of interest. This can
|
||||
* optionally include the image and volume names.
|
||||
* VirtualDirectory) where to find files
|
||||
* @param filePath The full path to the file(s) of interest. This can
|
||||
* optionally include the image and volume names.
|
||||
*
|
||||
* @return a list of AbstractFile that have the given file path.
|
||||
*/
|
||||
public synchronized List<AbstractFile> openFiles(Content dataSource, String filePath) throws TskCoreException {
|
||||
@ -145,26 +154,31 @@ public class FileManager implements Closeable {
|
||||
/**
|
||||
* Creates a derived file, adds it to the database and returns it.
|
||||
*
|
||||
* @param fileName file name the derived file
|
||||
* @param localPath local path of the derived file, including the file name.
|
||||
* The path is relative to the database path.
|
||||
* @param size size of the derived file in bytes
|
||||
* @param fileName file name the derived file
|
||||
* @param localPath local path of the derived file, including the file
|
||||
* name. The path is relative to the database path.
|
||||
* @param size size of the derived file in bytes
|
||||
* @param ctime
|
||||
* @param crtime
|
||||
* @param atime
|
||||
* @param mtime
|
||||
* @param isFile whether a file or directory, true if a file
|
||||
* @param parentFile the parent file object this the new file was derived
|
||||
* from, either a fs file or parent derived file/dikr\\r
|
||||
* @param isFile whether a file or directory, true if a file
|
||||
* @param parentFile the parent file object this the new file was
|
||||
* derived from, either a fs file or parent derived
|
||||
* file/dikr\\r
|
||||
* @param rederiveDetails details needed to re-derive file (will be specific
|
||||
* to the derivation method), currently unused
|
||||
* @param toolName name of derivation method/tool, currently unused
|
||||
* @param toolVersion version of derivation method/tool, currently unused
|
||||
* @param otherDetails details of derivation method/tool, currently unused
|
||||
* to the derivation method), currently unused
|
||||
* @param toolName name of derivation method/tool, currently unused
|
||||
* @param toolVersion version of derivation method/tool, currently
|
||||
* unused
|
||||
* @param otherDetails details of derivation method/tool, currently
|
||||
* unused
|
||||
*
|
||||
* @return newly created derived file object added to the database
|
||||
*
|
||||
* @throws TskCoreException exception thrown if the object creation failed
|
||||
* due to a critical system error or of the file manager has already been
|
||||
* closed
|
||||
* due to a critical system error or of the file
|
||||
* manager has already been closed
|
||||
*
|
||||
*/
|
||||
public synchronized DerivedFile addDerivedFile(String fileName, String localPath, long size,
|
||||
@ -186,13 +200,14 @@ public class FileManager implements Closeable {
|
||||
* or file system given by systemId.
|
||||
*
|
||||
* @param carvedFileName the name of the carved file (containing appropriate
|
||||
* extension)
|
||||
* extension)
|
||||
* @param carvedFileSize size of the carved file to add
|
||||
* @param systemId the ID of the parent volume or file system
|
||||
* @param sectors a list of SectorGroups giving this sectors that make up
|
||||
* this carved file.
|
||||
* @param systemId the ID of the parent volume or file system
|
||||
* @param sectors a list of SectorGroups giving this sectors that
|
||||
* make up this carved file.
|
||||
*
|
||||
* @throws TskCoreException exception thrown when critical tsk error
|
||||
* occurred and carved file could not be added
|
||||
* occurred and carved file could not be added
|
||||
*/
|
||||
public synchronized LayoutFile addCarvedFile(String carvedFileName, long carvedFileSize,
|
||||
long systemId, List<TskFileRange> sectors) throws TskCoreException {
|
||||
@ -221,15 +236,19 @@ public class FileManager implements Closeable {
|
||||
/**
|
||||
* Add a set of local/logical files and dirs.
|
||||
*
|
||||
* @param localAbsPaths list of absolute paths to local files and dirs
|
||||
* @param localAbsPaths list of absolute paths to local files and dirs
|
||||
* @param addProgressUpdater notifier to receive progress notifications on
|
||||
* folders added, or null if not used
|
||||
* folders added, or null if not used
|
||||
*
|
||||
* @return file set root VirtualDirectory contained containing all
|
||||
* AbstractFile objects added
|
||||
* AbstractFile objects added
|
||||
*
|
||||
* @throws TskCoreException exception thrown if the object creation failed
|
||||
* due to a critical system error or of the file manager has already been
|
||||
* closed. There is no "revert" logic if one of the additions fails. The
|
||||
* addition stops with the first error encountered.
|
||||
* due to a critical system error or of the file
|
||||
* manager has already been closed. There is no
|
||||
* "revert" logic if one of the additions fails.
|
||||
* The addition stops with the first error
|
||||
* encountered.
|
||||
*/
|
||||
public synchronized VirtualDirectory addLocalFilesDirs(List<String> localAbsPaths, FileAddProgressUpdater addProgressUpdater) throws TskCoreException {
|
||||
final List<java.io.File> rootsToAdd = new ArrayList<>();
|
||||
@ -244,25 +263,33 @@ public class FileManager implements Closeable {
|
||||
rootsToAdd.add(localFile);
|
||||
}
|
||||
|
||||
Transaction trans = tskCase.createTransaction();
|
||||
// make a virtual top-level directory for this set of files/dirs
|
||||
final VirtualDirectory fileSetRootDir = addLocalFileSetRootDir();
|
||||
final VirtualDirectory fileSetRootDir = addLocalFileSetRootDir(trans);
|
||||
|
||||
// recursively add each item in the set
|
||||
for (java.io.File localRootToAdd : rootsToAdd) {
|
||||
AbstractFile localFileAdded = addLocalDirInt(fileSetRootDir, localRootToAdd, addProgressUpdater);
|
||||
|
||||
if (localFileAdded == null) {
|
||||
String msg = "One of the local files/dirs could not be added: " + localRootToAdd.getAbsolutePath();
|
||||
logger.log(Level.SEVERE, msg);
|
||||
throw new TskCoreException(msg);
|
||||
} else {
|
||||
//added.add(localFileAdded);
|
||||
//send new content event
|
||||
//for now reusing ingest events, in future this will be replaced by datamodel / observer sending out events
|
||||
IngestServices.getDefault().fireModuleContentEvent(new ModuleContentEvent(localFileAdded));
|
||||
try {
|
||||
// recursively add each item in the set
|
||||
for (java.io.File localRootToAdd : rootsToAdd) {
|
||||
AbstractFile localFileAdded = addLocalDirInt(trans, fileSetRootDir, localRootToAdd, addProgressUpdater);
|
||||
|
||||
if (localFileAdded == null) {
|
||||
String msg = "One of the local files/dirs could not be added: " + localRootToAdd.getAbsolutePath();
|
||||
logger.log(Level.SEVERE, msg);
|
||||
throw new TskCoreException(msg);
|
||||
} else {
|
||||
//added.add(localFileAdded);
|
||||
//send new content event
|
||||
//for now reusing ingest events, in future this will be replaced by datamodel / observer sending out events
|
||||
IngestServices.getDefault().fireModuleContentEvent(new ModuleContentEvent(localFileAdded));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
trans.commit();
|
||||
} catch (TskCoreException ex) {
|
||||
trans.rollback();
|
||||
} finally {
|
||||
trans.close();
|
||||
}
|
||||
return fileSetRootDir;
|
||||
}
|
||||
|
||||
@ -271,9 +298,10 @@ public class FileManager implements Closeable {
|
||||
* consecutive sequence number characteristic to every add operation
|
||||
*
|
||||
* @return the virtual dir root container created
|
||||
*
|
||||
* @throws TskCoreException
|
||||
*/
|
||||
private VirtualDirectory addLocalFileSetRootDir() throws TskCoreException {
|
||||
private VirtualDirectory addLocalFileSetRootDir(Transaction trans) throws TskCoreException {
|
||||
|
||||
VirtualDirectory created = null;
|
||||
|
||||
@ -281,7 +309,7 @@ public class FileManager implements Closeable {
|
||||
final String fileSetName = VirtualDirectoryNode.LOGICAL_FILE_SET_PREFIX + newFileSetCount;
|
||||
|
||||
try {
|
||||
created = tskCase.addVirtualDirectory(0, fileSetName);
|
||||
created = tskCase.addVirtualDirectory(0, fileSetName, trans);
|
||||
curNumFileSets = newFileSetCount;
|
||||
} catch (TskCoreException ex) {
|
||||
String msg = "Error creating local file set dir: " + fileSetName;
|
||||
@ -293,17 +321,19 @@ public class FileManager implements Closeable {
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper (internal) method to recursively add contents of a folder. Node passed in can be a file or directory.
|
||||
* Children of directories are added.
|
||||
* Helper (internal) method to recursively add contents of a folder. Node
|
||||
* passed in can be a file or directory. Children of directories are added.
|
||||
*
|
||||
* @param parentVd Dir that is the parent of localFile
|
||||
* @param localFile File/Dir that we are adding
|
||||
* @param parentVd Dir that is the parent of localFile
|
||||
* @param localFile File/Dir that we are adding
|
||||
* @param addProgressUpdater notifier to receive progress notifications on
|
||||
* folders added, or null if not used
|
||||
* @returns File object of file added or new virtualdirectory for the directory.
|
||||
* folders added, or null if not used
|
||||
*
|
||||
* @returns File object of file added or new virtualdirectory for the
|
||||
* directory.
|
||||
* @throws TskCoreException
|
||||
*/
|
||||
private AbstractFile addLocalDirInt(VirtualDirectory parentVd,
|
||||
private AbstractFile addLocalDirInt(Transaction trans, VirtualDirectory parentVd,
|
||||
java.io.File localFile, FileAddProgressUpdater addProgressUpdater) throws TskCoreException {
|
||||
|
||||
if (tskCase == null) {
|
||||
@ -317,11 +347,11 @@ public class FileManager implements Closeable {
|
||||
if (!localFile.canRead()) {
|
||||
throw new TskCoreException("Attempted to add a local dir that is not readable: " + localFile.getAbsolutePath());
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (localFile.isDirectory()) {
|
||||
//create virtual folder
|
||||
final VirtualDirectory childVd = tskCase.addVirtualDirectory(parentVd.getId(), localFile.getName());
|
||||
final VirtualDirectory childVd = tskCase.addVirtualDirectory(parentVd.getId(), localFile.getName(), trans);
|
||||
if (childVd != null && addProgressUpdater != null) {
|
||||
addProgressUpdater.fileAdded(childVd);
|
||||
}
|
||||
@ -329,30 +359,32 @@ public class FileManager implements Closeable {
|
||||
final java.io.File[] childrenFiles = localFile.listFiles();
|
||||
if (childrenFiles != null) {
|
||||
for (java.io.File childFile : childrenFiles) {
|
||||
addLocalDirInt(childVd, childFile, addProgressUpdater);
|
||||
addLocalDirInt(trans, childVd, childFile, addProgressUpdater);
|
||||
}
|
||||
}
|
||||
return childVd;
|
||||
} else {
|
||||
//add leaf file, base case
|
||||
return this.addLocalFileInt(parentVd, localFile);
|
||||
return this.addLocalFileInt(parentVd, localFile, trans);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a single local/logical file to the case. Adds it to the database.
|
||||
* Does not refresh the views of data. Assumes that the local file exists and
|
||||
* can be read. This checking is done by addLocalDirInt().
|
||||
* Adds a single local/logical file to the case. Adds it to the database.
|
||||
* Does not refresh the views of data. Assumes that the local file exists
|
||||
* and can be read. This checking is done by addLocalDirInt().
|
||||
*
|
||||
* @param parentFile parent file object container (such as virtual
|
||||
* directory, another local file, or fscontent File),
|
||||
* @param localFile File that we are adding
|
||||
* directory, another local file, or fscontent File),
|
||||
* @param localFile File that we are adding
|
||||
*
|
||||
* @return newly created local file object added to the database
|
||||
*
|
||||
* @throws TskCoreException exception thrown if the object creation failed
|
||||
* due to a critical system error or of the file manager has already been
|
||||
* closed
|
||||
* due to a critical system error or of the file
|
||||
* manager has already been closed
|
||||
*/
|
||||
private synchronized LocalFile addLocalFileInt(AbstractFile parentFile, java.io.File localFile) throws TskCoreException {
|
||||
private synchronized LocalFile addLocalFileInt(AbstractFile parentFile, java.io.File localFile, Transaction trans) throws TskCoreException {
|
||||
|
||||
if (tskCase == null) {
|
||||
throw new TskCoreException("Attempted to use FileManager after it was closed.");
|
||||
@ -370,7 +402,7 @@ public class FileManager implements Closeable {
|
||||
|
||||
LocalFile lf = tskCase.addLocalFile(fileName, localFile.getAbsolutePath(), size,
|
||||
ctime, crtime, atime, mtime,
|
||||
isFile, parentFile);
|
||||
isFile, parentFile, trans);
|
||||
|
||||
return lf;
|
||||
}
|
||||
|
@ -19,42 +19,51 @@
|
||||
package org.sleuthkit.autopsy.corecomponents;
|
||||
|
||||
import java.awt.Component;
|
||||
import java.awt.Cursor;
|
||||
import java.beans.PropertyChangeEvent;
|
||||
import java.beans.PropertyChangeListener;
|
||||
import java.beans.PropertyVetoException;
|
||||
import java.io.IOException;
|
||||
import java.util.logging.Level;
|
||||
import javax.swing.JPanel;
|
||||
import org.openide.explorer.ExplorerManager;
|
||||
import org.openide.explorer.ExplorerManager.Provider;
|
||||
import org.openide.nodes.Node;
|
||||
import org.openide.util.Lookup;
|
||||
import org.sleuthkit.autopsy.casemodule.Case;
|
||||
import org.sleuthkit.autopsy.corecomponentinterfaces.DataContent;
|
||||
import org.sleuthkit.autopsy.corecomponentinterfaces.DataResultViewer;
|
||||
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||
|
||||
/**
|
||||
* Holds commonalities between all DataResultViewers, such as:
|
||||
* - Pushes selection to DataContentViewers
|
||||
* This class provides a default implementation of selected methods of the
|
||||
* DataResultViewer interface. Derived classes will be Swing JPanel objects.
|
||||
* Additionally, the ExplorerManager.Provider interface is implemented to
|
||||
* supply an ExplorerManager to derived classes and their child components.
|
||||
*/
|
||||
public abstract class AbstractDataResultViewer extends JPanel implements DataResultViewer, Provider {
|
||||
|
||||
private static final Logger logger = Logger.getLogger(AbstractDataResultViewer.class.getName());
|
||||
protected transient ExplorerManager em;
|
||||
private PropertyChangeListener nodeSelListener;
|
||||
/**
|
||||
* Content viewer to respond to selection events Either the main one, or
|
||||
* custom one if set
|
||||
*/
|
||||
protected DataContent contentViewer;
|
||||
|
||||
/**
|
||||
* This constructor is intended to allow an AbstractDataResultViewer to use
|
||||
* an ExplorerManager provided by a TopComponent, allowing Node selections
|
||||
* to be available to Actions via the action global context lookup when
|
||||
* the TopComponent has focus. The ExplorerManager must be present when the
|
||||
* object is constructed so that its child components can discover it using
|
||||
* the ExplorerManager.find() method.
|
||||
*/
|
||||
public AbstractDataResultViewer(ExplorerManager explorerManager) {
|
||||
this.em = explorerManager;
|
||||
initialize();
|
||||
}
|
||||
|
||||
/**
|
||||
* This constructor can be used by AbstractDataResultViewers that do not
|
||||
* need to make Node selections available to Actions via the action global
|
||||
* context lookup.
|
||||
*/
|
||||
public AbstractDataResultViewer() {
|
||||
em = new ExplorerManager();
|
||||
initialize();
|
||||
@ -63,73 +72,13 @@ public abstract class AbstractDataResultViewer extends JPanel implements DataRes
|
||||
private void initialize() {
|
||||
//DataContent is designed to return only the default viewer from lookup
|
||||
//use the default one unless set otherwise
|
||||
contentViewer = Lookup.getDefault().lookup(DataContent.class);
|
||||
|
||||
//property listener to send nodes to content viewer
|
||||
nodeSelListener = new PropertyChangeListener() {
|
||||
/**
|
||||
* Propagates changes in the current select node from the
|
||||
* DataResultViewer to the DataContentTopComponent
|
||||
*/
|
||||
@Override
|
||||
public void propertyChange(PropertyChangeEvent evt) {
|
||||
if (!Case.isCaseOpen()) {
|
||||
//handle in-between condition when case is being closed
|
||||
//and legacy selection events are pumped
|
||||
return;
|
||||
}
|
||||
|
||||
String changed = evt.getPropertyName();
|
||||
|
||||
// change that should affect view
|
||||
if (changed.equals(ExplorerManager.PROP_SELECTED_NODES)) {
|
||||
//|| changed.equals(ExplorerManager.PROP_NODE_CHANGE)
|
||||
//|| changed.equals(ExplorerManager.PROP_EXPLORED_CONTEXT)
|
||||
//|| changed.equals(ExplorerManager.PROP_ROOT_CONTEXT)) {
|
||||
|
||||
// change the cursor to "waiting cursor" for this operation
|
||||
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
|
||||
try {
|
||||
Node[] selectedNodes = getExplorerManager().getSelectedNodes();
|
||||
if (selectedNodes.length == 1) {
|
||||
nodeSelected(selectedNodes[0]);
|
||||
|
||||
// there's a new/changed node to display
|
||||
// push the node to default "DataContent"
|
||||
//TODO only the active viewer should be calling setNode
|
||||
//not all of them, otherwise it results in multiple setNode() invocations
|
||||
//alternative is to use a single instance of the event listener
|
||||
//, per top component and not the tab perhaps
|
||||
contentViewer.setNode(selectedNodes[0]);
|
||||
} else {
|
||||
// clear the node viewer
|
||||
contentViewer.setNode(null);
|
||||
}
|
||||
} finally {
|
||||
setCursor(null);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
else if (changed.equals(ExplorerManager.PROP_NODE_CHANGE) ) {
|
||||
}
|
||||
else if (changed.equals(ExplorerManager.PROP_EXPLORED_CONTEXT)) {
|
||||
}
|
||||
else if (changed.equals(ExplorerManager.PROP_ROOT_CONTEXT)) {
|
||||
}
|
||||
*/
|
||||
}
|
||||
};
|
||||
|
||||
em.addPropertyChangeListener(nodeSelListener);
|
||||
contentViewer = Lookup.getDefault().lookup(DataContent.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clearComponent() {
|
||||
em.removePropertyChangeListener(nodeSelListener);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public Node getSelectedNode() {
|
||||
Node result = null;
|
||||
Node[] selectedNodes = this.getExplorerManager().getSelectedNodes();
|
||||
@ -147,14 +96,6 @@ public abstract class AbstractDataResultViewer extends JPanel implements DataRes
|
||||
public void resetComponent() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when a new node has been selected in the result viewer Can update
|
||||
* the viewer, etc.
|
||||
*
|
||||
* @param selectedNode the new node currently selected
|
||||
*/
|
||||
public abstract void nodeSelected(Node selectedNode);
|
||||
|
||||
@Override
|
||||
public Component getComponent() {
|
||||
return this;
|
||||
|
@ -18,7 +18,6 @@ import org.openide.nodes.Node;
|
||||
import org.openide.util.Lookup;
|
||||
import org.openide.util.NbBundle;
|
||||
import org.openide.util.NbPreferences;
|
||||
import org.openide.windows.TopComponent;
|
||||
import org.sleuthkit.autopsy.corecomponentinterfaces.DataContent;
|
||||
import org.sleuthkit.autopsy.corecomponentinterfaces.DataContentViewer;
|
||||
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||
@ -31,11 +30,11 @@ import org.sleuthkit.datamodel.TskCoreException;
|
||||
public class DataContentPanel extends javax.swing.JPanel implements DataContent, ChangeListener {
|
||||
|
||||
private static Logger logger = Logger.getLogger(DataContentPanel.class.getName());
|
||||
|
||||
private final List<UpdateWrapper> viewers = new ArrayList<UpdateWrapper>();;
|
||||
private final List<UpdateWrapper> viewers = new ArrayList<>();;
|
||||
private Node currentNode;
|
||||
private final boolean isMain;
|
||||
|
||||
private boolean listeningToTabbedPane = false;
|
||||
|
||||
/**
|
||||
* Creates new DataContentPanel panel
|
||||
* The main data content panel can only be created by the data content top component,
|
||||
@ -69,8 +68,6 @@ public class DataContentPanel extends javax.swing.JPanel implements DataContent,
|
||||
for (int tab = 0; tab < numTabs; ++tab) {
|
||||
jTabbedPane1.setEnabledAt(tab, false);
|
||||
}
|
||||
|
||||
jTabbedPane1.addChangeListener(this);
|
||||
}
|
||||
|
||||
|
||||
@ -135,7 +132,7 @@ public class DataContentPanel extends javax.swing.JPanel implements DataContent,
|
||||
try {
|
||||
path = content.getUniquePath();
|
||||
} catch (TskCoreException ex) {
|
||||
logger.log(Level.SEVERE, "Exception while calling Content.getUniquePath() for " + content);
|
||||
logger.log(Level.SEVERE, "Exception while calling Content.getUniquePath() for {0}", content);
|
||||
}
|
||||
setName(path);
|
||||
} else {
|
||||
@ -158,7 +155,13 @@ public class DataContentPanel extends javax.swing.JPanel implements DataContent,
|
||||
* @param selectedNode the selected content Node
|
||||
*/
|
||||
public void setupTabs(Node selectedNode) {
|
||||
|
||||
// Deferring becoming a listener to the tabbed pane until this point
|
||||
// eliminates handling a superfluous stateChanged event during construction.
|
||||
if (listeningToTabbedPane == false) {
|
||||
jTabbedPane1.addChangeListener(this);
|
||||
listeningToTabbedPane = true;
|
||||
}
|
||||
|
||||
// get the preference for the preferred viewer
|
||||
Preferences pref = NbPreferences.forModule(GeneralPanel.class);
|
||||
boolean keepCurrentViewer = pref.getBoolean("keepPreferredViewer", false);
|
||||
|
@ -66,6 +66,7 @@ public class DataResultPanel extends javax.swing.JPanel implements DataResult, C
|
||||
private final DummyNodeListener dummyNodeListener = new DummyNodeListener();
|
||||
|
||||
private static final Logger logger = Logger.getLogger(DataResultPanel.class.getName() );
|
||||
private boolean listeningToTabbedPane = false;
|
||||
|
||||
/**
|
||||
* Creates new DataResultPanel
|
||||
@ -80,8 +81,6 @@ public class DataResultPanel extends javax.swing.JPanel implements DataResult, C
|
||||
setName(title);
|
||||
|
||||
this.title = "";
|
||||
|
||||
this.dataResultTabbedPanel.addChangeListener(this);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -182,8 +181,22 @@ public class DataResultPanel extends javax.swing.JPanel implements DataResult, C
|
||||
* Do not use if used one of the factory methods to create and open the component.
|
||||
*/
|
||||
public void open() {
|
||||
if (null == this.explorerManager) {
|
||||
this.explorerManager = ExplorerManager.find(this);
|
||||
if (null == explorerManager) {
|
||||
// Get an ExplorerManager to pass to the child DataResultViewers. If the application
|
||||
// components are put together as expected, this will be an ExplorerManager owned
|
||||
// by an ancestor TopComponent. The TopComponent will have put this ExplorerManager
|
||||
// in a Lookup that is set as the action global context when the TopComponent has
|
||||
// focus. This makes Node selections available to Actions without coupling the
|
||||
// actions to a particular Component. Note that getting the ExplorerManager in the
|
||||
// constructor would be too soon, since the object has no ancestor TopComponent at
|
||||
// that point.
|
||||
explorerManager = ExplorerManager.find(this);
|
||||
|
||||
// A DataResultPanel listens for Node selections in its DataResultViewers so it
|
||||
// can push the selections both to its child DataResultViewers and to a DataContent object.
|
||||
// The default DataContent object is a DataContentTopComponent in the data content mode (area),
|
||||
// and is the parent of a DataContentPanel that hosts a set of DataContentViewers.
|
||||
explorerManager.addPropertyChangeListener(new ExplorerManagerNodeSelectionListener());
|
||||
}
|
||||
|
||||
// Add all the DataContentViewer to the tabbed pannel.
|
||||
@ -224,7 +237,48 @@ public class DataResultPanel extends javax.swing.JPanel implements DataResult, C
|
||||
|
||||
this.setVisible(true);
|
||||
}
|
||||
|
||||
private class ExplorerManagerNodeSelectionListener implements PropertyChangeListener {
|
||||
@Override
|
||||
public void propertyChange(PropertyChangeEvent evt) {
|
||||
if (!Case.isCaseOpen()) {
|
||||
// Handle the in-between condition when case is being closed
|
||||
// and legacy selection events are pumped.
|
||||
return;
|
||||
}
|
||||
|
||||
if (evt.getPropertyName().equals(ExplorerManager.PROP_SELECTED_NODES)) {
|
||||
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
|
||||
|
||||
// If a custom DataContent object has not been specified, get the default instance.
|
||||
DataContent contentViewer = customContentViewer;
|
||||
if (null == contentViewer) {
|
||||
contentViewer = Lookup.getDefault().lookup(DataContent.class);
|
||||
}
|
||||
|
||||
try {
|
||||
Node[] selectedNodes = explorerManager.getSelectedNodes();
|
||||
for (UpdateWrapper drv : viewers) {
|
||||
drv.setSelectedNodes(selectedNodes);
|
||||
}
|
||||
|
||||
// Passing null signals that either multiple nodes are selected, or no nodes are selected.
|
||||
// This is important to the DataContent object, since the content mode (area) of the app is designed
|
||||
// to show only the content underlying a single Node.
|
||||
if (selectedNodes.length == 1) {
|
||||
contentViewer.setNode(selectedNodes[0]);
|
||||
}
|
||||
else {
|
||||
contentViewer.setNode(null);
|
||||
}
|
||||
}
|
||||
finally {
|
||||
setCursor(null);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void addDataResultViewer(DataResultViewer dataResultViewer) {
|
||||
UpdateWrapper viewerWrapper = new UpdateWrapper(dataResultViewer);
|
||||
if (null != this.customContentViewer) {
|
||||
@ -294,6 +348,13 @@ public class DataResultPanel extends javax.swing.JPanel implements DataResult, C
|
||||
if (this.rootNode != null) {
|
||||
this.rootNode.removeNodeListener(dummyNodeListener);
|
||||
}
|
||||
// Deferring becoming a listener to the tabbed pane until this point
|
||||
// eliminates handling a superfluous stateChanged event during construction.
|
||||
if (listeningToTabbedPane == false) {
|
||||
dataResultTabbedPanel.addChangeListener(this);
|
||||
listeningToTabbedPane = true;
|
||||
}
|
||||
|
||||
this.rootNode = selectedNode;
|
||||
if (this.rootNode != null) {
|
||||
this.rootNode.addNodeListener(dummyNodeListener);
|
||||
|
@ -108,10 +108,6 @@ public class DataResultViewerTable extends AbstractDataResultViewer {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void nodeSelected(Node selectedNode) {
|
||||
}
|
||||
|
||||
/**
|
||||
* 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
|
||||
|
@ -22,6 +22,7 @@ import java.awt.Color;
|
||||
import java.awt.Cursor;
|
||||
import java.awt.EventQueue;
|
||||
import java.beans.PropertyChangeEvent;
|
||||
import java.beans.PropertyChangeListener;
|
||||
import java.util.Arrays;
|
||||
import java.util.logging.Level;
|
||||
import javax.swing.JOptionPane;
|
||||
@ -86,6 +87,7 @@ public final class DataResultViewerThumbnail extends AbstractDataResultViewer {
|
||||
initComponents();
|
||||
|
||||
((IconView) thumbnailScrollPanel).setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
|
||||
em.addPropertyChangeListener(new ExplorerManagerNodeSelectionListener());
|
||||
|
||||
curPage = -1;
|
||||
totalPages = 0;
|
||||
@ -323,33 +325,7 @@ public final class DataResultViewerThumbnail extends AbstractDataResultViewer {
|
||||
this.setCursor(null);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void nodeSelected(Node selectedNode) {
|
||||
if (selectedNode == null) {
|
||||
filePathLabel.setText("");
|
||||
|
||||
}
|
||||
else {
|
||||
AbstractFile af = selectedNode.getLookup().lookup(AbstractFile.class);
|
||||
if (af == null) {
|
||||
filePathLabel.setText("");
|
||||
}
|
||||
else {
|
||||
try {
|
||||
String uPath = af.getUniquePath();
|
||||
filePathLabel.setText(uPath);
|
||||
filePathLabel.setToolTipText(uPath);
|
||||
}
|
||||
catch (TskCoreException e){
|
||||
logger.log(Level.WARNING, "Could not get unique path for content: " + af.getName());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public String getTitle() {
|
||||
return "Thumbnail";
|
||||
@ -556,4 +532,38 @@ public final class DataResultViewerThumbnail extends AbstractDataResultViewer {
|
||||
public void nodeDestroyed(NodeEvent ne) {
|
||||
}
|
||||
}
|
||||
|
||||
private class ExplorerManagerNodeSelectionListener implements PropertyChangeListener {
|
||||
@Override
|
||||
public void propertyChange(PropertyChangeEvent evt) {
|
||||
if (evt.getPropertyName().equals(ExplorerManager.PROP_SELECTED_NODES)) {
|
||||
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
|
||||
try {
|
||||
Node[] selectedNodes = em.getSelectedNodes();
|
||||
if (selectedNodes.length == 1) {
|
||||
AbstractFile af = selectedNodes[0].getLookup().lookup(AbstractFile.class);
|
||||
if (af == null) {
|
||||
filePathLabel.setText("");
|
||||
}
|
||||
else {
|
||||
try {
|
||||
String uPath = af.getUniquePath();
|
||||
filePathLabel.setText(uPath);
|
||||
filePathLabel.setToolTipText(uPath);
|
||||
}
|
||||
catch (TskCoreException e){
|
||||
logger.log(Level.WARNING, "Could not get unique path for content: {0}", af.getName());
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
filePathLabel.setText("");
|
||||
}
|
||||
}
|
||||
finally {
|
||||
setCursor(null);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -80,7 +80,7 @@ import org.sleuthkit.autopsy.core.Installer;
|
||||
})
|
||||
public class FXVideoPanel extends MediaViewVideoPanel {
|
||||
|
||||
private static final String[] EXTENSIONS = new String[]{".swf", ".mov", ".m4v", ".flv", ".mp4", ".3gp", ".avi", ".mpg", ".mpeg", ".wmv"};
|
||||
private static final String[] EXTENSIONS = new String[]{".mov", ".m4v", ".flv", ".mp4", ".mpg", ".mpeg"};
|
||||
private static final Logger logger = Logger.getLogger(MediaViewVideoPanel.class.getName());
|
||||
private boolean fxInited = false;
|
||||
// FX Components
|
||||
@ -400,8 +400,13 @@ public class FXVideoPanel extends MediaViewVideoPanel {
|
||||
* @param mediaUri the URI of the media
|
||||
*/
|
||||
public void prepareMedia(String mediaUri) {
|
||||
mediaPlayer = createMediaPlayer(mediaUri);
|
||||
mediaView.setMediaPlayer(mediaPlayer);
|
||||
try {
|
||||
mediaPlayer = createMediaPlayer(mediaUri);
|
||||
mediaView.setMediaPlayer(mediaPlayer);
|
||||
} catch (MediaException ex) {
|
||||
this.setProgressLabelText("");
|
||||
this.setInfoLabelText("Unsupported Format.");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -414,6 +419,7 @@ public class FXVideoPanel extends MediaViewVideoPanel {
|
||||
mediaPlayer.stop();
|
||||
}
|
||||
mediaPlayer = null;
|
||||
mediaView.setMediaPlayer(null);
|
||||
}
|
||||
resetProgress();
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user