mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-15 01:07:42 +00:00
Reworked 'Examiner' mode so it works without restart.
This commit is contained in:
parent
71cd591998
commit
cf6312cdb3
29
Core/src/org/sleuthkit/autopsy/casemodule/AutoIngestCasePanelInterface.java
Executable file
29
Core/src/org/sleuthkit/autopsy/casemodule/AutoIngestCasePanelInterface.java
Executable file
@ -0,0 +1,29 @@
|
||||
/*
|
||||
* Autopsy Forensic Browser
|
||||
*
|
||||
* Copyright 2011-2017 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 javax.swing.JDialog;
|
||||
|
||||
/**
|
||||
* Interface for startup window implementations
|
||||
*/
|
||||
public interface AutoIngestCasePanelInterface {
|
||||
|
||||
public void addWindowStateListener(JDialog parent);
|
||||
}
|
@ -17,13 +17,7 @@ NewCaseVisualPanel1.jLabel2.text_1=Case data will be stored in the following dir
|
||||
NewCaseVisualPanel1.caseParentDirTextField.text=
|
||||
NewCaseVisualPanel1.caseDirTextField.text_1=
|
||||
CueBannerPanel.autopsyLogo.text=
|
||||
CueBannerPanel.createNewLabel.text=Create New Case
|
||||
CueBannerPanel.openLabel.text=Open Existing Case
|
||||
CueBannerPanel.closeButton.text=Close
|
||||
CueBannerPanel.openRecentLabel.text=Open Recent Case
|
||||
CueBannerPanel.newCaseButton.text=
|
||||
CueBannerPanel.openCaseButton.text=
|
||||
CueBannerPanel.openRecentButton.text=
|
||||
OpenRecentCasePanel.cancelButton.text=Cancel
|
||||
OpenRecentCasePanel.jLabel1.text=Recent Cases
|
||||
NewCaseVisualPanel2.caseNumberTextField.text=
|
||||
@ -225,3 +219,11 @@ CasePropertiesPanel.lbDbType.text=Case Type:
|
||||
CasePropertiesPanel.examinerLabel.text=Examiner:
|
||||
CasePropertiesPanel.caseNumberLabel.text=Case Number:
|
||||
LocalDiskPanel.changeDatabasePathCheckbox.text=Update case to use VHD file upon completion
|
||||
CueBannerPanel.openAutoIngestCaseButton.text=
|
||||
CueBannerPanel.openExistingCaseButton.text=
|
||||
CueBannerPanel.openRecentCaseButton.text=
|
||||
CueBannerPanel.createNewCaseButton.text=
|
||||
CueBannerPanel.createNewCaseLabel.text=Create New Case
|
||||
CueBannerPanel.openRecentCaseLabel.text=Open Recent Case
|
||||
CueBannerPanel.openExistingCaseLabel.text=Open Existing Case
|
||||
CueBannerPanel.openAutoIngestCaseLabel.text=Open Auto Ingest Case
|
||||
|
@ -12,10 +12,7 @@ NewCaseVisualPanel1.caseNameLabel.text_1=\u30b1\u30fc\u30b9\u540d\uff1a
|
||||
NewCaseVisualPanel1.caseDirLabel.text=\u30d9\u30fc\u30b9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\uff1a
|
||||
NewCaseVisualPanel1.caseDirBrowseButton.text=\u95b2\u89a7
|
||||
NewCaseVisualPanel1.jLabel2.text_1=\u30b1\u30fc\u30b9\u30c7\u30fc\u30bf\u306f\u6b21\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u4fdd\u5b58\u3055\u308c\u307e\u3059\uff1a
|
||||
CueBannerPanel.createNewLabel.text=\u65b0\u898f\u30b1\u30fc\u30b9\u3092\u4f5c\u6210
|
||||
CueBannerPanel.openLabel.text=\u65e2\u5b58\u30b1\u30fc\u30b9\u3092\u958b\u304f
|
||||
CueBannerPanel.closeButton.text=\u9589\u3058\u308b
|
||||
CueBannerPanel.openRecentLabel.text=\u6700\u8fd1\u958b\u3044\u305f\u30b1\u30fc\u30b9\u3092\u958b\u304f
|
||||
OpenRecentCasePanel.cancelButton.text=\u30ad\u30e3\u30f3\u30bb\u30eb
|
||||
OpenRecentCasePanel.jLabel1.text=\u6700\u8fd1\u958b\u3044\u305f\u30d5\u30a1\u30a4\u30eb
|
||||
NewCaseVisualPanel2.examinerLabel.text=\u8abf\u67fb\u62c5\u5f53\u8005\uff1a
|
||||
@ -196,3 +193,7 @@ CasePropertiesPanel.lbDbName.text=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u540d\uff
|
||||
CasePropertiesPanel.lbDbType.text=\u30b1\u30fc\u30b9\u30bf\u30a4\u30d7\uff1a
|
||||
CasePropertiesPanel.examinerLabel.text=\u8abf\u67fb\u62c5\u5f53\u8005\uff1a
|
||||
CasePropertiesPanel.caseNumberLabel.text=\u30b1\u30fc\u30b9\u756a\u53f7\uff1a
|
||||
CueBannerPanel.createNewCaseLabel.text=\u65b0\u898f\u30b1\u30fc\u30b9\u3092\u4f5c\u6210
|
||||
CueBannerPanel.openRecentCaseLabel.text=\u6700\u8fd1\u958b\u3044\u305f\u30b1\u30fc\u30b9\u3092\u958b\u304f
|
||||
CueBannerPanel.openExistingCaseLabel.text=\u65e2\u5b58\u30b1\u30fc\u30b9\u3092\u958b\u304f
|
||||
CueBannerPanel.openAutoIngestCaseLabel.text=\u65e2\u5b58\u30b1\u30fc\u30b9\u3092\u958b\u304f
|
||||
|
@ -16,23 +16,27 @@
|
||||
<Layout>
|
||||
<DimensionLayout dim="0">
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<Group type="102" alignment="0" attributes="0">
|
||||
<Group type="102" attributes="0">
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<Group type="102" alignment="0" attributes="0">
|
||||
<Component id="autopsyLogo" min="-2" max="-2" attributes="0"/>
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Component id="jSeparator1" min="-2" pref="5" max="-2" attributes="0"/>
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Group type="103" groupAlignment="2" attributes="0">
|
||||
<Component id="newCaseButton" alignment="2" min="-2" max="-2" attributes="1"/>
|
||||
<Component id="openRecentButton" alignment="2" min="-2" pref="70" max="-2" attributes="1"/>
|
||||
<Component id="openCaseButton" alignment="2" min="-2" max="-2" attributes="1"/>
|
||||
<Component id="createNewCaseButton" alignment="2" min="-2" max="-2" attributes="1"/>
|
||||
<Component id="openRecentCaseButton" alignment="2" min="-2" pref="70" max="-2" attributes="1"/>
|
||||
<Component id="openExistingCaseButton" alignment="2" min="-2" max="-2" attributes="1"/>
|
||||
<Component id="openAutoIngestCaseButton" alignment="2" min="-2" max="-2" attributes="1"/>
|
||||
</Group>
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<Group type="103" alignment="1" groupAlignment="0" attributes="0">
|
||||
<Component id="createNewLabel" alignment="0" min="-2" max="-2" attributes="0"/>
|
||||
<Component id="openRecentLabel" alignment="0" min="-2" max="-2" attributes="0"/>
|
||||
<Component id="openLabel" alignment="0" min="-2" max="-2" attributes="0"/>
|
||||
<Component id="createNewCaseLabel" alignment="0" min="-2" max="-2" attributes="0"/>
|
||||
<Component id="openRecentCaseLabel" alignment="0" min="-2" max="-2" attributes="0"/>
|
||||
<Component id="openExistingCaseLabel" alignment="0" min="-2" max="-2" attributes="0"/>
|
||||
<Component id="openAutoIngestCaseLabel" min="-2" max="-2" attributes="0"/>
|
||||
</Group>
|
||||
</Group>
|
||||
<Component id="closeButton" alignment="1" min="-2" pref="73" max="-2" attributes="0"/>
|
||||
</Group>
|
||||
@ -47,25 +51,33 @@
|
||||
<Group type="103" groupAlignment="0" max="-2" attributes="0">
|
||||
<Group type="102" attributes="0">
|
||||
<Group type="103" groupAlignment="2" attributes="0">
|
||||
<Component id="newCaseButton" alignment="2" min="-2" pref="56" max="-2" attributes="0"/>
|
||||
<Component id="createNewLabel" alignment="2" min="-2" max="-2" attributes="0"/>
|
||||
<Component id="createNewCaseButton" alignment="2" min="-2" pref="56" max="-2" attributes="0"/>
|
||||
<Component id="createNewCaseLabel" alignment="2" min="-2" max="-2" attributes="0"/>
|
||||
</Group>
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Group type="103" groupAlignment="2" attributes="0">
|
||||
<Component id="openRecentButton" alignment="2" min="-2" pref="70" max="-2" attributes="0"/>
|
||||
<Component id="openRecentLabel" alignment="2" min="-2" max="-2" attributes="0"/>
|
||||
<Component id="openRecentCaseButton" alignment="2" min="-2" pref="70" max="-2" attributes="0"/>
|
||||
<Component id="openRecentCaseLabel" alignment="2" min="-2" max="-2" attributes="0"/>
|
||||
</Group>
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Group type="103" groupAlignment="2" attributes="0">
|
||||
<Component id="openCaseButton" alignment="2" min="-2" pref="58" max="-2" attributes="0"/>
|
||||
<Component id="openLabel" alignment="2" min="-2" max="-2" attributes="0"/>
|
||||
<Component id="openExistingCaseButton" alignment="2" min="-2" pref="58" max="-2" attributes="0"/>
|
||||
<Component id="openExistingCaseLabel" alignment="2" min="-2" max="-2" attributes="0"/>
|
||||
</Group>
|
||||
<EmptySpace max="32767" attributes="0"/>
|
||||
<Component id="closeButton" min="-2" max="-2" attributes="0"/>
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<Component id="openAutoIngestCaseButton" alignment="1" min="-2" pref="58" max="-2" attributes="0"/>
|
||||
<Group type="102" alignment="1" attributes="0">
|
||||
<Component id="openAutoIngestCaseLabel" min="-2" max="-2" attributes="0"/>
|
||||
<EmptySpace min="-2" pref="20" max="-2" attributes="0"/>
|
||||
</Group>
|
||||
</Group>
|
||||
</Group>
|
||||
<Component id="jSeparator1" alignment="0" max="32767" attributes="0"/>
|
||||
<Component id="autopsyLogo" alignment="0" min="-2" pref="257" max="-2" attributes="0"/>
|
||||
</Group>
|
||||
<EmptySpace pref="10" max="32767" attributes="0"/>
|
||||
<Component id="closeButton" min="-2" max="-2" attributes="0"/>
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
</Group>
|
||||
</Group>
|
||||
@ -85,13 +97,13 @@
|
||||
<AuxValue name="JavaCodeGenerator_CreateCodePost" type="java.lang.String" value="this.autopsyLogo.setText("");"/>
|
||||
</AuxValues>
|
||||
</Component>
|
||||
<Component class="javax.swing.JButton" name="newCaseButton">
|
||||
<Component class="javax.swing.JButton" name="createNewCaseButton">
|
||||
<Properties>
|
||||
<Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
|
||||
<Image iconType="3" name="/org/sleuthkit/autopsy/casemodule/btn_icon_create_new_case.png"/>
|
||||
</Property>
|
||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="CueBannerPanel.newCaseButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="CueBannerPanel.createNewCaseButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||
</Property>
|
||||
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
|
||||
<Connection code="null" type="code"/>
|
||||
@ -103,16 +115,16 @@
|
||||
</Property>
|
||||
</Properties>
|
||||
<Events>
|
||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="newCaseButtonActionPerformed"/>
|
||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="createNewCaseButtonActionPerformed"/>
|
||||
</Events>
|
||||
</Component>
|
||||
<Component class="javax.swing.JButton" name="openRecentButton">
|
||||
<Component class="javax.swing.JButton" name="openRecentCaseButton">
|
||||
<Properties>
|
||||
<Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
|
||||
<Image iconType="3" name="/org/sleuthkit/autopsy/casemodule/btn_icon_open_recent.png"/>
|
||||
</Property>
|
||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="CueBannerPanel.openRecentButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="CueBannerPanel.openRecentCaseButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||
</Property>
|
||||
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
|
||||
<Connection code="null" type="code"/>
|
||||
@ -124,40 +136,40 @@
|
||||
</Property>
|
||||
</Properties>
|
||||
<Events>
|
||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="openRecentButtonActionPerformed"/>
|
||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="openRecentCaseButtonActionPerformed"/>
|
||||
</Events>
|
||||
</Component>
|
||||
<Component class="javax.swing.JLabel" name="createNewLabel">
|
||||
<Component class="javax.swing.JLabel" name="createNewCaseLabel">
|
||||
<Properties>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.modules.form.editors2.FontEditor">
|
||||
<FontInfo relative="true">
|
||||
<Font bold="false" component="createNewLabel" property="font" relativeSize="false" size="13"/>
|
||||
<Font bold="false" component="createNewCaseLabel" property="font" relativeSize="false" size="13"/>
|
||||
</FontInfo>
|
||||
</Property>
|
||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="CueBannerPanel.createNewLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="CueBannerPanel.createNewCaseLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
</Component>
|
||||
<Component class="javax.swing.JLabel" name="openRecentLabel">
|
||||
<Component class="javax.swing.JLabel" name="openRecentCaseLabel">
|
||||
<Properties>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.modules.form.editors2.FontEditor">
|
||||
<FontInfo relative="true">
|
||||
<Font bold="false" component="openRecentLabel" property="font" relativeSize="false" size="13"/>
|
||||
<Font bold="false" component="openRecentCaseLabel" property="font" relativeSize="false" size="13"/>
|
||||
</FontInfo>
|
||||
</Property>
|
||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="CueBannerPanel.openRecentLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="CueBannerPanel.openRecentCaseLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
</Component>
|
||||
<Component class="javax.swing.JButton" name="openCaseButton">
|
||||
<Component class="javax.swing.JButton" name="openExistingCaseButton">
|
||||
<Properties>
|
||||
<Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
|
||||
<Image iconType="3" name="/org/sleuthkit/autopsy/casemodule/btn_icon_open_existing.png"/>
|
||||
</Property>
|
||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="CueBannerPanel.openCaseButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="CueBannerPanel.openExistingCaseButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||
</Property>
|
||||
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
|
||||
<Connection code="null" type="code"/>
|
||||
@ -172,18 +184,18 @@
|
||||
</Property>
|
||||
</Properties>
|
||||
<Events>
|
||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="openCaseButtonActionPerformed"/>
|
||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="openExistingCaseButtonActionPerformed"/>
|
||||
</Events>
|
||||
</Component>
|
||||
<Component class="javax.swing.JLabel" name="openLabel">
|
||||
<Component class="javax.swing.JLabel" name="openExistingCaseLabel">
|
||||
<Properties>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.modules.form.editors2.FontEditor">
|
||||
<FontInfo relative="true">
|
||||
<Font bold="false" component="openLabel" property="font" relativeSize="false" size="13"/>
|
||||
<Font bold="false" component="openExistingCaseLabel" property="font" relativeSize="false" size="13"/>
|
||||
</FontInfo>
|
||||
</Property>
|
||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="CueBannerPanel.openLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="CueBannerPanel.openExistingCaseLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
</Component>
|
||||
@ -204,5 +216,41 @@
|
||||
<Property name="orientation" type="int" value="1"/>
|
||||
</Properties>
|
||||
</Component>
|
||||
<Component class="javax.swing.JButton" name="openAutoIngestCaseButton">
|
||||
<Properties>
|
||||
<Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
|
||||
<Image iconType="3" name="/org/sleuthkit/autopsy/casemodule/btn_icon_open_existing.png"/>
|
||||
</Property>
|
||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="CueBannerPanel.openAutoIngestCaseButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||
</Property>
|
||||
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
|
||||
<Connection code="null" type="code"/>
|
||||
</Property>
|
||||
<Property name="borderPainted" type="boolean" value="false"/>
|
||||
<Property name="contentAreaFilled" type="boolean" value="false"/>
|
||||
<Property name="margin" type="java.awt.Insets" editor="org.netbeans.beaninfo.editors.InsetsEditor">
|
||||
<Insets value="[1, 1, 1, 1]"/>
|
||||
</Property>
|
||||
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
||||
<Dimension value="[64, 64]"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
<Events>
|
||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="openAutoIngestCaseButtonActionPerformed"/>
|
||||
</Events>
|
||||
</Component>
|
||||
<Component class="javax.swing.JLabel" name="openAutoIngestCaseLabel">
|
||||
<Properties>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.modules.form.editors2.FontEditor">
|
||||
<FontInfo relative="true">
|
||||
<Font bold="false" component="openAutoIngestCaseLabel" property="font" relativeSize="false" size="13"/>
|
||||
</FontInfo>
|
||||
</Property>
|
||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="CueBannerPanel.openAutoIngestCaseLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
</Component>
|
||||
</SubComponents>
|
||||
</Form>
|
||||
|
@ -26,10 +26,14 @@ import java.awt.event.KeyEvent;
|
||||
import javax.swing.ImageIcon;
|
||||
import javax.swing.JComponent;
|
||||
import javax.swing.JDialog;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.KeyStroke;
|
||||
import org.openide.util.Lookup;
|
||||
import org.openide.util.NbBundle;
|
||||
import org.openide.windows.WindowManager;
|
||||
import org.sleuthkit.autopsy.casemodule.AutoIngestCasePanelInterface;
|
||||
import org.sleuthkit.autopsy.core.UserPreferences;
|
||||
import org.sleuthkit.autopsy.coreutils.NetworkUtils;
|
||||
|
||||
/*
|
||||
* The panel in the default Autopsy startup window.
|
||||
@ -37,11 +41,14 @@ import org.openide.windows.WindowManager;
|
||||
public class CueBannerPanel extends javax.swing.JPanel {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
private static final String LOCAL_HOST_NAME = NetworkUtils.getLocalHostName();
|
||||
private static final String REVIEW_MODE_TITLE = "Cases" + " (" + LOCAL_HOST_NAME + ")";
|
||||
/*
|
||||
* This is field is static for the sake of the closeOpenRecentCasesWindow
|
||||
* method.
|
||||
*/
|
||||
private static JDialog recentCasesWindow;
|
||||
private static JDialog autoIngestCasePanelWindow;
|
||||
|
||||
public static void closeOpenRecentCasesWindow() {
|
||||
if (null != recentCasesWindow) {
|
||||
@ -102,13 +109,13 @@ public class CueBannerPanel extends javax.swing.JPanel {
|
||||
}
|
||||
|
||||
private void enableComponents() {
|
||||
if (RecentCases.getInstance().getTotalRecentCases() == 0) {
|
||||
openRecentButton.setEnabled(false);
|
||||
openRecentLabel.setEnabled(false);
|
||||
} else {
|
||||
openRecentButton.setEnabled(true);
|
||||
openRecentLabel.setEnabled(true);
|
||||
}
|
||||
boolean enableOpenRecentCaseButton = (RecentCases.getInstance().getTotalRecentCases() == 0);
|
||||
openRecentCaseButton.setEnabled(enableOpenRecentCaseButton);
|
||||
openRecentCaseLabel.setEnabled(enableOpenRecentCaseButton);
|
||||
|
||||
boolean showOpenAutoIngestCaseButton = (UserPreferences.getMode() == UserPreferences.SelectedMode.REVIEW);
|
||||
openAutoIngestCaseButton.setVisible(showOpenAutoIngestCaseButton);
|
||||
openAutoIngestCaseLabel.setVisible(showOpenAutoIngestCaseButton);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -122,89 +129,110 @@ public class CueBannerPanel extends javax.swing.JPanel {
|
||||
|
||||
autopsyLogo = new javax.swing.JLabel();
|
||||
this.autopsyLogo.setText("");
|
||||
newCaseButton = new javax.swing.JButton();
|
||||
openRecentButton = new javax.swing.JButton();
|
||||
createNewLabel = new javax.swing.JLabel();
|
||||
openRecentLabel = new javax.swing.JLabel();
|
||||
openCaseButton = new javax.swing.JButton();
|
||||
openLabel = new javax.swing.JLabel();
|
||||
createNewCaseButton = new javax.swing.JButton();
|
||||
openRecentCaseButton = new javax.swing.JButton();
|
||||
createNewCaseLabel = new javax.swing.JLabel();
|
||||
openRecentCaseLabel = new javax.swing.JLabel();
|
||||
openExistingCaseButton = new javax.swing.JButton();
|
||||
openExistingCaseLabel = new javax.swing.JLabel();
|
||||
closeButton = new javax.swing.JButton();
|
||||
jSeparator1 = new javax.swing.JSeparator();
|
||||
openAutoIngestCaseButton = new javax.swing.JButton();
|
||||
openAutoIngestCaseLabel = new javax.swing.JLabel();
|
||||
|
||||
autopsyLogo.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/casemodule/welcome_logo.png"))); // NOI18N
|
||||
autopsyLogo.setText(org.openide.util.NbBundle.getMessage(CueBannerPanel.class, "CueBannerPanel.autopsyLogo.text")); // NOI18N
|
||||
|
||||
newCaseButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/casemodule/btn_icon_create_new_case.png"))); // NOI18N
|
||||
newCaseButton.setText(org.openide.util.NbBundle.getMessage(CueBannerPanel.class, "CueBannerPanel.newCaseButton.text")); // NOI18N
|
||||
newCaseButton.setBorder(null);
|
||||
newCaseButton.setBorderPainted(false);
|
||||
newCaseButton.setContentAreaFilled(false);
|
||||
newCaseButton.setPreferredSize(new java.awt.Dimension(64, 64));
|
||||
newCaseButton.addActionListener(new java.awt.event.ActionListener() {
|
||||
createNewCaseButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/casemodule/btn_icon_create_new_case.png"))); // NOI18N
|
||||
createNewCaseButton.setText(org.openide.util.NbBundle.getMessage(CueBannerPanel.class, "CueBannerPanel.createNewCaseButton.text")); // NOI18N
|
||||
createNewCaseButton.setBorder(null);
|
||||
createNewCaseButton.setBorderPainted(false);
|
||||
createNewCaseButton.setContentAreaFilled(false);
|
||||
createNewCaseButton.setPreferredSize(new java.awt.Dimension(64, 64));
|
||||
createNewCaseButton.addActionListener(new java.awt.event.ActionListener() {
|
||||
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||
newCaseButtonActionPerformed(evt);
|
||||
createNewCaseButtonActionPerformed(evt);
|
||||
}
|
||||
});
|
||||
|
||||
openRecentButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/casemodule/btn_icon_open_recent.png"))); // NOI18N
|
||||
openRecentButton.setText(org.openide.util.NbBundle.getMessage(CueBannerPanel.class, "CueBannerPanel.openRecentButton.text")); // NOI18N
|
||||
openRecentButton.setBorder(null);
|
||||
openRecentButton.setBorderPainted(false);
|
||||
openRecentButton.setContentAreaFilled(false);
|
||||
openRecentButton.setPreferredSize(new java.awt.Dimension(64, 64));
|
||||
openRecentButton.addActionListener(new java.awt.event.ActionListener() {
|
||||
openRecentCaseButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/casemodule/btn_icon_open_recent.png"))); // NOI18N
|
||||
openRecentCaseButton.setText(org.openide.util.NbBundle.getMessage(CueBannerPanel.class, "CueBannerPanel.openRecentCaseButton.text")); // NOI18N
|
||||
openRecentCaseButton.setBorder(null);
|
||||
openRecentCaseButton.setBorderPainted(false);
|
||||
openRecentCaseButton.setContentAreaFilled(false);
|
||||
openRecentCaseButton.setPreferredSize(new java.awt.Dimension(64, 64));
|
||||
openRecentCaseButton.addActionListener(new java.awt.event.ActionListener() {
|
||||
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||
openRecentButtonActionPerformed(evt);
|
||||
openRecentCaseButtonActionPerformed(evt);
|
||||
}
|
||||
});
|
||||
|
||||
createNewLabel.setFont(createNewLabel.getFont().deriveFont(createNewLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 13));
|
||||
createNewLabel.setText(org.openide.util.NbBundle.getMessage(CueBannerPanel.class, "CueBannerPanel.createNewLabel.text")); // NOI18N
|
||||
createNewCaseLabel.setFont(createNewCaseLabel.getFont().deriveFont(createNewCaseLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 13));
|
||||
createNewCaseLabel.setText(org.openide.util.NbBundle.getMessage(CueBannerPanel.class, "CueBannerPanel.createNewCaseLabel.text")); // NOI18N
|
||||
|
||||
openRecentLabel.setFont(openRecentLabel.getFont().deriveFont(openRecentLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 13));
|
||||
openRecentLabel.setText(org.openide.util.NbBundle.getMessage(CueBannerPanel.class, "CueBannerPanel.openRecentLabel.text")); // NOI18N
|
||||
openRecentCaseLabel.setFont(openRecentCaseLabel.getFont().deriveFont(openRecentCaseLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 13));
|
||||
openRecentCaseLabel.setText(org.openide.util.NbBundle.getMessage(CueBannerPanel.class, "CueBannerPanel.openRecentCaseLabel.text")); // NOI18N
|
||||
|
||||
openCaseButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/casemodule/btn_icon_open_existing.png"))); // NOI18N
|
||||
openCaseButton.setText(org.openide.util.NbBundle.getMessage(CueBannerPanel.class, "CueBannerPanel.openCaseButton.text")); // NOI18N
|
||||
openCaseButton.setBorder(null);
|
||||
openCaseButton.setBorderPainted(false);
|
||||
openCaseButton.setContentAreaFilled(false);
|
||||
openCaseButton.setMargin(new java.awt.Insets(1, 1, 1, 1));
|
||||
openCaseButton.setPreferredSize(new java.awt.Dimension(64, 64));
|
||||
openCaseButton.addActionListener(new java.awt.event.ActionListener() {
|
||||
openExistingCaseButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/casemodule/btn_icon_open_existing.png"))); // NOI18N
|
||||
openExistingCaseButton.setText(org.openide.util.NbBundle.getMessage(CueBannerPanel.class, "CueBannerPanel.openExistingCaseButton.text")); // NOI18N
|
||||
openExistingCaseButton.setBorder(null);
|
||||
openExistingCaseButton.setBorderPainted(false);
|
||||
openExistingCaseButton.setContentAreaFilled(false);
|
||||
openExistingCaseButton.setMargin(new java.awt.Insets(1, 1, 1, 1));
|
||||
openExistingCaseButton.setPreferredSize(new java.awt.Dimension(64, 64));
|
||||
openExistingCaseButton.addActionListener(new java.awt.event.ActionListener() {
|
||||
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||
openCaseButtonActionPerformed(evt);
|
||||
openExistingCaseButtonActionPerformed(evt);
|
||||
}
|
||||
});
|
||||
|
||||
openLabel.setFont(openLabel.getFont().deriveFont(openLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 13));
|
||||
openLabel.setText(org.openide.util.NbBundle.getMessage(CueBannerPanel.class, "CueBannerPanel.openLabel.text")); // NOI18N
|
||||
openExistingCaseLabel.setFont(openExistingCaseLabel.getFont().deriveFont(openExistingCaseLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 13));
|
||||
openExistingCaseLabel.setText(org.openide.util.NbBundle.getMessage(CueBannerPanel.class, "CueBannerPanel.openExistingCaseLabel.text")); // NOI18N
|
||||
|
||||
closeButton.setFont(closeButton.getFont().deriveFont(closeButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
|
||||
closeButton.setText(org.openide.util.NbBundle.getMessage(CueBannerPanel.class, "CueBannerPanel.closeButton.text")); // NOI18N
|
||||
|
||||
jSeparator1.setOrientation(javax.swing.SwingConstants.VERTICAL);
|
||||
|
||||
openAutoIngestCaseButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/casemodule/btn_icon_open_existing.png"))); // NOI18N
|
||||
openAutoIngestCaseButton.setText(org.openide.util.NbBundle.getMessage(CueBannerPanel.class, "CueBannerPanel.openAutoIngestCaseButton.text")); // NOI18N
|
||||
openAutoIngestCaseButton.setBorder(null);
|
||||
openAutoIngestCaseButton.setBorderPainted(false);
|
||||
openAutoIngestCaseButton.setContentAreaFilled(false);
|
||||
openAutoIngestCaseButton.setMargin(new java.awt.Insets(1, 1, 1, 1));
|
||||
openAutoIngestCaseButton.setPreferredSize(new java.awt.Dimension(64, 64));
|
||||
openAutoIngestCaseButton.addActionListener(new java.awt.event.ActionListener() {
|
||||
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||
openAutoIngestCaseButtonActionPerformed(evt);
|
||||
}
|
||||
});
|
||||
|
||||
openAutoIngestCaseLabel.setFont(openAutoIngestCaseLabel.getFont().deriveFont(openAutoIngestCaseLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 13));
|
||||
openAutoIngestCaseLabel.setText(org.openide.util.NbBundle.getMessage(CueBannerPanel.class, "CueBannerPanel.openAutoIngestCaseLabel.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()
|
||||
.addComponent(autopsyLogo)
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||
.addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 5, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
|
||||
.addComponent(newCaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addComponent(openRecentButton, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addComponent(openCaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
|
||||
.addComponent(createNewCaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addComponent(openRecentCaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addComponent(openExistingCaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addComponent(openAutoIngestCaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addComponent(createNewLabel)
|
||||
.addComponent(openRecentLabel)
|
||||
.addComponent(openLabel))
|
||||
.addComponent(createNewCaseLabel)
|
||||
.addComponent(openRecentCaseLabel)
|
||||
.addComponent(openExistingCaseLabel)
|
||||
.addComponent(openAutoIngestCaseLabel)))
|
||||
.addComponent(closeButton, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 73, javax.swing.GroupLayout.PREFERRED_SIZE))
|
||||
.addContainerGap())
|
||||
);
|
||||
@ -215,48 +243,68 @@ public class CueBannerPanel extends javax.swing.JPanel {
|
||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
|
||||
.addGroup(layout.createSequentialGroup()
|
||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
|
||||
.addComponent(newCaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, 56, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addComponent(createNewLabel))
|
||||
.addComponent(createNewCaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, 56, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addComponent(createNewCaseLabel))
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
|
||||
.addComponent(openRecentButton, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addComponent(openRecentLabel))
|
||||
.addComponent(openRecentCaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addComponent(openRecentCaseLabel))
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
|
||||
.addComponent(openCaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, 58, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addComponent(openLabel))
|
||||
.addComponent(openExistingCaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, 58, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addComponent(openExistingCaseLabel))
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
||||
.addComponent(closeButton))
|
||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addComponent(openAutoIngestCaseButton, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 58, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
|
||||
.addComponent(openAutoIngestCaseLabel)
|
||||
.addGap(20, 20, 20))))
|
||||
.addComponent(jSeparator1)
|
||||
.addComponent(autopsyLogo, javax.swing.GroupLayout.PREFERRED_SIZE, 257, javax.swing.GroupLayout.PREFERRED_SIZE))
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 10, Short.MAX_VALUE)
|
||||
.addComponent(closeButton)
|
||||
.addContainerGap())
|
||||
);
|
||||
}// </editor-fold>//GEN-END:initComponents
|
||||
|
||||
private void newCaseButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_newCaseButtonActionPerformed
|
||||
private void createNewCaseButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_createNewCaseButtonActionPerformed
|
||||
Lookup.getDefault().lookup(CaseNewActionInterface.class).actionPerformed(evt);
|
||||
}//GEN-LAST:event_newCaseButtonActionPerformed
|
||||
}//GEN-LAST:event_createNewCaseButtonActionPerformed
|
||||
|
||||
private void openCaseButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_openCaseButtonActionPerformed
|
||||
private void openExistingCaseButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_openExistingCaseButtonActionPerformed
|
||||
Lookup.getDefault().lookup(CaseOpenAction.class).actionPerformed(evt);
|
||||
}//GEN-LAST:event_openCaseButtonActionPerformed
|
||||
}//GEN-LAST:event_openExistingCaseButtonActionPerformed
|
||||
|
||||
private void openRecentButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_openRecentButtonActionPerformed
|
||||
private void openRecentCaseButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_openRecentCaseButtonActionPerformed
|
||||
recentCasesWindow.setLocationRelativeTo(WindowManager.getDefault().getMainWindow());
|
||||
OpenRecentCasePanel.getInstance(); //refreshes the recent cases table
|
||||
recentCasesWindow.setVisible(true);
|
||||
}//GEN-LAST:event_openRecentButtonActionPerformed
|
||||
}//GEN-LAST:event_openRecentCaseButtonActionPerformed
|
||||
|
||||
private void openAutoIngestCaseButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_openAutoIngestCaseButtonActionPerformed
|
||||
autoIngestCasePanelWindow = new JDialog();
|
||||
autoIngestCasePanelWindow.setTitle(REVIEW_MODE_TITLE);
|
||||
AutoIngestCasePanelInterface autoIngestCasePanel = Lookup.getDefault().lookup(AutoIngestCasePanelInterface.class);
|
||||
autoIngestCasePanel.addWindowStateListener(autoIngestCasePanelWindow);
|
||||
autoIngestCasePanelWindow.add((JPanel)autoIngestCasePanel);
|
||||
autoIngestCasePanelWindow.pack();
|
||||
autoIngestCasePanelWindow.toFront();
|
||||
autoIngestCasePanelWindow.setVisible(true);
|
||||
autoIngestCasePanelWindow.setResizable(false);
|
||||
}//GEN-LAST:event_openAutoIngestCaseButtonActionPerformed
|
||||
|
||||
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||
private javax.swing.JLabel autopsyLogo;
|
||||
private javax.swing.JButton closeButton;
|
||||
private javax.swing.JLabel createNewLabel;
|
||||
private javax.swing.JButton createNewCaseButton;
|
||||
private javax.swing.JLabel createNewCaseLabel;
|
||||
private javax.swing.JSeparator jSeparator1;
|
||||
private javax.swing.JButton newCaseButton;
|
||||
private javax.swing.JButton openCaseButton;
|
||||
private javax.swing.JLabel openLabel;
|
||||
private javax.swing.JButton openRecentButton;
|
||||
private javax.swing.JLabel openRecentLabel;
|
||||
private javax.swing.JButton openAutoIngestCaseButton;
|
||||
private javax.swing.JLabel openAutoIngestCaseLabel;
|
||||
private javax.swing.JButton openExistingCaseButton;
|
||||
private javax.swing.JLabel openExistingCaseLabel;
|
||||
private javax.swing.JButton openRecentCaseButton;
|
||||
private javax.swing.JLabel openRecentCaseLabel;
|
||||
// End of variables declaration//GEN-END:variables
|
||||
|
||||
}
|
||||
|
@ -61,21 +61,8 @@ final class AutoIngestCaseManager {
|
||||
*/
|
||||
private AutoIngestCaseManager() {
|
||||
|
||||
/*
|
||||
* Permanently delete the "Open Recent Cases" item in the "File" menu.
|
||||
* This is quite drastic, as it also affects Autopsy standalone mode on
|
||||
* this machine, but review mode is only for looking at cases created by
|
||||
* automated ingest.
|
||||
*/
|
||||
FileObject root = FileUtil.getConfigRoot();
|
||||
FileObject openRecentCasesMenu = root.getFileObject("Menu/Case/OpenRecentCase");
|
||||
if (openRecentCasesMenu != null) {
|
||||
try {
|
||||
openRecentCasesMenu.delete();
|
||||
} catch (IOException ex) {
|
||||
AutoIngestCaseManager.LOGGER.log(Level.WARNING, "Unable to remove Open Recent Cases file menu item", ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -21,6 +21,7 @@ package org.sleuthkit.autopsy.experimental.autoingest;
|
||||
import java.awt.Cursor;
|
||||
import java.awt.Desktop;
|
||||
import java.awt.EventQueue;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.WindowAdapter;
|
||||
import java.awt.event.WindowEvent;
|
||||
import java.io.IOException;
|
||||
@ -39,16 +40,23 @@ import javax.swing.SwingWorker;
|
||||
import javax.swing.event.ListSelectionEvent;
|
||||
import javax.swing.table.DefaultTableModel;
|
||||
import javax.swing.table.TableColumn;
|
||||
import org.openide.util.NbBundle;
|
||||
import org.openide.util.lookup.ServiceProvider;
|
||||
import org.openide.windows.WindowManager;
|
||||
import org.sleuthkit.autopsy.casemodule.CaseActionCancelledException;
|
||||
import org.sleuthkit.autopsy.casemodule.CaseMetadata;
|
||||
import org.sleuthkit.autopsy.casemodule.StartupWindowProvider;
|
||||
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||
import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil;
|
||||
import org.sleuthkit.autopsy.casemodule.AutoIngestCasePanelInterface;
|
||||
import org.sleuthkit.autopsy.coreutils.NetworkUtils;
|
||||
import org.sleuthkit.autopsy.experimental.configuration.StartupWindow;
|
||||
|
||||
/**
|
||||
* A panel that allows a user to open cases created by auto ingest.
|
||||
*/
|
||||
public final class AutoIngestCasePanel extends JPanel {
|
||||
@ServiceProvider(service = AutoIngestCasePanelInterface.class)
|
||||
public final class AutoIngestCasePanel extends JPanel implements AutoIngestCasePanelInterface {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
private static final Logger logger = Logger.getLogger(AutoIngestCasePanel.class.getName());
|
||||
@ -91,6 +99,34 @@ public final class AutoIngestCasePanel extends JPanel {
|
||||
private DefaultTableModel caseTableModel;
|
||||
private Path currentlySelectedCase = null;
|
||||
|
||||
public AutoIngestCasePanel() {
|
||||
init(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addWindowStateListener(JDialog parent) {
|
||||
/*
|
||||
* Add a window state listener that starts and stops refreshing of the
|
||||
* cases table.
|
||||
*/
|
||||
parent.addWindowListener(new WindowAdapter() {
|
||||
@Override
|
||||
public void windowClosing(WindowEvent e) {
|
||||
stopCasesTableRefreshes();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void windowActivated(WindowEvent e) {
|
||||
startCasesTableRefreshes();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void windowClosed(WindowEvent e) {
|
||||
stopCasesTableRefreshes();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a panel that allows a user to open cases created by automated
|
||||
* ingest.
|
||||
@ -98,6 +134,10 @@ public final class AutoIngestCasePanel extends JPanel {
|
||||
* @param parent The parent dialog for this panel.
|
||||
*/
|
||||
public AutoIngestCasePanel(JDialog parent) {
|
||||
init(parent);
|
||||
}
|
||||
|
||||
public void init(JDialog parent) {
|
||||
caseTableModel = new DefaultTableModel(columnNames, 0) {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
|
@ -126,11 +126,7 @@
|
||||
</Group>
|
||||
<Group type="102" attributes="0">
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<Group type="102" alignment="0" attributes="0">
|
||||
<Component id="jLabelSelectMode" min="-2" max="-2" attributes="0"/>
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Component id="restartRequiredNodeLabel" min="-2" max="-2" attributes="0"/>
|
||||
</Group>
|
||||
<Component id="jLabelSelectMode" alignment="0" min="-2" max="-2" attributes="0"/>
|
||||
<Component id="jRadioButtonReview" alignment="0" min="-2" max="-2" attributes="0"/>
|
||||
<Component id="jRadioButtonAutomated" alignment="0" min="-2" max="-2" attributes="0"/>
|
||||
</Group>
|
||||
@ -159,10 +155,7 @@
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<Group type="102" attributes="0">
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Group type="103" groupAlignment="3" attributes="0">
|
||||
<Component id="jLabelSelectMode" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||
<Component id="restartRequiredNodeLabel" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||
</Group>
|
||||
<Component id="jLabelSelectMode" min="-2" max="-2" attributes="0"/>
|
||||
<EmptySpace type="unrelated" max="-2" attributes="0"/>
|
||||
<Component id="jRadioButtonAutomated" min="-2" max="-2" attributes="0"/>
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
@ -203,16 +196,6 @@
|
||||
</Property>
|
||||
</Properties>
|
||||
</Component>
|
||||
<Component class="javax.swing.JLabel" name="restartRequiredNodeLabel">
|
||||
<Properties>
|
||||
<Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
|
||||
<Image iconType="3" name="/org/sleuthkit/autopsy/experimental/images/warning16.png"/>
|
||||
</Property>
|
||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||
<ResourceString bundle="org/sleuthkit/autopsy/experimental/configuration/Bundle.properties" key="AutoIngestSettingsPanel.restartRequiredNodeLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
</Component>
|
||||
<Component class="javax.swing.JRadioButton" name="jRadioButtonAutomated">
|
||||
<Properties>
|
||||
<Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor">
|
||||
|
@ -210,35 +210,16 @@ public class AutoIngestSettingsPanel extends javax.swing.JPanel {
|
||||
boolean needsRestart = false;
|
||||
UserPreferences.SelectedMode storedMode = UserPreferences.getMode();
|
||||
|
||||
if (AutoIngestUserPreferences.getJoinAutoModeCluster() != cbJoinAutoIngestCluster.isSelected()) {
|
||||
needsRestart = true;
|
||||
}
|
||||
|
||||
AutoIngestUserPreferences.setJoinAutoModeCluster(cbJoinAutoIngestCluster.isSelected());
|
||||
if (!cbJoinAutoIngestCluster.isSelected()) {
|
||||
UserPreferences.setMode(UserPreferences.SelectedMode.STANDALONE);
|
||||
//before return popup the message
|
||||
if (needsRestart) {
|
||||
SwingUtilities.invokeLater(() -> {
|
||||
JOptionPane.showMessageDialog(null,
|
||||
NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.MustRestart"),
|
||||
NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.restartRequiredLabel.text"),
|
||||
JOptionPane.WARNING_MESSAGE);
|
||||
});
|
||||
}
|
||||
return;
|
||||
if(storedMode == UserPreferences.SelectedMode.AUTOINGEST) {
|
||||
needsRestart = true;
|
||||
}
|
||||
|
||||
if (jRadioButtonAutomated.isSelected()) {
|
||||
if (storedMode != UserPreferences.SelectedMode.AUTOINGEST) {
|
||||
needsRestart = true;
|
||||
UserPreferences.setMode(UserPreferences.SelectedMode.STANDALONE);
|
||||
}
|
||||
String thePath = AutoIngestUserPreferences.getAutoModeImageFolder();
|
||||
if (thePath != null && 0 != inputPathTextField.getText().compareTo(thePath)) {
|
||||
needsRestart = true;
|
||||
}
|
||||
thePath = AutoIngestUserPreferences.getAutoModeResultsFolder();
|
||||
if (thePath != null && 0 != outputPathTextField.getText().compareTo(thePath)) {
|
||||
else if (jRadioButtonAutomated.isSelected()) {
|
||||
if (storedMode == UserPreferences.SelectedMode.REVIEW) {
|
||||
needsRestart = true;
|
||||
}
|
||||
|
||||
@ -254,11 +235,7 @@ public class AutoIngestSettingsPanel extends javax.swing.JPanel {
|
||||
AutoIngestUserPreferences.setSharedConfigMaster(masterNodeCheckBox.isSelected());
|
||||
}
|
||||
} else if (jRadioButtonReview.isSelected()) {
|
||||
if (storedMode != UserPreferences.SelectedMode.REVIEW) {
|
||||
needsRestart = true;
|
||||
}
|
||||
String thePath = AutoIngestUserPreferences.getAutoModeResultsFolder();
|
||||
if (thePath != null && 0 != outputPathTextField.getText().compareTo(thePath)) {
|
||||
if (storedMode == UserPreferences.SelectedMode.AUTOINGEST) {
|
||||
needsRestart = true;
|
||||
}
|
||||
|
||||
@ -661,7 +638,6 @@ public class AutoIngestSettingsPanel extends javax.swing.JPanel {
|
||||
nodePanel = new javax.swing.JPanel();
|
||||
jPanelNodeType = new javax.swing.JPanel();
|
||||
jLabelSelectMode = new javax.swing.JLabel();
|
||||
restartRequiredNodeLabel = new javax.swing.JLabel();
|
||||
jRadioButtonAutomated = new javax.swing.JRadioButton();
|
||||
jRadioButtonReview = new javax.swing.JRadioButton();
|
||||
jLabelSelectInputFolder = new javax.swing.JLabel();
|
||||
@ -703,9 +679,6 @@ public class AutoIngestSettingsPanel extends javax.swing.JPanel {
|
||||
|
||||
org.openide.awt.Mnemonics.setLocalizedText(jLabelSelectMode, org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.jLabelSelectMode.text")); // NOI18N
|
||||
|
||||
restartRequiredNodeLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/experimental/images/warning16.png"))); // NOI18N
|
||||
org.openide.awt.Mnemonics.setLocalizedText(restartRequiredNodeLabel, org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.restartRequiredNodeLabel.text")); // NOI18N
|
||||
|
||||
modeRadioButtons.add(jRadioButtonAutomated);
|
||||
jRadioButtonAutomated.setSelected(true);
|
||||
org.openide.awt.Mnemonics.setLocalizedText(jRadioButtonAutomated, org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.jRadioButtonAutomated.text")); // NOI18N
|
||||
@ -777,10 +750,7 @@ public class AutoIngestSettingsPanel extends javax.swing.JPanel {
|
||||
.addComponent(browseOutputFolderButton, javax.swing.GroupLayout.Alignment.TRAILING)))
|
||||
.addGroup(jPanelNodeTypeLayout.createSequentialGroup()
|
||||
.addGroup(jPanelNodeTypeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(jPanelNodeTypeLayout.createSequentialGroup()
|
||||
.addComponent(jLabelSelectMode)
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||
.addComponent(restartRequiredNodeLabel))
|
||||
.addComponent(jRadioButtonReview)
|
||||
.addComponent(jRadioButtonAutomated))
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
||||
@ -802,9 +772,7 @@ public class AutoIngestSettingsPanel extends javax.swing.JPanel {
|
||||
.addGroup(jPanelNodeTypeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(jPanelNodeTypeLayout.createSequentialGroup()
|
||||
.addContainerGap()
|
||||
.addGroup(jPanelNodeTypeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
||||
.addComponent(jLabelSelectMode)
|
||||
.addComponent(restartRequiredNodeLabel))
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
||||
.addComponent(jRadioButtonAutomated)
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||
@ -1407,7 +1375,6 @@ public class AutoIngestSettingsPanel extends javax.swing.JPanel {
|
||||
jRadioButtonAutomated.setEnabled(enabled);
|
||||
jRadioButtonReview.setEnabled(enabled);
|
||||
outputPathTextField.setEnabled(enabled);
|
||||
restartRequiredNodeLabel.setEnabled(enabled);
|
||||
}
|
||||
|
||||
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||
@ -1442,7 +1409,6 @@ public class AutoIngestSettingsPanel extends javax.swing.JPanel {
|
||||
private javax.swing.JScrollPane nodeScrollPane;
|
||||
private javax.swing.JTextField outputPathTextField;
|
||||
private javax.swing.JProgressBar pbTaskInProgress;
|
||||
private javax.swing.JLabel restartRequiredNodeLabel;
|
||||
private javax.swing.JCheckBox sharedConfigCheckbox;
|
||||
private javax.swing.JTextField sharedSettingsErrorTextField;
|
||||
private javax.swing.JTextField sharedSettingsTextField;
|
||||
|
@ -59,7 +59,7 @@ public final class AutoIngestUserPreferences {
|
||||
}
|
||||
|
||||
/**
|
||||
* Get "Join Automated Ingest Cluster" setting from persistent storage.
|
||||
* Get "Join auto ingest cluster" setting from persistent storage.
|
||||
*
|
||||
* @return SelectedMode Selected setting.
|
||||
*/
|
||||
@ -71,7 +71,7 @@ public final class AutoIngestUserPreferences {
|
||||
}
|
||||
|
||||
/**
|
||||
* Set "Join Automated Ingest Cluster" setting to persistent storage.
|
||||
* Set "Join auto ingest cluster" setting to persistent storage.
|
||||
*
|
||||
* @param join boolean value of whether to join auto ingest cluster or not
|
||||
*/
|
||||
|
@ -25,7 +25,7 @@ AutoIngestSettingsPanel.AdvancedAutoIngestSettingsPanel.Title=Advanced Settings
|
||||
AutoIngestSettingsPanel.browseGlobalSettingsButton.text=Browse
|
||||
AutoIngestSettingsPanel.browseSharedSettingsButton.text=Browse
|
||||
AutoIngestSettingsPanel.CannotAccess=Cannot access
|
||||
AutoIngestSettingsPanel.cbJoinAutoIngestCluster.text=Join Automated Ingest Cluster
|
||||
AutoIngestSettingsPanel.cbJoinAutoIngestCluster.text=Join auto ingest cluster
|
||||
AutoIngestSettingsPanel.CheckPermissions=Check permissions.
|
||||
AutoIngestSettingsPanel.configButtonErrorTextField.text=configButtonErrorTextField
|
||||
AutoIngestSettingsPanel.downloadButton.text=Download Config
|
||||
@ -89,7 +89,6 @@ OptionsDialog.jLabel1.text=jLabel1
|
||||
StartupWindow.AutoIngestMode=Automated Ingest Node
|
||||
StartupWindow.CaseImportMode=Single User Case Import
|
||||
StartupWindow.CopyAndImportMode=Utilities
|
||||
StartupWindow.ReviewMode=Cases
|
||||
StartupWindow.title.text=Welcome
|
||||
AdvancedAutoIngestSettingsPanel.lbInputScanIntervalMinutes.text=minutes
|
||||
AdvancedAutoIngestSettingsPanel.lbTimeoutHours.text=hour(s)
|
||||
@ -133,10 +132,9 @@ AutoIngestSettingsPanel.inputPathTextField.toolTipText=Input folder for automate
|
||||
AutoIngestSettingsPanel.inputPathTextField.text=
|
||||
AutoIngestSettingsPanel.jLabelSelectInputFolder.text=Select shared images folder:
|
||||
AutoIngestSettingsPanel.jRadioButtonReview.toolTipText=Review cases created in automated processing mode
|
||||
AutoIngestSettingsPanel.jRadioButtonReview.text=Examiner Node
|
||||
AutoIngestSettingsPanel.jRadioButtonReview.text=Examiner node
|
||||
AutoIngestSettingsPanel.jRadioButtonAutomated.toolTipText=Automatically detect new data sources and create cases.
|
||||
AutoIngestSettingsPanel.jRadioButtonAutomated.text=Auto Ingest Node
|
||||
AutoIngestSettingsPanel.restartRequiredNodeLabel.text=Application restart required
|
||||
AutoIngestSettingsPanel.jRadioButtonAutomated.text=Auto ingest node (application restart required)
|
||||
AutoIngestSettingsPanel.jLabelSelectMode.text=Select mode:
|
||||
AutoIngestSettingsPanel.jPanelIngestSettings.border.title=Automated Ingest Settings
|
||||
AutoIngestSettingsPanel.bnLogging.text=Node Status Logging
|
||||
|
@ -18,7 +18,6 @@
|
||||
*/
|
||||
package org.sleuthkit.autopsy.experimental.configuration;
|
||||
|
||||
import java.awt.Cursor;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.Toolkit;
|
||||
import java.awt.event.ActionEvent;
|
||||
@ -36,7 +35,6 @@ import org.sleuthkit.autopsy.casemodule.StartupWindowInterface;
|
||||
import org.sleuthkit.autopsy.core.UserPreferences;
|
||||
import org.sleuthkit.autopsy.coreutils.NetworkUtils;
|
||||
import org.sleuthkit.autopsy.experimental.autoingest.AutoIngestControlPanel;
|
||||
import org.sleuthkit.autopsy.experimental.autoingest.AutoIngestCasePanel;
|
||||
|
||||
/**
|
||||
* The default implementation of the Autopsy startup window
|
||||
@ -48,7 +46,6 @@ public final class StartupWindow extends JDialog implements StartupWindowInterfa
|
||||
private static Dimension DIMENSIONS = new Dimension(750, 400);
|
||||
private static CueBannerPanel welcomeWindow;
|
||||
private static final long serialVersionUID = 1L;
|
||||
private AutoIngestCasePanel caseManagementPanel = null;
|
||||
private static final String LOCAL_HOST_NAME = NetworkUtils.getLocalHostName();
|
||||
|
||||
public StartupWindow() {
|
||||
@ -78,12 +75,6 @@ public final class StartupWindow extends JDialog implements StartupWindowInterfa
|
||||
|
||||
@Override
|
||||
public void open() {
|
||||
|
||||
if (caseManagementPanel != null) {
|
||||
caseManagementPanel.updateView();
|
||||
caseManagementPanel.setCursor(Cursor.getDefaultCursor());
|
||||
}
|
||||
|
||||
if (welcomeWindow != null) {
|
||||
welcomeWindow.refresh();
|
||||
}
|
||||
@ -104,10 +95,7 @@ public final class StartupWindow extends JDialog implements StartupWindowInterfa
|
||||
* user.
|
||||
*/
|
||||
private void addPanelForMode() {
|
||||
UserPreferences.SelectedMode mode = UserPreferences.getMode();
|
||||
|
||||
switch (mode) {
|
||||
case AUTOINGEST:
|
||||
if(UserPreferences.getMode() == UserPreferences.SelectedMode.AUTOINGEST) {
|
||||
this.setTitle(NbBundle.getMessage(StartupWindow.class, "StartupWindow.AutoIngestMode") + " (" + LOCAL_HOST_NAME + ")");
|
||||
setIconImage(ImageUtilities.loadImage("org/sleuthkit/autopsy/experimental/images/frame.gif", false)); //NON-NLS
|
||||
this.addWindowListener(new WindowAdapter() {
|
||||
@ -118,14 +106,7 @@ public final class StartupWindow extends JDialog implements StartupWindowInterfa
|
||||
});
|
||||
setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
|
||||
add(AutoIngestControlPanel.getInstance());
|
||||
break;
|
||||
case REVIEW:
|
||||
this.setTitle(NbBundle.getMessage(StartupWindow.class, "StartupWindow.ReviewMode") + " (" + LOCAL_HOST_NAME + ")");
|
||||
caseManagementPanel = new AutoIngestCasePanel(this);
|
||||
setIconImage(ImageUtilities.loadImage("org/sleuthkit/autopsy/experimental/images/frame.gif", false)); //NON-NLS
|
||||
add(caseManagementPanel);
|
||||
break;
|
||||
default:
|
||||
} else {
|
||||
welcomeWindow = new CueBannerPanel();
|
||||
// add the command to close the window to the button on the Volume Detail Panel
|
||||
welcomeWindow.setCloseButtonActionListener(new ActionListener() {
|
||||
@ -135,7 +116,6 @@ public final class StartupWindow extends JDialog implements StartupWindowInterfa
|
||||
}
|
||||
});
|
||||
add(welcomeWindow);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user