mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-19 19:14:55 +00:00
Merge branch 'develop' of https://github.com/sleuthkit/autopsy into 3198-TagPropertiesUpdate
This commit is contained in:
commit
59d42a84fe
@ -269,6 +269,7 @@
|
|||||||
<package>org.sleuthkit.autopsy.events</package>
|
<package>org.sleuthkit.autopsy.events</package>
|
||||||
<package>org.sleuthkit.autopsy.externalresults</package>
|
<package>org.sleuthkit.autopsy.externalresults</package>
|
||||||
<package>org.sleuthkit.autopsy.filesearch</package>
|
<package>org.sleuthkit.autopsy.filesearch</package>
|
||||||
|
<package>org.sleuthkit.autopsy.guiutils</package>
|
||||||
<package>org.sleuthkit.autopsy.ingest</package>
|
<package>org.sleuthkit.autopsy.ingest</package>
|
||||||
<package>org.sleuthkit.autopsy.keywordsearchservice</package>
|
<package>org.sleuthkit.autopsy.keywordsearchservice</package>
|
||||||
<package>org.sleuthkit.autopsy.menuactions</package>
|
<package>org.sleuthkit.autopsy.menuactions</package>
|
||||||
|
@ -1,29 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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);
|
|
||||||
}
|
|
@ -1,10 +1,10 @@
|
|||||||
CTL_AddImage=Add Data Source...
|
CTL_AddImage=Add Data Source
|
||||||
CTL_AddImageButton=Add Data Source
|
CTL_AddImageButton=Add Data Source
|
||||||
CTL_CaseCloseAct=Close Case
|
CTL_CaseCloseAct=Close Case
|
||||||
CTL_CaseNewAction=New Case...
|
CTL_CaseNewAction=New Case
|
||||||
CTL_CasePropertiesAction=Case Properties...
|
CTL_CasePropertiesAction=Case Properties
|
||||||
CTL_CaseDeleteAction=Delete Case
|
CTL_CaseDeleteAction=Delete Case
|
||||||
CTL_OpenAction=Open Case...
|
CTL_CaseOpenAction=Open Case
|
||||||
Menu/Case/OpenRecentCase=Open Recent Case
|
Menu/Case/OpenRecentCase=Open Recent Case
|
||||||
CTL_CaseDeleteAction=Delete Case
|
CTL_CaseDeleteAction=Delete Case
|
||||||
OpenIDE-Module-Name=Case
|
OpenIDE-Module-Name=Case
|
||||||
@ -210,11 +210,32 @@ CasePropertiesPanel.lbDbName.text=Database Name:
|
|||||||
CasePropertiesPanel.lbDbType.text=Case Type:
|
CasePropertiesPanel.lbDbType.text=Case Type:
|
||||||
CasePropertiesPanel.caseNumberLabel.text=Case Number:
|
CasePropertiesPanel.caseNumberLabel.text=Case Number:
|
||||||
LocalDiskPanel.changeDatabasePathCheckbox.text=Update case to use VHD file upon completion
|
LocalDiskPanel.changeDatabasePathCheckbox.text=Update case to use VHD file upon completion
|
||||||
CueBannerPanel.openAutoIngestCaseButton.text=
|
CueBannerPanel.openMultiUserCaseButton.text=
|
||||||
CueBannerPanel.openExistingCaseButton.text=
|
CueBannerPanel.openExistingCaseButton.text=
|
||||||
CueBannerPanel.openRecentCaseButton.text=
|
CueBannerPanel.openRecentCaseButton.text=
|
||||||
CueBannerPanel.createNewCaseButton.text=
|
CueBannerPanel.createNewCaseButton.text=
|
||||||
CueBannerPanel.createNewCaseLabel.text=Create New Case
|
CueBannerPanel.createNewCaseLabel.text=Create New Case
|
||||||
CueBannerPanel.openRecentCaseLabel.text=Open Recent Case
|
CueBannerPanel.openRecentCaseLabel.text=Open Recent Case
|
||||||
CueBannerPanel.openExistingCaseLabel.text=Open Existing Case
|
CueBannerPanel.openExistingCaseLabel.text=Open Existing Case
|
||||||
CueBannerPanel.openAutoIngestCaseLabel.text=Open Auto Ingest Case
|
CueBannerPanel.openMultiUserCaseLabel.text=Open Multi-User Case
|
||||||
|
ReviewModeCasePanel.cannotOpenCase=Cannot Open Case
|
||||||
|
ReviewModeCasePanel.casePathNotFound=Case path not found
|
||||||
|
ReviewModeCasePanel.caseIsLocked=Single-user case is locked.
|
||||||
|
ReviewModeCasePanel.CaseHeaderText=Case
|
||||||
|
ReviewModeCasePanel.CreatedTimeHeaderText=Created Time
|
||||||
|
ReviewModeCasePanel.StatusIconHeaderText=Status
|
||||||
|
ReviewModeCasePanel.OutputFolderHeaderText=Output Folder
|
||||||
|
ReviewModeCasePanel.LastAccessedTimeHeaderText=Last Accessed Time
|
||||||
|
ReviewModeCasePanel.MetadataFileHeaderText=Metadata File
|
||||||
|
OpenMultiUserCasePanel.jLabel1.text=Recent Cases
|
||||||
|
OpenMultiUserCasePanel.openButton.text=Open
|
||||||
|
OpenMultiUserCasePanel.cancelButton.text=Cancel
|
||||||
|
MultiUserCasesPanel.rbWeeks.text=Weeks
|
||||||
|
MultiUserCasesPanel.rbDays.text=Days
|
||||||
|
MultiUserCasesPanel.bnShowLog.toolTipText=Display case log file for selected case
|
||||||
|
MultiUserCasesPanel.bnShowLog.text=&Show Auto Ingest Case Log
|
||||||
|
MultiUserCasesPanel.rbAllCases.text=Everything
|
||||||
|
MultiUserCasesPanel.bnRefresh.text=&Refresh
|
||||||
|
MultiUserCasesPanel.bnOpen.text=&Open
|
||||||
|
MultiUserCasesPanel.rbGroupLabel.text=Show cases accessed in the last 10:
|
||||||
|
MultiUserCasesPanel.rbMonths.text=Months
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
CTL_AddImageButton=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u3092\u8ffd\u52a0
|
CTL_AddImageButton=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u3092\u8ffd\u52a0
|
||||||
CTL_CaseCloseAct=\u30b1\u30fc\u30b9\u3092\u9589\u3058\u308b
|
CTL_CaseCloseAct=\u30b1\u30fc\u30b9\u3092\u9589\u3058\u308b
|
||||||
CTL_CaseNewAction=\u65b0\u898f\u30b1\u30fc\u30b9...
|
CTL_CaseNewAction=\u65b0\u898f\u30b1\u30fc\u30b9
|
||||||
CTL_CasePropertiesAction=\u30b1\u30fc\u30b9\u30d7\u30ed\u30d1\u30c6\u30a3...
|
CTL_CasePropertiesAction=\u30b1\u30fc\u30b9\u30d7\u30ed\u30d1\u30c6\u30a3
|
||||||
CTL_CaseDeleteAction=\u30b1\u30fc\u30b9\u3092\u524a\u9664
|
CTL_CaseDeleteAction=\u30b1\u30fc\u30b9\u3092\u524a\u9664
|
||||||
CTL_OpenAction=\u30b1\u30fc\u30b9\u3092\u958b\u304f...
|
CTL_CaseOpenAction=\u30b1\u30fc\u30b9\u3092\u958b\u304f
|
||||||
Menu/Case/OpenRecentCase=\u6700\u8fd1\u958b\u3044\u305f\u30b1\u30fc\u30b9\u3092\u958b\u304f
|
Menu/Case/OpenRecentCase=\u6700\u8fd1\u958b\u3044\u305f\u30b1\u30fc\u30b9\u3092\u958b\u304f
|
||||||
CTL_CaseDeleteAction=\u30b1\u30fc\u30b9\u3092\u524a\u9664
|
CTL_CaseDeleteAction=\u30b1\u30fc\u30b9\u3092\u524a\u9664
|
||||||
OpenIDE-Module-Name=\u30b1\u30fc\u30b9
|
OpenIDE-Module-Name=\u30b1\u30fc\u30b9
|
||||||
@ -194,3 +194,6 @@ CueBannerPanel.createNewCaseLabel.text=\u65b0\u898f\u30b1\u30fc\u30b9\u3092\u4f5
|
|||||||
CueBannerPanel.openRecentCaseLabel.text=\u6700\u8fd1\u958b\u3044\u305f\u30b1\u30fc\u30b9\u3092\u958b\u304f
|
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.openExistingCaseLabel.text=\u65e2\u5b58\u30b1\u30fc\u30b9\u3092\u958b\u304f
|
||||||
CueBannerPanel.openAutoIngestCaseLabel.text=\u65e2\u5b58\u30b1\u30fc\u30b9\u3092\u958b\u304f
|
CueBannerPanel.openAutoIngestCaseLabel.text=\u65e2\u5b58\u30b1\u30fc\u30b9\u3092\u958b\u304f
|
||||||
|
OpenMultiUserCasePanel.openButton.text=\u958b\u304f
|
||||||
|
OpenMultiUserCasePanel.cancelButton.text=\u30ad\u30e3\u30f3\u30bb\u30eb
|
||||||
|
OpenMultiUserCasePanel.jLabel1.text=\u6700\u8fd1\u958b\u3044\u305f\u30d5\u30a1\u30a4\u30eb
|
||||||
|
@ -33,7 +33,6 @@ import org.openide.util.HelpCtx;
|
|||||||
import org.openide.util.NbBundle;
|
import org.openide.util.NbBundle;
|
||||||
import org.openide.util.NbBundle.Messages;
|
import org.openide.util.NbBundle.Messages;
|
||||||
import org.openide.util.actions.CallableSystemAction;
|
import org.openide.util.actions.CallableSystemAction;
|
||||||
import org.sleuthkit.autopsy.core.UserPreferences;
|
|
||||||
import org.sleuthkit.autopsy.coreutils.Logger;
|
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -45,13 +44,16 @@ import org.sleuthkit.autopsy.coreutils.Logger;
|
|||||||
final class CaseDeleteAction extends CallableSystemAction {
|
final class CaseDeleteAction extends CallableSystemAction {
|
||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
private static final Logger logger = Logger.getLogger(CaseDeleteAction.class.getName());
|
private static final Logger LOGGER = Logger.getLogger(CaseDeleteAction.class.getName());
|
||||||
|
|
||||||
CaseDeleteAction() {
|
CaseDeleteAction() {
|
||||||
putValue(Action.NAME, NbBundle.getMessage(CaseDeleteAction.class, "CTL_CaseDeleteAction"));
|
putValue(Action.NAME, NbBundle.getMessage(CaseDeleteAction.class, "CTL_CaseDeleteAction"));
|
||||||
this.setEnabled(false);
|
this.setEnabled(false);
|
||||||
Case.addEventTypeSubscriber(EnumSet.of(Case.Events.CURRENT_CASE), (PropertyChangeEvent evt) -> {
|
Case.addEventTypeSubscriber(EnumSet.of(Case.Events.CURRENT_CASE), (PropertyChangeEvent evt) -> {
|
||||||
setEnabled(null != evt.getNewValue() && UserPreferences.getMode() != UserPreferences.SelectedMode.REVIEW);
|
/*
|
||||||
|
* A value of 'null' signifies that there is no case open.
|
||||||
|
*/
|
||||||
|
setEnabled(null != evt.getNewValue());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -93,7 +95,7 @@ final class CaseDeleteAction extends CallableSystemAction {
|
|||||||
try {
|
try {
|
||||||
get();
|
get();
|
||||||
} catch (InterruptedException | ExecutionException ex) {
|
} catch (InterruptedException | ExecutionException ex) {
|
||||||
logger.log(Level.SEVERE, String.format("Failed to delete case %s at %s", caseName, caseDirectory), ex);
|
LOGGER.log(Level.SEVERE, String.format("Failed to delete case %s at %s", caseName, caseDirectory), ex);
|
||||||
JOptionPane.showMessageDialog(
|
JOptionPane.showMessageDialog(
|
||||||
null,
|
null,
|
||||||
Bundle.Case_deleteCaseFailureMessageBox_message(ex.getLocalizedMessage()),
|
Bundle.Case_deleteCaseFailureMessageBox_message(ex.getLocalizedMessage()),
|
||||||
@ -108,7 +110,7 @@ final class CaseDeleteAction extends CallableSystemAction {
|
|||||||
}.execute();
|
}.execute();
|
||||||
}
|
}
|
||||||
} catch (IllegalStateException ex) {
|
} catch (IllegalStateException ex) {
|
||||||
logger.log(Level.SEVERE, "Case delete action called with no current case", ex);
|
LOGGER.log(Level.SEVERE, "Case delete action called with no current case", ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -141,7 +141,7 @@ public final class CaseOpenAction extends CallableSystemAction implements Action
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getName() {
|
public String getName() {
|
||||||
return NbBundle.getMessage(CaseOpenAction.class, "CTL_OpenAction");
|
return NbBundle.getMessage(CaseOpenAction.class, "CTL_CaseOpenAction");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
91
Core/src/org/sleuthkit/autopsy/casemodule/CaseOpenMultiUserAction.java
Executable file
91
Core/src/org/sleuthkit/autopsy/casemodule/CaseOpenMultiUserAction.java
Executable file
@ -0,0 +1,91 @@
|
|||||||
|
/*
|
||||||
|
* 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 java.awt.event.ActionEvent;
|
||||||
|
import java.awt.event.ActionListener;
|
||||||
|
import javax.swing.JDialog;
|
||||||
|
import org.openide.awt.ActionID;
|
||||||
|
import org.openide.awt.ActionReference;
|
||||||
|
import org.openide.awt.ActionRegistration;
|
||||||
|
import org.openide.util.HelpCtx;
|
||||||
|
import org.openide.util.NbBundle;
|
||||||
|
import org.openide.util.actions.CallableSystemAction;
|
||||||
|
import org.openide.windows.WindowManager;
|
||||||
|
import org.sleuthkit.autopsy.core.UserPreferences;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The action associated with the Open Multi-User Case menu item via the
|
||||||
|
* layer.xml file.
|
||||||
|
*
|
||||||
|
* This action should only be invoked in the event dispatch thread (EDT).
|
||||||
|
*/
|
||||||
|
@ActionID(category = "Case", id = "org.sleuthkit.autopsy.casemodule.CaseOpenMultiUserAction")
|
||||||
|
@ActionReference(path = "Menu/Case", position = 102)
|
||||||
|
@ActionRegistration(displayName = "#CTL_CaseOpenMultiUserAction", lazy = false)
|
||||||
|
@NbBundle.Messages({"CTL_CaseOpenMultiUserAction=Open Multi-User Case"})
|
||||||
|
public final class CaseOpenMultiUserAction extends CallableSystemAction implements ActionListener {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
private static JDialog multiUserCaseWindow;
|
||||||
|
|
||||||
|
private static final String DISPLAY_NAME = Bundle.CTL_CaseOpenMultiUserAction();
|
||||||
|
|
||||||
|
public CaseOpenMultiUserAction() {}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isEnabled() {
|
||||||
|
return UserPreferences.getIsMultiUserModeEnabled();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Pops up a case selection panel to allow the user to select a multi-user
|
||||||
|
* case to open.
|
||||||
|
*
|
||||||
|
* @param event The action event.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent event) {
|
||||||
|
if(multiUserCaseWindow == null) {
|
||||||
|
multiUserCaseWindow = MultiUserCasesDialog.getInstance();
|
||||||
|
}
|
||||||
|
multiUserCaseWindow.setLocationRelativeTo(WindowManager.getDefault().getMainWindow());
|
||||||
|
multiUserCaseWindow.setVisible(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void performAction() {
|
||||||
|
actionPerformed(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return DISPLAY_NAME;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public HelpCtx getHelpCtx() {
|
||||||
|
return HelpCtx.DEFAULT_HELP;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean asynchronous() {
|
||||||
|
return false; // run on edt
|
||||||
|
}
|
||||||
|
}
|
@ -28,14 +28,14 @@
|
|||||||
<Component id="createNewCaseButton" 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="openRecentCaseButton" alignment="2" min="-2" pref="70" max="-2" attributes="1"/>
|
||||||
<Component id="openExistingCaseButton" alignment="2" min="-2" 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"/>
|
<Component id="openMultiUserCaseButton" alignment="2" min="-2" max="-2" attributes="1"/>
|
||||||
</Group>
|
</Group>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Component id="createNewCaseLabel" 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="openRecentCaseLabel" alignment="0" min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="openExistingCaseLabel" 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"/>
|
<Component id="openMultiUserCaseLabel" min="-2" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
<Component id="closeButton" alignment="1" min="-2" pref="73" max="-2" attributes="0"/>
|
<Component id="closeButton" alignment="1" min="-2" pref="73" max="-2" attributes="0"/>
|
||||||
@ -66,9 +66,9 @@
|
|||||||
</Group>
|
</Group>
|
||||||
<EmptySpace max="32767" attributes="0"/>
|
<EmptySpace max="32767" attributes="0"/>
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Component id="openAutoIngestCaseButton" alignment="1" min="-2" pref="58" max="-2" attributes="0"/>
|
<Component id="openMultiUserCaseButton" alignment="1" min="-2" pref="58" max="-2" attributes="0"/>
|
||||||
<Group type="102" alignment="1" attributes="0">
|
<Group type="102" alignment="1" attributes="0">
|
||||||
<Component id="openAutoIngestCaseLabel" min="-2" max="-2" attributes="0"/>
|
<Component id="openMultiUserCaseLabel" min="-2" max="-2" attributes="0"/>
|
||||||
<EmptySpace min="-2" pref="20" max="-2" attributes="0"/>
|
<EmptySpace min="-2" pref="20" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
@ -216,13 +216,13 @@
|
|||||||
<Property name="orientation" type="int" value="1"/>
|
<Property name="orientation" type="int" value="1"/>
|
||||||
</Properties>
|
</Properties>
|
||||||
</Component>
|
</Component>
|
||||||
<Component class="javax.swing.JButton" name="openAutoIngestCaseButton">
|
<Component class="javax.swing.JButton" name="openMultiUserCaseButton">
|
||||||
<Properties>
|
<Properties>
|
||||||
<Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
|
<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"/>
|
<Image iconType="3" name="/org/sleuthkit/autopsy/casemodule/btn_icon_open_existing.png"/>
|
||||||
</Property>
|
</Property>
|
||||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
<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}")"/>
|
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="CueBannerPanel.openMultiUserCaseButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
</Property>
|
</Property>
|
||||||
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
|
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
|
||||||
<Connection code="null" type="code"/>
|
<Connection code="null" type="code"/>
|
||||||
@ -237,18 +237,18 @@
|
|||||||
</Property>
|
</Property>
|
||||||
</Properties>
|
</Properties>
|
||||||
<Events>
|
<Events>
|
||||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="openAutoIngestCaseButtonActionPerformed"/>
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="openMultiUserCaseButtonActionPerformed"/>
|
||||||
</Events>
|
</Events>
|
||||||
</Component>
|
</Component>
|
||||||
<Component class="javax.swing.JLabel" name="openAutoIngestCaseLabel">
|
<Component class="javax.swing.JLabel" name="openMultiUserCaseLabel">
|
||||||
<Properties>
|
<Properties>
|
||||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.modules.form.editors2.FontEditor">
|
<Property name="font" type="java.awt.Font" editor="org.netbeans.modules.form.editors2.FontEditor">
|
||||||
<FontInfo relative="true">
|
<FontInfo relative="true">
|
||||||
<Font bold="false" component="openAutoIngestCaseLabel" property="font" relativeSize="false" size="13"/>
|
<Font bold="false" component="openMultiUserCaseLabel" property="font" relativeSize="false" size="13"/>
|
||||||
</FontInfo>
|
</FontInfo>
|
||||||
</Property>
|
</Property>
|
||||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
<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}")"/>
|
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="CueBannerPanel.openMultiUserCaseLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
</Property>
|
</Property>
|
||||||
</Properties>
|
</Properties>
|
||||||
</Component>
|
</Component>
|
||||||
|
@ -26,14 +26,11 @@ import java.awt.event.KeyEvent;
|
|||||||
import javax.swing.ImageIcon;
|
import javax.swing.ImageIcon;
|
||||||
import javax.swing.JComponent;
|
import javax.swing.JComponent;
|
||||||
import javax.swing.JDialog;
|
import javax.swing.JDialog;
|
||||||
import javax.swing.JPanel;
|
|
||||||
import javax.swing.KeyStroke;
|
import javax.swing.KeyStroke;
|
||||||
import org.openide.util.Lookup;
|
import org.openide.util.Lookup;
|
||||||
import org.openide.util.NbBundle;
|
import org.openide.util.NbBundle;
|
||||||
import org.openide.windows.WindowManager;
|
import org.openide.windows.WindowManager;
|
||||||
import org.sleuthkit.autopsy.casemodule.AutoIngestCasePanelInterface;
|
|
||||||
import org.sleuthkit.autopsy.core.UserPreferences;
|
import org.sleuthkit.autopsy.core.UserPreferences;
|
||||||
import org.sleuthkit.autopsy.coreutils.NetworkUtils;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The panel in the default Autopsy startup window.
|
* The panel in the default Autopsy startup window.
|
||||||
@ -41,14 +38,11 @@ import org.sleuthkit.autopsy.coreutils.NetworkUtils;
|
|||||||
public class CueBannerPanel extends javax.swing.JPanel {
|
public class CueBannerPanel extends javax.swing.JPanel {
|
||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
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
|
* This is field is static for the sake of the closeOpenRecentCasesWindow
|
||||||
* method.
|
* method.
|
||||||
*/
|
*/
|
||||||
private static JDialog recentCasesWindow;
|
private static JDialog recentCasesWindow;
|
||||||
private static JDialog autoIngestCasePanelWindow;
|
|
||||||
|
|
||||||
public static void closeOpenRecentCasesWindow() {
|
public static void closeOpenRecentCasesWindow() {
|
||||||
if (null != recentCasesWindow) {
|
if (null != recentCasesWindow) {
|
||||||
@ -56,15 +50,9 @@ public class CueBannerPanel extends javax.swing.JPanel {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void closeAutoIngestCasesWindow() {
|
|
||||||
if (null != autoIngestCasePanelWindow) {
|
|
||||||
autoIngestCasePanelWindow.setVisible(false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public CueBannerPanel() {
|
public CueBannerPanel() {
|
||||||
initComponents();
|
initComponents();
|
||||||
customizeComponents();
|
initRecentCasesWindow();
|
||||||
enableComponents();
|
enableComponents();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -75,7 +63,7 @@ public class CueBannerPanel extends javax.swing.JPanel {
|
|||||||
ImageIcon icon = new ImageIcon(cl.getResource(welcomeLogo));
|
ImageIcon icon = new ImageIcon(cl.getResource(welcomeLogo));
|
||||||
autopsyLogo.setIcon(icon);
|
autopsyLogo.setIcon(icon);
|
||||||
}
|
}
|
||||||
customizeComponents();
|
initRecentCasesWindow();
|
||||||
enableComponents();
|
enableComponents();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -91,11 +79,6 @@ public class CueBannerPanel extends javax.swing.JPanel {
|
|||||||
enableComponents();
|
enableComponents();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void customizeComponents() {
|
|
||||||
initRecentCasesWindow();
|
|
||||||
initAutoIngestCasesWindow();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void initRecentCasesWindow() {
|
private void initRecentCasesWindow() {
|
||||||
recentCasesWindow = new JDialog(
|
recentCasesWindow = new JDialog(
|
||||||
WindowManager.getDefault().getMainWindow(),
|
WindowManager.getDefault().getMainWindow(),
|
||||||
@ -119,38 +102,14 @@ public class CueBannerPanel extends javax.swing.JPanel {
|
|||||||
recentCasesWindow.setResizable(false);
|
recentCasesWindow.setResizable(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initAutoIngestCasesWindow() {
|
|
||||||
autoIngestCasePanelWindow = new JDialog(
|
|
||||||
WindowManager.getDefault().getMainWindow(),
|
|
||||||
REVIEW_MODE_TITLE,
|
|
||||||
Dialog.ModalityType.APPLICATION_MODAL);
|
|
||||||
autoIngestCasePanelWindow.getRootPane().registerKeyboardAction(
|
|
||||||
e -> {
|
|
||||||
autoIngestCasePanelWindow.setVisible(false);
|
|
||||||
},
|
|
||||||
KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_IN_FOCUSED_WINDOW);
|
|
||||||
OpenRecentCasePanel recentCasesPanel = OpenRecentCasePanel.getInstance();
|
|
||||||
recentCasesPanel.setCloseButtonActionListener(new ActionListener() {
|
|
||||||
@Override
|
|
||||||
public void actionPerformed(ActionEvent e) {
|
|
||||||
autoIngestCasePanelWindow.setVisible(false);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
AutoIngestCasePanelInterface autoIngestCasePanel = Lookup.getDefault().lookup(AutoIngestCasePanelInterface.class);
|
|
||||||
autoIngestCasePanel.addWindowStateListener(autoIngestCasePanelWindow);
|
|
||||||
autoIngestCasePanelWindow.add((JPanel)autoIngestCasePanel);
|
|
||||||
autoIngestCasePanelWindow.pack();
|
|
||||||
autoIngestCasePanelWindow.setResizable(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void enableComponents() {
|
private void enableComponents() {
|
||||||
boolean enableOpenRecentCaseButton = (RecentCases.getInstance().getTotalRecentCases() > 0);
|
boolean enableOpenRecentCaseButton = (RecentCases.getInstance().getTotalRecentCases() > 0);
|
||||||
openRecentCaseButton.setEnabled(enableOpenRecentCaseButton);
|
openRecentCaseButton.setEnabled(enableOpenRecentCaseButton);
|
||||||
openRecentCaseLabel.setEnabled(enableOpenRecentCaseButton);
|
openRecentCaseLabel.setEnabled(enableOpenRecentCaseButton);
|
||||||
|
|
||||||
boolean showOpenAutoIngestCaseButton = (UserPreferences.getMode() == UserPreferences.SelectedMode.REVIEW);
|
boolean enableOpenMultiUserCaseButton = UserPreferences.getIsMultiUserModeEnabled();
|
||||||
openAutoIngestCaseButton.setVisible(showOpenAutoIngestCaseButton);
|
openMultiUserCaseButton.setEnabled(enableOpenMultiUserCaseButton);
|
||||||
openAutoIngestCaseLabel.setVisible(showOpenAutoIngestCaseButton);
|
openMultiUserCaseLabel.setEnabled(enableOpenMultiUserCaseButton);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -172,8 +131,8 @@ public class CueBannerPanel extends javax.swing.JPanel {
|
|||||||
openExistingCaseLabel = new javax.swing.JLabel();
|
openExistingCaseLabel = new javax.swing.JLabel();
|
||||||
closeButton = new javax.swing.JButton();
|
closeButton = new javax.swing.JButton();
|
||||||
jSeparator1 = new javax.swing.JSeparator();
|
jSeparator1 = new javax.swing.JSeparator();
|
||||||
openAutoIngestCaseButton = new javax.swing.JButton();
|
openMultiUserCaseButton = new javax.swing.JButton();
|
||||||
openAutoIngestCaseLabel = new javax.swing.JLabel();
|
openMultiUserCaseLabel = new javax.swing.JLabel();
|
||||||
|
|
||||||
autopsyLogo.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/casemodule/welcome_logo.png"))); // NOI18N
|
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
|
autopsyLogo.setText(org.openide.util.NbBundle.getMessage(CueBannerPanel.class, "CueBannerPanel.autopsyLogo.text")); // NOI18N
|
||||||
@ -229,21 +188,21 @@ public class CueBannerPanel extends javax.swing.JPanel {
|
|||||||
|
|
||||||
jSeparator1.setOrientation(javax.swing.SwingConstants.VERTICAL);
|
jSeparator1.setOrientation(javax.swing.SwingConstants.VERTICAL);
|
||||||
|
|
||||||
openAutoIngestCaseButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/casemodule/btn_icon_open_existing.png"))); // NOI18N
|
openMultiUserCaseButton.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
|
openMultiUserCaseButton.setText(org.openide.util.NbBundle.getMessage(CueBannerPanel.class, "CueBannerPanel.openMultiUserCaseButton.text")); // NOI18N
|
||||||
openAutoIngestCaseButton.setBorder(null);
|
openMultiUserCaseButton.setBorder(null);
|
||||||
openAutoIngestCaseButton.setBorderPainted(false);
|
openMultiUserCaseButton.setBorderPainted(false);
|
||||||
openAutoIngestCaseButton.setContentAreaFilled(false);
|
openMultiUserCaseButton.setContentAreaFilled(false);
|
||||||
openAutoIngestCaseButton.setMargin(new java.awt.Insets(1, 1, 1, 1));
|
openMultiUserCaseButton.setMargin(new java.awt.Insets(1, 1, 1, 1));
|
||||||
openAutoIngestCaseButton.setPreferredSize(new java.awt.Dimension(64, 64));
|
openMultiUserCaseButton.setPreferredSize(new java.awt.Dimension(64, 64));
|
||||||
openAutoIngestCaseButton.addActionListener(new java.awt.event.ActionListener() {
|
openMultiUserCaseButton.addActionListener(new java.awt.event.ActionListener() {
|
||||||
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
openAutoIngestCaseButtonActionPerformed(evt);
|
openMultiUserCaseButtonActionPerformed(evt);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
openAutoIngestCaseLabel.setFont(openAutoIngestCaseLabel.getFont().deriveFont(openAutoIngestCaseLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 13));
|
openMultiUserCaseLabel.setFont(openMultiUserCaseLabel.getFont().deriveFont(openMultiUserCaseLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 13));
|
||||||
openAutoIngestCaseLabel.setText(org.openide.util.NbBundle.getMessage(CueBannerPanel.class, "CueBannerPanel.openAutoIngestCaseLabel.text")); // NOI18N
|
openMultiUserCaseLabel.setText(org.openide.util.NbBundle.getMessage(CueBannerPanel.class, "CueBannerPanel.openMultiUserCaseLabel.text")); // NOI18N
|
||||||
|
|
||||||
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
|
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
|
||||||
this.setLayout(layout);
|
this.setLayout(layout);
|
||||||
@ -261,13 +220,13 @@ public class CueBannerPanel extends javax.swing.JPanel {
|
|||||||
.addComponent(createNewCaseButton, 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(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(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))
|
.addComponent(openMultiUserCaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addComponent(createNewCaseLabel)
|
.addComponent(createNewCaseLabel)
|
||||||
.addComponent(openRecentCaseLabel)
|
.addComponent(openRecentCaseLabel)
|
||||||
.addComponent(openExistingCaseLabel)
|
.addComponent(openExistingCaseLabel)
|
||||||
.addComponent(openAutoIngestCaseLabel)))
|
.addComponent(openMultiUserCaseLabel)))
|
||||||
.addComponent(closeButton, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 73, javax.swing.GroupLayout.PREFERRED_SIZE))
|
.addComponent(closeButton, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 73, javax.swing.GroupLayout.PREFERRED_SIZE))
|
||||||
.addContainerGap())
|
.addContainerGap())
|
||||||
);
|
);
|
||||||
@ -290,9 +249,9 @@ public class CueBannerPanel extends javax.swing.JPanel {
|
|||||||
.addComponent(openExistingCaseLabel))
|
.addComponent(openExistingCaseLabel))
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
||||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
.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)
|
.addComponent(openMultiUserCaseButton, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 58, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
|
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
|
||||||
.addComponent(openAutoIngestCaseLabel)
|
.addComponent(openMultiUserCaseLabel)
|
||||||
.addGap(20, 20, 20))))
|
.addGap(20, 20, 20))))
|
||||||
.addComponent(jSeparator1)
|
.addComponent(jSeparator1)
|
||||||
.addComponent(autopsyLogo, javax.swing.GroupLayout.PREFERRED_SIZE, 257, javax.swing.GroupLayout.PREFERRED_SIZE))
|
.addComponent(autopsyLogo, javax.swing.GroupLayout.PREFERRED_SIZE, 257, javax.swing.GroupLayout.PREFERRED_SIZE))
|
||||||
@ -316,10 +275,11 @@ public class CueBannerPanel extends javax.swing.JPanel {
|
|||||||
recentCasesWindow.setVisible(true);
|
recentCasesWindow.setVisible(true);
|
||||||
}//GEN-LAST:event_openRecentCaseButtonActionPerformed
|
}//GEN-LAST:event_openRecentCaseButtonActionPerformed
|
||||||
|
|
||||||
private void openAutoIngestCaseButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_openAutoIngestCaseButtonActionPerformed
|
private void openMultiUserCaseButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_openMultiUserCaseButtonActionPerformed
|
||||||
autoIngestCasePanelWindow.setLocationRelativeTo(WindowManager.getDefault().getMainWindow());
|
MultiUserCasesDialog multiUserCaseWindow = MultiUserCasesDialog.getInstance();
|
||||||
autoIngestCasePanelWindow.setVisible(true);
|
multiUserCaseWindow.setLocationRelativeTo(WindowManager.getDefault().getMainWindow());
|
||||||
}//GEN-LAST:event_openAutoIngestCaseButtonActionPerformed
|
multiUserCaseWindow.setVisible(true);
|
||||||
|
}//GEN-LAST:event_openMultiUserCaseButtonActionPerformed
|
||||||
|
|
||||||
// Variables declaration - do not modify//GEN-BEGIN:variables
|
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||||
private javax.swing.JLabel autopsyLogo;
|
private javax.swing.JLabel autopsyLogo;
|
||||||
@ -327,8 +287,8 @@ public class CueBannerPanel extends javax.swing.JPanel {
|
|||||||
private javax.swing.JButton createNewCaseButton;
|
private javax.swing.JButton createNewCaseButton;
|
||||||
private javax.swing.JLabel createNewCaseLabel;
|
private javax.swing.JLabel createNewCaseLabel;
|
||||||
private javax.swing.JSeparator jSeparator1;
|
private javax.swing.JSeparator jSeparator1;
|
||||||
private javax.swing.JButton openAutoIngestCaseButton;
|
private javax.swing.JButton openMultiUserCaseButton;
|
||||||
private javax.swing.JLabel openAutoIngestCaseLabel;
|
private javax.swing.JLabel openMultiUserCaseLabel;
|
||||||
private javax.swing.JButton openExistingCaseButton;
|
private javax.swing.JButton openExistingCaseButton;
|
||||||
private javax.swing.JLabel openExistingCaseLabel;
|
private javax.swing.JLabel openExistingCaseLabel;
|
||||||
private javax.swing.JButton openRecentCaseButton;
|
private javax.swing.JButton openRecentCaseButton;
|
||||||
|
388
Core/src/org/sleuthkit/autopsy/casemodule/MultiUserCaseManager.java
Executable file
388
Core/src/org/sleuthkit/autopsy/casemodule/MultiUserCaseManager.java
Executable file
@ -0,0 +1,388 @@
|
|||||||
|
/*
|
||||||
|
* 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 java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
import java.nio.file.Paths;
|
||||||
|
import java.nio.file.attribute.BasicFileAttributes;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Comparator;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
import org.sleuthkit.autopsy.coordinationservice.CoordinationService;
|
||||||
|
import org.sleuthkit.autopsy.coordinationservice.CoordinationService.CoordinationServiceException;
|
||||||
|
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handles locating and opening multi-user cases.
|
||||||
|
*/
|
||||||
|
final class MultiUserCaseManager {
|
||||||
|
|
||||||
|
private static final Logger LOGGER = Logger.getLogger(MultiUserCaseManager.class.getName());
|
||||||
|
private static final String LOG_FILE_NAME = "auto_ingest_log.txt";
|
||||||
|
private static MultiUserCaseManager instance;
|
||||||
|
private CoordinationService coordinationService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the multi-user case manager.
|
||||||
|
*
|
||||||
|
* @return The multi-user case manager singleton.
|
||||||
|
*
|
||||||
|
* @throws MultiUserCaseManagerException
|
||||||
|
*/
|
||||||
|
synchronized static MultiUserCaseManager getInstance() throws MultiUserCaseManager.MultiUserCaseManagerException {
|
||||||
|
if (null == instance) {
|
||||||
|
instance = new MultiUserCaseManager();
|
||||||
|
}
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructs an object that handles locating and opening multi-user cases.
|
||||||
|
*
|
||||||
|
* @throws MultiUserCaseManagerException
|
||||||
|
*/
|
||||||
|
private MultiUserCaseManager() throws MultiUserCaseManagerException {
|
||||||
|
try {
|
||||||
|
coordinationService = CoordinationService.getInstance();
|
||||||
|
} catch (CoordinationServiceException ex) {
|
||||||
|
throw new MultiUserCaseManager.MultiUserCaseManagerException("Failed to get the coordination service.", ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets a list of the cases in the top level case folder
|
||||||
|
*
|
||||||
|
* @return List of cases.
|
||||||
|
*
|
||||||
|
* @throws CoordinationServiceException
|
||||||
|
*/
|
||||||
|
List<MultiUserCase> getCases() throws CoordinationServiceException {
|
||||||
|
List<MultiUserCase> cases = new ArrayList<>();
|
||||||
|
List<String> nodeList = coordinationService.getNodeList(CoordinationService.CategoryNode.CASES);
|
||||||
|
for (String node : nodeList) {
|
||||||
|
Path casePath = Paths.get(node);
|
||||||
|
File caseFolder = casePath.toFile();
|
||||||
|
if(caseFolder.exists()) {
|
||||||
|
File[] autFiles = caseFolder.listFiles((dir, name) -> name.toLowerCase().endsWith(".aut"));
|
||||||
|
if(autFiles != null && autFiles.length > 0) {
|
||||||
|
try {
|
||||||
|
CaseMetadata caseMetadata = new CaseMetadata(Paths.get(autFiles[0].getAbsolutePath()));
|
||||||
|
cases.add(new MultiUserCase(casePath, caseMetadata));
|
||||||
|
} catch (CaseMetadata.CaseMetadataException | MultiUserCase.MultiUserCaseException ex) {
|
||||||
|
LOGGER.log(Level.SEVERE, String.format("Error reading case metadata file '%s'.", autFiles[0].getAbsolutePath()), ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return cases;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Opens a multi-user case.
|
||||||
|
*
|
||||||
|
* @param caseMetadataFilePath Path to the case metadata file.
|
||||||
|
*
|
||||||
|
* @throws CaseActionException
|
||||||
|
*/
|
||||||
|
synchronized void openCase(Path caseMetadataFilePath) throws CaseActionException {
|
||||||
|
/*
|
||||||
|
* Open the case.
|
||||||
|
*/
|
||||||
|
Case.openAsCurrentCase(caseMetadataFilePath.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Exception type thrown when there is an error completing a multi-user case
|
||||||
|
* manager operation.
|
||||||
|
*/
|
||||||
|
static final class MultiUserCaseManagerException extends Exception {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructs an instance of the exception type thrown when there is an
|
||||||
|
* error completing a multi-user case manager operation.
|
||||||
|
*
|
||||||
|
* @param message The exception message.
|
||||||
|
*/
|
||||||
|
private MultiUserCaseManagerException(String message) {
|
||||||
|
super(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructs an instance of the exception type thrown when there is an
|
||||||
|
* error completing a multi-user case manager operation.
|
||||||
|
*
|
||||||
|
* @param message The exception message.
|
||||||
|
* @param cause A Throwable cause for the error.
|
||||||
|
*/
|
||||||
|
private MultiUserCaseManagerException(String message, Throwable cause) {
|
||||||
|
super(message, cause);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A representation of a multi-user case.
|
||||||
|
*/
|
||||||
|
static class MultiUserCase implements Comparable<MultiUserCase> {
|
||||||
|
|
||||||
|
private final Path caseDirectoryPath;
|
||||||
|
private final String caseDisplayName;
|
||||||
|
private final String metadataFileName;
|
||||||
|
private final Date createDate;
|
||||||
|
private final Date lastAccessedDate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructs a representation of a multi-user case
|
||||||
|
*
|
||||||
|
* @param caseDirectoryPath The case directory path.
|
||||||
|
* @param caseMetadata The case metadata.
|
||||||
|
*
|
||||||
|
* @throws MultiUserCaseException If no case metadata (.aut)
|
||||||
|
* file is found in the case
|
||||||
|
* directory.
|
||||||
|
*/
|
||||||
|
MultiUserCase(Path caseDirectoryPath, CaseMetadata caseMetadata) throws MultiUserCaseException {
|
||||||
|
this.caseDirectoryPath = caseDirectoryPath;
|
||||||
|
caseDisplayName = caseMetadata.getCaseDisplayName();
|
||||||
|
metadataFileName = caseMetadata.getFilePath().getFileName().toString();
|
||||||
|
BasicFileAttributes fileAttrs = null;
|
||||||
|
try {
|
||||||
|
fileAttrs = Files.readAttributes(Paths.get(caseDirectoryPath.toString(), metadataFileName), BasicFileAttributes.class);
|
||||||
|
} catch (IOException ex) {
|
||||||
|
LOGGER.log(Level.SEVERE, String.format("Error reading file attributes of case metadata file in %s, will use current time for case createDate/lastModfiedDate", caseDirectoryPath), ex);
|
||||||
|
}
|
||||||
|
if (null != fileAttrs) {
|
||||||
|
createDate = new Date(fileAttrs.creationTime().toMillis());
|
||||||
|
lastAccessedDate = new Date(fileAttrs.lastAccessTime().toMillis());
|
||||||
|
} else {
|
||||||
|
createDate = new Date();
|
||||||
|
lastAccessedDate = new Date();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the case directory path.
|
||||||
|
*
|
||||||
|
* @return The case directory path.
|
||||||
|
*/
|
||||||
|
Path getCaseDirectoryPath() {
|
||||||
|
return this.caseDirectoryPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the case display name. This may differ from the name supplied to the
|
||||||
|
* directory or metadata file names if a case has been renamed.
|
||||||
|
*
|
||||||
|
* @return The case display name.
|
||||||
|
*/
|
||||||
|
String getCaseDisplayName() {
|
||||||
|
return this.caseDisplayName;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the creation date for the case, defined as the create time of the
|
||||||
|
* case metadata file.
|
||||||
|
*
|
||||||
|
* @return The case creation date.
|
||||||
|
*/
|
||||||
|
Date getCreationDate() {
|
||||||
|
return this.createDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the last accessed date for the case, defined as the last accessed
|
||||||
|
* time of the case metadata file.
|
||||||
|
*
|
||||||
|
* @return The last accessed date.
|
||||||
|
*/
|
||||||
|
Date getLastAccessedDate() {
|
||||||
|
return this.lastAccessedDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets metadata (.aut) file name.
|
||||||
|
*
|
||||||
|
* @return The metadata file name.
|
||||||
|
*/
|
||||||
|
String getMetadataFileName() {
|
||||||
|
return this.metadataFileName;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the status of this case based on the auto ingest result file in the
|
||||||
|
* case directory.
|
||||||
|
*
|
||||||
|
* @return See CaseStatus enum definition.
|
||||||
|
*/
|
||||||
|
CaseStatus getStatus() {
|
||||||
|
if(caseDirectoryPath.resolve("autoingest.alert").toFile().exists()) {
|
||||||
|
return CaseStatus.ALERT;
|
||||||
|
} else {
|
||||||
|
return CaseStatus.OK;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the case metadata from a case directory path.
|
||||||
|
*
|
||||||
|
* @param caseDirectoryPath The case directory path.
|
||||||
|
*
|
||||||
|
* @return Case metadata.
|
||||||
|
*
|
||||||
|
* @throws CaseMetadata.CaseMetadataException If the CaseMetadata object
|
||||||
|
* cannot be constructed.
|
||||||
|
* @throws MultiUserCaseException If no case metadata (.aut)
|
||||||
|
* file is found in the case
|
||||||
|
* directory.
|
||||||
|
*/
|
||||||
|
private CaseMetadata getCaseMetadataFromCaseDirectoryPath(Path caseDirectoryPath) throws CaseMetadata.CaseMetadataException, MultiUserCaseException {
|
||||||
|
CaseMetadata caseMetadata = null;
|
||||||
|
|
||||||
|
File directory = new File(caseDirectoryPath.toString());
|
||||||
|
if (directory.isDirectory()) {
|
||||||
|
File autFile = null;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Attempt to find an AUT file via a directory scan.
|
||||||
|
*/
|
||||||
|
for (File file : directory.listFiles()) {
|
||||||
|
if (file.getName().toLowerCase().endsWith(CaseMetadata.getFileExtension()) && file.isFile()) {
|
||||||
|
autFile = file;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(autFile == null || !autFile.isFile()) {
|
||||||
|
throw new MultiUserCaseException(String.format("No case metadata (.aut) file found in the case directory '%s'.", caseDirectoryPath.toString()));
|
||||||
|
}
|
||||||
|
|
||||||
|
caseMetadata = new CaseMetadata(Paths.get(autFile.getAbsolutePath()));
|
||||||
|
}
|
||||||
|
|
||||||
|
return caseMetadata;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indicates whether or not some other object is "equal to" this
|
||||||
|
* MultiUserCase object.
|
||||||
|
*
|
||||||
|
* @param other The other object.
|
||||||
|
*
|
||||||
|
* @return True or false.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object other) {
|
||||||
|
if (!(other instanceof MultiUserCase)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (other == this) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return this.caseDirectoryPath.toString().equals(((MultiUserCase) other).caseDirectoryPath.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a hash code value for this MultiUserCase object.
|
||||||
|
*
|
||||||
|
* @return The has code.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
int hash = 7;
|
||||||
|
hash = 71 * hash + Objects.hashCode(this.caseDirectoryPath);
|
||||||
|
hash = 71 * hash + Objects.hashCode(this.createDate);
|
||||||
|
hash = 71 * hash + Objects.hashCode(this.caseDisplayName);
|
||||||
|
return hash;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Compares this MultiUserCase object with another MultiUserCase object
|
||||||
|
* for order.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public int compareTo(MultiUserCase other) {
|
||||||
|
return -this.lastAccessedDate.compareTo(other.getLastAccessedDate());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Comparator for a descending order sort on date created.
|
||||||
|
*/
|
||||||
|
static class LastAccessedDateDescendingComparator implements Comparator<MultiUserCase> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Compares two MultiUserCase objects for order based on last accessed
|
||||||
|
* date (descending).
|
||||||
|
*
|
||||||
|
* @param object The first MultiUserCase object
|
||||||
|
* @param otherObject The second MultiUserCase object.
|
||||||
|
*
|
||||||
|
* @return A negative integer, zero, or a positive integer as the first
|
||||||
|
* argument is less than, equal to, or greater than the second.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public int compare(MultiUserCase object, MultiUserCase otherObject) {
|
||||||
|
return -object.getLastAccessedDate().compareTo(otherObject.getLastAccessedDate());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Exception thrown when there is a problem creating a multi-user case.
|
||||||
|
*/
|
||||||
|
final class MultiUserCaseException extends Exception {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructs an exception to throw when there is a problem creating a
|
||||||
|
* multi-user case.
|
||||||
|
*
|
||||||
|
* @param message The exception message.
|
||||||
|
*/
|
||||||
|
private MultiUserCaseException(String message) {
|
||||||
|
super(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructs an exception to throw when there is a problem creating a
|
||||||
|
* multi-user case.
|
||||||
|
*
|
||||||
|
* @param message The exception message.
|
||||||
|
* @param cause The cause of the exception, if it was an exception.
|
||||||
|
*/
|
||||||
|
private MultiUserCaseException(String message, Throwable cause) {
|
||||||
|
super(message, cause);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static enum CaseStatus {
|
||||||
|
OK,
|
||||||
|
ALERT
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
89
Core/src/org/sleuthkit/autopsy/casemodule/MultiUserCasesDialog.java
Executable file
89
Core/src/org/sleuthkit/autopsy/casemodule/MultiUserCasesDialog.java
Executable file
@ -0,0 +1,89 @@
|
|||||||
|
/*
|
||||||
|
* 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 java.awt.Dialog;
|
||||||
|
import java.awt.event.KeyEvent;
|
||||||
|
import javax.swing.JComponent;
|
||||||
|
import javax.swing.JDialog;
|
||||||
|
import javax.swing.KeyStroke;
|
||||||
|
import org.openide.windows.WindowManager;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class extends a JDialog and maintains the MultiUserCasesPanel.
|
||||||
|
*/
|
||||||
|
final class MultiUserCasesDialog extends JDialog {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
private static final String REVIEW_MODE_TITLE = "Open Multi-User Case";
|
||||||
|
private static MultiUserCasesPanel multiUserCasesPanel;
|
||||||
|
private static MultiUserCasesDialog instance;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the instance of the MultiuserCasesDialog.
|
||||||
|
*
|
||||||
|
* @return The instance.
|
||||||
|
*/
|
||||||
|
static public MultiUserCasesDialog getInstance() {
|
||||||
|
if(instance == null) {
|
||||||
|
instance = new MultiUserCasesDialog();
|
||||||
|
instance.init();
|
||||||
|
}
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructs a MultiUserCasesDialog object.
|
||||||
|
*/
|
||||||
|
private MultiUserCasesDialog() {
|
||||||
|
super(WindowManager.getDefault().getMainWindow(),
|
||||||
|
REVIEW_MODE_TITLE,
|
||||||
|
Dialog.ModalityType.APPLICATION_MODAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializes the multi-user cases panel.
|
||||||
|
*/
|
||||||
|
private void init() {
|
||||||
|
getRootPane().registerKeyboardAction(
|
||||||
|
e -> {
|
||||||
|
setVisible(false);
|
||||||
|
},
|
||||||
|
KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_IN_FOCUSED_WINDOW);
|
||||||
|
|
||||||
|
multiUserCasesPanel = new MultiUserCasesPanel(this);
|
||||||
|
add(multiUserCasesPanel);
|
||||||
|
pack();
|
||||||
|
setResizable(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the dialog visibility. When setting it to visible, the contents will
|
||||||
|
* refresh.
|
||||||
|
*
|
||||||
|
* @param value True or false.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void setVisible(boolean value) {
|
||||||
|
if(value) {
|
||||||
|
multiUserCasesPanel.refresh();
|
||||||
|
}
|
||||||
|
super.setVisible(value);
|
||||||
|
}
|
||||||
|
}
|
@ -45,7 +45,7 @@
|
|||||||
<Component id="bnRefresh" min="-2" max="-2" attributes="0"/>
|
<Component id="bnRefresh" min="-2" max="-2" attributes="0"/>
|
||||||
<EmptySpace min="-2" pref="4" max="-2" attributes="0"/>
|
<EmptySpace min="-2" pref="4" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
<Component id="scrollPaneTable" pref="1007" max="32767" attributes="0"/>
|
<Component id="scrollPaneTable" max="32767" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
@ -82,7 +82,7 @@
|
|||||||
<Component class="javax.swing.JButton" name="bnOpen">
|
<Component class="javax.swing.JButton" name="bnOpen">
|
||||||
<Properties>
|
<Properties>
|
||||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
<ResourceString bundle="org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties" key="AutoIngestCasePanel.bnOpen.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="MultiUserCasesPanel.bnOpen.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
</Property>
|
</Property>
|
||||||
<Property name="enabled" type="boolean" value="false"/>
|
<Property name="enabled" type="boolean" value="false"/>
|
||||||
</Properties>
|
</Properties>
|
||||||
@ -118,7 +118,7 @@
|
|||||||
<Component class="javax.swing.JButton" name="bnRefresh">
|
<Component class="javax.swing.JButton" name="bnRefresh">
|
||||||
<Properties>
|
<Properties>
|
||||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
<ResourceString bundle="org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties" key="AutoIngestCasePanel.bnRefresh.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="MultiUserCasesPanel.bnRefresh.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
</Property>
|
</Property>
|
||||||
</Properties>
|
</Properties>
|
||||||
<Events>
|
<Events>
|
||||||
@ -153,7 +153,7 @@
|
|||||||
</Property>
|
</Property>
|
||||||
<Property name="selected" type="boolean" value="true"/>
|
<Property name="selected" type="boolean" value="true"/>
|
||||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
<ResourceString bundle="org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties" key="AutoIngestCasePanel.rbAllCases.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="MultiUserCasesPanel.rbAllCases.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
</Property>
|
</Property>
|
||||||
</Properties>
|
</Properties>
|
||||||
<Events>
|
<Events>
|
||||||
@ -165,10 +165,10 @@
|
|||||||
<Component class="javax.swing.JButton" name="bnShowLog">
|
<Component class="javax.swing.JButton" name="bnShowLog">
|
||||||
<Properties>
|
<Properties>
|
||||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
<ResourceString bundle="org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties" key="AutoIngestCasePanel.bnShowLog.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="MultiUserCasesPanel.bnShowLog.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
</Property>
|
</Property>
|
||||||
<Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
<Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
<ResourceString bundle="org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties" key="AutoIngestCasePanel.bnShowLog.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="MultiUserCasesPanel.bnShowLog.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
</Property>
|
</Property>
|
||||||
<Property name="enabled" type="boolean" value="false"/>
|
<Property name="enabled" type="boolean" value="false"/>
|
||||||
</Properties>
|
</Properties>
|
||||||
@ -182,7 +182,7 @@
|
|||||||
<ComponentRef name="rbGroupHistoryLength"/>
|
<ComponentRef name="rbGroupHistoryLength"/>
|
||||||
</Property>
|
</Property>
|
||||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
<ResourceString bundle="org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties" key="AutoIngestCasePanel.rbDays.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="MultiUserCasesPanel.rbDays.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
</Property>
|
</Property>
|
||||||
<Property name="name" type="java.lang.String" value="" noResource="true"/>
|
<Property name="name" type="java.lang.String" value="" noResource="true"/>
|
||||||
</Properties>
|
</Properties>
|
||||||
@ -196,7 +196,7 @@
|
|||||||
<ComponentRef name="rbGroupHistoryLength"/>
|
<ComponentRef name="rbGroupHistoryLength"/>
|
||||||
</Property>
|
</Property>
|
||||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
<ResourceString bundle="org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties" key="AutoIngestCasePanel.rbWeeks.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="MultiUserCasesPanel.rbWeeks.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
</Property>
|
</Property>
|
||||||
</Properties>
|
</Properties>
|
||||||
<Events>
|
<Events>
|
||||||
@ -209,7 +209,7 @@
|
|||||||
<ComponentRef name="rbGroupHistoryLength"/>
|
<ComponentRef name="rbGroupHistoryLength"/>
|
||||||
</Property>
|
</Property>
|
||||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
<ResourceString bundle="org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties" key="AutoIngestCasePanel.rbMonths.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="MultiUserCasesPanel.rbMonths.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
</Property>
|
</Property>
|
||||||
</Properties>
|
</Properties>
|
||||||
<Events>
|
<Events>
|
||||||
@ -222,7 +222,7 @@
|
|||||||
<Font name="Tahoma" size="12" style="0"/>
|
<Font name="Tahoma" size="12" style="0"/>
|
||||||
</Property>
|
</Property>
|
||||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
<ResourceString bundle="org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties" key="AutoIngestCasePanel.rbGroupLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="MultiUserCasesPanel.rbGroupLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
</Property>
|
</Property>
|
||||||
</Properties>
|
</Properties>
|
||||||
</Component>
|
</Component>
|
@ -16,52 +16,38 @@
|
|||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
package org.sleuthkit.autopsy.experimental.autoingest;
|
package org.sleuthkit.autopsy.casemodule;
|
||||||
|
|
||||||
import java.awt.Cursor;
|
import java.awt.Cursor;
|
||||||
import java.awt.Desktop;
|
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;
|
import java.io.IOException;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.nio.file.Paths;
|
import java.nio.file.Paths;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.ExecutionException;
|
|
||||||
import java.util.concurrent.ScheduledThreadPoolExecutor;
|
|
||||||
import java.util.concurrent.TimeUnit;
|
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import javax.swing.JDialog;
|
import javax.swing.JDialog;
|
||||||
import javax.swing.JOptionPane;
|
import javax.swing.JOptionPane;
|
||||||
import javax.swing.JPanel;
|
|
||||||
import javax.swing.SwingWorker;
|
|
||||||
import javax.swing.event.ListSelectionEvent;
|
import javax.swing.event.ListSelectionEvent;
|
||||||
import javax.swing.table.DefaultTableModel;
|
import javax.swing.table.DefaultTableModel;
|
||||||
import javax.swing.table.TableColumn;
|
import javax.swing.table.TableColumn;
|
||||||
import org.openide.util.NbBundle;
|
import org.sleuthkit.autopsy.casemodule.MultiUserCaseManager.MultiUserCase;
|
||||||
import org.openide.util.lookup.ServiceProvider;
|
import org.sleuthkit.autopsy.coordinationservice.CoordinationService;
|
||||||
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.Logger;
|
||||||
|
import org.sleuthkit.autopsy.guiutils.LongDateCellRenderer;
|
||||||
import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil;
|
import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil;
|
||||||
import org.sleuthkit.autopsy.casemodule.AutoIngestCasePanelInterface;
|
import org.sleuthkit.autopsy.guiutils.GrayableCellRenderer;
|
||||||
import org.sleuthkit.autopsy.casemodule.CueBannerPanel;
|
import org.sleuthkit.autopsy.guiutils.StatusIconCellRenderer;
|
||||||
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.
|
* A panel that allows a user to open cases created by auto ingest.
|
||||||
*/
|
*/
|
||||||
@ServiceProvider(service = AutoIngestCasePanelInterface.class)
|
final class MultiUserCasesPanel extends javax.swing.JPanel {
|
||||||
public final class AutoIngestCasePanel extends JPanel implements AutoIngestCasePanelInterface {
|
|
||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
private static final Logger logger = Logger.getLogger(AutoIngestCasePanel.class.getName());
|
private static final Logger LOGGER = Logger.getLogger(MultiUserCasesPanel.class.getName());
|
||||||
private static final AutoIngestCase.LastAccessedDateDescendingComparator reverseDateModifiedComparator = new AutoIngestCase.LastAccessedDateDescendingComparator();
|
private static final String LOG_FILE_NAME = "auto_ingest_log.txt";
|
||||||
|
private static final MultiUserCaseManager.MultiUserCase.LastAccessedDateDescendingComparator REVERSE_DATE_MODIFIED_COMPARATOR = new MultiUserCaseManager.MultiUserCase.LastAccessedDateDescendingComparator();
|
||||||
private static final int CASE_COL_MIN_WIDTH = 30;
|
private static final int CASE_COL_MIN_WIDTH = 30;
|
||||||
private static final int CASE_COL_MAX_WIDTH = 2000;
|
private static final int CASE_COL_MAX_WIDTH = 2000;
|
||||||
private static final int CASE_COL_PREFERRED_WIDTH = 300;
|
private static final int CASE_COL_PREFERRED_WIDTH = 300;
|
||||||
@ -71,9 +57,6 @@ public final class AutoIngestCasePanel extends JPanel implements AutoIngestCaseP
|
|||||||
private static final int STATUS_COL_MIN_WIDTH = 55;
|
private static final int STATUS_COL_MIN_WIDTH = 55;
|
||||||
private static final int STATUS_COL_MAX_WIDTH = 250;
|
private static final int STATUS_COL_MAX_WIDTH = 250;
|
||||||
private static final int STATUS_COL_PREFERRED_WIDTH = 60;
|
private static final int STATUS_COL_PREFERRED_WIDTH = 60;
|
||||||
private static final int MILLIS_TO_WAIT_BEFORE_STARTING = 500;
|
|
||||||
private static final int MILLIS_TO_WAIT_BETWEEN_UPDATES = 300000;
|
|
||||||
private ScheduledThreadPoolExecutor casesTableRefreshExecutor;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The JTable table model for the cases table presented by this view is
|
* The JTable table model for the cases table presented by this view is
|
||||||
@ -82,11 +65,12 @@ public final class AutoIngestCasePanel extends JPanel implements AutoIngestCaseP
|
|||||||
* TODO (RC): Consider unifying this stuff in an enum as in
|
* TODO (RC): Consider unifying this stuff in an enum as in
|
||||||
* AutoIngestDashboard to make it less error prone.
|
* AutoIngestDashboard to make it less error prone.
|
||||||
*/
|
*/
|
||||||
private static final String CASE_HEADER = org.openide.util.NbBundle.getMessage(AutoIngestCasePanel.class, "ReviewModeCasePanel.CaseHeaderText");
|
private static final String CASE_HEADER = org.openide.util.NbBundle.getMessage(MultiUserCasesPanel.class, "ReviewModeCasePanel.CaseHeaderText");
|
||||||
private static final String CREATEDTIME_HEADER = org.openide.util.NbBundle.getMessage(AutoIngestCasePanel.class, "ReviewModeCasePanel.CreatedTimeHeaderText");
|
private static final String CREATEDTIME_HEADER = org.openide.util.NbBundle.getMessage(MultiUserCasesPanel.class, "ReviewModeCasePanel.CreatedTimeHeaderText");
|
||||||
private static final String COMPLETEDTIME_HEADER = org.openide.util.NbBundle.getMessage(AutoIngestCasePanel.class, "ReviewModeCasePanel.LastAccessedTimeHeaderText");
|
private static final String COMPLETEDTIME_HEADER = org.openide.util.NbBundle.getMessage(MultiUserCasesPanel.class, "ReviewModeCasePanel.LastAccessedTimeHeaderText");
|
||||||
private static final String STATUS_ICON_HEADER = org.openide.util.NbBundle.getMessage(AutoIngestCasePanel.class, "ReviewModeCasePanel.StatusIconHeaderText");
|
private static final String STATUS_ICON_HEADER = org.openide.util.NbBundle.getMessage(MultiUserCasesPanel.class, "ReviewModeCasePanel.StatusIconHeaderText");
|
||||||
private static final String OUTPUT_FOLDER_HEADER = org.openide.util.NbBundle.getMessage(AutoIngestCasePanel.class, "ReviewModeCasePanel.OutputFolderHeaderText");
|
private static final String OUTPUT_FOLDER_HEADER = org.openide.util.NbBundle.getMessage(MultiUserCasesPanel.class, "ReviewModeCasePanel.OutputFolderHeaderText");
|
||||||
|
private static final String METADATA_FILE_HEADER = org.openide.util.NbBundle.getMessage(MultiUserCasesPanel.class, "ReviewModeCasePanel.MetadataFileHeaderText");
|
||||||
|
|
||||||
enum COLUMN_HEADERS {
|
enum COLUMN_HEADERS {
|
||||||
|
|
||||||
@ -94,51 +78,20 @@ public final class AutoIngestCasePanel extends JPanel implements AutoIngestCaseP
|
|||||||
CREATEDTIME,
|
CREATEDTIME,
|
||||||
COMPLETEDTIME,
|
COMPLETEDTIME,
|
||||||
STATUS_ICON,
|
STATUS_ICON,
|
||||||
OUTPUTFOLDER
|
OUTPUTFOLDER,
|
||||||
|
METADATA_FILE
|
||||||
}
|
}
|
||||||
private final String[] columnNames = {CASE_HEADER, CREATEDTIME_HEADER, COMPLETEDTIME_HEADER, STATUS_ICON_HEADER, OUTPUT_FOLDER_HEADER};
|
private final String[] columnNames = {CASE_HEADER, CREATEDTIME_HEADER, COMPLETEDTIME_HEADER, STATUS_ICON_HEADER, OUTPUT_FOLDER_HEADER, METADATA_FILE_HEADER};
|
||||||
private DefaultTableModel caseTableModel;
|
private DefaultTableModel caseTableModel;
|
||||||
private Path currentlySelectedCase = null;
|
private Path currentlySelectedCase = null;
|
||||||
|
private JDialog parentDialog;
|
||||||
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
|
* Constructs a panel that allows a user to open cases created by automated
|
||||||
* ingest.
|
* ingest.
|
||||||
*
|
|
||||||
* @param parent The parent dialog for this panel.
|
|
||||||
*/
|
*/
|
||||||
public AutoIngestCasePanel(JDialog parent) {
|
MultiUserCasesPanel(JDialog parentDialog) {
|
||||||
init(parent);
|
this.parentDialog = parentDialog;
|
||||||
}
|
|
||||||
|
|
||||||
public void init(JDialog parent) {
|
|
||||||
caseTableModel = new DefaultTableModel(columnNames, 0) {
|
caseTableModel = new DefaultTableModel(columnNames, 0) {
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
@ -146,6 +99,7 @@ public final class AutoIngestCasePanel extends JPanel implements AutoIngestCaseP
|
|||||||
public boolean isCellEditable(int row, int column) {
|
public boolean isCellEditable(int row, int column) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Class<?> getColumnClass(int col) {
|
public Class<?> getColumnClass(int col) {
|
||||||
if (this.getColumnName(col).equals(CREATEDTIME_HEADER) || this.getColumnName(col).equals(COMPLETEDTIME_HEADER)) {
|
if (this.getColumnName(col).equals(CREATEDTIME_HEADER) || this.getColumnName(col).equals(COMPLETEDTIME_HEADER)) {
|
||||||
@ -184,13 +138,14 @@ public final class AutoIngestCasePanel extends JPanel implements AutoIngestCaseP
|
|||||||
theColumn.setWidth(TIME_COL_PREFERRED_WIDTH);
|
theColumn.setWidth(TIME_COL_PREFERRED_WIDTH);
|
||||||
|
|
||||||
theColumn = casesTable.getColumn(STATUS_ICON_HEADER);
|
theColumn = casesTable.getColumn(STATUS_ICON_HEADER);
|
||||||
theColumn.setCellRenderer(new CaseStatusIconCellRenderer());
|
theColumn.setCellRenderer(new StatusIconCellRenderer());
|
||||||
theColumn.setMinWidth(STATUS_COL_MIN_WIDTH);
|
theColumn.setMinWidth(STATUS_COL_MIN_WIDTH);
|
||||||
theColumn.setMaxWidth(STATUS_COL_MAX_WIDTH);
|
theColumn.setMaxWidth(STATUS_COL_MAX_WIDTH);
|
||||||
theColumn.setPreferredWidth(STATUS_COL_PREFERRED_WIDTH);
|
theColumn.setPreferredWidth(STATUS_COL_PREFERRED_WIDTH);
|
||||||
theColumn.setWidth(STATUS_COL_PREFERRED_WIDTH);
|
theColumn.setWidth(STATUS_COL_PREFERRED_WIDTH);
|
||||||
|
|
||||||
casesTable.removeColumn(casesTable.getColumn(OUTPUT_FOLDER_HEADER));
|
casesTable.removeColumn(casesTable.getColumn(OUTPUT_FOLDER_HEADER));
|
||||||
|
casesTable.removeColumn(casesTable.getColumn(METADATA_FILE_HEADER));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Listen for row selection changes and set button state for the current
|
* Listen for row selection changes and set button state for the current
|
||||||
@ -203,75 +158,39 @@ public final class AutoIngestCasePanel extends JPanel implements AutoIngestCaseP
|
|||||||
}
|
}
|
||||||
setButtons();
|
setButtons();
|
||||||
});
|
});
|
||||||
|
|
||||||
/*
|
|
||||||
* Add a window state listener that starts and stops refreshing of the
|
|
||||||
* cases table.
|
|
||||||
*/
|
|
||||||
if (parent != null) {
|
|
||||||
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();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Start doing periodic refreshes of the cases table.
|
|
||||||
*/
|
|
||||||
private void startCasesTableRefreshes() {
|
|
||||||
if (null == casesTableRefreshExecutor) {
|
|
||||||
casesTableRefreshExecutor = new ScheduledThreadPoolExecutor(1);
|
|
||||||
this.casesTableRefreshExecutor.scheduleAtFixedRate(() -> {
|
|
||||||
refreshCasesTable();
|
|
||||||
}, MILLIS_TO_WAIT_BEFORE_STARTING, MILLIS_TO_WAIT_BETWEEN_UPDATES, TimeUnit.MILLISECONDS);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Stop doing periodic refreshes of the cases table.
|
|
||||||
*/
|
|
||||||
private void stopCasesTableRefreshes() {
|
|
||||||
if (null != casesTableRefreshExecutor) {
|
|
||||||
casesTableRefreshExecutor.shutdown();
|
|
||||||
}
|
|
||||||
this.casesTableRefreshExecutor = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Updates the view presented by the panel.
|
|
||||||
*/
|
|
||||||
public void updateView() {
|
|
||||||
Thread thread = new Thread(() -> {
|
|
||||||
refreshCasesTable();
|
|
||||||
});
|
|
||||||
thread.start();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the list of cases known to the review mode cases manager and
|
* Gets the list of cases known to the review mode cases manager and
|
||||||
* refreshes the cases table.
|
* refreshes the cases table.
|
||||||
*/
|
*/
|
||||||
private void refreshCasesTable() {
|
void refresh() {
|
||||||
|
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
|
||||||
|
|
||||||
try {
|
try {
|
||||||
currentlySelectedCase = getSelectedCase();
|
currentlySelectedCase = getSelectedCase();
|
||||||
AutoIngestCaseManager manager = AutoIngestCaseManager.getInstance();
|
MultiUserCaseManager manager = MultiUserCaseManager.getInstance();
|
||||||
List<AutoIngestCase> theModel = manager.getCases();
|
List<MultiUserCase> cases = manager.getCases();
|
||||||
EventQueue.invokeLater(new CaseTableRefreshTask(theModel));
|
cases.sort(REVERSE_DATE_MODIFIED_COMPARATOR);
|
||||||
} catch (Exception ex) {
|
caseTableModel.setRowCount(0);
|
||||||
logger.log(Level.SEVERE, "Unexpected exception in refreshCasesTable", ex); //NON-NLS
|
long now = new Date().getTime();
|
||||||
|
for (MultiUserCase autoIngestCase : cases) {
|
||||||
|
if (passesTimeFilter(now, autoIngestCase.getLastAccessedDate().getTime())) {
|
||||||
|
caseTableModel.addRow(new Object[]{
|
||||||
|
autoIngestCase.getCaseDisplayName(),
|
||||||
|
autoIngestCase.getCreationDate(),
|
||||||
|
autoIngestCase.getLastAccessedDate(),
|
||||||
|
(MultiUserCaseManager.CaseStatus.OK != autoIngestCase.getStatus()) ? StatusIconCellRenderer.Status.WARNING : StatusIconCellRenderer.Status.OK,
|
||||||
|
autoIngestCase.getCaseDirectoryPath().toString(),
|
||||||
|
autoIngestCase.getMetadataFileName()});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
setSelectedCase(currentlySelectedCase);
|
||||||
|
setButtons();
|
||||||
|
} catch (MultiUserCaseManager.MultiUserCaseManagerException | CoordinationService.CoordinationServiceException ex) {
|
||||||
|
LOGGER.log(Level.SEVERE, "Unexpected exception while refreshing the table.", ex); //NON-NLS
|
||||||
|
} finally {
|
||||||
|
setCursor(null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -320,103 +239,78 @@ public final class AutoIngestCasePanel extends JPanel implements AutoIngestCaseP
|
|||||||
* in the cases table.
|
* in the cases table.
|
||||||
*/
|
*/
|
||||||
private void setButtons() {
|
private void setButtons() {
|
||||||
boolean enabled = casesTable.getSelectedRow() >= 0 && casesTable.getSelectedRow() < casesTable.getRowCount();
|
boolean openEnabled = casesTable.getSelectedRow() >= 0 && casesTable.getSelectedRow() < casesTable.getRowCount();
|
||||||
bnOpen.setEnabled(enabled);
|
bnOpen.setEnabled(openEnabled);
|
||||||
bnShowLog.setEnabled(enabled);
|
|
||||||
|
Path pathToLog = getSelectedCaseLogFilePath();
|
||||||
|
boolean showLogEnabled = openEnabled && pathToLog != null && pathToLog.toFile().exists();
|
||||||
|
bnShowLog.setEnabled(showLogEnabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Opens a case.
|
* Retrieves the log file path for the selected case in the cases table.
|
||||||
|
*
|
||||||
|
* @return The case log path.
|
||||||
|
*/
|
||||||
|
private Path getSelectedCaseLogFilePath() {
|
||||||
|
Path retValue = null;
|
||||||
|
|
||||||
|
int selectedRow = casesTable.getSelectedRow();
|
||||||
|
int rowCount = casesTable.getRowCount();
|
||||||
|
if (selectedRow >= 0 && selectedRow < rowCount) {
|
||||||
|
String caseDirectory = (String) caseTableModel.getValueAt(casesTable.convertRowIndexToModel(selectedRow), COLUMN_HEADERS.OUTPUTFOLDER.ordinal());
|
||||||
|
retValue = Paths.get(caseDirectory, LOG_FILE_NAME);
|
||||||
|
}
|
||||||
|
|
||||||
|
return retValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Open a case.
|
||||||
*
|
*
|
||||||
* @param caseMetadataFilePath The path to the case metadata file.
|
* @param caseMetadataFilePath The path to the case metadata file.
|
||||||
*/
|
*/
|
||||||
private void openCase(Path caseMetadataFilePath) {
|
private void openCase(Path caseMetadataFilePath) {
|
||||||
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
|
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
|
||||||
new SwingWorker<Void, Void>() {
|
try {
|
||||||
|
StartupWindowProvider.getInstance().close();
|
||||||
@Override
|
if (parentDialog != null) {
|
||||||
protected Void doInBackground() throws Exception {
|
parentDialog.setVisible(false);
|
||||||
AutoIngestCaseManager.getInstance().openCase(caseMetadataFilePath);
|
|
||||||
stopCasesTableRefreshes();
|
|
||||||
StartupWindowProvider.getInstance().close();
|
|
||||||
CueBannerPanel.closeAutoIngestCasesWindow();
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
MultiUserCaseManager.getInstance().openCase(caseMetadataFilePath);
|
||||||
@Override
|
} catch (CaseActionException | MultiUserCaseManager.MultiUserCaseManagerException ex) {
|
||||||
protected void done() {
|
if (null != ex.getCause() && !(ex.getCause() instanceof CaseActionCancelledException)) {
|
||||||
try {
|
LOGGER.log(Level.SEVERE, String.format("Error opening case with metadata file path %s", caseMetadataFilePath), ex); //NON-NLS
|
||||||
get();
|
MessageNotifyUtil.Message.error(ex.getCause().getLocalizedMessage());
|
||||||
} catch (InterruptedException | ExecutionException ex) {
|
|
||||||
if (null != ex.getCause() && !(ex.getCause() instanceof CaseActionCancelledException)) {
|
|
||||||
logger.log(Level.SEVERE, String.format("Error opening case with metadata file path %s", caseMetadataFilePath), ex); //NON-NLS
|
|
||||||
MessageNotifyUtil.Message.error(ex.getCause().getLocalizedMessage());
|
|
||||||
}
|
|
||||||
StartupWindowProvider.getInstance().open();
|
|
||||||
} finally {
|
|
||||||
setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}.execute();
|
StartupWindowProvider.getInstance().open();
|
||||||
|
} finally {
|
||||||
|
setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A task that refreshes the cases table using a list of auto ingest cases.
|
* Indicates whether or not a time satisfies a time filter defined by this
|
||||||
|
* panel's time filter radio buttons.
|
||||||
|
*
|
||||||
|
* @param currentTime The current date and time in milliseconds from the
|
||||||
|
* Unix epoch.
|
||||||
|
* @param inputTime The date and time to be tested as milliseconds from
|
||||||
|
* the Unix epoch.
|
||||||
*/
|
*/
|
||||||
private class CaseTableRefreshTask implements Runnable {
|
private boolean passesTimeFilter(long currentTime, long inputTime) {
|
||||||
|
long numberOfUnits = 10;
|
||||||
private final List<AutoIngestCase> cases;
|
long multiplier = 1;
|
||||||
|
if (rbAllCases.isSelected()) {
|
||||||
CaseTableRefreshTask(List<AutoIngestCase> cases) {
|
return true;
|
||||||
setButtons();
|
} else if (rbMonths.isSelected()) {
|
||||||
this.cases = cases;
|
multiplier = 31;
|
||||||
|
} else if (rbWeeks.isSelected()) {
|
||||||
|
multiplier = 7;
|
||||||
|
} else if (rbDays.isSelected()) {
|
||||||
|
multiplier = 1;
|
||||||
}
|
}
|
||||||
|
return ((currentTime - inputTime) / (1000 * 60 * 60 * 24)) < (numberOfUnits * multiplier);
|
||||||
/**
|
|
||||||
* @inheritDoc
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
cases.sort(reverseDateModifiedComparator);
|
|
||||||
caseTableModel.setRowCount(0);
|
|
||||||
long now = new Date().getTime();
|
|
||||||
for (AutoIngestCase autoIngestCase : cases) {
|
|
||||||
if (passesTimeFilter(now, autoIngestCase.getLastAccessedDate().getTime())) {
|
|
||||||
caseTableModel.addRow(new Object[]{
|
|
||||||
autoIngestCase.getCaseName(),
|
|
||||||
autoIngestCase.getCreationDate(),
|
|
||||||
autoIngestCase.getLastAccessedDate(),
|
|
||||||
(AutoIngestCase.CaseStatus.OK != autoIngestCase.getStatus()),
|
|
||||||
autoIngestCase.getCaseDirectoryPath().toString()});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
setSelectedCase(currentlySelectedCase);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Indicates whether or not a time satisfies a time filter defined by
|
|
||||||
* this panel's time filter radio buttons.
|
|
||||||
*
|
|
||||||
* @param currentTime The current date and time in milliseconds from the
|
|
||||||
* Unix epoch.
|
|
||||||
* @param inputTime The date and time to be tested as milliseconds
|
|
||||||
* from the Unix epoch.
|
|
||||||
*/
|
|
||||||
private boolean passesTimeFilter(long currentTime, long inputTime) {
|
|
||||||
long numberOfUnits = 10;
|
|
||||||
long multiplier = 1;
|
|
||||||
if (rbAllCases.isSelected()) {
|
|
||||||
return true;
|
|
||||||
} else if (rbMonths.isSelected()) {
|
|
||||||
multiplier = 31;
|
|
||||||
} else if (rbWeeks.isSelected()) {
|
|
||||||
multiplier = 7;
|
|
||||||
} else if (rbDays.isSelected()) {
|
|
||||||
multiplier = 1;
|
|
||||||
}
|
|
||||||
return ((currentTime - inputTime) / (1000 * 60 * 60 * 24)) < (numberOfUnits * multiplier);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -443,7 +337,7 @@ public final class AutoIngestCasePanel extends JPanel implements AutoIngestCaseP
|
|||||||
|
|
||||||
setName("Completed Cases"); // NOI18N
|
setName("Completed Cases"); // NOI18N
|
||||||
|
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(bnOpen, org.openide.util.NbBundle.getMessage(AutoIngestCasePanel.class, "AutoIngestCasePanel.bnOpen.text")); // NOI18N
|
org.openide.awt.Mnemonics.setLocalizedText(bnOpen, org.openide.util.NbBundle.getMessage(MultiUserCasesPanel.class, "MultiUserCasesPanel.bnOpen.text")); // NOI18N
|
||||||
bnOpen.setEnabled(false);
|
bnOpen.setEnabled(false);
|
||||||
bnOpen.addActionListener(new java.awt.event.ActionListener() {
|
bnOpen.addActionListener(new java.awt.event.ActionListener() {
|
||||||
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
@ -463,7 +357,7 @@ public final class AutoIngestCasePanel extends JPanel implements AutoIngestCaseP
|
|||||||
});
|
});
|
||||||
scrollPaneTable.setViewportView(casesTable);
|
scrollPaneTable.setViewportView(casesTable);
|
||||||
|
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(bnRefresh, org.openide.util.NbBundle.getMessage(AutoIngestCasePanel.class, "AutoIngestCasePanel.bnRefresh.text")); // NOI18N
|
org.openide.awt.Mnemonics.setLocalizedText(bnRefresh, org.openide.util.NbBundle.getMessage(MultiUserCasesPanel.class, "MultiUserCasesPanel.bnRefresh.text")); // NOI18N
|
||||||
bnRefresh.addActionListener(new java.awt.event.ActionListener() {
|
bnRefresh.addActionListener(new java.awt.event.ActionListener() {
|
||||||
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
bnRefreshActionPerformed(evt);
|
bnRefreshActionPerformed(evt);
|
||||||
@ -472,7 +366,7 @@ public final class AutoIngestCasePanel extends JPanel implements AutoIngestCaseP
|
|||||||
|
|
||||||
rbGroupHistoryLength.add(rbAllCases);
|
rbGroupHistoryLength.add(rbAllCases);
|
||||||
rbAllCases.setSelected(true);
|
rbAllCases.setSelected(true);
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(rbAllCases, org.openide.util.NbBundle.getMessage(AutoIngestCasePanel.class, "AutoIngestCasePanel.rbAllCases.text")); // NOI18N
|
org.openide.awt.Mnemonics.setLocalizedText(rbAllCases, org.openide.util.NbBundle.getMessage(MultiUserCasesPanel.class, "MultiUserCasesPanel.rbAllCases.text")); // NOI18N
|
||||||
rbAllCases.addItemListener(new java.awt.event.ItemListener() {
|
rbAllCases.addItemListener(new java.awt.event.ItemListener() {
|
||||||
public void itemStateChanged(java.awt.event.ItemEvent evt) {
|
public void itemStateChanged(java.awt.event.ItemEvent evt) {
|
||||||
rbAllCasesItemStateChanged(evt);
|
rbAllCasesItemStateChanged(evt);
|
||||||
@ -494,8 +388,8 @@ public final class AutoIngestCasePanel extends JPanel implements AutoIngestCaseP
|
|||||||
.addComponent(rbAllCases))
|
.addComponent(rbAllCases))
|
||||||
);
|
);
|
||||||
|
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(bnShowLog, org.openide.util.NbBundle.getMessage(AutoIngestCasePanel.class, "AutoIngestCasePanel.bnShowLog.text")); // NOI18N
|
org.openide.awt.Mnemonics.setLocalizedText(bnShowLog, org.openide.util.NbBundle.getMessage(MultiUserCasesPanel.class, "MultiUserCasesPanel.bnShowLog.text")); // NOI18N
|
||||||
bnShowLog.setToolTipText(org.openide.util.NbBundle.getMessage(AutoIngestCasePanel.class, "AutoIngestCasePanel.bnShowLog.toolTipText")); // NOI18N
|
bnShowLog.setToolTipText(org.openide.util.NbBundle.getMessage(MultiUserCasesPanel.class, "MultiUserCasesPanel.bnShowLog.toolTipText")); // NOI18N
|
||||||
bnShowLog.setEnabled(false);
|
bnShowLog.setEnabled(false);
|
||||||
bnShowLog.addActionListener(new java.awt.event.ActionListener() {
|
bnShowLog.addActionListener(new java.awt.event.ActionListener() {
|
||||||
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
@ -504,7 +398,7 @@ public final class AutoIngestCasePanel extends JPanel implements AutoIngestCaseP
|
|||||||
});
|
});
|
||||||
|
|
||||||
rbGroupHistoryLength.add(rbDays);
|
rbGroupHistoryLength.add(rbDays);
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(rbDays, org.openide.util.NbBundle.getMessage(AutoIngestCasePanel.class, "AutoIngestCasePanel.rbDays.text")); // NOI18N
|
org.openide.awt.Mnemonics.setLocalizedText(rbDays, org.openide.util.NbBundle.getMessage(MultiUserCasesPanel.class, "MultiUserCasesPanel.rbDays.text")); // NOI18N
|
||||||
rbDays.setName(""); // NOI18N
|
rbDays.setName(""); // NOI18N
|
||||||
rbDays.addItemListener(new java.awt.event.ItemListener() {
|
rbDays.addItemListener(new java.awt.event.ItemListener() {
|
||||||
public void itemStateChanged(java.awt.event.ItemEvent evt) {
|
public void itemStateChanged(java.awt.event.ItemEvent evt) {
|
||||||
@ -513,7 +407,7 @@ public final class AutoIngestCasePanel extends JPanel implements AutoIngestCaseP
|
|||||||
});
|
});
|
||||||
|
|
||||||
rbGroupHistoryLength.add(rbWeeks);
|
rbGroupHistoryLength.add(rbWeeks);
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(rbWeeks, org.openide.util.NbBundle.getMessage(AutoIngestCasePanel.class, "AutoIngestCasePanel.rbWeeks.text")); // NOI18N
|
org.openide.awt.Mnemonics.setLocalizedText(rbWeeks, org.openide.util.NbBundle.getMessage(MultiUserCasesPanel.class, "MultiUserCasesPanel.rbWeeks.text")); // NOI18N
|
||||||
rbWeeks.addItemListener(new java.awt.event.ItemListener() {
|
rbWeeks.addItemListener(new java.awt.event.ItemListener() {
|
||||||
public void itemStateChanged(java.awt.event.ItemEvent evt) {
|
public void itemStateChanged(java.awt.event.ItemEvent evt) {
|
||||||
rbWeeksItemStateChanged(evt);
|
rbWeeksItemStateChanged(evt);
|
||||||
@ -521,7 +415,7 @@ public final class AutoIngestCasePanel extends JPanel implements AutoIngestCaseP
|
|||||||
});
|
});
|
||||||
|
|
||||||
rbGroupHistoryLength.add(rbMonths);
|
rbGroupHistoryLength.add(rbMonths);
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(rbMonths, org.openide.util.NbBundle.getMessage(AutoIngestCasePanel.class, "AutoIngestCasePanel.rbMonths.text")); // NOI18N
|
org.openide.awt.Mnemonics.setLocalizedText(rbMonths, org.openide.util.NbBundle.getMessage(MultiUserCasesPanel.class, "MultiUserCasesPanel.rbMonths.text")); // NOI18N
|
||||||
rbMonths.addItemListener(new java.awt.event.ItemListener() {
|
rbMonths.addItemListener(new java.awt.event.ItemListener() {
|
||||||
public void itemStateChanged(java.awt.event.ItemEvent evt) {
|
public void itemStateChanged(java.awt.event.ItemEvent evt) {
|
||||||
rbMonthsItemStateChanged(evt);
|
rbMonthsItemStateChanged(evt);
|
||||||
@ -529,7 +423,7 @@ public final class AutoIngestCasePanel extends JPanel implements AutoIngestCaseP
|
|||||||
});
|
});
|
||||||
|
|
||||||
rbGroupLabel.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
|
rbGroupLabel.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(rbGroupLabel, org.openide.util.NbBundle.getMessage(AutoIngestCasePanel.class, "AutoIngestCasePanel.rbGroupLabel.text")); // NOI18N
|
org.openide.awt.Mnemonics.setLocalizedText(rbGroupLabel, org.openide.util.NbBundle.getMessage(MultiUserCasesPanel.class, "MultiUserCasesPanel.rbGroupLabel.text")); // NOI18N
|
||||||
|
|
||||||
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
|
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
|
||||||
this.setLayout(layout);
|
this.setLayout(layout);
|
||||||
@ -556,7 +450,7 @@ public final class AutoIngestCasePanel extends JPanel implements AutoIngestCaseP
|
|||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
||||||
.addComponent(bnRefresh)
|
.addComponent(bnRefresh)
|
||||||
.addGap(4, 4, 4))
|
.addGap(4, 4, 4))
|
||||||
.addComponent(scrollPaneTable, javax.swing.GroupLayout.DEFAULT_SIZE, 1007, Short.MAX_VALUE))
|
.addComponent(scrollPaneTable))
|
||||||
.addContainerGap())
|
.addContainerGap())
|
||||||
);
|
);
|
||||||
layout.setVerticalGroup(
|
layout.setVerticalGroup(
|
||||||
@ -588,10 +482,12 @@ public final class AutoIngestCasePanel extends JPanel implements AutoIngestCaseP
|
|||||||
*/
|
*/
|
||||||
private void bnOpenActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bnOpenActionPerformed
|
private void bnOpenActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bnOpenActionPerformed
|
||||||
int modelRow = casesTable.convertRowIndexToModel(casesTable.getSelectedRow());
|
int modelRow = casesTable.convertRowIndexToModel(casesTable.getSelectedRow());
|
||||||
Path caseMetadataFilePath = Paths.get((String) caseTableModel.getValueAt(modelRow,
|
String caseDirectory = (String) caseTableModel.getValueAt(modelRow, COLUMN_HEADERS.OUTPUTFOLDER.ordinal());
|
||||||
COLUMN_HEADERS.OUTPUTFOLDER.ordinal()),
|
Path caseMetadataFilePath = Paths.get(caseDirectory, (String) caseTableModel.getValueAt(modelRow, COLUMN_HEADERS.METADATA_FILE.ordinal()));
|
||||||
caseTableModel.getValueAt(modelRow, COLUMN_HEADERS.CASE.ordinal()) + CaseMetadata.getFileExtension());
|
|
||||||
openCase(caseMetadataFilePath);
|
new Thread(() -> {
|
||||||
|
openCase(caseMetadataFilePath);
|
||||||
|
}).start();
|
||||||
}//GEN-LAST:event_bnOpenActionPerformed
|
}//GEN-LAST:event_bnOpenActionPerformed
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -599,53 +495,50 @@ public final class AutoIngestCasePanel extends JPanel implements AutoIngestCaseP
|
|||||||
*
|
*
|
||||||
* @param evt -- The event that caused this to be called
|
* @param evt -- The event that caused this to be called
|
||||||
*/
|
*/
|
||||||
private void bnRefreshActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_bnRefreshActionPerformed
|
private void bnRefreshActionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
{//GEN-HEADEREND:event_bnRefreshActionPerformed
|
refresh();
|
||||||
updateView();
|
}
|
||||||
}//GEN-LAST:event_bnRefreshActionPerformed
|
|
||||||
|
|
||||||
private void rbDaysItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_rbDaysItemStateChanged
|
private void rbDaysItemStateChanged(java.awt.event.ItemEvent evt) {
|
||||||
if (rbDays.isSelected()) {
|
if (rbDays.isSelected()) {
|
||||||
updateView();
|
refresh();
|
||||||
}
|
}
|
||||||
}//GEN-LAST:event_rbDaysItemStateChanged
|
}
|
||||||
|
|
||||||
private void rbAllCasesItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_rbAllCasesItemStateChanged
|
private void rbAllCasesItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_rbAllCasesItemStateChanged
|
||||||
if (rbAllCases.isSelected()) {
|
if (rbAllCases.isSelected()) {
|
||||||
updateView();
|
refresh();
|
||||||
}
|
}
|
||||||
}//GEN-LAST:event_rbAllCasesItemStateChanged
|
}//GEN-LAST:event_rbAllCasesItemStateChanged
|
||||||
|
|
||||||
private void rbMonthsItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_rbMonthsItemStateChanged
|
private void rbMonthsItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_rbMonthsItemStateChanged
|
||||||
if (rbMonths.isSelected()) {
|
if (rbMonths.isSelected()) {
|
||||||
updateView();
|
refresh();
|
||||||
}
|
}
|
||||||
}//GEN-LAST:event_rbMonthsItemStateChanged
|
}//GEN-LAST:event_rbMonthsItemStateChanged
|
||||||
|
|
||||||
private void rbWeeksItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_rbWeeksItemStateChanged
|
private void rbWeeksItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_rbWeeksItemStateChanged
|
||||||
if (rbWeeks.isSelected()) {
|
if (rbWeeks.isSelected()) {
|
||||||
updateView();
|
refresh();
|
||||||
}
|
}
|
||||||
}//GEN-LAST:event_rbWeeksItemStateChanged
|
}//GEN-LAST:event_rbWeeksItemStateChanged
|
||||||
|
|
||||||
private void bnShowLogActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bnShowLogActionPerformed
|
private void bnShowLogActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bnShowLogActionPerformed
|
||||||
int selectedRow = casesTable.convertRowIndexToModel(casesTable.getSelectedRow());
|
Path pathToLog = getSelectedCaseLogFilePath();
|
||||||
int rowCount = casesTable.getRowCount();
|
if (pathToLog != null) {
|
||||||
if (selectedRow >= 0 && selectedRow < rowCount) {
|
|
||||||
String thePath = (String) caseTableModel.getValueAt(selectedRow, COLUMN_HEADERS.OUTPUTFOLDER.ordinal());
|
|
||||||
Path pathToLog = AutoIngestJobLogger.getLogPath(Paths.get(thePath));
|
|
||||||
try {
|
try {
|
||||||
if (pathToLog.toFile().exists()) {
|
if (pathToLog.toFile().exists()) {
|
||||||
Desktop.getDesktop().edit(pathToLog.toFile());
|
Desktop.getDesktop().edit(pathToLog.toFile());
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
JOptionPane.showMessageDialog(this, org.openide.util.NbBundle.getMessage(AutoIngestCasePanel.class, "DisplayLogDialog.cannotFindLog"),
|
JOptionPane.showMessageDialog(this, org.openide.util.NbBundle.getMessage(MultiUserCasesPanel.class, "DisplayLogDialog.cannotFindLog"),
|
||||||
org.openide.util.NbBundle.getMessage(AutoIngestCasePanel.class, "DisplayLogDialog.unableToShowLogFile"), JOptionPane.ERROR_MESSAGE);
|
org.openide.util.NbBundle.getMessage(MultiUserCasesPanel.class, "DisplayLogDialog.unableToShowLogFile"), JOptionPane.ERROR_MESSAGE);
|
||||||
}
|
}
|
||||||
} catch (IOException ex) {
|
} catch (IOException ex) {
|
||||||
logger.log(Level.SEVERE, String.format("Error attempting to open case auto ingest log file %s", pathToLog), ex);
|
LOGGER.log(Level.SEVERE, String.format("Error attempting to open case auto ingest log file %s", pathToLog), ex);
|
||||||
JOptionPane.showMessageDialog(this,
|
JOptionPane.showMessageDialog(this,
|
||||||
org.openide.util.NbBundle.getMessage(AutoIngestCasePanel.class, "DisplayLogDialog.cannotOpenLog"),
|
org.openide.util.NbBundle.getMessage(MultiUserCasesPanel.class, "DisplayLogDialog.cannotOpenLog"),
|
||||||
org.openide.util.NbBundle.getMessage(AutoIngestCasePanel.class, "DisplayLogDialog.unableToShowLogFile"),
|
org.openide.util.NbBundle.getMessage(MultiUserCasesPanel.class, "DisplayLogDialog.unableToShowLogFile"),
|
||||||
JOptionPane.PLAIN_MESSAGE);
|
JOptionPane.PLAIN_MESSAGE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -654,9 +547,8 @@ public final class AutoIngestCasePanel extends JPanel implements AutoIngestCaseP
|
|||||||
private void casesTableMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_casesTableMouseClicked
|
private void casesTableMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_casesTableMouseClicked
|
||||||
if (evt.getClickCount() == 2) {
|
if (evt.getClickCount() == 2) {
|
||||||
int modelRow = casesTable.convertRowIndexToModel(casesTable.getSelectedRow());
|
int modelRow = casesTable.convertRowIndexToModel(casesTable.getSelectedRow());
|
||||||
Path caseMetadataFilePath = Paths.get((String) caseTableModel.getValueAt(modelRow,
|
String caseDirectory = (String) caseTableModel.getValueAt(modelRow, COLUMN_HEADERS.OUTPUTFOLDER.ordinal());
|
||||||
COLUMN_HEADERS.OUTPUTFOLDER.ordinal()),
|
Path caseMetadataFilePath = Paths.get(caseDirectory, (String) caseTableModel.getValueAt(modelRow, COLUMN_HEADERS.METADATA_FILE.ordinal()));
|
||||||
caseTableModel.getValueAt(modelRow, COLUMN_HEADERS.CASE.ordinal()) + CaseMetadata.getFileExtension());
|
|
||||||
openCase(caseMetadataFilePath);
|
openCase(caseMetadataFilePath);
|
||||||
}
|
}
|
||||||
}//GEN-LAST:event_casesTableMouseClicked
|
}//GEN-LAST:event_casesTableMouseClicked
|
@ -29,15 +29,15 @@ import java.util.logging.Handler;
|
|||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import javafx.application.Platform;
|
import javafx.application.Platform;
|
||||||
import javafx.embed.swing.JFXPanel;
|
import javafx.embed.swing.JFXPanel;
|
||||||
import javax.swing.SwingWorker;
|
|
||||||
import org.openide.LifecycleManager;
|
|
||||||
import org.openide.modules.ModuleInstall;
|
import org.openide.modules.ModuleInstall;
|
||||||
import org.openide.util.NbBundle;
|
import org.openide.util.NbBundle;
|
||||||
import org.openide.windows.WindowManager;
|
import org.openide.windows.WindowManager;
|
||||||
import org.sleuthkit.autopsy.actions.IngestRunningCheck;
|
import org.sleuthkit.autopsy.actions.IngestRunningCheck;
|
||||||
import org.sleuthkit.autopsy.casemodule.Case;
|
import org.sleuthkit.autopsy.casemodule.Case;
|
||||||
|
import static org.sleuthkit.autopsy.core.UserPreferences.SETTINGS_PROPERTIES;
|
||||||
import org.sleuthkit.autopsy.coreutils.Logger;
|
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||||
import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil;
|
import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil;
|
||||||
|
import org.sleuthkit.autopsy.coreutils.ModuleSettings;
|
||||||
import org.sleuthkit.autopsy.coreutils.PlatformUtil;
|
import org.sleuthkit.autopsy.coreutils.PlatformUtil;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -207,6 +207,9 @@ public class Installer extends ModuleInstall {
|
|||||||
System.setProperty("sun.java2d.dpiaware", "false");
|
System.setProperty("sun.java2d.dpiaware", "false");
|
||||||
System.setProperty("prism.allowhidpi", "false");
|
System.setProperty("prism.allowhidpi", "false");
|
||||||
|
|
||||||
|
// Update existing configuration in case of unsupported settings
|
||||||
|
updateConfig();
|
||||||
|
|
||||||
packageInstallers = new ArrayList<>();
|
packageInstallers = new ArrayList<>();
|
||||||
packageInstallers.add(org.sleuthkit.autopsy.coreutils.Installer.getDefault());
|
packageInstallers.add(org.sleuthkit.autopsy.coreutils.Installer.getDefault());
|
||||||
packageInstallers.add(org.sleuthkit.autopsy.corecomponents.Installer.getDefault());
|
packageInstallers.add(org.sleuthkit.autopsy.corecomponents.Installer.getDefault());
|
||||||
@ -215,6 +218,21 @@ public class Installer extends ModuleInstall {
|
|||||||
packageInstallers.add(org.sleuthkit.autopsy.centralrepository.eventlisteners.Installer.getDefault());
|
packageInstallers.add(org.sleuthkit.autopsy.centralrepository.eventlisteners.Installer.getDefault());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If the mode in the configuration file is 'REVIEW' (2, now invalid), this
|
||||||
|
* method will set it to 'STANDALONE' (0) and disable auto ingest.
|
||||||
|
*/
|
||||||
|
private void updateConfig() {
|
||||||
|
String mode = ModuleSettings.getConfigSetting(SETTINGS_PROPERTIES, "AutopsyMode");
|
||||||
|
if(mode != null) {
|
||||||
|
int ordinal = Integer.parseInt(mode);
|
||||||
|
if(ordinal > 1) {
|
||||||
|
UserPreferences.setMode(UserPreferences.SelectedMode.STANDALONE);
|
||||||
|
ModuleSettings.setConfigSetting(UserPreferences.SETTINGS_PROPERTIES, "JoinAutoModeCluster", Boolean.toString(false));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if JavaFx initialized
|
* Check if JavaFx initialized
|
||||||
*
|
*
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Autopsy Forensic Browser
|
* Autopsy Forensic Browser
|
||||||
*
|
*
|
||||||
* Copyright 2014 Basis Technology Corp.
|
* Copyright 2014-2017 Basis Technology Corp.
|
||||||
* Contact: carrier <at> sleuthkit <dot> org
|
* Contact: carrier <at> sleuthkit <dot> org
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
@ -23,7 +23,6 @@ import java.util.prefs.BackingStoreException;
|
|||||||
import org.sleuthkit.autopsy.events.MessageServiceConnectionInfo;
|
import org.sleuthkit.autopsy.events.MessageServiceConnectionInfo;
|
||||||
import java.util.prefs.PreferenceChangeListener;
|
import java.util.prefs.PreferenceChangeListener;
|
||||||
import java.util.prefs.Preferences;
|
import java.util.prefs.Preferences;
|
||||||
import org.openide.util.Exceptions;
|
|
||||||
import org.openide.util.NbPreferences;
|
import org.openide.util.NbPreferences;
|
||||||
import org.sleuthkit.autopsy.coreutils.ModuleSettings;
|
import org.sleuthkit.autopsy.coreutils.ModuleSettings;
|
||||||
import org.sleuthkit.autopsy.coreutils.PlatformUtil;
|
import org.sleuthkit.autopsy.coreutils.PlatformUtil;
|
||||||
@ -76,8 +75,7 @@ public final class UserPreferences {
|
|||||||
public enum SelectedMode {
|
public enum SelectedMode {
|
||||||
|
|
||||||
STANDALONE,
|
STANDALONE,
|
||||||
AUTOINGEST,
|
AUTOINGEST
|
||||||
REVIEW
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -51,7 +51,7 @@
|
|||||||
<file name="org-sleuthkit-autopsy-casemodule-CaseDeleteAction.instance"/>
|
<file name="org-sleuthkit-autopsy-casemodule-CaseDeleteAction.instance"/>
|
||||||
<file name="org-sleuthkit-autopsy-casemodule-CaseOpenAction.instance">
|
<file name="org-sleuthkit-autopsy-casemodule-CaseOpenAction.instance">
|
||||||
<attr name="delegate" newvalue="org.sleuthkit.autopsy.casemodule.CaseOpenAction"/>
|
<attr name="delegate" newvalue="org.sleuthkit.autopsy.casemodule.CaseOpenAction"/>
|
||||||
<attr name="displayName" bundlevalue="org.sleuthkit.autopsy.casemodule.Bundle#CTL_OpenAction"/>
|
<attr name="displayName" bundlevalue="org.sleuthkit.autopsy.casemodule.Bundle#CTL_CaseOpenAction"/>
|
||||||
<attr name="instanceCreate" methodvalue="org.openide.awt.Actions.alwaysEnabled"/>
|
<attr name="instanceCreate" methodvalue="org.openide.awt.Actions.alwaysEnabled"/>
|
||||||
<attr name="noIconInMenu" boolvalue="false"/>
|
<attr name="noIconInMenu" boolvalue="false"/>
|
||||||
</file>
|
</file>
|
||||||
@ -157,7 +157,7 @@
|
|||||||
<attr name="position" intvalue="101"/>
|
<attr name="position" intvalue="101"/>
|
||||||
</file>
|
</file>
|
||||||
<folder name="Open Recent Case">
|
<folder name="Open Recent Case">
|
||||||
<attr name="position" intvalue="102"/>
|
<attr name="position" intvalue="103"/>
|
||||||
<attr name="SystemFileSystem.localizingBundle" stringvalue="org.sleuthkit.autopsy.casemodule.Bundle"/>
|
<attr name="SystemFileSystem.localizingBundle" stringvalue="org.sleuthkit.autopsy.casemodule.Bundle"/>
|
||||||
<file name="org-sleuthkit-autopsy-casemodule-RecentCasesAction.shadow">
|
<file name="org-sleuthkit-autopsy-casemodule-RecentCasesAction.shadow">
|
||||||
<attr name="originalFile" stringvalue="Actions/Case/org-sleuthkit-autopsy-casemodule-RecentCases.instance"/>
|
<attr name="originalFile" stringvalue="Actions/Case/org-sleuthkit-autopsy-casemodule-RecentCases.instance"/>
|
||||||
@ -165,11 +165,11 @@
|
|||||||
</folder>
|
</folder>
|
||||||
<file name="org-sleuthkit-autopsy-casemodule-CaseCloseAct.shadow">
|
<file name="org-sleuthkit-autopsy-casemodule-CaseCloseAct.shadow">
|
||||||
<attr name="originalFile" stringvalue="Actions/Case/org-sleuthkit-autopsy-casemodule-CaseCloseAction.instance"/>
|
<attr name="originalFile" stringvalue="Actions/Case/org-sleuthkit-autopsy-casemodule-CaseCloseAction.instance"/>
|
||||||
<attr name="position" intvalue="103"/>
|
<attr name="position" intvalue="104"/>
|
||||||
</file>
|
</file>
|
||||||
<file name="org-sleuthkit-autopsy-casemodule-CaseDeleteAction.shadow">
|
<file name="org-sleuthkit-autopsy-casemodule-CaseDeleteAction.shadow">
|
||||||
<attr name="originalFile" stringvalue="Actions/Case/org-sleuthkit-autopsy-casemodule-CaseDeleteAction.instance"/>
|
<attr name="originalFile" stringvalue="Actions/Case/org-sleuthkit-autopsy-casemodule-CaseDeleteAction.instance"/>
|
||||||
<attr name="position" intvalue="104"/>
|
<attr name="position" intvalue="105"/>
|
||||||
</file>
|
</file>
|
||||||
<file name="org-sleuthkit-autopsy-casemodule-AddImage-separatorBefore.instance">
|
<file name="org-sleuthkit-autopsy-casemodule-AddImage-separatorBefore.instance">
|
||||||
<attr name="instanceClass" stringvalue="javax.swing.JSeparator"/>
|
<attr name="instanceClass" stringvalue="javax.swing.JSeparator"/>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Autopsy Forensic Browser
|
* Autopsy Forensic Browser
|
||||||
*
|
*
|
||||||
* Copyright 2015 Basis Technology Corp.
|
* Copyright 2015-2017 Basis Technology Corp.
|
||||||
* Contact: carrier <at> sleuthkit <dot> org
|
* Contact: carrier <at> sleuthkit <dot> org
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
@ -16,7 +16,7 @@
|
|||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
package org.sleuthkit.autopsy.experimental.autoingest;
|
package org.sleuthkit.autopsy.coreutils;
|
||||||
|
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
@ -24,32 +24,32 @@ import java.util.regex.Matcher;
|
|||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Utility methods for working with strings with the time-stamp suffixes used by
|
* Utility methods for working with time stamps of the form
|
||||||
* auto ingest.
|
* 'yyyy_MM_dd_HH_mm_ss'.
|
||||||
*/
|
*/
|
||||||
public final class TimeStampUtils {
|
public final class TimeStampUtils {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Sample time stamp suffix: 2015_02_02_12_10_31
|
* Sample time stamp suffix: 2015_02_02_12_10_31
|
||||||
*/
|
*/
|
||||||
private static final Pattern timeStampPattern = Pattern.compile("\\d{4}_\\d{2}_\\d{2}_\\d{2}_\\d{2}_\\d{2}$");
|
private static final Pattern TIME_STAMP_PATTERN = Pattern.compile("\\d{4}_\\d{2}_\\d{2}_\\d{2}_\\d{2}_\\d{2}$");
|
||||||
private static final int LENGTH_OF_DATE_TIME_STAMP = 20; // length of the above time stamp
|
private static final int LENGTH_OF_DATE_TIME_STAMP = 20; // length of the above time stamp
|
||||||
private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss");
|
private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss");
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks whether a string ends with an auto ingest time stamp.
|
* Checks whether a string ends with a time stamp.
|
||||||
*
|
*
|
||||||
* @param inputString The string to check.
|
* @param inputString The string to check.
|
||||||
*
|
*
|
||||||
* @return True or false.
|
* @return True or false.
|
||||||
*/
|
*/
|
||||||
public static boolean endsWithTimeStamp(String inputString) {
|
public static boolean endsWithTimeStamp(String inputString) {
|
||||||
Matcher m = timeStampPattern.matcher(inputString);
|
Matcher m = TIME_STAMP_PATTERN.matcher(inputString);
|
||||||
return m.find();
|
return m.find();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the fixed length of the auto-ingest time stamp suffix.
|
* Gets the fixed length of the time stamp suffix.
|
||||||
*
|
*
|
||||||
* @return The length.
|
* @return The length.
|
||||||
*/
|
*/
|
||||||
@ -58,16 +58,16 @@ public final class TimeStampUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates an auto ingest time stamp suffix using the current time.
|
* Creates a time stamp suffix using the current time.
|
||||||
*
|
*
|
||||||
* @return The suffix.
|
* @return The suffix.
|
||||||
*/
|
*/
|
||||||
public static String createTimeStamp() {
|
public static String createTimeStamp() {
|
||||||
return dateFormat.format(Calendar.getInstance().getTime());
|
return DATE_FORMAT.format(Calendar.getInstance().getTime());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Removes an auto ingest timestamp suffix, if it present.
|
* Removes the time stamp suffix from a string, if present.
|
||||||
*
|
*
|
||||||
* @param inputString The string to trim.
|
* @param inputString The string to trim.
|
||||||
*
|
*
|
||||||
@ -82,7 +82,7 @@ public final class TimeStampUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the auto ingest time stamp suffix from a string, if it is present.
|
* Gets the time stamp suffix from a string, if present.
|
||||||
*
|
*
|
||||||
* @param inputString the name to check for a timestamp
|
* @param inputString the name to check for a timestamp
|
||||||
*
|
*
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Autopsy Forensic Browser
|
* Autopsy Forensic Browser
|
||||||
*
|
*
|
||||||
* Copyright 2015 Basis Technology Corp.
|
* Copyright 2015-2017 Basis Technology Corp.
|
||||||
* Contact: carrier <at> sleuthkit <dot> org
|
* Contact: carrier <at> sleuthkit <dot> org
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
@ -16,7 +16,7 @@
|
|||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
package org.sleuthkit.autopsy.experimental.autoingest;
|
package org.sleuthkit.autopsy.guiutils;
|
||||||
|
|
||||||
import static javax.swing.SwingConstants.CENTER;
|
import static javax.swing.SwingConstants.CENTER;
|
||||||
|
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Autopsy Forensic Browser
|
* Autopsy Forensic Browser
|
||||||
*
|
*
|
||||||
* Copyright 2015 Basis Technology Corp.
|
* Copyright 2015-2017 Basis Technology Corp.
|
||||||
* Contact: carrier <at> sleuthkit <dot> org
|
* Contact: carrier <at> sleuthkit <dot> org
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
@ -16,8 +16,9 @@
|
|||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
package org.sleuthkit.autopsy.experimental.autoingest;
|
package org.sleuthkit.autopsy.guiutils;
|
||||||
|
|
||||||
|
import java.awt.Color;
|
||||||
import java.awt.Component;
|
import java.awt.Component;
|
||||||
import java.time.Duration;
|
import java.time.Duration;
|
||||||
import javax.swing.JTable;
|
import javax.swing.JTable;
|
||||||
@ -28,11 +29,11 @@ import static javax.swing.SwingConstants.CENTER;
|
|||||||
* string with days, hours, minutes, and seconds components. It center-aligns
|
* string with days, hours, minutes, and seconds components. It center-aligns
|
||||||
* cell content and grays out the cell if the table is disabled.
|
* cell content and grays out the cell if the table is disabled.
|
||||||
*/
|
*/
|
||||||
class DurationCellRenderer extends GrayableCellRenderer {
|
public class DurationCellRenderer extends GrayableCellRenderer {
|
||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
DurationCellRenderer() {
|
public DurationCellRenderer() {
|
||||||
setHorizontalAlignment(CENTER);
|
setHorizontalAlignment(CENTER);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -71,4 +72,26 @@ class DurationCellRenderer extends GrayableCellRenderer {
|
|||||||
grayCellIfTableNotEnabled(table, isSelected);
|
grayCellIfTableNotEnabled(table, isSelected);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void grayCellIfTableNotEnabled(JTable table, boolean isSelected) {
|
||||||
|
if (table.isEnabled()) {
|
||||||
|
/*
|
||||||
|
* The table is enabled, make the foreground and background the
|
||||||
|
* normal selected or unselected color.
|
||||||
|
*/
|
||||||
|
if (isSelected) {
|
||||||
|
setBackground(table.getSelectionBackground());
|
||||||
|
setForeground(table.getSelectionForeground());
|
||||||
|
} else {
|
||||||
|
setBackground(table.getBackground());
|
||||||
|
setForeground(table.getForeground());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
/*
|
||||||
|
* The table is disabled, make the foreground and background gray.
|
||||||
|
*/
|
||||||
|
setBackground(Color.lightGray);
|
||||||
|
setForeground(Color.darkGray);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Autopsy Forensic Browser
|
* Autopsy Forensic Browser
|
||||||
*
|
*
|
||||||
* Copyright 2015 Basis Technology Corp.
|
* Copyright 2015-2017 Basis Technology Corp.
|
||||||
* Contact: carrier <at> sleuthkit <dot> org
|
* Contact: carrier <at> sleuthkit <dot> org
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
@ -16,7 +16,7 @@
|
|||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
package org.sleuthkit.autopsy.experimental.autoingest;
|
package org.sleuthkit.autopsy.guiutils;
|
||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.Component;
|
import java.awt.Component;
|
||||||
@ -28,11 +28,11 @@ import javax.swing.table.DefaultTableCellRenderer;
|
|||||||
* A JTable cell renderer that left-aligns cell content and grays out the cell
|
* A JTable cell renderer that left-aligns cell content and grays out the cell
|
||||||
* if the table is disabled.
|
* if the table is disabled.
|
||||||
*/
|
*/
|
||||||
class GrayableCellRenderer extends DefaultTableCellRenderer {
|
public class GrayableCellRenderer extends DefaultTableCellRenderer {
|
||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
GrayableCellRenderer() {
|
public GrayableCellRenderer() {
|
||||||
setHorizontalAlignment(LEFT);
|
setHorizontalAlignment(LEFT);
|
||||||
}
|
}
|
||||||
|
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Autopsy Forensic Browser
|
* Autopsy Forensic Browser
|
||||||
*
|
*
|
||||||
* Copyright 2015 Basis Technology Corp.
|
* Copyright 2015-2017 Basis Technology Corp.
|
||||||
* Contact: carrier <at> sleuthkit <dot> org
|
* Contact: carrier <at> sleuthkit <dot> org
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
@ -16,7 +16,7 @@
|
|||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
package org.sleuthkit.autopsy.experimental.autoingest;
|
package org.sleuthkit.autopsy.guiutils;
|
||||||
|
|
||||||
import java.awt.Component;
|
import java.awt.Component;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
@ -28,7 +28,7 @@ import static javax.swing.SwingConstants.CENTER;
|
|||||||
* center-aligned, long-format date string. It also grays out the cell if the
|
* center-aligned, long-format date string. It also grays out the cell if the
|
||||||
* table is disabled.
|
* table is disabled.
|
||||||
*/
|
*/
|
||||||
class LongDateCellRenderer extends GrayableCellRenderer {
|
public class LongDateCellRenderer extends GrayableCellRenderer {
|
||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
private static final String FORMAT_STRING = "yyyy/MM/dd HH:mm:ss"; //NON-NLS
|
private static final String FORMAT_STRING = "yyyy/MM/dd HH:mm:ss"; //NON-NLS
|
@ -16,8 +16,9 @@
|
|||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
package org.sleuthkit.autopsy.experimental.autoingest;
|
package org.sleuthkit.autopsy.guiutils;
|
||||||
|
|
||||||
|
import java.awt.Color;
|
||||||
import java.awt.Component;
|
import java.awt.Component;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import javax.swing.JTable;
|
import javax.swing.JTable;
|
||||||
@ -46,4 +47,26 @@ class ShortDateCellRenderer extends GrayableCellRenderer {
|
|||||||
grayCellIfTableNotEnabled(table, isSelected);
|
grayCellIfTableNotEnabled(table, isSelected);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void grayCellIfTableNotEnabled(JTable table, boolean isSelected) {
|
||||||
|
if (table.isEnabled()) {
|
||||||
|
/*
|
||||||
|
* The table is enabled, make the foreground and background the
|
||||||
|
* normal selected or unselected color.
|
||||||
|
*/
|
||||||
|
if (isSelected) {
|
||||||
|
setBackground(table.getSelectionBackground());
|
||||||
|
setForeground(table.getSelectionForeground());
|
||||||
|
} else {
|
||||||
|
setBackground(table.getBackground());
|
||||||
|
setForeground(table.getForeground());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
/*
|
||||||
|
* The table is disabled, make the foreground and background gray.
|
||||||
|
*/
|
||||||
|
setBackground(Color.lightGray);
|
||||||
|
setForeground(Color.darkGray);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
74
Core/src/org/sleuthkit/autopsy/guiutils/StatusIconCellRenderer.java
Executable file
74
Core/src/org/sleuthkit/autopsy/guiutils/StatusIconCellRenderer.java
Executable file
@ -0,0 +1,74 @@
|
|||||||
|
/*
|
||||||
|
* Autopsy Forensic Browser
|
||||||
|
*
|
||||||
|
* Copyright 2015-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.guiutils;
|
||||||
|
|
||||||
|
import java.awt.Component;
|
||||||
|
import javax.swing.ImageIcon;
|
||||||
|
import javax.swing.JTable;
|
||||||
|
import static javax.swing.SwingConstants.CENTER;
|
||||||
|
import org.openide.util.ImageUtilities;
|
||||||
|
import org.openide.util.NbBundle.Messages;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A JTable cell renderer that represents a status as a center-aligned icon, and
|
||||||
|
* grays out the cell if the table is disabled. The statuses represented are OK,
|
||||||
|
* WARNING, and ERROR.
|
||||||
|
*/
|
||||||
|
public class StatusIconCellRenderer extends GrayableCellRenderer {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
static final ImageIcon OK_ICON = new ImageIcon(ImageUtilities.loadImage("org/sleuthkit/autopsy/images/tick.png", false));
|
||||||
|
static final ImageIcon WARNING_ICON = new ImageIcon(ImageUtilities.loadImage("org/sleuthkit/autopsy/images/warning16.png", false));
|
||||||
|
static final ImageIcon ERROR_ICON = new ImageIcon(ImageUtilities.loadImage("org/sleuthkit/autopsy/images/cross-script.png", false));
|
||||||
|
|
||||||
|
@Messages({
|
||||||
|
"StatusIconCellRenderer.tooltiptext.ok=OK",
|
||||||
|
"StatusIconCellRenderer.tooltiptext.warning=A warning occurred",
|
||||||
|
"StatusIconCellRenderer.tooltiptext.error=An error occurred"
|
||||||
|
})
|
||||||
|
@Override
|
||||||
|
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
|
||||||
|
setHorizontalAlignment(CENTER);
|
||||||
|
if ((value instanceof Status)) {
|
||||||
|
switch((Status) value) {
|
||||||
|
case OK:
|
||||||
|
setIcon(OK_ICON);
|
||||||
|
setToolTipText(org.openide.util.NbBundle.getMessage(StatusIconCellRenderer.class, "StatusIconCellRenderer.tooltiptext.ok"));
|
||||||
|
break;
|
||||||
|
case WARNING:
|
||||||
|
setIcon(WARNING_ICON);
|
||||||
|
setToolTipText(org.openide.util.NbBundle.getMessage(StatusIconCellRenderer.class, "StatusIconCellRenderer.tooltiptext.warning"));
|
||||||
|
break;
|
||||||
|
case ERROR:
|
||||||
|
setIcon(ERROR_ICON);
|
||||||
|
setToolTipText(org.openide.util.NbBundle.getMessage(StatusIconCellRenderer.class, "StatusIconCellRenderer.tooltiptext.error"));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
grayCellIfTableNotEnabled(table, isSelected);
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum Status {
|
||||||
|
OK,
|
||||||
|
WARNING,
|
||||||
|
ERROR
|
||||||
|
}
|
||||||
|
}
|
BIN
Core/src/org/sleuthkit/autopsy/images/tick.png
Executable file
BIN
Core/src/org/sleuthkit/autopsy/images/tick.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 582 B |
BIN
Core/src/org/sleuthkit/autopsy/images/warning16.png
Executable file
BIN
Core/src/org/sleuthkit/autopsy/images/warning16.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 552 B |
@ -23,9 +23,9 @@ import org.junit.Before;
|
|||||||
import org.junit.BeforeClass;
|
import org.junit.BeforeClass;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
public class IntestFileFiltersTest {
|
public class IngestFileFiltersTest {
|
||||||
|
|
||||||
public IntestFileFiltersTest() {
|
public IngestFileFiltersTest() {
|
||||||
}
|
}
|
||||||
|
|
||||||
@BeforeClass
|
@BeforeClass
|
@ -28,6 +28,7 @@ import org.sleuthkit.autopsy.casemodule.Case;
|
|||||||
import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorCallback;
|
import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorCallback;
|
||||||
import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorProgressMonitor;
|
import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorProgressMonitor;
|
||||||
import org.sleuthkit.autopsy.coreutils.Logger;
|
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||||
|
import org.sleuthkit.autopsy.coreutils.TimeStampUtils;
|
||||||
import org.sleuthkit.datamodel.Content;
|
import org.sleuthkit.datamodel.Content;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1,189 +0,0 @@
|
|||||||
/*
|
|
||||||
* Autopsy Forensic Browser
|
|
||||||
*
|
|
||||||
* Copyright 2015-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.experimental.autoingest;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.nio.file.Files;
|
|
||||||
import java.nio.file.Path;
|
|
||||||
import java.nio.file.attribute.BasicFileAttributes;
|
|
||||||
import java.util.Comparator;
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.logging.Level;
|
|
||||||
import org.sleuthkit.autopsy.casemodule.CaseMetadata;
|
|
||||||
import org.sleuthkit.autopsy.coreutils.Logger;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A representation of a case created by automated ingest.
|
|
||||||
*/
|
|
||||||
class AutoIngestCase implements Comparable<AutoIngestCase> {
|
|
||||||
|
|
||||||
private static final Logger logger = Logger.getLogger(AutoIngestCase.class.getName());
|
|
||||||
private final Path caseDirectoryPath;
|
|
||||||
private final String caseName;
|
|
||||||
private final Path metadataFilePath;
|
|
||||||
private final Date createDate;
|
|
||||||
private final Date lastAccessedDate;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructs a representation of case created by automated ingest.
|
|
||||||
*
|
|
||||||
* @param caseDirectoryPath The case directory path.
|
|
||||||
*/
|
|
||||||
AutoIngestCase(Path caseDirectoryPath) {
|
|
||||||
this.caseDirectoryPath = caseDirectoryPath;
|
|
||||||
caseName = PathUtils.caseNameFromCaseDirectoryPath(caseDirectoryPath);
|
|
||||||
metadataFilePath = caseDirectoryPath.resolve(caseName + CaseMetadata.getFileExtension());
|
|
||||||
BasicFileAttributes fileAttrs = null;
|
|
||||||
try {
|
|
||||||
fileAttrs = Files.readAttributes(metadataFilePath, BasicFileAttributes.class);
|
|
||||||
} catch (IOException ex) {
|
|
||||||
logger.log(Level.SEVERE, String.format("Error reading file attributes of case metadata file in %s, will use current time for case createDate/lastModfiedDate", caseDirectoryPath), ex);
|
|
||||||
}
|
|
||||||
if (null != fileAttrs) {
|
|
||||||
createDate = new Date(fileAttrs.creationTime().toMillis());
|
|
||||||
lastAccessedDate = new Date(fileAttrs.lastAccessTime().toMillis());
|
|
||||||
} else {
|
|
||||||
createDate = new Date();
|
|
||||||
lastAccessedDate = new Date();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the case directory path.
|
|
||||||
*
|
|
||||||
* @return The case directory path.
|
|
||||||
*/
|
|
||||||
Path getCaseDirectoryPath() {
|
|
||||||
return this.caseDirectoryPath;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the case name.
|
|
||||||
*
|
|
||||||
* @return The case name.
|
|
||||||
*/
|
|
||||||
String getCaseName() {
|
|
||||||
return this.caseName;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the creation date for the case, defined as the create time of the
|
|
||||||
* case metadata file.
|
|
||||||
*
|
|
||||||
* @return The case creation date.
|
|
||||||
*/
|
|
||||||
Date getCreationDate() {
|
|
||||||
return this.createDate;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the last accessed date for the case, defined as the last accessed
|
|
||||||
* time of the case metadata file.
|
|
||||||
*
|
|
||||||
* @return The last accessed date.
|
|
||||||
*/
|
|
||||||
Date getLastAccessedDate() {
|
|
||||||
return this.lastAccessedDate;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the status of this case based on the auto ingest result file in the
|
|
||||||
* case directory.
|
|
||||||
*
|
|
||||||
* @return See CaseStatus enum definition.
|
|
||||||
*/
|
|
||||||
CaseStatus getStatus() {
|
|
||||||
if (AutoIngestAlertFile.exists(caseDirectoryPath)) {
|
|
||||||
return CaseStatus.ALERT;
|
|
||||||
} else {
|
|
||||||
return CaseStatus.OK;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Indicates whether or not some other object is "equal to" this
|
|
||||||
* AutoIngestCase object.
|
|
||||||
*
|
|
||||||
* @param other The other object.
|
|
||||||
*
|
|
||||||
* @return True or false.
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public boolean equals(Object other) {
|
|
||||||
if (!(other instanceof AutoIngestCase)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (other == this) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return this.caseDirectoryPath.toString().equals(((AutoIngestCase) other).caseDirectoryPath.toString());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns a hash code value for this AutoIngestCase object.
|
|
||||||
*
|
|
||||||
* @return The has code.
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public int hashCode() {
|
|
||||||
int hash = 7;
|
|
||||||
hash = 71 * hash + Objects.hashCode(this.caseDirectoryPath);
|
|
||||||
hash = 71 * hash + Objects.hashCode(this.createDate);
|
|
||||||
hash = 71 * hash + Objects.hashCode(this.caseName);
|
|
||||||
return hash;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Compares this AutopIngestCase object with abnother AutoIngestCase object
|
|
||||||
* for order.
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public int compareTo(AutoIngestCase other) {
|
|
||||||
return -this.lastAccessedDate.compareTo(other.getLastAccessedDate());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Comparator for a descending order sort on date created.
|
|
||||||
*/
|
|
||||||
static class LastAccessedDateDescendingComparator implements Comparator<AutoIngestCase> {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Compares two AutoIngestCase objects for order based on last accessed
|
|
||||||
* date (descending).
|
|
||||||
*
|
|
||||||
* @param object The first AutoIngestCase object
|
|
||||||
* @param otherObject The second AuotIngestCase object.
|
|
||||||
*
|
|
||||||
* @return A negative integer, zero, or a positive integer as the first
|
|
||||||
* argument is less than, equal to, or greater than the second.
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public int compare(AutoIngestCase object, AutoIngestCase otherObject) {
|
|
||||||
return -object.getLastAccessedDate().compareTo(otherObject.getLastAccessedDate());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
enum CaseStatus {
|
|
||||||
|
|
||||||
OK,
|
|
||||||
ALERT
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,162 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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.experimental.autoingest;
|
|
||||||
|
|
||||||
import java.nio.file.Path;
|
|
||||||
import java.nio.file.Paths;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import org.sleuthkit.autopsy.casemodule.Case;
|
|
||||||
import org.sleuthkit.autopsy.casemodule.CaseActionException;
|
|
||||||
import org.sleuthkit.autopsy.coordinationservice.CoordinationService;
|
|
||||||
import org.sleuthkit.autopsy.coordinationservice.CoordinationService.CoordinationServiceException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handles locating and opening cases created by auto ingest.
|
|
||||||
*/
|
|
||||||
final class AutoIngestCaseManager {
|
|
||||||
|
|
||||||
private static AutoIngestCaseManager instance;
|
|
||||||
|
|
||||||
private CoordinationService coordinationService;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the auto ingest case manager.
|
|
||||||
*
|
|
||||||
* @return The auto ingest case manager singleton.
|
|
||||||
*
|
|
||||||
* @throws AutoIngestCaseManagerException
|
|
||||||
*/
|
|
||||||
synchronized static AutoIngestCaseManager getInstance() throws AutoIngestCaseManager.AutoIngestCaseManagerException {
|
|
||||||
if (null == instance) {
|
|
||||||
instance = new AutoIngestCaseManager();
|
|
||||||
}
|
|
||||||
return instance;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructs an object that handles locating and opening cases created by
|
|
||||||
* auto ingest.
|
|
||||||
*
|
|
||||||
* @throws AutoIngestCaseManagerException
|
|
||||||
*/
|
|
||||||
private AutoIngestCaseManager() throws AutoIngestCaseManagerException {
|
|
||||||
try {
|
|
||||||
coordinationService = CoordinationService.getInstance();
|
|
||||||
} catch (CoordinationServiceException ex) {
|
|
||||||
throw new AutoIngestCaseManager.AutoIngestCaseManagerException("Failed to get the coordination service.", ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets a list of the cases in the top level case folder used by auto
|
|
||||||
* ingest.
|
|
||||||
*
|
|
||||||
* @return List of cases.
|
|
||||||
*
|
|
||||||
* @throws AutoIngestCaseManagerException
|
|
||||||
*/
|
|
||||||
List<AutoIngestCase> getCases() throws AutoIngestCaseManagerException {
|
|
||||||
List<AutoIngestCase> cases = new ArrayList<>();
|
|
||||||
List<Path> casePathList = getCasePaths();
|
|
||||||
for (Path casePath : casePathList) {
|
|
||||||
cases.add(new AutoIngestCase(casePath));
|
|
||||||
}
|
|
||||||
return cases;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Retrieve all of the case nodes and filter for only those that represent
|
|
||||||
* case paths.
|
|
||||||
*
|
|
||||||
* @return List of case paths.
|
|
||||||
*
|
|
||||||
* @throws AutoIngestCaseManagerException
|
|
||||||
*/
|
|
||||||
private List<Path> getCasePaths() throws AutoIngestCaseManagerException {
|
|
||||||
try {
|
|
||||||
List<String> nodeList = coordinationService.getNodeList(CoordinationService.CategoryNode.CASES);
|
|
||||||
List<Path> casePathList = new ArrayList<Path>(0);
|
|
||||||
for (String node : nodeList) {
|
|
||||||
if(node.indexOf('\\') >= 0 || node.indexOf('/') >= 0) {
|
|
||||||
/*
|
|
||||||
* This is not a case name lock (name specifies a path).
|
|
||||||
*/
|
|
||||||
String nodeUpperCase = node.toUpperCase();
|
|
||||||
if(!nodeUpperCase.endsWith("_RESOURCES") && !nodeUpperCase.endsWith("AUTO_INGEST_LOG.TXT")) {
|
|
||||||
/*
|
|
||||||
* This is not a case resource lock, nor a case auto
|
|
||||||
* ingest log lock. Collect the path.
|
|
||||||
*/
|
|
||||||
casePathList.add(Paths.get(node));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return casePathList;
|
|
||||||
|
|
||||||
} catch (CoordinationServiceException ex) {
|
|
||||||
throw new AutoIngestCaseManager.AutoIngestCaseManagerException("Failed to get node list from coordination service.", ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Opens an auto ingest case case.
|
|
||||||
*
|
|
||||||
* @param caseMetadataFilePath Path to the case metadata file.
|
|
||||||
*
|
|
||||||
* @throws CaseActionException
|
|
||||||
*/
|
|
||||||
synchronized void openCase(Path caseMetadataFilePath) throws CaseActionException {
|
|
||||||
/*
|
|
||||||
* Open the case.
|
|
||||||
*/
|
|
||||||
Case.openAsCurrentCase(caseMetadataFilePath.toString());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Exception type thrown when there is an error completing an auto ingest
|
|
||||||
* case manager operation.
|
|
||||||
*/
|
|
||||||
static final class AutoIngestCaseManagerException extends Exception {
|
|
||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructs an instance of the exception type thrown when there is an
|
|
||||||
* error completing an auto ingest case manager operation.
|
|
||||||
*
|
|
||||||
* @param message The exception message.
|
|
||||||
*/
|
|
||||||
private AutoIngestCaseManagerException(String message) {
|
|
||||||
super(message);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructs an instance of the exception type thrown when there is an
|
|
||||||
* error completing an auto ingest case manager operation.
|
|
||||||
*
|
|
||||||
* @param message The exception message.
|
|
||||||
* @param cause A Throwable cause for the error.
|
|
||||||
*/
|
|
||||||
private AutoIngestCaseManagerException(String message, Throwable cause) {
|
|
||||||
super(message, cause);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,99 +0,0 @@
|
|||||||
/*
|
|
||||||
* Autopsy Forensic Browser
|
|
||||||
*
|
|
||||||
* Copyright 2015 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.experimental.autoingest;
|
|
||||||
|
|
||||||
import java.awt.event.ActionEvent;
|
|
||||||
import java.awt.event.ActionListener;
|
|
||||||
import java.util.logging.Level;
|
|
||||||
import org.openide.util.HelpCtx;
|
|
||||||
import org.openide.util.Lookup;
|
|
||||||
import org.openide.util.NbBundle;
|
|
||||||
import org.openide.util.actions.CallableSystemAction;
|
|
||||||
import org.openide.util.actions.SystemAction;
|
|
||||||
import org.sleuthkit.autopsy.casemodule.CaseCloseAction;
|
|
||||||
import org.sleuthkit.autopsy.casemodule.CaseOpenAction;
|
|
||||||
import org.sleuthkit.autopsy.coreutils.Logger;
|
|
||||||
import org.sleuthkit.autopsy.casemodule.Case;
|
|
||||||
import org.sleuthkit.autopsy.casemodule.StartupWindowProvider;
|
|
||||||
import org.sleuthkit.autopsy.core.UserPreferences;
|
|
||||||
|
|
||||||
final class AutoIngestCaseOpenAction extends CallableSystemAction implements ActionListener {
|
|
||||||
|
|
||||||
private static final Logger logger = Logger.getLogger(AutoIngestCaseOpenAction.class.getName());
|
|
||||||
private static final long serialVersionUID = 1L;
|
|
||||||
|
|
||||||
public AutoIngestCaseOpenAction() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void actionPerformed(ActionEvent e) {
|
|
||||||
|
|
||||||
UserPreferences.SelectedMode mode = UserPreferences.getMode();
|
|
||||||
switch (mode) {
|
|
||||||
case REVIEW:
|
|
||||||
|
|
||||||
if (Case.isCaseOpen()) {
|
|
||||||
/*
|
|
||||||
* In review mode, close the currently open case, if any, and
|
|
||||||
* then display the review mode cases panel. This can be
|
|
||||||
* accomplished by invoking CaseCloseAction because it calls
|
|
||||||
* StartupWindowProvider.getInstance().open() after it closes
|
|
||||||
* the current case.
|
|
||||||
*/
|
|
||||||
SystemAction.get(CaseCloseAction.class).actionPerformed(e);
|
|
||||||
} else {
|
|
||||||
// no case is open, so show the startup window
|
|
||||||
StartupWindowProvider.getInstance().open();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case AUTOINGEST:
|
|
||||||
/*
|
|
||||||
* New case action is disabled in auto ingest mode.
|
|
||||||
*/
|
|
||||||
break;
|
|
||||||
|
|
||||||
case STANDALONE:
|
|
||||||
/**
|
|
||||||
* In standalone mode, invoke default Autopsy version of CaseOpenAction.
|
|
||||||
*/
|
|
||||||
Lookup.getDefault().lookup(CaseOpenAction.class).actionPerformed(e);
|
|
||||||
break;
|
|
||||||
|
|
||||||
|
|
||||||
default:
|
|
||||||
logger.log(Level.SEVERE, "Attempting to open case in unsupported mode {0}", mode.toString());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void performAction() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getName() {
|
|
||||||
return NbBundle.getMessage(AutoIngestCaseOpenAction.class, "CTL_OpenAction");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HelpCtx getHelpCtx() {
|
|
||||||
return HelpCtx.DEFAULT_HELP;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -60,10 +60,13 @@ import org.sleuthkit.autopsy.core.ServicesMonitor;
|
|||||||
import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil;
|
import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil;
|
||||||
import org.sleuthkit.autopsy.coreutils.NetworkUtils;
|
import org.sleuthkit.autopsy.coreutils.NetworkUtils;
|
||||||
import org.sleuthkit.autopsy.coreutils.PlatformUtil;
|
import org.sleuthkit.autopsy.coreutils.PlatformUtil;
|
||||||
import org.sleuthkit.autopsy.ingest.IngestManager;
|
|
||||||
import org.sleuthkit.autopsy.ingest.IngestProgressSnapshotDialog;
|
|
||||||
import org.sleuthkit.autopsy.experimental.autoingest.AutoIngestManager.CaseDeletionResult;
|
import org.sleuthkit.autopsy.experimental.autoingest.AutoIngestManager.CaseDeletionResult;
|
||||||
import org.sleuthkit.autopsy.experimental.autoingest.AutoIngestManager.JobsSnapshot;
|
import org.sleuthkit.autopsy.experimental.autoingest.AutoIngestManager.JobsSnapshot;
|
||||||
|
import org.sleuthkit.autopsy.guiutils.DurationCellRenderer;
|
||||||
|
import org.sleuthkit.autopsy.guiutils.LongDateCellRenderer;
|
||||||
|
import org.sleuthkit.autopsy.guiutils.StatusIconCellRenderer;
|
||||||
|
import org.sleuthkit.autopsy.ingest.IngestManager;
|
||||||
|
import org.sleuthkit.autopsy.ingest.IngestProgressSnapshotDialog;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A panel for monitoring automated ingest by a cluster, and for controlling
|
* A panel for monitoring automated ingest by a cluster, and for controlling
|
||||||
@ -596,7 +599,7 @@ public final class AutoIngestControlPanel extends JPanel implements Observer {
|
|||||||
* renderer that will choose an icon to represent the job status.
|
* renderer that will choose an icon to represent the job status.
|
||||||
*/
|
*/
|
||||||
column = completedTable.getColumn(JobsTableModelColumns.STATUS.getColumnHeader());
|
column = completedTable.getColumn(JobsTableModelColumns.STATUS.getColumnHeader());
|
||||||
column.setCellRenderer(new CaseStatusIconCellRenderer());
|
column.setCellRenderer(new StatusIconCellRenderer());
|
||||||
column.setMinWidth(STATUS_COL_MIN_WIDTH);
|
column.setMinWidth(STATUS_COL_MIN_WIDTH);
|
||||||
column.setMaxWidth(STATUS_COL_MAX_WIDTH);
|
column.setMaxWidth(STATUS_COL_MAX_WIDTH);
|
||||||
column.setPreferredWidth(STATUS_COL_PREFERRED_WIDTH);
|
column.setPreferredWidth(STATUS_COL_PREFERRED_WIDTH);
|
||||||
@ -1152,7 +1155,7 @@ public final class AutoIngestControlPanel extends JPanel implements Observer {
|
|||||||
job.getProcessingStageStartDate(), // STARTED_TIME
|
job.getProcessingStageStartDate(), // STARTED_TIME
|
||||||
job.getCompletedDate(), // COMPLETED_TIME
|
job.getCompletedDate(), // COMPLETED_TIME
|
||||||
status.getDescription(), // ACTIVITY
|
status.getDescription(), // ACTIVITY
|
||||||
job.getErrorsOccurred(), // STATUS
|
job.getErrorsOccurred() ? StatusIconCellRenderer.Status.WARNING : StatusIconCellRenderer.Status.OK, // STATUS
|
||||||
((Date.from(Instant.now()).getTime()) - (status.getStartDate().getTime())), // ACTIVITY_TIME
|
((Date.from(Instant.now()).getTime()) - (status.getStartDate().getTime())), // ACTIVITY_TIME
|
||||||
job.getCaseDirectoryPath(), // CASE_DIRECTORY_PATH
|
job.getCaseDirectoryPath(), // CASE_DIRECTORY_PATH
|
||||||
job.getProcessingHostName().equals(LOCAL_HOST_NAME), // IS_LOCAL_JOB
|
job.getProcessingHostName().equals(LOCAL_HOST_NAME), // IS_LOCAL_JOB
|
||||||
|
@ -29,8 +29,19 @@
|
|||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
<Group type="103" groupAlignment="1" attributes="0">
|
<Group type="103" groupAlignment="1" attributes="0">
|
||||||
<Component id="pendingScrollPane" max="32767" attributes="0"/>
|
<Component id="pendingScrollPane" max="32767" attributes="0"/>
|
||||||
|
<Component id="runningScrollPane" alignment="0" max="32767" attributes="0"/>
|
||||||
|
<Component id="completedScrollPane" alignment="0" max="32767" attributes="0"/>
|
||||||
<Group type="102" alignment="0" attributes="0">
|
<Group type="102" alignment="0" attributes="0">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="1" attributes="0">
|
||||||
|
<Group type="102" alignment="0" attributes="0">
|
||||||
|
<Component id="refreshButton" min="-2" pref="100" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace type="unrelated" max="-2" attributes="0"/>
|
||||||
|
<Component id="prioritizeJobButton" min="-2" pref="100" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Component id="prioritizeCaseButton" min="-2" pref="100" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace type="unrelated" max="-2" attributes="0"/>
|
||||||
|
<Component id="clusterMetricsButton" min="-2" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
<Component id="lbPending" alignment="0" min="-2" max="-2" attributes="0"/>
|
<Component id="lbPending" alignment="0" min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="lbCompleted" alignment="0" min="-2" max="-2" attributes="0"/>
|
<Component id="lbCompleted" alignment="0" min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="lbRunning" alignment="0" min="-2" max="-2" attributes="0"/>
|
<Component id="lbRunning" alignment="0" min="-2" max="-2" attributes="0"/>
|
||||||
@ -39,18 +50,9 @@
|
|||||||
<EmptySpace type="unrelated" max="-2" attributes="0"/>
|
<EmptySpace type="unrelated" max="-2" attributes="0"/>
|
||||||
<Component id="tbServicesStatusMessage" min="-2" pref="861" max="-2" attributes="0"/>
|
<Component id="tbServicesStatusMessage" min="-2" pref="861" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
<Group type="102" alignment="0" attributes="0">
|
|
||||||
<Component id="refreshButton" min="-2" pref="100" max="-2" attributes="0"/>
|
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
|
||||||
<Component id="prioritizeJobButton" min="-2" pref="100" max="-2" attributes="0"/>
|
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
|
||||||
<Component id="prioritizeCaseButton" min="-2" pref="100" max="-2" attributes="0"/>
|
|
||||||
</Group>
|
|
||||||
</Group>
|
</Group>
|
||||||
<EmptySpace min="0" pref="0" max="32767" attributes="0"/>
|
<EmptySpace min="0" pref="0" max="32767" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
<Component id="runningScrollPane" alignment="0" max="32767" attributes="0"/>
|
|
||||||
<Component id="completedScrollPane" alignment="0" max="32767" attributes="0"/>
|
|
||||||
</Group>
|
</Group>
|
||||||
<EmptySpace min="-2" max="-2" attributes="0"/>
|
<EmptySpace min="-2" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
@ -81,6 +83,7 @@
|
|||||||
<Component id="refreshButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
<Component id="refreshButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="prioritizeJobButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
<Component id="prioritizeJobButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="prioritizeCaseButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
<Component id="prioritizeCaseButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="clusterMetricsButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
@ -255,5 +258,15 @@
|
|||||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="prioritizeCaseButtonActionPerformed"/>
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="prioritizeCaseButtonActionPerformed"/>
|
||||||
</Events>
|
</Events>
|
||||||
</Component>
|
</Component>
|
||||||
|
<Component class="javax.swing.JButton" name="clusterMetricsButton">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
|
<ResourceString bundle="org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties" key="AutoIngestDashboard.clusterMetricsButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="clusterMetricsButtonActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
</SubComponents>
|
</SubComponents>
|
||||||
</Form>
|
</Form>
|
||||||
|
@ -44,6 +44,9 @@ import org.sleuthkit.autopsy.core.ServicesMonitor;
|
|||||||
import org.sleuthkit.autopsy.coreutils.Logger;
|
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||||
import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil;
|
import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil;
|
||||||
import org.sleuthkit.autopsy.experimental.autoingest.AutoIngestMonitor.JobsSnapshot;
|
import org.sleuthkit.autopsy.experimental.autoingest.AutoIngestMonitor.JobsSnapshot;
|
||||||
|
import org.sleuthkit.autopsy.guiutils.DurationCellRenderer;
|
||||||
|
import org.sleuthkit.autopsy.guiutils.LongDateCellRenderer;
|
||||||
|
import org.sleuthkit.autopsy.guiutils.StatusIconCellRenderer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A dashboard for monitoring an automated ingest cluster.
|
* A dashboard for monitoring an automated ingest cluster.
|
||||||
@ -400,7 +403,7 @@ public final class AutoIngestDashboard extends JPanel implements Observer {
|
|||||||
* renderer that will choose an icon to represent the job status.
|
* renderer that will choose an icon to represent the job status.
|
||||||
*/
|
*/
|
||||||
column = completedTable.getColumn(JobsTableModelColumns.STATUS.getColumnHeader());
|
column = completedTable.getColumn(JobsTableModelColumns.STATUS.getColumnHeader());
|
||||||
column.setCellRenderer(new CaseStatusIconCellRenderer());
|
column.setCellRenderer(new StatusIconCellRenderer());
|
||||||
column.setMinWidth(STATUS_COL_MIN_WIDTH);
|
column.setMinWidth(STATUS_COL_MIN_WIDTH);
|
||||||
column.setMaxWidth(STATUS_COL_MAX_WIDTH);
|
column.setMaxWidth(STATUS_COL_MAX_WIDTH);
|
||||||
column.setPreferredWidth(STATUS_COL_PREFERRED_WIDTH);
|
column.setPreferredWidth(STATUS_COL_PREFERRED_WIDTH);
|
||||||
@ -472,7 +475,7 @@ public final class AutoIngestDashboard extends JPanel implements Observer {
|
|||||||
job.getProcessingStageStartDate(), // STARTED_TIME
|
job.getProcessingStageStartDate(), // STARTED_TIME
|
||||||
job.getCompletedDate(), // COMPLETED_TIME
|
job.getCompletedDate(), // COMPLETED_TIME
|
||||||
status.getDescription(), // STAGE
|
status.getDescription(), // STAGE
|
||||||
job.getErrorsOccurred(), // STATUS
|
job.getErrorsOccurred() ? StatusIconCellRenderer.Status.WARNING : StatusIconCellRenderer.Status.OK, // STATUS
|
||||||
((Date.from(Instant.now()).getTime()) - (status.getStartDate().getTime())), // STAGE_TIME
|
((Date.from(Instant.now()).getTime()) - (status.getStartDate().getTime())), // STAGE_TIME
|
||||||
job.getCaseDirectoryPath(), // CASE_DIRECTORY_PATH
|
job.getCaseDirectoryPath(), // CASE_DIRECTORY_PATH
|
||||||
job.getManifest().getFilePath(), // MANIFEST_FILE_PATH
|
job.getManifest().getFilePath(), // MANIFEST_FILE_PATH
|
||||||
@ -662,6 +665,7 @@ public final class AutoIngestDashboard extends JPanel implements Observer {
|
|||||||
tbServicesStatusMessage = new javax.swing.JTextField();
|
tbServicesStatusMessage = new javax.swing.JTextField();
|
||||||
prioritizeJobButton = new javax.swing.JButton();
|
prioritizeJobButton = new javax.swing.JButton();
|
||||||
prioritizeCaseButton = new javax.swing.JButton();
|
prioritizeCaseButton = new javax.swing.JButton();
|
||||||
|
clusterMetricsButton = new javax.swing.JButton();
|
||||||
|
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(jButton1, org.openide.util.NbBundle.getMessage(AutoIngestDashboard.class, "AutoIngestDashboard.jButton1.text")); // NOI18N
|
org.openide.awt.Mnemonics.setLocalizedText(jButton1, org.openide.util.NbBundle.getMessage(AutoIngestDashboard.class, "AutoIngestDashboard.jButton1.text")); // NOI18N
|
||||||
|
|
||||||
@ -762,6 +766,13 @@ public final class AutoIngestDashboard extends JPanel implements Observer {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
org.openide.awt.Mnemonics.setLocalizedText(clusterMetricsButton, org.openide.util.NbBundle.getMessage(AutoIngestDashboard.class, "AutoIngestDashboard.clusterMetricsButton.text")); // NOI18N
|
||||||
|
clusterMetricsButton.addActionListener(new java.awt.event.ActionListener() {
|
||||||
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
|
clusterMetricsButtonActionPerformed(evt);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
|
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
|
||||||
this.setLayout(layout);
|
this.setLayout(layout);
|
||||||
layout.setHorizontalGroup(
|
layout.setHorizontalGroup(
|
||||||
@ -770,24 +781,26 @@ public final class AutoIngestDashboard extends JPanel implements Observer {
|
|||||||
.addContainerGap()
|
.addContainerGap()
|
||||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
|
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
|
||||||
.addComponent(pendingScrollPane)
|
.addComponent(pendingScrollPane)
|
||||||
|
.addComponent(runningScrollPane, javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addComponent(completedScrollPane, javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
|
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
|
||||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
|
||||||
.addComponent(lbPending)
|
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
|
||||||
.addComponent(lbCompleted)
|
|
||||||
.addComponent(lbRunning)
|
|
||||||
.addGroup(layout.createSequentialGroup()
|
|
||||||
.addComponent(lbServicesStatus)
|
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
|
||||||
.addComponent(tbServicesStatusMessage, javax.swing.GroupLayout.PREFERRED_SIZE, 861, javax.swing.GroupLayout.PREFERRED_SIZE))
|
|
||||||
.addGroup(layout.createSequentialGroup()
|
|
||||||
.addComponent(refreshButton, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
|
.addComponent(refreshButton, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
||||||
.addComponent(prioritizeJobButton, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
|
.addComponent(prioritizeJobButton, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
.addComponent(prioritizeCaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)))
|
.addComponent(prioritizeCaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
.addGap(0, 0, Short.MAX_VALUE))
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
||||||
.addComponent(runningScrollPane, javax.swing.GroupLayout.Alignment.LEADING)
|
.addComponent(clusterMetricsButton))
|
||||||
.addComponent(completedScrollPane, javax.swing.GroupLayout.Alignment.LEADING))
|
.addComponent(lbPending, javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addComponent(lbCompleted, javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addComponent(lbRunning, javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
|
||||||
|
.addComponent(lbServicesStatus)
|
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
||||||
|
.addComponent(tbServicesStatusMessage, javax.swing.GroupLayout.PREFERRED_SIZE, 861, javax.swing.GroupLayout.PREFERRED_SIZE)))
|
||||||
|
.addGap(0, 0, Short.MAX_VALUE)))
|
||||||
.addContainerGap())
|
.addContainerGap())
|
||||||
);
|
);
|
||||||
layout.setVerticalGroup(
|
layout.setVerticalGroup(
|
||||||
@ -813,7 +826,8 @@ public final class AutoIngestDashboard extends JPanel implements Observer {
|
|||||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
||||||
.addComponent(refreshButton)
|
.addComponent(refreshButton)
|
||||||
.addComponent(prioritizeJobButton)
|
.addComponent(prioritizeJobButton)
|
||||||
.addComponent(prioritizeCaseButton))
|
.addComponent(prioritizeCaseButton)
|
||||||
|
.addComponent(clusterMetricsButton))
|
||||||
.addContainerGap())
|
.addContainerGap())
|
||||||
);
|
);
|
||||||
}// </editor-fold>//GEN-END:initComponents
|
}// </editor-fold>//GEN-END:initComponents
|
||||||
@ -872,7 +886,12 @@ public final class AutoIngestDashboard extends JPanel implements Observer {
|
|||||||
}
|
}
|
||||||
}//GEN-LAST:event_prioritizeCaseButtonActionPerformed
|
}//GEN-LAST:event_prioritizeCaseButtonActionPerformed
|
||||||
|
|
||||||
|
private void clusterMetricsButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_clusterMetricsButtonActionPerformed
|
||||||
|
new AutoIngestMetricsDialog(this.getTopLevelAncestor(), autoIngestMonitor);
|
||||||
|
}//GEN-LAST:event_clusterMetricsButtonActionPerformed
|
||||||
|
|
||||||
// Variables declaration - do not modify//GEN-BEGIN:variables
|
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||||
|
private javax.swing.JButton clusterMetricsButton;
|
||||||
private javax.swing.JScrollPane completedScrollPane;
|
private javax.swing.JScrollPane completedScrollPane;
|
||||||
private javax.swing.JTable completedTable;
|
private javax.swing.JTable completedTable;
|
||||||
private javax.swing.JButton jButton1;
|
private javax.swing.JButton jButton1;
|
||||||
|
@ -25,7 +25,6 @@ import org.openide.util.HelpCtx;
|
|||||||
import org.openide.util.NbBundle.Messages;
|
import org.openide.util.NbBundle.Messages;
|
||||||
import org.openide.util.actions.CallableSystemAction;
|
import org.openide.util.actions.CallableSystemAction;
|
||||||
import org.sleuthkit.autopsy.core.UserPreferences;
|
import org.sleuthkit.autopsy.core.UserPreferences;
|
||||||
import static org.sleuthkit.autopsy.core.UserPreferences.SelectedMode.REVIEW;
|
|
||||||
import org.sleuthkit.autopsy.coreutils.Logger;
|
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||||
|
|
||||||
@ActionID(category = "Tools", id = "org.sleuthkit.autopsy.experimental.autoingest.AutoIngestDashboardOpenAction")
|
@ActionID(category = "Tools", id = "org.sleuthkit.autopsy.experimental.autoingest.AutoIngestDashboardOpenAction")
|
||||||
@ -39,8 +38,7 @@ public final class AutoIngestDashboardOpenAction extends CallableSystemAction {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isEnabled() {
|
public boolean isEnabled() {
|
||||||
UserPreferences.SelectedMode mode = UserPreferences.getMode();
|
return (UserPreferences.getIsMultiUserModeEnabled());
|
||||||
return (mode == REVIEW);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -62,6 +62,7 @@ import org.openide.util.Lookup;
|
|||||||
import org.sleuthkit.autopsy.casemodule.Case;
|
import org.sleuthkit.autopsy.casemodule.Case;
|
||||||
import org.sleuthkit.autopsy.casemodule.Case.CaseType;
|
import org.sleuthkit.autopsy.casemodule.Case.CaseType;
|
||||||
import org.sleuthkit.autopsy.casemodule.CaseActionException;
|
import org.sleuthkit.autopsy.casemodule.CaseActionException;
|
||||||
|
import org.sleuthkit.autopsy.casemodule.CaseDetails;
|
||||||
import org.sleuthkit.autopsy.casemodule.CaseMetadata;
|
import org.sleuthkit.autopsy.casemodule.CaseMetadata;
|
||||||
import org.sleuthkit.autopsy.coordinationservice.CoordinationService;
|
import org.sleuthkit.autopsy.coordinationservice.CoordinationService;
|
||||||
import org.sleuthkit.autopsy.coordinationservice.CoordinationService.CoordinationServiceException;
|
import org.sleuthkit.autopsy.coordinationservice.CoordinationService.CoordinationServiceException;
|
||||||
@ -117,7 +118,6 @@ public final class AutoIngestManager extends Observable implements PropertyChang
|
|||||||
private static final int NUM_INPUT_SCAN_SCHEDULING_THREADS = 1;
|
private static final int NUM_INPUT_SCAN_SCHEDULING_THREADS = 1;
|
||||||
private static final String INPUT_SCAN_SCHEDULER_THREAD_NAME = "AIM-input-scan-scheduler-%d";
|
private static final String INPUT_SCAN_SCHEDULER_THREAD_NAME = "AIM-input-scan-scheduler-%d";
|
||||||
private static final String INPUT_SCAN_THREAD_NAME = "AIM-input-scan-%d";
|
private static final String INPUT_SCAN_THREAD_NAME = "AIM-input-scan-%d";
|
||||||
private static int DEFAULT_JOB_PRIORITY = 0;
|
|
||||||
private static final String AUTO_INGEST_THREAD_NAME = "AIM-job-processing-%d";
|
private static final String AUTO_INGEST_THREAD_NAME = "AIM-job-processing-%d";
|
||||||
private static final String LOCAL_HOST_NAME = NetworkUtils.getLocalHostName();
|
private static final String LOCAL_HOST_NAME = NetworkUtils.getLocalHostName();
|
||||||
private static final String EVENT_CHANNEL_NAME = "Auto-Ingest-Manager-Events";
|
private static final String EVENT_CHANNEL_NAME = "Auto-Ingest-Manager-Events";
|
||||||
@ -2115,7 +2115,8 @@ public final class AutoIngestManager extends Observable implements PropertyChang
|
|||||||
Case.openAsCurrentCase(metadataFilePath.toString());
|
Case.openAsCurrentCase(metadataFilePath.toString());
|
||||||
} else {
|
} else {
|
||||||
caseDirectoryPath = PathUtils.createCaseFolderPath(rootOutputDirectory, caseName);
|
caseDirectoryPath = PathUtils.createCaseFolderPath(rootOutputDirectory, caseName);
|
||||||
Case.createAsCurrentCase(caseDirectoryPath.toString(), caseName, "", "", CaseType.MULTI_USER_CASE);
|
CaseDetails caseDetails = new CaseDetails(caseName);
|
||||||
|
Case.createAsCurrentCase(CaseType.MULTI_USER_CASE, caseDirectoryPath.toString(), caseDetails);
|
||||||
/*
|
/*
|
||||||
* Sleep a bit before releasing the lock to ensure
|
* Sleep a bit before releasing the lock to ensure
|
||||||
* that the new case folder is visible on the
|
* that the new case folder is visible on the
|
||||||
|
@ -0,0 +1,113 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
|
||||||
|
<Form version="1.5" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JDialogFormInfo">
|
||||||
|
<Properties>
|
||||||
|
<Property name="defaultCloseOperation" type="int" value="2"/>
|
||||||
|
<Property name="alwaysOnTop" type="boolean" value="true"/>
|
||||||
|
<Property name="resizable" type="boolean" value="false"/>
|
||||||
|
</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"/>
|
||||||
|
<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" attributes="0">
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Component id="jScrollPane1" alignment="0" max="32767" attributes="0"/>
|
||||||
|
<Group type="102" alignment="0" attributes="0">
|
||||||
|
<Component id="metricsButton" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Component id="datePicker" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace pref="33" max="32767" attributes="0"/>
|
||||||
|
<Component id="closeButton" min="-2" pref="70" max="-2" 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="1" attributes="0">
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Component id="jScrollPane1" min="-2" pref="128" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace type="unrelated" max="-2" attributes="0"/>
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Group type="103" groupAlignment="3" attributes="0">
|
||||||
|
<Component id="closeButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="metricsButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<Component id="datePicker" min="-2" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<EmptySpace max="32767" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
</DimensionLayout>
|
||||||
|
</Layout>
|
||||||
|
<SubComponents>
|
||||||
|
<Component class="javax.swing.JButton" name="closeButton">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
|
<ResourceString bundle="org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties" key="AutoIngestMetricsDialog.closeButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="closeButtonActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
|
<Container class="javax.swing.JScrollPane" name="jScrollPane1">
|
||||||
|
<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="reportTextArea">
|
||||||
|
<Properties>
|
||||||
|
<Property name="editable" type="boolean" value="false"/>
|
||||||
|
<Property name="columns" type="int" value="20"/>
|
||||||
|
<Property name="rows" type="int" value="5"/>
|
||||||
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
|
<ResourceString bundle="org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties" key="AutoIngestMetricsDialog.reportTextArea.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
|
</SubComponents>
|
||||||
|
</Container>
|
||||||
|
<Component class="javax.swing.JButton" name="metricsButton">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
|
<ResourceString bundle="org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties" key="AutoIngestMetricsDialog.metricsButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="metricsButtonActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
|
<Component class="com.github.lgooddatepicker.datepicker.DatePicker" name="datePicker">
|
||||||
|
<Properties>
|
||||||
|
<Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
|
<ResourceString bundle="org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties" key="AutoIngestMetricsDialog.datePicker.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
<AuxValues>
|
||||||
|
<AuxValue name="JavaCodeGenerator_CreateCodeCustom" type="java.lang.String" value="new DatePicker();"/>
|
||||||
|
</AuxValues>
|
||||||
|
</Component>
|
||||||
|
</SubComponents>
|
||||||
|
</Form>
|
@ -0,0 +1,178 @@
|
|||||||
|
/*
|
||||||
|
* 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.experimental.autoingest;
|
||||||
|
|
||||||
|
import com.github.lgooddatepicker.datepicker.DatePicker;
|
||||||
|
import java.awt.Container;
|
||||||
|
import java.awt.Cursor;
|
||||||
|
import java.awt.Window;
|
||||||
|
import java.sql.Date;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.time.ZoneOffset;
|
||||||
|
import org.openide.util.NbBundle;
|
||||||
|
import org.openide.util.NbBundle.Messages;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Display basic metrics for a cluster.
|
||||||
|
*/
|
||||||
|
final class AutoIngestMetricsDialog extends javax.swing.JDialog {
|
||||||
|
|
||||||
|
private final AutoIngestMonitor autoIngestMonitor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates new form AutoIngestMetricsDialog
|
||||||
|
*
|
||||||
|
* @param parent The parent container.
|
||||||
|
* @param autoIngestMonitor The auto ingest monitor.
|
||||||
|
*/
|
||||||
|
@Messages({
|
||||||
|
"AutoIngestMetricsDialog.title.text=Auto Ingest Cluster Metrics",
|
||||||
|
"AutoIngestMetricsDialog.initReportText=Select a date below and click the 'Get Metrics Since...' button to generate\na metrics report."
|
||||||
|
})
|
||||||
|
AutoIngestMetricsDialog(Container parent, AutoIngestMonitor autoIngestMonitor) {
|
||||||
|
super((Window) parent, NbBundle.getMessage(AutoIngestMetricsDialog.class, "AutoIngestMetricsDialog.title.text"), ModalityType.MODELESS);
|
||||||
|
initComponents();
|
||||||
|
reportTextArea.setText(NbBundle.getMessage(AutoIngestMetricsDialog.class, "AutoIngestMetricsDialog.initReportText"));
|
||||||
|
this.autoIngestMonitor = autoIngestMonitor;
|
||||||
|
setModal(true);
|
||||||
|
setSize(getPreferredSize());
|
||||||
|
setLocationRelativeTo(parent);
|
||||||
|
setVisible(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update the metrics shown in the report text area.
|
||||||
|
*/
|
||||||
|
private void updateMetrics() {
|
||||||
|
if(datePicker.getDate() == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
AutoIngestMonitor.MetricsSnapshot metricsSnapshot = autoIngestMonitor.getMetricsSnapshot();
|
||||||
|
Object[] completedJobDates = metricsSnapshot.getCompletedJobDates().toArray();
|
||||||
|
int count = 0;
|
||||||
|
long pickedDate = datePicker.getDate().atStartOfDay().toEpochSecond(ZoneOffset.UTC) * 1000;
|
||||||
|
for(int i = completedJobDates.length - 1; i >= 0; i--) {
|
||||||
|
if((Long)completedJobDates[i] >= pickedDate) {
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SimpleDateFormat dateFormatter = new SimpleDateFormat("MMM d, yyyy");
|
||||||
|
reportTextArea.setText(String.format(
|
||||||
|
"Since %s:\n" +
|
||||||
|
"\tNumber of Jobs Completed: %d\n",
|
||||||
|
dateFormatter.format(Date.valueOf(datePicker.getDate())),
|
||||||
|
count
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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() {
|
||||||
|
|
||||||
|
closeButton = new javax.swing.JButton();
|
||||||
|
jScrollPane1 = new javax.swing.JScrollPane();
|
||||||
|
reportTextArea = new javax.swing.JTextArea();
|
||||||
|
metricsButton = new javax.swing.JButton();
|
||||||
|
datePicker = new DatePicker();
|
||||||
|
|
||||||
|
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
|
||||||
|
setAlwaysOnTop(true);
|
||||||
|
setResizable(false);
|
||||||
|
|
||||||
|
org.openide.awt.Mnemonics.setLocalizedText(closeButton, org.openide.util.NbBundle.getMessage(AutoIngestMetricsDialog.class, "AutoIngestMetricsDialog.closeButton.text")); // NOI18N
|
||||||
|
closeButton.addActionListener(new java.awt.event.ActionListener() {
|
||||||
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
|
closeButtonActionPerformed(evt);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
reportTextArea.setEditable(false);
|
||||||
|
reportTextArea.setColumns(20);
|
||||||
|
reportTextArea.setRows(5);
|
||||||
|
reportTextArea.setText(org.openide.util.NbBundle.getMessage(AutoIngestMetricsDialog.class, "AutoIngestMetricsDialog.reportTextArea.text")); // NOI18N
|
||||||
|
jScrollPane1.setViewportView(reportTextArea);
|
||||||
|
|
||||||
|
org.openide.awt.Mnemonics.setLocalizedText(metricsButton, org.openide.util.NbBundle.getMessage(AutoIngestMetricsDialog.class, "AutoIngestMetricsDialog.metricsButton.text")); // NOI18N
|
||||||
|
metricsButton.addActionListener(new java.awt.event.ActionListener() {
|
||||||
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
|
metricsButtonActionPerformed(evt);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
datePicker.setToolTipText(org.openide.util.NbBundle.getMessage(AutoIngestMetricsDialog.class, "AutoIngestMetricsDialog.datePicker.toolTipText")); // NOI18N
|
||||||
|
|
||||||
|
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
|
||||||
|
getContentPane().setLayout(layout);
|
||||||
|
layout.setHorizontalGroup(
|
||||||
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addGroup(layout.createSequentialGroup()
|
||||||
|
.addContainerGap()
|
||||||
|
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addComponent(jScrollPane1)
|
||||||
|
.addGroup(layout.createSequentialGroup()
|
||||||
|
.addComponent(metricsButton)
|
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
|
.addComponent(datePicker, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 33, Short.MAX_VALUE)
|
||||||
|
.addComponent(closeButton, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)))
|
||||||
|
.addContainerGap())
|
||||||
|
);
|
||||||
|
layout.setVerticalGroup(
|
||||||
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
|
||||||
|
.addContainerGap()
|
||||||
|
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 128, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
||||||
|
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
||||||
|
.addComponent(closeButton)
|
||||||
|
.addComponent(metricsButton))
|
||||||
|
.addComponent(datePicker, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
|
||||||
|
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
||||||
|
);
|
||||||
|
|
||||||
|
pack();
|
||||||
|
}// </editor-fold>//GEN-END:initComponents
|
||||||
|
|
||||||
|
private void closeButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_closeButtonActionPerformed
|
||||||
|
setVisible(false);
|
||||||
|
dispose();
|
||||||
|
}//GEN-LAST:event_closeButtonActionPerformed
|
||||||
|
|
||||||
|
private void metricsButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_metricsButtonActionPerformed
|
||||||
|
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
|
||||||
|
updateMetrics();
|
||||||
|
setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
|
||||||
|
}//GEN-LAST:event_metricsButtonActionPerformed
|
||||||
|
|
||||||
|
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||||
|
private javax.swing.JButton closeButton;
|
||||||
|
private com.github.lgooddatepicker.datepicker.DatePicker datePicker;
|
||||||
|
private javax.swing.JScrollPane jScrollPane1;
|
||||||
|
private javax.swing.JButton metricsButton;
|
||||||
|
private javax.swing.JTextArea reportTextArea;
|
||||||
|
// End of variables declaration//GEN-END:variables
|
||||||
|
}
|
@ -23,10 +23,12 @@ import java.beans.PropertyChangeEvent;
|
|||||||
import java.beans.PropertyChangeListener;
|
import java.beans.PropertyChangeListener;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.Date;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Observable;
|
import java.util.Observable;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.TreeSet;
|
||||||
import java.util.concurrent.ScheduledThreadPoolExecutor;
|
import java.util.concurrent.ScheduledThreadPoolExecutor;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
@ -43,7 +45,7 @@ import org.sleuthkit.autopsy.experimental.autoingest.AutoIngestJob.ProcessingSta
|
|||||||
* An auto ingest monitor responsible for monitoring and reporting the
|
* An auto ingest monitor responsible for monitoring and reporting the
|
||||||
* processing of auto ingest jobs.
|
* processing of auto ingest jobs.
|
||||||
*/
|
*/
|
||||||
public final class AutoIngestMonitor extends Observable implements PropertyChangeListener {
|
final class AutoIngestMonitor extends Observable implements PropertyChangeListener {
|
||||||
|
|
||||||
private static final Logger LOGGER = Logger.getLogger(AutoIngestMonitor.class.getName());
|
private static final Logger LOGGER = Logger.getLogger(AutoIngestMonitor.class.getName());
|
||||||
private static final int NUM_COORD_SVC_QUERY_THREADS = 1;
|
private static final int NUM_COORD_SVC_QUERY_THREADS = 1;
|
||||||
@ -265,17 +267,86 @@ public final class AutoIngestMonitor extends Observable implements PropertyChang
|
|||||||
}
|
}
|
||||||
} catch (InterruptedException ex) {
|
} catch (InterruptedException ex) {
|
||||||
LOGGER.log(Level.SEVERE, String.format("Unexpected interrupt while retrieving coordination service node data for '%s'", node), ex);
|
LOGGER.log(Level.SEVERE, String.format("Unexpected interrupt while retrieving coordination service node data for '%s'", node), ex);
|
||||||
} catch (AutoIngestJobNodeData.InvalidDataException | AutoIngestJob.AutoIngestJobException ex) {
|
} catch (AutoIngestJobNodeData.InvalidDataException ex) {
|
||||||
LOGGER.log(Level.SEVERE, String.format("Unable to use node data for '%s'", node), ex);
|
LOGGER.log(Level.SEVERE, String.format("Unable to use node data for '%s'", node), ex);
|
||||||
|
} catch (AutoIngestJob.AutoIngestJobException ex) {
|
||||||
|
LOGGER.log(Level.SEVERE, String.format("Failed to create a job for '%s'", node), ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return newJobsSnapshot;
|
return newJobsSnapshot;
|
||||||
|
|
||||||
} catch (CoordinationServiceException ex) {
|
} catch (CoordinationServiceException ex) {
|
||||||
LOGGER.log(Level.SEVERE, "Failed to get node list from coordination service", ex);
|
LOGGER.log(Level.SEVERE, "Failed to get node list from coordination service", ex);
|
||||||
return new JobsSnapshot();
|
return new JobsSnapshot();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets a new metrics snapshot from the coordination service for an auto
|
||||||
|
* ingest cluster.
|
||||||
|
*
|
||||||
|
* @return The metrics snapshot.
|
||||||
|
*/
|
||||||
|
private MetricsSnapshot queryCoordinationServiceForMetrics() {
|
||||||
|
try {
|
||||||
|
MetricsSnapshot newMetricsSnapshot = new MetricsSnapshot();
|
||||||
|
List<String> nodeList = coordinationService.getNodeList(CoordinationService.CategoryNode.MANIFESTS);
|
||||||
|
for (String node : nodeList) {
|
||||||
|
try {
|
||||||
|
AutoIngestJobNodeData nodeData = new AutoIngestJobNodeData(coordinationService.getNodeData(CoordinationService.CategoryNode.MANIFESTS, node));
|
||||||
|
if (nodeData.getVersion() < 1) {
|
||||||
|
/*
|
||||||
|
* Ignore version '0' nodes that have not been
|
||||||
|
* "upgraded" since they don't carry enough data.
|
||||||
|
*/
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
AutoIngestJob job = new AutoIngestJob(nodeData);
|
||||||
|
ProcessingStatus processingStatus = nodeData.getProcessingStatus();
|
||||||
|
switch (processingStatus) {
|
||||||
|
case PENDING:
|
||||||
|
case PROCESSING:
|
||||||
|
case DELETED:
|
||||||
|
/*
|
||||||
|
* These are not jobs we care about for metrics, so
|
||||||
|
* we will ignore them.
|
||||||
|
*/
|
||||||
|
break;
|
||||||
|
case COMPLETED:
|
||||||
|
newMetricsSnapshot.addCompletedJobDate(job.getCompletedDate());
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
LOGGER.log(Level.SEVERE, "Unknown AutoIngestJobData.ProcessingStatus");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} catch (InterruptedException ex) {
|
||||||
|
LOGGER.log(Level.SEVERE, String.format("Unexpected interrupt while retrieving coordination service node data for '%s'", node), ex);
|
||||||
|
} catch (AutoIngestJobNodeData.InvalidDataException ex) {
|
||||||
|
LOGGER.log(Level.SEVERE, String.format("Unable to use node data for '%s'", node), ex);
|
||||||
|
} catch (AutoIngestJob.AutoIngestJobException ex) {
|
||||||
|
LOGGER.log(Level.SEVERE, String.format("Failed to create a job for '%s'", node), ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return newMetricsSnapshot;
|
||||||
|
|
||||||
|
} catch (CoordinationServiceException ex) {
|
||||||
|
LOGGER.log(Level.SEVERE, "Failed to get node list from coordination service", ex);
|
||||||
|
return new MetricsSnapshot();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets a new metrics snapshot. The jobs snapshot will also be updated in
|
||||||
|
* effect.
|
||||||
|
*
|
||||||
|
* @return The metrics snapshot.
|
||||||
|
*/
|
||||||
|
public MetricsSnapshot getMetricsSnapshot() {
|
||||||
|
return queryCoordinationServiceForMetrics();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Bumps the priority of all pending ingest jobs for a specified case.
|
* Bumps the priority of all pending ingest jobs for a specified case.
|
||||||
*
|
*
|
||||||
@ -522,6 +593,32 @@ public final class AutoIngestMonitor extends Observable implements PropertyChang
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A snapshot of metrics for an auto ingest cluster.
|
||||||
|
*/
|
||||||
|
public static final class MetricsSnapshot {
|
||||||
|
|
||||||
|
private final List<Long> completedJobDates = new ArrayList<>();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets a list of completed job dates, formatted in milliseconds.
|
||||||
|
*
|
||||||
|
* @return The completed job dates, formatted in milliseconds.
|
||||||
|
*/
|
||||||
|
List<Long> getCompletedJobDates() {
|
||||||
|
return new ArrayList<>(completedJobDates);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a new date to the list of completed job dates.
|
||||||
|
*
|
||||||
|
* @param date The date to be added.
|
||||||
|
*/
|
||||||
|
void addCompletedJobDate(Date date) {
|
||||||
|
completedJobDates.add(date.getTime());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Exception type thrown when there is an error completing an auto ingest
|
* Exception type thrown when there is an error completing an auto ingest
|
||||||
* monitor operation.
|
* monitor operation.
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
CTL_OpenAction=Open Case...
|
|
||||||
AutoIngestDashboard.lbCompleted.text=Completed Jobs
|
AutoIngestDashboard.lbCompleted.text=Completed Jobs
|
||||||
AutoIngestDashboard.lbRunning.text=Running Jobs
|
AutoIngestDashboard.lbRunning.text=Running Jobs
|
||||||
AutoIngestDashboard.lbPending.text=Pending Jobs
|
AutoIngestDashboard.lbPending.text=Pending Jobs
|
||||||
@ -47,14 +46,10 @@ OpenIDE-Module-Long-Description=\
|
|||||||
We make no guarantee that the API of this module will not change, so developers should be careful when relying on it.
|
We make no guarantee that the API of this module will not change, so developers should be careful when relying on it.
|
||||||
OpenIDE-Module-Name=Experimental
|
OpenIDE-Module-Name=Experimental
|
||||||
OpenIDE-Module-Short-Description=This module contains features that are being developed by Basis Technology and are not part of the default Autopsy distribution.
|
OpenIDE-Module-Short-Description=This module contains features that are being developed by Basis Technology and are not part of the default Autopsy distribution.
|
||||||
ReviewModeCasePanel.cannotOpenCase=Cannot Open Case
|
|
||||||
ReviewModeCasePanel.casePathNotFound=Case path not found
|
|
||||||
ReviewModeCasePanel.caseIsLocked=Single-user case is locked.
|
|
||||||
DisplayLogDialog.cannotOpenLog=Unable to open the selected case log file
|
DisplayLogDialog.cannotOpenLog=Unable to open the selected case log file
|
||||||
DisplayLogDialog.cannotFindLog=Unable to find the selected case log file
|
DisplayLogDialog.cannotFindLog=Unable to find the selected case log file
|
||||||
DisplayLogDialog.unableToShowLogFile=Unable to show log file
|
DisplayLogDialog.unableToShowLogFile=Unable to show log file
|
||||||
DisplayLogDialog.okay=Okay
|
DisplayLogDialog.okay=Okay
|
||||||
ReviewModeCasePanel.bnShowLog.text=&Show Log
|
|
||||||
CopyFilesPanel.lbFrom.text=From Source
|
CopyFilesPanel.lbFrom.text=From Source
|
||||||
CopyFilesPanel.lbTo.text=Destination Case
|
CopyFilesPanel.lbTo.text=Destination Case
|
||||||
CopyFilesPanel.bnCopy.text=&Copy
|
CopyFilesPanel.bnCopy.text=&Copy
|
||||||
@ -128,8 +123,6 @@ CopyFilesPanel.cbThrottleNetwork.toolTipText=<html>Select this box if a low-band
|
|||||||
CopyFilesPanel.bnShowCurrentLog.text=Show &Log
|
CopyFilesPanel.bnShowCurrentLog.text=Show &Log
|
||||||
CopyFilesPanel.bnShowCurrentLog.text=Show &Log
|
CopyFilesPanel.bnShowCurrentLog.text=Show &Log
|
||||||
CopyFilesPanel.lbCaseName.text=Case Name
|
CopyFilesPanel.lbCaseName.text=Case Name
|
||||||
CaseStatusIconCellRenderer.tooltiptext.ok=Images processed successfully
|
|
||||||
CaseStatusIconCellRenderer.tooltiptext.warning=An error occurred or processing was canceled for at least one image - please check the log
|
|
||||||
OptionsCategory_Name_Case_Import=Case Import
|
OptionsCategory_Name_Case_Import=Case Import
|
||||||
OptionsCategory_Keywords_Case_Import=Case Import Settings
|
OptionsCategory_Keywords_Case_Import=Case Import Settings
|
||||||
CaseImportPanel.validationErrMsg.MUdisabled=Multi user settings must be enabled and saved
|
CaseImportPanel.validationErrMsg.MUdisabled=Multi user settings must be enabled and saved
|
||||||
@ -165,11 +158,6 @@ SingleUserCaseImporter.FailedToComplete=Failed to complete processing of
|
|||||||
SingleUserCaseImporter.CompletedBatch=Completed batch processing of
|
SingleUserCaseImporter.CompletedBatch=Completed batch processing of
|
||||||
SingleUserCaseImporter.AbortingBatch=Aborting batch processing of
|
SingleUserCaseImporter.AbortingBatch=Aborting batch processing of
|
||||||
SingleUserCaseImporter.SourceImageMissing=. Source image missing for
|
SingleUserCaseImporter.SourceImageMissing=. Source image missing for
|
||||||
ReviewModeCasePanel.CaseHeaderText=Case
|
|
||||||
ReviewModeCasePanel.CreatedTimeHeaderText=Created Time
|
|
||||||
ReviewModeCasePanel.StatusIconHeaderText=Status
|
|
||||||
ReviewModeCasePanel.OutputFolderHeaderText=Output Folder
|
|
||||||
ReviewModeCasePanel.LastAccessedTimeHeaderText=Last Accessed Time
|
|
||||||
CopyFilesPanel.bnOptions.text=&Options
|
CopyFilesPanel.bnOptions.text=&Options
|
||||||
AutoIngestDashboard.lbServicesStatus.text=Services Status:
|
AutoIngestDashboard.lbServicesStatus.text=Services Status:
|
||||||
AutoIngestDashboard.tbServicesStatusMessage.text=Connecting...
|
AutoIngestDashboard.tbServicesStatusMessage.text=Connecting...
|
||||||
@ -231,15 +219,6 @@ FileExporterSettingsPanel.BrowseReportTooltip_1=Browse for the Reports Folder
|
|||||||
FileExporterSettingsPanel.NewRuleTooltip_1=Clear the rule editor to begin a new rule
|
FileExporterSettingsPanel.NewRuleTooltip_1=Clear the rule editor to begin a new rule
|
||||||
FileExporterSettingsPanel.DeleteTooltip_1=Delete the selected rule
|
FileExporterSettingsPanel.DeleteTooltip_1=Delete the selected rule
|
||||||
FileExporterSettingsPanel.SaveTooltip_1=Save the current rule
|
FileExporterSettingsPanel.SaveTooltip_1=Save the current rule
|
||||||
AutoIngestCasePanel.rbDays.text=Days
|
|
||||||
AutoIngestCasePanel.rbWeeks.text=Weeks
|
|
||||||
AutoIngestCasePanel.rbMonths.text=Months
|
|
||||||
AutoIngestCasePanel.rbAllCases.text=Everything
|
|
||||||
AutoIngestCasePanel.bnRefresh.text=&Refresh
|
|
||||||
AutoIngestCasePanel.bnOpen.text=&Open
|
|
||||||
AutoIngestCasePanel.bnShowLog.toolTipText=Display case log file for selected case
|
|
||||||
AutoIngestCasePanel.bnShowLog.text=&Show Log
|
|
||||||
AutoIngestCasePanel.rbGroupLabel.text=Show cases accessed in the last 10:
|
|
||||||
AutoIngestDashboard.refreshButton.toolTipText=Refresh displayed tables
|
AutoIngestDashboard.refreshButton.toolTipText=Refresh displayed tables
|
||||||
AutoIngestDashboard.refreshButton.text=&Refresh
|
AutoIngestDashboard.refreshButton.text=&Refresh
|
||||||
AutoIngestDashboard.jButton1.text=jButton1
|
AutoIngestDashboard.jButton1.text=jButton1
|
||||||
@ -247,6 +226,11 @@ AutoIngestDashboard.prioritizeJobButton.toolTipText=Move the selected job to the
|
|||||||
AutoIngestDashboard.prioritizeJobButton.text=Prioritize &Job
|
AutoIngestDashboard.prioritizeJobButton.text=Prioritize &Job
|
||||||
AutoIngestDashboard.prioritizeCaseButton.toolTipText=Move all images associated with a case to top of Pending queue.
|
AutoIngestDashboard.prioritizeCaseButton.toolTipText=Move all images associated with a case to top of Pending queue.
|
||||||
AutoIngestDashboard.prioritizeCaseButton.text=Prioritize &Case
|
AutoIngestDashboard.prioritizeCaseButton.text=Prioritize &Case
|
||||||
|
AutoIngestMetricsDialog.reportTextArea.text=
|
||||||
|
AutoIngestDashboard.clusterMetricsButton.text=Cluster Metrics
|
||||||
|
AutoIngestMetricsDialog.metricsButton.text=Get Metrics Since...
|
||||||
|
AutoIngestMetricsDialog.closeButton.text=Close
|
||||||
|
AutoIngestMetricsDialog.datePicker.toolTipText=Choose a date
|
||||||
ArchiveFilePanel.pathLabel.text=Browse for an archive file:
|
ArchiveFilePanel.pathLabel.text=Browse for an archive file:
|
||||||
ArchiveFilePanel.browseButton.text=Browse
|
ArchiveFilePanel.browseButton.text=Browse
|
||||||
ArchiveFilePanel.pathTextField.text=
|
ArchiveFilePanel.pathTextField.text=
|
||||||
|
@ -672,7 +672,6 @@ public class CaseImportPanel extends javax.swing.JPanel implements ImportDoneCal
|
|||||||
*/
|
*/
|
||||||
private void enableStartButton() {
|
private void enableStartButton() {
|
||||||
if (UserPreferences.getIsMultiUserModeEnabled()
|
if (UserPreferences.getIsMultiUserModeEnabled()
|
||||||
&& AutoIngestUserPreferences.getJoinAutoModeCluster()
|
|
||||||
&& (! RuntimeProperties.runningWithGUI())
|
&& (! RuntimeProperties.runningWithGUI())
|
||||||
&& !tbCaseSource.getText().isEmpty()
|
&& !tbCaseSource.getText().isEmpty()
|
||||||
&& !tbCaseDestination.getText().isEmpty()
|
&& !tbCaseDestination.getText().isEmpty()
|
||||||
|
@ -1,53 +0,0 @@
|
|||||||
/*
|
|
||||||
* Autopsy Forensic Browser
|
|
||||||
*
|
|
||||||
* Copyright 2015 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.experimental.autoingest;
|
|
||||||
|
|
||||||
import java.awt.Component;
|
|
||||||
import javax.swing.ImageIcon;
|
|
||||||
import javax.swing.JTable;
|
|
||||||
import static javax.swing.SwingConstants.CENTER;
|
|
||||||
import org.openide.util.ImageUtilities;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A JTable cell renderer that represents an auto ingest alert file exists flag
|
|
||||||
* as a center-aligned icon, and grays out the cell if the table is disabled.
|
|
||||||
*/
|
|
||||||
class CaseStatusIconCellRenderer extends GrayableCellRenderer {
|
|
||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
|
||||||
static final ImageIcon checkedIcon = new ImageIcon(ImageUtilities.loadImage("org/sleuthkit/autopsy/experimental/images/tick.png", false));
|
|
||||||
static final ImageIcon warningIcon = new ImageIcon(ImageUtilities.loadImage("org/sleuthkit/autopsy/experimental/images/warning16.png", false));
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
|
|
||||||
setHorizontalAlignment(CENTER);
|
|
||||||
if ((value instanceof Boolean)) {
|
|
||||||
if (true == (Boolean) value) {
|
|
||||||
setIcon(warningIcon);
|
|
||||||
setToolTipText(org.openide.util.NbBundle.getMessage(CaseStatusIconCellRenderer.class, "CaseStatusIconCellRenderer.tooltiptext.warning"));
|
|
||||||
} else {
|
|
||||||
setIcon(checkedIcon);
|
|
||||||
setToolTipText(org.openide.util.NbBundle.getMessage(CaseStatusIconCellRenderer.class, "CaseStatusIconCellRenderer.tooltiptext.ok"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
grayCellIfTableNotEnabled(table, isSelected);
|
|
||||||
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
}
|
|
@ -26,6 +26,7 @@ import java.util.ArrayList;
|
|||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import org.sleuthkit.autopsy.casemodule.CaseMetadata;
|
import org.sleuthkit.autopsy.casemodule.CaseMetadata;
|
||||||
|
import org.sleuthkit.autopsy.coreutils.TimeStampUtils;
|
||||||
|
|
||||||
final class PathUtils {
|
final class PathUtils {
|
||||||
|
|
||||||
|
@ -47,6 +47,7 @@ import org.sleuthkit.autopsy.casemodule.SingleUserCaseConverter;
|
|||||||
import org.sleuthkit.autopsy.casemodule.SingleUserCaseConverter.ImportCaseData;
|
import org.sleuthkit.autopsy.casemodule.SingleUserCaseConverter.ImportCaseData;
|
||||||
import org.sleuthkit.autopsy.coreutils.Logger;
|
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||||
import org.sleuthkit.autopsy.coreutils.NetworkUtils;
|
import org.sleuthkit.autopsy.coreutils.NetworkUtils;
|
||||||
|
import org.sleuthkit.autopsy.coreutils.TimeStampUtils;
|
||||||
|
|
||||||
public class SingleUserCaseImporter implements Runnable {
|
public class SingleUserCaseImporter implements Runnable {
|
||||||
|
|
||||||
|
@ -2,20 +2,6 @@
|
|||||||
<!DOCTYPE filesystem PUBLIC "-//NetBeans//DTD Filesystem 1.2//EN" "http://www.netbeans.org/dtds/filesystem-1_2.dtd">
|
<!DOCTYPE filesystem PUBLIC "-//NetBeans//DTD Filesystem 1.2//EN" "http://www.netbeans.org/dtds/filesystem-1_2.dtd">
|
||||||
<filesystem>
|
<filesystem>
|
||||||
|
|
||||||
<!-- ======================================================
|
|
||||||
Actions
|
|
||||||
====================================================== -->
|
|
||||||
<folder name="Actions">
|
|
||||||
<folder name="Case">
|
|
||||||
<file name="org-sleuthkit-autopsy-experimental-autoingest-AutoIngestCaseOpenAction.instance">
|
|
||||||
<attr name="delegate" newvalue="org.sleuthkit.autopsy.experimental.autoingest.AutoIngestCaseOpenAction"/>
|
|
||||||
<attr name="displayName" stringvalue="Open Case"/>
|
|
||||||
<attr name="instanceCreate" methodvalue="org.openide.awt.Actions.alwaysEnabled"/>
|
|
||||||
<attr name="noIconInMenu" boolvalue="false"/>
|
|
||||||
</file>
|
|
||||||
</folder>
|
|
||||||
</folder>
|
|
||||||
|
|
||||||
<!-- ======================================================
|
<!-- ======================================================
|
||||||
Menu hidden
|
Menu hidden
|
||||||
=========================================================== -->
|
=========================================================== -->
|
||||||
@ -23,19 +9,12 @@
|
|||||||
<folder name="Help">
|
<folder name="Help">
|
||||||
<file name="org-sleuthkit-autopsy-corecomponents-CustomAboutAction.shadow_hidden"/>
|
<file name="org-sleuthkit-autopsy-corecomponents-CustomAboutAction.shadow_hidden"/>
|
||||||
</folder>
|
</folder>
|
||||||
<folder name="Case">
|
</folder>
|
||||||
<file name="org-sleuthkit-autopsy-casemodule-CaseOpenAction.shadow_hidden"/>
|
|
||||||
<file name="org-sleuthkit-autopsy-experimental-autoingest-AutoIngestCaseOpenAction.shadow">
|
<folder name="Windows2">
|
||||||
<attr name="originalFile" stringvalue="Actions/Case/org-sleuthkit-autopsy-experimental-autoingest-AutoIngestCaseOpenAction.instance"/>
|
<folder name="Modes">
|
||||||
<attr name="position" intvalue="101"/>
|
<file name="dashboard.wsmode" url="dashboardWsmode.xml"/>
|
||||||
</file>
|
|
||||||
</folder>
|
</folder>
|
||||||
</folder>
|
</folder>
|
||||||
|
|
||||||
<folder name="Windows2">
|
|
||||||
<folder name="Modes">
|
|
||||||
<file name="dashboard.wsmode" url="dashboardWsmode.xml"/>
|
|
||||||
</folder>
|
|
||||||
</folder>
|
|
||||||
|
|
||||||
</filesystem>
|
</filesystem>
|
||||||
|
@ -1,10 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" ?>
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
|
||||||
<Form version="1.5" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
|
<Form version="1.5" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
|
||||||
<NonVisualComponents>
|
|
||||||
<Component class="javax.swing.ButtonGroup" name="modeRadioButtons">
|
|
||||||
</Component>
|
|
||||||
</NonVisualComponents>
|
|
||||||
<AuxValues>
|
<AuxValues>
|
||||||
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/>
|
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/>
|
||||||
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
|
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
|
||||||
@ -56,18 +52,71 @@
|
|||||||
<Group type="102" alignment="0" attributes="0">
|
<Group type="102" alignment="0" attributes="0">
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Group type="102" attributes="0">
|
<Group type="102" alignment="0" attributes="0">
|
||||||
<Component id="cbJoinAutoIngestCluster" min="-2" pref="171" max="-2" attributes="0"/>
|
<Component id="jLabelCurrentTask" min="-2" max="-2" attributes="0"/>
|
||||||
<EmptySpace type="separate" max="-2" attributes="0"/>
|
<EmptySpace type="unrelated" max="-2" attributes="0"/>
|
||||||
<Component id="tbOops" min="-2" pref="465" max="-2" attributes="0"/>
|
<Component id="jLabelTaskDescription" max="32767" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
<Group type="103" groupAlignment="0" max="-2" attributes="0">
|
<Group type="102" alignment="0" attributes="0">
|
||||||
<Component id="jPanelNodeType" max="32767" attributes="0"/>
|
<Group type="103" groupAlignment="1" attributes="0">
|
||||||
<Component id="jPanelSharedConfig" alignment="0" max="32767" attributes="0"/>
|
<Component id="outputPathTextField" alignment="0" max="32767" attributes="0"/>
|
||||||
<Component id="jPanelIngestSettings" alignment="0" max="32767" attributes="0"/>
|
<Component id="inputPathTextField" alignment="0" max="32767" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<EmptySpace min="-2" pref="10" max="-2" attributes="0"/>
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Component id="browseInputFolderButton" alignment="1" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="browseOutputFolderButton" alignment="1" min="-2" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
<Group type="102" alignment="0" attributes="0">
|
||||||
|
<Component id="jLabelSelectInputFolder" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace type="separate" max="-2" attributes="0"/>
|
||||||
|
<Component id="jLabelInvalidImageFolder" max="32767" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<Group type="102" attributes="0">
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Component id="uploadButton" alignment="0" min="-2" pref="143" max="-2" attributes="0"/>
|
||||||
|
<Component id="pbTaskInProgress" alignment="0" min="-2" pref="695" max="-2" attributes="0"/>
|
||||||
|
<Component id="masterNodeCheckBox" alignment="0" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Group type="102" attributes="0">
|
||||||
|
<Component id="cbJoinAutoIngestCluster" min="-2" pref="171" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace type="separate" max="-2" attributes="0"/>
|
||||||
|
<Component id="tbOops" min="-2" pref="465" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<Group type="102" alignment="0" attributes="0">
|
||||||
|
<Component id="bnEditIngestSettings" min="-2" pref="155" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Component id="bnAdvancedSettings" min="-2" pref="155" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Component id="bnFileExport" min="-2" pref="155" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Component id="bnLogging" min="-2" pref="155" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<Group type="102" alignment="0" attributes="0">
|
||||||
|
<Component id="jLabelSelectOutputFolder" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace type="separate" max="-2" attributes="0"/>
|
||||||
|
<Component id="jLabelInvalidResultsFolder" min="-2" pref="544" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<Group type="102" alignment="0" attributes="0">
|
||||||
|
<Component id="sharedConfigCheckbox" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace type="unrelated" max="-2" attributes="0"/>
|
||||||
|
<Component id="sharedSettingsErrorTextField" min="-2" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<Group type="102" alignment="0" attributes="0">
|
||||||
|
<Component id="sharedSettingsTextField" min="-2" pref="400" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Component id="browseSharedSettingsButton" min="-2" pref="143" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<Group type="102" alignment="0" attributes="0">
|
||||||
|
<Component id="downloadButton" min="-2" pref="143" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace type="unrelated" max="-2" attributes="0"/>
|
||||||
|
<Component id="configButtonErrorTextField" min="-2" pref="396" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
<EmptySpace min="0" pref="32" max="32767" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
<EmptySpace max="32767" attributes="0"/>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
</DimensionLayout>
|
</DimensionLayout>
|
||||||
@ -79,542 +128,65 @@
|
|||||||
<Component id="cbJoinAutoIngestCluster" alignment="3" min="-2" max="-2" attributes="0"/>
|
<Component id="cbJoinAutoIngestCluster" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="tbOops" alignment="3" min="-2" max="-2" attributes="0"/>
|
<Component id="tbOops" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
<EmptySpace min="-2" pref="3" max="-2" attributes="0"/>
|
<EmptySpace type="separate" max="-2" attributes="0"/>
|
||||||
<Component id="jPanelNodeType" min="-2" max="-2" attributes="0"/>
|
<Group type="103" groupAlignment="3" attributes="0">
|
||||||
|
<Component id="jLabelSelectInputFolder" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="jLabelInvalidImageFolder" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<EmptySpace min="-2" pref="1" max="-2" attributes="0"/>
|
||||||
|
<Group type="103" groupAlignment="3" attributes="0">
|
||||||
|
<Component id="inputPathTextField" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="browseInputFolderButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
<Component id="jPanelIngestSettings" min="-2" pref="62" max="-2" attributes="0"/>
|
<Group type="103" groupAlignment="3" attributes="0">
|
||||||
|
<Component id="jLabelSelectOutputFolder" alignment="3" min="-2" pref="21" max="-2" attributes="0"/>
|
||||||
|
<Component id="jLabelInvalidResultsFolder" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<EmptySpace min="-2" pref="1" max="-2" attributes="0"/>
|
||||||
|
<Group type="103" groupAlignment="3" attributes="0">
|
||||||
|
<Component id="browseOutputFolderButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="outputPathTextField" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<EmptySpace min="-2" pref="25" max="-2" attributes="0"/>
|
||||||
|
<Group type="103" groupAlignment="3" attributes="0">
|
||||||
|
<Component id="bnEditIngestSettings" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="bnFileExport" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="bnAdvancedSettings" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="bnLogging" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<EmptySpace type="separate" max="-2" attributes="0"/>
|
||||||
|
<Group type="103" groupAlignment="3" attributes="0">
|
||||||
|
<Component id="sharedConfigCheckbox" alignment="3" min="-2" pref="21" max="-2" attributes="0"/>
|
||||||
|
<Component id="sharedSettingsErrorTextField" alignment="3" min="-2" pref="21" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
<Component id="jPanelSharedConfig" max="32767" attributes="0"/>
|
<Group type="103" groupAlignment="3" attributes="0">
|
||||||
|
<Component id="sharedSettingsTextField" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="browseSharedSettingsButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<EmptySpace type="unrelated" max="-2" attributes="0"/>
|
||||||
|
<Group type="103" groupAlignment="3" attributes="0">
|
||||||
|
<Component id="downloadButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="configButtonErrorTextField" alignment="3" min="-2" pref="21" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<EmptySpace type="separate" max="-2" attributes="0"/>
|
||||||
|
<Component id="masterNodeCheckBox" min="-2" pref="23" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Component id="uploadButton" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace min="-2" pref="8" max="-2" attributes="0"/>
|
||||||
|
<Group type="103" groupAlignment="3" attributes="0">
|
||||||
|
<Component id="jLabelCurrentTask" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="jLabelTaskDescription" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Component id="pbTaskInProgress" min="-2" pref="22" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace pref="161" max="32767" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
</DimensionLayout>
|
</DimensionLayout>
|
||||||
</Layout>
|
</Layout>
|
||||||
<SubComponents>
|
<SubComponents>
|
||||||
<Container class="javax.swing.JPanel" name="jPanelNodeType">
|
|
||||||
<Properties>
|
|
||||||
<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="Node Type Setup">
|
|
||||||
<Border PropertyName="innerBorder" info="org.netbeans.modules.form.compat2.border.EtchedBorderInfo">
|
|
||||||
<EtchetBorder/>
|
|
||||||
</Border>
|
|
||||||
<ResourceString PropertyName="titleX" bundle="org/sleuthkit/autopsy/experimental/configuration/Bundle.properties" key="AutoIngestSettingsPanel.jPanelNodeType.border.title" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
|
||||||
</TitledBorder>
|
|
||||||
</Border>
|
|
||||||
</Property>
|
|
||||||
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
|
||||||
<Dimension value="[50, 50]"/>
|
|
||||||
</Property>
|
|
||||||
</Properties>
|
|
||||||
|
|
||||||
<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="0" attributes="0">
|
|
||||||
<Group type="103" groupAlignment="1" attributes="0">
|
|
||||||
<Component id="outputPathTextField" alignment="0" max="32767" attributes="0"/>
|
|
||||||
<Component id="inputPathTextField" alignment="0" max="32767" attributes="0"/>
|
|
||||||
</Group>
|
|
||||||
<EmptySpace min="-2" pref="10" max="-2" attributes="0"/>
|
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
|
||||||
<Component id="browseInputFolderButton" alignment="1" min="-2" max="-2" attributes="0"/>
|
|
||||||
<Component id="browseOutputFolderButton" alignment="1" min="-2" max="-2" attributes="0"/>
|
|
||||||
</Group>
|
|
||||||
</Group>
|
|
||||||
<Group type="102" attributes="0">
|
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
|
||||||
<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>
|
|
||||||
<EmptySpace max="32767" attributes="0"/>
|
|
||||||
<Component id="jLabel1" min="-2" max="-2" attributes="0"/>
|
|
||||||
</Group>
|
|
||||||
<Group type="102" alignment="0" attributes="0">
|
|
||||||
<Component id="jLabelSelectInputFolder" min="-2" max="-2" attributes="0"/>
|
|
||||||
<EmptySpace type="separate" max="-2" attributes="0"/>
|
|
||||||
<Component id="jLabelInvalidImageFolder" max="32767" attributes="0"/>
|
|
||||||
</Group>
|
|
||||||
<Group type="102" attributes="0">
|
|
||||||
<Component id="jLabelSelectOutputFolder" min="-2" max="-2" attributes="0"/>
|
|
||||||
<EmptySpace type="separate" max="-2" attributes="0"/>
|
|
||||||
<Component id="jLabelInvalidResultsFolder" min="-2" pref="544" 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">
|
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
|
||||||
<Group type="102" attributes="0">
|
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
|
||||||
<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"/>
|
|
||||||
<Component id="jRadioButtonReview" min="-2" max="-2" attributes="0"/>
|
|
||||||
</Group>
|
|
||||||
<Component id="jLabel1" min="-2" max="-2" attributes="0"/>
|
|
||||||
</Group>
|
|
||||||
<EmptySpace min="-2" pref="1" max="-2" attributes="0"/>
|
|
||||||
<Group type="103" groupAlignment="3" attributes="0">
|
|
||||||
<Component id="jLabelSelectInputFolder" alignment="3" min="-2" max="-2" attributes="0"/>
|
|
||||||
<Component id="jLabelInvalidImageFolder" alignment="3" min="-2" max="-2" attributes="0"/>
|
|
||||||
</Group>
|
|
||||||
<EmptySpace min="-2" pref="1" max="-2" attributes="0"/>
|
|
||||||
<Group type="103" groupAlignment="3" attributes="0">
|
|
||||||
<Component id="inputPathTextField" alignment="3" min="-2" max="-2" attributes="0"/>
|
|
||||||
<Component id="browseInputFolderButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
|
||||||
</Group>
|
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
|
||||||
<Group type="103" groupAlignment="3" attributes="0">
|
|
||||||
<Component id="jLabelSelectOutputFolder" alignment="3" min="-2" pref="21" max="-2" attributes="0"/>
|
|
||||||
<Component id="jLabelInvalidResultsFolder" alignment="3" min="-2" max="-2" attributes="0"/>
|
|
||||||
</Group>
|
|
||||||
<EmptySpace min="-2" pref="1" max="-2" attributes="0"/>
|
|
||||||
<Group type="103" groupAlignment="3" attributes="0">
|
|
||||||
<Component id="browseOutputFolderButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
|
||||||
<Component id="outputPathTextField" alignment="3" min="-2" max="-2" attributes="0"/>
|
|
||||||
</Group>
|
|
||||||
<EmptySpace min="0" pref="0" max="32767" attributes="0"/>
|
|
||||||
</Group>
|
|
||||||
</Group>
|
|
||||||
</DimensionLayout>
|
|
||||||
</Layout>
|
|
||||||
<SubComponents>
|
|
||||||
<Component class="javax.swing.JLabel" name="jLabelSelectMode">
|
|
||||||
<Properties>
|
|
||||||
<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.jLabelSelectMode.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">
|
|
||||||
<ComponentRef name="modeRadioButtons"/>
|
|
||||||
</Property>
|
|
||||||
<Property name="selected" type="boolean" value="true"/>
|
|
||||||
<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.jRadioButtonAutomated.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/experimental/configuration/Bundle.properties" key="AutoIngestSettingsPanel.jRadioButtonAutomated.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
|
||||||
</Property>
|
|
||||||
</Properties>
|
|
||||||
<Events>
|
|
||||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jRadioButtonAutomatedActionPerformed"/>
|
|
||||||
</Events>
|
|
||||||
</Component>
|
|
||||||
<Component class="javax.swing.JRadioButton" name="jRadioButtonReview">
|
|
||||||
<Properties>
|
|
||||||
<Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor">
|
|
||||||
<ComponentRef name="modeRadioButtons"/>
|
|
||||||
</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.jRadioButtonReview.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/experimental/configuration/Bundle.properties" key="AutoIngestSettingsPanel.jRadioButtonReview.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
|
||||||
</Property>
|
|
||||||
</Properties>
|
|
||||||
<Events>
|
|
||||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jRadioButtonReviewActionPerformed"/>
|
|
||||||
</Events>
|
|
||||||
</Component>
|
|
||||||
<Component class="javax.swing.JLabel" name="jLabelSelectInputFolder">
|
|
||||||
<Properties>
|
|
||||||
<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.jLabelSelectInputFolder.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
|
||||||
</Property>
|
|
||||||
<Property name="verticalAlignment" type="int" value="3"/>
|
|
||||||
</Properties>
|
|
||||||
</Component>
|
|
||||||
<Component class="javax.swing.JTextField" name="inputPathTextField">
|
|
||||||
<Properties>
|
|
||||||
<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.inputPathTextField.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/experimental/configuration/Bundle.properties" key="AutoIngestSettingsPanel.inputPathTextField.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
|
||||||
</Property>
|
|
||||||
</Properties>
|
|
||||||
</Component>
|
|
||||||
<Component class="javax.swing.JButton" name="browseInputFolderButton">
|
|
||||||
<Properties>
|
|
||||||
<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.browseInputFolderButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
|
||||||
</Property>
|
|
||||||
</Properties>
|
|
||||||
<Events>
|
|
||||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="browseInputFolderButtonActionPerformed"/>
|
|
||||||
</Events>
|
|
||||||
</Component>
|
|
||||||
<Component class="javax.swing.JLabel" name="jLabelSelectOutputFolder">
|
|
||||||
<Properties>
|
|
||||||
<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.jLabelSelectOutputFolder.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
|
||||||
</Property>
|
|
||||||
<Property name="verticalAlignment" type="int" value="3"/>
|
|
||||||
</Properties>
|
|
||||||
</Component>
|
|
||||||
<Component class="javax.swing.JTextField" name="outputPathTextField">
|
|
||||||
<Properties>
|
|
||||||
<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.outputPathTextField.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/experimental/configuration/Bundle.properties" key="AutoIngestSettingsPanel.outputPathTextField.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
|
||||||
</Property>
|
|
||||||
</Properties>
|
|
||||||
</Component>
|
|
||||||
<Component class="javax.swing.JButton" name="browseOutputFolderButton">
|
|
||||||
<Properties>
|
|
||||||
<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.browseOutputFolderButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
|
||||||
</Property>
|
|
||||||
</Properties>
|
|
||||||
<Events>
|
|
||||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="browseOutputFolderButtonActionPerformed"/>
|
|
||||||
</Events>
|
|
||||||
</Component>
|
|
||||||
<Component class="javax.swing.JLabel" name="jLabelInvalidImageFolder">
|
|
||||||
<Properties>
|
|
||||||
<Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
|
|
||||||
<Color blue="0" green="0" red="ff" type="rgb"/>
|
|
||||||
</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.jLabelInvalidImageFolder.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
|
||||||
</Property>
|
|
||||||
</Properties>
|
|
||||||
</Component>
|
|
||||||
<Component class="javax.swing.JLabel" name="jLabelInvalidResultsFolder">
|
|
||||||
<Properties>
|
|
||||||
<Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
|
|
||||||
<Color blue="0" green="0" red="ff" type="rgb"/>
|
|
||||||
</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.jLabelInvalidResultsFolder.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
|
||||||
</Property>
|
|
||||||
</Properties>
|
|
||||||
</Component>
|
|
||||||
<Component class="javax.swing.JLabel" name="jLabel1">
|
|
||||||
<Properties>
|
|
||||||
<Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
|
|
||||||
<Image iconType="3" name="/org/sleuthkit/autopsy/experimental/images/AIM.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.jLabel1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
|
||||||
</Property>
|
|
||||||
</Properties>
|
|
||||||
</Component>
|
|
||||||
</SubComponents>
|
|
||||||
</Container>
|
|
||||||
<Container class="javax.swing.JPanel" name="jPanelSharedConfig">
|
|
||||||
<Properties>
|
|
||||||
<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="Shared Configuration">
|
|
||||||
<Border PropertyName="innerBorder" info="org.netbeans.modules.form.compat2.border.EtchedBorderInfo">
|
|
||||||
<EtchetBorder/>
|
|
||||||
</Border>
|
|
||||||
<ResourceString PropertyName="titleX" bundle="org/sleuthkit/autopsy/experimental/configuration/Bundle.properties" key="AutoIngestSettingsPanel.jPanelSharedConfig.border.title" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
|
||||||
</TitledBorder>
|
|
||||||
</Border>
|
|
||||||
</Property>
|
|
||||||
</Properties>
|
|
||||||
|
|
||||||
<Layout>
|
|
||||||
<DimensionLayout dim="0">
|
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
|
||||||
<Group type="102" alignment="0" attributes="0">
|
|
||||||
<EmptySpace min="10" pref="10" max="-2" attributes="0"/>
|
|
||||||
<Component id="jLabelCurrentTask" min="-2" max="-2" attributes="0"/>
|
|
||||||
<EmptySpace type="unrelated" max="-2" attributes="0"/>
|
|
||||||
<Component id="jLabelTaskDescription" max="32767" attributes="0"/>
|
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
|
||||||
</Group>
|
|
||||||
<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="sharedSettingsTextField" min="-2" pref="400" max="-2" attributes="0"/>
|
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
|
||||||
<Component id="browseSharedSettingsButton" min="-2" pref="143" max="-2" attributes="0"/>
|
|
||||||
</Group>
|
|
||||||
<Component id="uploadButton" alignment="0" min="-2" pref="143" max="-2" attributes="0"/>
|
|
||||||
<Group type="103" alignment="0" groupAlignment="1" max="-2" attributes="0">
|
|
||||||
<Group type="102" alignment="0" attributes="0">
|
|
||||||
<Component id="downloadButton" min="-2" pref="143" max="-2" attributes="0"/>
|
|
||||||
<EmptySpace type="unrelated" max="-2" attributes="0"/>
|
|
||||||
<Component id="configButtonErrorTextField" max="32767" attributes="0"/>
|
|
||||||
</Group>
|
|
||||||
<Group type="102" alignment="0" attributes="0">
|
|
||||||
<Component id="sharedConfigCheckbox" min="-2" max="-2" attributes="0"/>
|
|
||||||
<EmptySpace type="unrelated" max="-2" attributes="0"/>
|
|
||||||
<Component id="sharedSettingsErrorTextField" max="32767" attributes="0"/>
|
|
||||||
</Group>
|
|
||||||
<Component id="jSeparator1" min="-2" pref="692" max="-2" attributes="0"/>
|
|
||||||
</Group>
|
|
||||||
<Component id="pbTaskInProgress" alignment="0" min="-2" pref="695" max="-2" attributes="0"/>
|
|
||||||
<Component id="masterNodeCheckBox" alignment="0" min="-2" 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"/>
|
|
||||||
<Group type="103" groupAlignment="3" attributes="0">
|
|
||||||
<Component id="sharedConfigCheckbox" alignment="3" min="-2" pref="21" max="-2" attributes="0"/>
|
|
||||||
<Component id="sharedSettingsErrorTextField" alignment="3" min="-2" pref="21" max="-2" attributes="0"/>
|
|
||||||
</Group>
|
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
|
||||||
<Group type="103" groupAlignment="3" attributes="0">
|
|
||||||
<Component id="sharedSettingsTextField" alignment="3" min="-2" max="-2" attributes="0"/>
|
|
||||||
<Component id="browseSharedSettingsButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
|
||||||
</Group>
|
|
||||||
<EmptySpace type="unrelated" max="-2" attributes="0"/>
|
|
||||||
<Group type="103" groupAlignment="3" attributes="0">
|
|
||||||
<Component id="downloadButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
|
||||||
<Component id="configButtonErrorTextField" alignment="3" min="-2" pref="21" max="-2" attributes="0"/>
|
|
||||||
</Group>
|
|
||||||
<EmptySpace type="unrelated" min="-2" max="-2" attributes="0"/>
|
|
||||||
<Component id="jSeparator1" min="-2" pref="10" max="-2" attributes="0"/>
|
|
||||||
<EmptySpace min="-2" pref="1" max="-2" attributes="0"/>
|
|
||||||
<Component id="masterNodeCheckBox" min="-2" pref="23" max="-2" attributes="0"/>
|
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
|
||||||
<Component id="uploadButton" min="-2" max="-2" attributes="0"/>
|
|
||||||
<EmptySpace min="-2" pref="8" max="-2" attributes="0"/>
|
|
||||||
<Group type="103" groupAlignment="3" attributes="0">
|
|
||||||
<Component id="jLabelCurrentTask" alignment="3" min="-2" max="-2" attributes="0"/>
|
|
||||||
<Component id="jLabelTaskDescription" alignment="3" min="-2" max="-2" attributes="0"/>
|
|
||||||
</Group>
|
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
|
||||||
<Component id="pbTaskInProgress" min="-2" pref="22" max="-2" attributes="0"/>
|
|
||||||
<EmptySpace max="32767" attributes="0"/>
|
|
||||||
</Group>
|
|
||||||
</Group>
|
|
||||||
</DimensionLayout>
|
|
||||||
</Layout>
|
|
||||||
<SubComponents>
|
|
||||||
<Component class="javax.swing.JCheckBox" name="sharedConfigCheckbox">
|
|
||||||
<Properties>
|
|
||||||
<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.sharedConfigCheckbox.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
|
||||||
</Property>
|
|
||||||
<Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
|
||||||
<Dimension value="[191, 14]"/>
|
|
||||||
</Property>
|
|
||||||
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
|
||||||
<Dimension value="[191, 14]"/>
|
|
||||||
</Property>
|
|
||||||
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
|
||||||
<Dimension value="[191, 14]"/>
|
|
||||||
</Property>
|
|
||||||
</Properties>
|
|
||||||
<Events>
|
|
||||||
<EventHandler event="itemStateChanged" listener="java.awt.event.ItemListener" parameters="java.awt.event.ItemEvent" handler="sharedConfigCheckboxItemStateChanged"/>
|
|
||||||
</Events>
|
|
||||||
</Component>
|
|
||||||
<Component class="javax.swing.JTextField" name="sharedSettingsTextField">
|
|
||||||
<Properties>
|
|
||||||
<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.sharedSettingsTextField.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
|
||||||
</Property>
|
|
||||||
<Property name="enabled" type="boolean" value="false"/>
|
|
||||||
</Properties>
|
|
||||||
</Component>
|
|
||||||
<Component class="javax.swing.JButton" name="browseSharedSettingsButton">
|
|
||||||
<Properties>
|
|
||||||
<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.browseSharedSettingsButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
|
||||||
</Property>
|
|
||||||
<Property name="enabled" type="boolean" value="false"/>
|
|
||||||
</Properties>
|
|
||||||
<Events>
|
|
||||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="browseSharedSettingsButtonActionPerformed"/>
|
|
||||||
</Events>
|
|
||||||
</Component>
|
|
||||||
<Component class="javax.swing.JTextField" name="sharedSettingsErrorTextField">
|
|
||||||
<Properties>
|
|
||||||
<Property name="editable" type="boolean" value="false"/>
|
|
||||||
<Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
|
|
||||||
<Color blue="0" green="0" red="ff" type="rgb"/>
|
|
||||||
</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.sharedSettingsErrorTextField.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
|
||||||
</Property>
|
|
||||||
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
|
|
||||||
<Border info="null"/>
|
|
||||||
</Property>
|
|
||||||
</Properties>
|
|
||||||
</Component>
|
|
||||||
<Component class="javax.swing.JCheckBox" name="masterNodeCheckBox">
|
|
||||||
<Properties>
|
|
||||||
<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.masterNodeCheckBox.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
|
||||||
</Property>
|
|
||||||
<Property name="enabled" type="boolean" value="false"/>
|
|
||||||
</Properties>
|
|
||||||
<Events>
|
|
||||||
<EventHandler event="itemStateChanged" listener="java.awt.event.ItemListener" parameters="java.awt.event.ItemEvent" handler="masterNodeCheckBoxItemStateChanged"/>
|
|
||||||
</Events>
|
|
||||||
</Component>
|
|
||||||
<Component class="javax.swing.JButton" name="uploadButton">
|
|
||||||
<Properties>
|
|
||||||
<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.uploadButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
|
||||||
</Property>
|
|
||||||
</Properties>
|
|
||||||
<Events>
|
|
||||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="uploadButtonActionPerformed"/>
|
|
||||||
</Events>
|
|
||||||
</Component>
|
|
||||||
<Component class="javax.swing.JButton" name="downloadButton">
|
|
||||||
<Properties>
|
|
||||||
<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.downloadButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
|
||||||
</Property>
|
|
||||||
</Properties>
|
|
||||||
<Events>
|
|
||||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="downloadButtonActionPerformed"/>
|
|
||||||
</Events>
|
|
||||||
</Component>
|
|
||||||
<Component class="javax.swing.JLabel" name="jLabelCurrentTask">
|
|
||||||
<Properties>
|
|
||||||
<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.jLabelCurrentTask.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
|
||||||
</Property>
|
|
||||||
</Properties>
|
|
||||||
</Component>
|
|
||||||
<Component class="javax.swing.JProgressBar" name="pbTaskInProgress">
|
|
||||||
</Component>
|
|
||||||
<Component class="javax.swing.JLabel" name="jLabelTaskDescription">
|
|
||||||
<Properties>
|
|
||||||
<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.jLabelTaskDescription.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
|
||||||
</Property>
|
|
||||||
</Properties>
|
|
||||||
</Component>
|
|
||||||
<Component class="javax.swing.JTextField" name="configButtonErrorTextField">
|
|
||||||
<Properties>
|
|
||||||
<Property name="editable" type="boolean" value="false"/>
|
|
||||||
<Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
|
|
||||||
<Color blue="0" green="0" red="ff" type="rgb"/>
|
|
||||||
</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.configButtonErrorTextField.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
|
||||||
</Property>
|
|
||||||
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
|
|
||||||
<Border info="null"/>
|
|
||||||
</Property>
|
|
||||||
</Properties>
|
|
||||||
</Component>
|
|
||||||
<Component class="javax.swing.JSeparator" name="jSeparator1">
|
|
||||||
</Component>
|
|
||||||
</SubComponents>
|
|
||||||
</Container>
|
|
||||||
<Container class="javax.swing.JPanel" name="jPanelIngestSettings">
|
|
||||||
<Properties>
|
|
||||||
<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="Automated Ingest Settings">
|
|
||||||
<Border PropertyName="innerBorder" info="org.netbeans.modules.form.compat2.border.EtchedBorderInfo">
|
|
||||||
<EtchetBorder/>
|
|
||||||
</Border>
|
|
||||||
<ResourceString PropertyName="titleX" bundle="org/sleuthkit/autopsy/experimental/configuration/Bundle.properties" key="AutoIngestSettingsPanel.jPanelIngestSettings.border.title" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
|
||||||
</TitledBorder>
|
|
||||||
</Border>
|
|
||||||
</Property>
|
|
||||||
</Properties>
|
|
||||||
|
|
||||||
<Layout>
|
|
||||||
<DimensionLayout dim="0">
|
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
|
||||||
<Group type="102" attributes="0">
|
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
|
||||||
<Component id="bnEditIngestSettings" min="-2" pref="155" max="-2" attributes="0"/>
|
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
|
||||||
<Component id="bnAdvancedSettings" min="-2" pref="155" max="-2" attributes="0"/>
|
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
|
||||||
<Component id="bnFileExport" min="-2" pref="155" max="-2" attributes="0"/>
|
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
|
||||||
<Component id="bnLogging" min="-2" pref="155" max="-2" attributes="0"/>
|
|
||||||
<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"/>
|
|
||||||
<Group type="103" groupAlignment="3" attributes="0">
|
|
||||||
<Component id="bnEditIngestSettings" alignment="3" min="-2" max="-2" attributes="0"/>
|
|
||||||
<Component id="bnFileExport" alignment="3" min="-2" max="-2" attributes="0"/>
|
|
||||||
<Component id="bnAdvancedSettings" alignment="3" min="-2" max="-2" attributes="0"/>
|
|
||||||
<Component id="bnLogging" alignment="3" min="-2" max="-2" attributes="0"/>
|
|
||||||
</Group>
|
|
||||||
<EmptySpace max="32767" attributes="0"/>
|
|
||||||
</Group>
|
|
||||||
</Group>
|
|
||||||
</DimensionLayout>
|
|
||||||
</Layout>
|
|
||||||
<SubComponents>
|
|
||||||
<Component class="javax.swing.JButton" name="bnEditIngestSettings">
|
|
||||||
<Properties>
|
|
||||||
<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.bnEditIngestSettings.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/experimental/configuration/Bundle.properties" key="AutoIngestSettingsPanel.bnEditIngestSettings.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
|
||||||
</Property>
|
|
||||||
</Properties>
|
|
||||||
<Events>
|
|
||||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="bnEditIngestSettingsActionPerformed"/>
|
|
||||||
</Events>
|
|
||||||
</Component>
|
|
||||||
<Component class="javax.swing.JButton" name="bnAdvancedSettings">
|
|
||||||
<Properties>
|
|
||||||
<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.bnAdvancedSettings.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
|
||||||
</Property>
|
|
||||||
</Properties>
|
|
||||||
<Events>
|
|
||||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="bnAdvancedSettingsActionPerformed"/>
|
|
||||||
</Events>
|
|
||||||
</Component>
|
|
||||||
<Component class="javax.swing.JButton" name="bnFileExport">
|
|
||||||
<Properties>
|
|
||||||
<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.bnFileExport.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
|
||||||
</Property>
|
|
||||||
</Properties>
|
|
||||||
<Events>
|
|
||||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="bnFileExportActionPerformed"/>
|
|
||||||
</Events>
|
|
||||||
</Component>
|
|
||||||
<Component class="javax.swing.JButton" name="bnLogging">
|
|
||||||
<Properties>
|
|
||||||
<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.bnLogging.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
|
||||||
</Property>
|
|
||||||
</Properties>
|
|
||||||
<Events>
|
|
||||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="bnLoggingActionPerformed"/>
|
|
||||||
</Events>
|
|
||||||
</Component>
|
|
||||||
</SubComponents>
|
|
||||||
</Container>
|
|
||||||
<Component class="javax.swing.JCheckBox" name="cbJoinAutoIngestCluster">
|
<Component class="javax.swing.JCheckBox" name="cbJoinAutoIngestCluster">
|
||||||
<Properties>
|
<Properties>
|
||||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.modules.form.editors2.FontEditor">
|
<Property name="font" type="java.awt.Font" editor="org.netbeans.modules.form.editors2.FontEditor">
|
||||||
@ -649,6 +221,238 @@
|
|||||||
</Property>
|
</Property>
|
||||||
</Properties>
|
</Properties>
|
||||||
</Component>
|
</Component>
|
||||||
|
<Component class="javax.swing.JButton" name="bnEditIngestSettings">
|
||||||
|
<Properties>
|
||||||
|
<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.bnEditIngestSettings.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/experimental/configuration/Bundle.properties" key="AutoIngestSettingsPanel.bnEditIngestSettings.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="bnEditIngestSettingsActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JButton" name="bnAdvancedSettings">
|
||||||
|
<Properties>
|
||||||
|
<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.bnAdvancedSettings.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="bnAdvancedSettingsActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JButton" name="bnFileExport">
|
||||||
|
<Properties>
|
||||||
|
<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.bnFileExport.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="bnFileExportActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JButton" name="bnLogging">
|
||||||
|
<Properties>
|
||||||
|
<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.bnLogging.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="bnLoggingActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JButton" name="browseOutputFolderButton">
|
||||||
|
<Properties>
|
||||||
|
<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.browseOutputFolderButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="browseOutputFolderButtonActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JButton" name="browseInputFolderButton">
|
||||||
|
<Properties>
|
||||||
|
<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.browseInputFolderButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="browseInputFolderButtonActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JTextField" name="inputPathTextField">
|
||||||
|
<Properties>
|
||||||
|
<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.inputPathTextField.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/experimental/configuration/Bundle.properties" key="AutoIngestSettingsPanel.inputPathTextField.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JTextField" name="outputPathTextField">
|
||||||
|
<Properties>
|
||||||
|
<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.outputPathTextField.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/experimental/configuration/Bundle.properties" key="AutoIngestSettingsPanel.outputPathTextField.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JLabel" name="jLabelInvalidResultsFolder">
|
||||||
|
<Properties>
|
||||||
|
<Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
|
||||||
|
<Color blue="0" green="0" red="ff" type="rgb"/>
|
||||||
|
</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.jLabelInvalidResultsFolder.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JLabel" name="jLabelInvalidImageFolder">
|
||||||
|
<Properties>
|
||||||
|
<Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
|
||||||
|
<Color blue="0" green="0" red="ff" type="rgb"/>
|
||||||
|
</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.jLabelInvalidImageFolder.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JLabel" name="jLabelSelectInputFolder">
|
||||||
|
<Properties>
|
||||||
|
<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.jLabelSelectInputFolder.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="verticalAlignment" type="int" value="3"/>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JLabel" name="jLabelSelectOutputFolder">
|
||||||
|
<Properties>
|
||||||
|
<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.jLabelSelectOutputFolder.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="verticalAlignment" type="int" value="3"/>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JCheckBox" name="sharedConfigCheckbox">
|
||||||
|
<Properties>
|
||||||
|
<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.sharedConfigCheckbox.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
||||||
|
<Dimension value="[191, 14]"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
||||||
|
<Dimension value="[191, 14]"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
||||||
|
<Dimension value="[191, 14]"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="itemStateChanged" listener="java.awt.event.ItemListener" parameters="java.awt.event.ItemEvent" handler="sharedConfigCheckboxItemStateChanged"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JTextField" name="sharedSettingsErrorTextField">
|
||||||
|
<Properties>
|
||||||
|
<Property name="editable" type="boolean" value="false"/>
|
||||||
|
<Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
|
||||||
|
<Color blue="0" green="0" red="ff" type="rgb"/>
|
||||||
|
</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.sharedSettingsErrorTextField.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
|
||||||
|
<Border info="null"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JTextField" name="sharedSettingsTextField">
|
||||||
|
<Properties>
|
||||||
|
<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.sharedSettingsTextField.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="enabled" type="boolean" value="false"/>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JButton" name="browseSharedSettingsButton">
|
||||||
|
<Properties>
|
||||||
|
<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.browseSharedSettingsButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="enabled" type="boolean" value="false"/>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="browseSharedSettingsButtonActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JButton" name="downloadButton">
|
||||||
|
<Properties>
|
||||||
|
<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.downloadButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="downloadButtonActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JTextField" name="configButtonErrorTextField">
|
||||||
|
<Properties>
|
||||||
|
<Property name="editable" type="boolean" value="false"/>
|
||||||
|
<Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
|
||||||
|
<Color blue="0" green="0" red="ff" type="rgb"/>
|
||||||
|
</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.configButtonErrorTextField.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
|
||||||
|
<Border info="null"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JProgressBar" name="pbTaskInProgress">
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JLabel" name="jLabelTaskDescription">
|
||||||
|
<Properties>
|
||||||
|
<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.jLabelTaskDescription.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JLabel" name="jLabelCurrentTask">
|
||||||
|
<Properties>
|
||||||
|
<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.jLabelCurrentTask.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JButton" name="uploadButton">
|
||||||
|
<Properties>
|
||||||
|
<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.uploadButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="uploadButtonActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JCheckBox" name="masterNodeCheckBox">
|
||||||
|
<Properties>
|
||||||
|
<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.masterNodeCheckBox.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="enabled" type="boolean" value="false"/>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="itemStateChanged" listener="java.awt.event.ItemListener" parameters="java.awt.event.ItemEvent" handler="masterNodeCheckBoxItemStateChanged"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
</SubComponents>
|
</SubComponents>
|
||||||
</Container>
|
</Container>
|
||||||
</SubComponents>
|
</SubComponents>
|
||||||
|
@ -56,7 +56,7 @@ public class AutoIngestSettingsPanel extends javax.swing.JPanel {
|
|||||||
|
|
||||||
enum OptionsUiMode {
|
enum OptionsUiMode {
|
||||||
|
|
||||||
STANDALONE, AIM, REVIEW, DOWNLOADING_CONFIGURATION
|
STANDALONE, AIM, DOWNLOADING_CONFIGURATION
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -127,21 +127,10 @@ public class AutoIngestSettingsPanel extends javax.swing.JPanel {
|
|||||||
if (inStartup) {
|
if (inStartup) {
|
||||||
UserPreferences.SelectedMode storedMode = UserPreferences.getMode();
|
UserPreferences.SelectedMode storedMode = UserPreferences.getMode();
|
||||||
inputPathTextField.requestFocusInWindow();
|
inputPathTextField.requestFocusInWindow();
|
||||||
if (null != storedMode) {
|
if (storedMode == UserPreferences.SelectedMode.AUTOINGEST) {
|
||||||
switch (storedMode) {
|
enableOptionsBasedOnMode(OptionsUiMode.AIM);
|
||||||
case REVIEW:
|
} else if (storedMode != null) {
|
||||||
jRadioButtonReview.setSelected(true);
|
enableOptionsBasedOnMode(OptionsUiMode.STANDALONE);
|
||||||
enableOptionsBasedOnMode(OptionsUiMode.REVIEW);
|
|
||||||
break;
|
|
||||||
case AUTOINGEST:
|
|
||||||
jRadioButtonAutomated.setSelected(true);
|
|
||||||
enableOptionsBasedOnMode(OptionsUiMode.AIM);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
cbJoinAutoIngestCluster.setSelected(false);
|
|
||||||
enableOptionsBasedOnMode(OptionsUiMode.STANDALONE);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -207,22 +196,12 @@ public class AutoIngestSettingsPanel extends javax.swing.JPanel {
|
|||||||
* Save mode to persistent storage.
|
* Save mode to persistent storage.
|
||||||
*/
|
*/
|
||||||
void store() {
|
void store() {
|
||||||
boolean needsRestart = false;
|
boolean needsRestart = (cbJoinAutoIngestCluster.isSelected() != AutoIngestUserPreferences.getJoinAutoModeCluster());
|
||||||
UserPreferences.SelectedMode storedMode = UserPreferences.getMode();
|
|
||||||
|
|
||||||
AutoIngestUserPreferences.setJoinAutoModeCluster(cbJoinAutoIngestCluster.isSelected());
|
AutoIngestUserPreferences.setJoinAutoModeCluster(cbJoinAutoIngestCluster.isSelected());
|
||||||
if (!cbJoinAutoIngestCluster.isSelected()) {
|
if (!cbJoinAutoIngestCluster.isSelected()) {
|
||||||
if(storedMode == UserPreferences.SelectedMode.AUTOINGEST) {
|
|
||||||
needsRestart = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
UserPreferences.setMode(UserPreferences.SelectedMode.STANDALONE);
|
UserPreferences.setMode(UserPreferences.SelectedMode.STANDALONE);
|
||||||
}
|
} else {
|
||||||
else if (jRadioButtonAutomated.isSelected()) {
|
|
||||||
if (storedMode == UserPreferences.SelectedMode.REVIEW) {
|
|
||||||
needsRestart = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
UserPreferences.setMode(UserPreferences.SelectedMode.AUTOINGEST);
|
UserPreferences.setMode(UserPreferences.SelectedMode.AUTOINGEST);
|
||||||
String imageFolderPath = getNormalizedFolderPath(inputPathTextField.getText().trim());
|
String imageFolderPath = getNormalizedFolderPath(inputPathTextField.getText().trim());
|
||||||
AutoIngestUserPreferences.setAutoModeImageFolder(imageFolderPath);
|
AutoIngestUserPreferences.setAutoModeImageFolder(imageFolderPath);
|
||||||
@ -234,15 +213,8 @@ public class AutoIngestSettingsPanel extends javax.swing.JPanel {
|
|||||||
AutoIngestUserPreferences.setSharedConfigFolder(globalSettingsPath);
|
AutoIngestUserPreferences.setSharedConfigFolder(globalSettingsPath);
|
||||||
AutoIngestUserPreferences.setSharedConfigMaster(masterNodeCheckBox.isSelected());
|
AutoIngestUserPreferences.setSharedConfigMaster(masterNodeCheckBox.isSelected());
|
||||||
}
|
}
|
||||||
} else if (jRadioButtonReview.isSelected()) {
|
|
||||||
if (storedMode == UserPreferences.SelectedMode.AUTOINGEST) {
|
|
||||||
needsRestart = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
UserPreferences.setMode(UserPreferences.SelectedMode.REVIEW);
|
|
||||||
String resultsFolderPath = getNormalizedFolderPath(outputPathTextField.getText().trim());
|
|
||||||
AutoIngestUserPreferences.setAutoModeResultsFolder(resultsFolderPath);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (needsRestart) {
|
if (needsRestart) {
|
||||||
SwingUtilities.invokeLater(() -> {
|
SwingUtilities.invokeLater(() -> {
|
||||||
JOptionPane.showMessageDialog(null,
|
JOptionPane.showMessageDialog(null,
|
||||||
@ -306,23 +278,14 @@ public class AutoIngestSettingsPanel extends javax.swing.JPanel {
|
|||||||
configButtonErrorTextField.setText("Shared configuration folder is invalid");
|
configButtonErrorTextField.setText("Shared configuration folder is invalid");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case REVIEW:
|
|
||||||
jLabelInvalidImageFolder.setVisible(false);
|
|
||||||
if (!validateResultsPath()) {
|
|
||||||
isValidNodePanel = false;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case STANDALONE:
|
case STANDALONE:
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (jRadioButtonAutomated.isSelected()) {
|
if (sharedConfigCheckbox.isEnabled() && sharedConfigCheckbox.isSelected() && !validSharedConfigSettings()) {
|
||||||
if (sharedConfigCheckbox.isEnabled() && sharedConfigCheckbox.isSelected() && !validSharedConfigSettings()) {
|
isValidNodePanel = false;
|
||||||
isValidNodePanel = false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return isValidNodePanel;
|
return isValidNodePanel;
|
||||||
}
|
}
|
||||||
@ -579,24 +542,17 @@ public class AutoIngestSettingsPanel extends javax.swing.JPanel {
|
|||||||
private void enableOptionsBasedOnMode(OptionsUiMode mode) {
|
private void enableOptionsBasedOnMode(OptionsUiMode mode) {
|
||||||
if (mode != OptionsUiMode.DOWNLOADING_CONFIGURATION) {
|
if (mode != OptionsUiMode.DOWNLOADING_CONFIGURATION) {
|
||||||
boolean nonMasterSharedConfig = !masterNodeCheckBox.isSelected() && sharedConfigCheckbox.isSelected();
|
boolean nonMasterSharedConfig = !masterNodeCheckBox.isSelected() && sharedConfigCheckbox.isSelected();
|
||||||
jRadioButtonAutomated.setEnabled(cbJoinAutoIngestCluster.isSelected());
|
|
||||||
jRadioButtonReview.setEnabled(cbJoinAutoIngestCluster.isSelected());
|
|
||||||
|
|
||||||
jLabelSelectInputFolder.setEnabled(mode == OptionsUiMode.AIM && !nonMasterSharedConfig);
|
jLabelSelectInputFolder.setEnabled(mode == OptionsUiMode.AIM && !nonMasterSharedConfig);
|
||||||
inputPathTextField.setEnabled(mode == OptionsUiMode.AIM && !nonMasterSharedConfig);
|
inputPathTextField.setEnabled(mode == OptionsUiMode.AIM && !nonMasterSharedConfig);
|
||||||
browseInputFolderButton.setEnabled(mode == OptionsUiMode.AIM && !nonMasterSharedConfig);
|
browseInputFolderButton.setEnabled(mode == OptionsUiMode.AIM && !nonMasterSharedConfig);
|
||||||
|
|
||||||
jLabelSelectOutputFolder.setEnabled((mode == OptionsUiMode.AIM && !nonMasterSharedConfig) || mode == OptionsUiMode.REVIEW);
|
jLabelSelectOutputFolder.setEnabled(mode == OptionsUiMode.AIM && !nonMasterSharedConfig);
|
||||||
outputPathTextField.setEnabled((mode == OptionsUiMode.AIM && !nonMasterSharedConfig) || mode == OptionsUiMode.REVIEW);
|
outputPathTextField.setEnabled(mode == OptionsUiMode.AIM && !nonMasterSharedConfig);
|
||||||
browseOutputFolderButton.setEnabled((mode == OptionsUiMode.AIM && !nonMasterSharedConfig) || mode == OptionsUiMode.REVIEW);
|
browseOutputFolderButton.setEnabled(mode == OptionsUiMode.AIM && !nonMasterSharedConfig);
|
||||||
|
|
||||||
jPanelSharedConfig.setEnabled(mode == OptionsUiMode.AIM);
|
|
||||||
|
|
||||||
jPanelIngestSettings.setEnabled(mode == OptionsUiMode.AIM && !nonMasterSharedConfig);
|
|
||||||
bnEditIngestSettings.setEnabled(mode == OptionsUiMode.AIM && !nonMasterSharedConfig);
|
bnEditIngestSettings.setEnabled(mode == OptionsUiMode.AIM && !nonMasterSharedConfig);
|
||||||
bnAdvancedSettings.setEnabled(mode == OptionsUiMode.AIM && !nonMasterSharedConfig);
|
bnAdvancedSettings.setEnabled(mode == OptionsUiMode.AIM && !nonMasterSharedConfig);
|
||||||
bnLogging.setEnabled(mode == OptionsUiMode.AIM && !nonMasterSharedConfig);
|
bnLogging.setEnabled(mode == OptionsUiMode.AIM && !nonMasterSharedConfig);
|
||||||
jPanelSharedConfig.setEnabled(mode == OptionsUiMode.AIM);
|
|
||||||
sharedConfigCheckbox.setEnabled(mode == OptionsUiMode.AIM);
|
sharedConfigCheckbox.setEnabled(mode == OptionsUiMode.AIM);
|
||||||
masterNodeCheckBox.setEnabled(mode == OptionsUiMode.AIM && sharedConfigCheckbox.isSelected());
|
masterNodeCheckBox.setEnabled(mode == OptionsUiMode.AIM && sharedConfigCheckbox.isSelected());
|
||||||
bnFileExport.setEnabled(mode == OptionsUiMode.AIM);
|
bnFileExport.setEnabled(mode == OptionsUiMode.AIM);
|
||||||
@ -613,14 +569,8 @@ public class AutoIngestSettingsPanel extends javax.swing.JPanel {
|
|||||||
private OptionsUiMode getModeFromRadioButtons() {
|
private OptionsUiMode getModeFromRadioButtons() {
|
||||||
if (!cbJoinAutoIngestCluster.isSelected()) {
|
if (!cbJoinAutoIngestCluster.isSelected()) {
|
||||||
return OptionsUiMode.STANDALONE;
|
return OptionsUiMode.STANDALONE;
|
||||||
}
|
|
||||||
|
|
||||||
if (jRadioButtonAutomated.isSelected()) {
|
|
||||||
return OptionsUiMode.AIM;
|
|
||||||
} else if (jRadioButtonReview.isSelected()) {
|
|
||||||
return OptionsUiMode.REVIEW;
|
|
||||||
} else {
|
} else {
|
||||||
return OptionsUiMode.STANDALONE;
|
return OptionsUiMode.AIM;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -633,292 +583,51 @@ public class AutoIngestSettingsPanel extends javax.swing.JPanel {
|
|||||||
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
|
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
|
||||||
private void initComponents() {
|
private void initComponents() {
|
||||||
|
|
||||||
modeRadioButtons = new javax.swing.ButtonGroup();
|
|
||||||
nodeScrollPane = new javax.swing.JScrollPane();
|
nodeScrollPane = new javax.swing.JScrollPane();
|
||||||
nodePanel = new javax.swing.JPanel();
|
nodePanel = new javax.swing.JPanel();
|
||||||
jPanelNodeType = new javax.swing.JPanel();
|
cbJoinAutoIngestCluster = new javax.swing.JCheckBox();
|
||||||
jLabelSelectMode = new javax.swing.JLabel();
|
tbOops = new javax.swing.JTextField();
|
||||||
jRadioButtonAutomated = new javax.swing.JRadioButton();
|
|
||||||
jRadioButtonReview = new javax.swing.JRadioButton();
|
|
||||||
jLabelSelectInputFolder = new javax.swing.JLabel();
|
|
||||||
inputPathTextField = new javax.swing.JTextField();
|
|
||||||
browseInputFolderButton = new javax.swing.JButton();
|
|
||||||
jLabelSelectOutputFolder = new javax.swing.JLabel();
|
|
||||||
outputPathTextField = new javax.swing.JTextField();
|
|
||||||
browseOutputFolderButton = new javax.swing.JButton();
|
|
||||||
jLabelInvalidImageFolder = new javax.swing.JLabel();
|
|
||||||
jLabelInvalidResultsFolder = new javax.swing.JLabel();
|
|
||||||
jLabel1 = new javax.swing.JLabel();
|
|
||||||
jPanelSharedConfig = new javax.swing.JPanel();
|
|
||||||
sharedConfigCheckbox = new javax.swing.JCheckBox();
|
|
||||||
sharedSettingsTextField = new javax.swing.JTextField();
|
|
||||||
browseSharedSettingsButton = new javax.swing.JButton();
|
|
||||||
sharedSettingsErrorTextField = new javax.swing.JTextField();
|
|
||||||
masterNodeCheckBox = new javax.swing.JCheckBox();
|
|
||||||
uploadButton = new javax.swing.JButton();
|
|
||||||
downloadButton = new javax.swing.JButton();
|
|
||||||
jLabelCurrentTask = new javax.swing.JLabel();
|
|
||||||
pbTaskInProgress = new javax.swing.JProgressBar();
|
|
||||||
jLabelTaskDescription = new javax.swing.JLabel();
|
|
||||||
configButtonErrorTextField = new javax.swing.JTextField();
|
|
||||||
jSeparator1 = new javax.swing.JSeparator();
|
|
||||||
jPanelIngestSettings = new javax.swing.JPanel();
|
|
||||||
bnEditIngestSettings = new javax.swing.JButton();
|
bnEditIngestSettings = new javax.swing.JButton();
|
||||||
bnAdvancedSettings = new javax.swing.JButton();
|
bnAdvancedSettings = new javax.swing.JButton();
|
||||||
bnFileExport = new javax.swing.JButton();
|
bnFileExport = new javax.swing.JButton();
|
||||||
bnLogging = new javax.swing.JButton();
|
bnLogging = new javax.swing.JButton();
|
||||||
cbJoinAutoIngestCluster = new javax.swing.JCheckBox();
|
browseOutputFolderButton = new javax.swing.JButton();
|
||||||
tbOops = new javax.swing.JTextField();
|
browseInputFolderButton = new javax.swing.JButton();
|
||||||
|
inputPathTextField = new javax.swing.JTextField();
|
||||||
|
outputPathTextField = new javax.swing.JTextField();
|
||||||
|
jLabelInvalidResultsFolder = new javax.swing.JLabel();
|
||||||
|
jLabelInvalidImageFolder = new javax.swing.JLabel();
|
||||||
|
jLabelSelectInputFolder = new javax.swing.JLabel();
|
||||||
|
jLabelSelectOutputFolder = new javax.swing.JLabel();
|
||||||
|
sharedConfigCheckbox = new javax.swing.JCheckBox();
|
||||||
|
sharedSettingsErrorTextField = new javax.swing.JTextField();
|
||||||
|
sharedSettingsTextField = new javax.swing.JTextField();
|
||||||
|
browseSharedSettingsButton = new javax.swing.JButton();
|
||||||
|
downloadButton = new javax.swing.JButton();
|
||||||
|
configButtonErrorTextField = new javax.swing.JTextField();
|
||||||
|
pbTaskInProgress = new javax.swing.JProgressBar();
|
||||||
|
jLabelTaskDescription = new javax.swing.JLabel();
|
||||||
|
jLabelCurrentTask = new javax.swing.JLabel();
|
||||||
|
uploadButton = new javax.swing.JButton();
|
||||||
|
masterNodeCheckBox = new javax.swing.JCheckBox();
|
||||||
|
|
||||||
nodeScrollPane.setMinimumSize(new java.awt.Dimension(0, 0));
|
nodeScrollPane.setMinimumSize(new java.awt.Dimension(0, 0));
|
||||||
|
|
||||||
nodePanel.setMinimumSize(new java.awt.Dimension(100, 100));
|
nodePanel.setMinimumSize(new java.awt.Dimension(100, 100));
|
||||||
|
|
||||||
jPanelNodeType.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEtchedBorder(), org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.jPanelNodeType.border.title"))); // NOI18N
|
cbJoinAutoIngestCluster.setFont(cbJoinAutoIngestCluster.getFont().deriveFont(cbJoinAutoIngestCluster.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
|
||||||
jPanelNodeType.setMinimumSize(new java.awt.Dimension(50, 50));
|
org.openide.awt.Mnemonics.setLocalizedText(cbJoinAutoIngestCluster, org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.cbJoinAutoIngestCluster.text")); // NOI18N
|
||||||
|
cbJoinAutoIngestCluster.addActionListener(new java.awt.event.ActionListener() {
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(jLabelSelectMode, org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.jLabelSelectMode.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
|
|
||||||
jRadioButtonAutomated.setToolTipText(org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.jRadioButtonAutomated.toolTipText")); // NOI18N
|
|
||||||
jRadioButtonAutomated.addActionListener(new java.awt.event.ActionListener() {
|
|
||||||
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
jRadioButtonAutomatedActionPerformed(evt);
|
cbJoinAutoIngestClusterActionPerformed(evt);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
modeRadioButtons.add(jRadioButtonReview);
|
tbOops.setEditable(false);
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(jRadioButtonReview, org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.jRadioButtonReview.text")); // NOI18N
|
tbOops.setFont(tbOops.getFont().deriveFont(tbOops.getFont().getStyle() | java.awt.Font.BOLD, 12));
|
||||||
jRadioButtonReview.setToolTipText(org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.jRadioButtonReview.toolTipText")); // NOI18N
|
tbOops.setForeground(new java.awt.Color(255, 0, 0));
|
||||||
jRadioButtonReview.addActionListener(new java.awt.event.ActionListener() {
|
tbOops.setText(org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.tbOops.text")); // NOI18N
|
||||||
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
tbOops.setBorder(null);
|
||||||
jRadioButtonReviewActionPerformed(evt);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(jLabelSelectInputFolder, org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.jLabelSelectInputFolder.text")); // NOI18N
|
|
||||||
jLabelSelectInputFolder.setVerticalAlignment(javax.swing.SwingConstants.BOTTOM);
|
|
||||||
|
|
||||||
inputPathTextField.setText(org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.inputPathTextField.text")); // NOI18N
|
|
||||||
inputPathTextField.setToolTipText(org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.inputPathTextField.toolTipText")); // NOI18N
|
|
||||||
|
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(browseInputFolderButton, org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.browseInputFolderButton.text")); // NOI18N
|
|
||||||
browseInputFolderButton.addActionListener(new java.awt.event.ActionListener() {
|
|
||||||
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
|
||||||
browseInputFolderButtonActionPerformed(evt);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(jLabelSelectOutputFolder, org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.jLabelSelectOutputFolder.text")); // NOI18N
|
|
||||||
jLabelSelectOutputFolder.setVerticalAlignment(javax.swing.SwingConstants.BOTTOM);
|
|
||||||
|
|
||||||
outputPathTextField.setText(org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.outputPathTextField.text")); // NOI18N
|
|
||||||
outputPathTextField.setToolTipText(org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.outputPathTextField.toolTipText")); // NOI18N
|
|
||||||
|
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(browseOutputFolderButton, org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.browseOutputFolderButton.text")); // NOI18N
|
|
||||||
browseOutputFolderButton.addActionListener(new java.awt.event.ActionListener() {
|
|
||||||
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
|
||||||
browseOutputFolderButtonActionPerformed(evt);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
jLabelInvalidImageFolder.setForeground(new java.awt.Color(255, 0, 0));
|
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(jLabelInvalidImageFolder, org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.jLabelInvalidImageFolder.text")); // NOI18N
|
|
||||||
|
|
||||||
jLabelInvalidResultsFolder.setForeground(new java.awt.Color(255, 0, 0));
|
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(jLabelInvalidResultsFolder, org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.jLabelInvalidResultsFolder.text")); // NOI18N
|
|
||||||
|
|
||||||
jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/experimental/images/AIM.png"))); // NOI18N
|
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(jLabel1, org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.jLabel1.text")); // NOI18N
|
|
||||||
|
|
||||||
javax.swing.GroupLayout jPanelNodeTypeLayout = new javax.swing.GroupLayout(jPanelNodeType);
|
|
||||||
jPanelNodeType.setLayout(jPanelNodeTypeLayout);
|
|
||||||
jPanelNodeTypeLayout.setHorizontalGroup(
|
|
||||||
jPanelNodeTypeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
||||||
.addGroup(jPanelNodeTypeLayout.createSequentialGroup()
|
|
||||||
.addContainerGap()
|
|
||||||
.addGroup(jPanelNodeTypeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
||||||
.addGroup(jPanelNodeTypeLayout.createSequentialGroup()
|
|
||||||
.addGroup(jPanelNodeTypeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
|
|
||||||
.addComponent(outputPathTextField, javax.swing.GroupLayout.Alignment.LEADING)
|
|
||||||
.addComponent(inputPathTextField, javax.swing.GroupLayout.Alignment.LEADING))
|
|
||||||
.addGap(10, 10, 10)
|
|
||||||
.addGroup(jPanelNodeTypeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
||||||
.addComponent(browseInputFolderButton, javax.swing.GroupLayout.Alignment.TRAILING)
|
|
||||||
.addComponent(browseOutputFolderButton, javax.swing.GroupLayout.Alignment.TRAILING)))
|
|
||||||
.addGroup(jPanelNodeTypeLayout.createSequentialGroup()
|
|
||||||
.addGroup(jPanelNodeTypeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
||||||
.addComponent(jLabelSelectMode)
|
|
||||||
.addComponent(jRadioButtonReview)
|
|
||||||
.addComponent(jRadioButtonAutomated))
|
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
|
||||||
.addComponent(jLabel1))
|
|
||||||
.addGroup(jPanelNodeTypeLayout.createSequentialGroup()
|
|
||||||
.addComponent(jLabelSelectInputFolder)
|
|
||||||
.addGap(18, 18, 18)
|
|
||||||
.addComponent(jLabelInvalidImageFolder, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
|
||||||
.addGroup(jPanelNodeTypeLayout.createSequentialGroup()
|
|
||||||
.addComponent(jLabelSelectOutputFolder)
|
|
||||||
.addGap(18, 18, 18)
|
|
||||||
.addComponent(jLabelInvalidResultsFolder, javax.swing.GroupLayout.PREFERRED_SIZE, 544, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
||||||
.addGap(0, 0, Short.MAX_VALUE)))
|
|
||||||
.addContainerGap())
|
|
||||||
);
|
|
||||||
jPanelNodeTypeLayout.setVerticalGroup(
|
|
||||||
jPanelNodeTypeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
||||||
.addGroup(jPanelNodeTypeLayout.createSequentialGroup()
|
|
||||||
.addGroup(jPanelNodeTypeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
||||||
.addGroup(jPanelNodeTypeLayout.createSequentialGroup()
|
|
||||||
.addContainerGap()
|
|
||||||
.addComponent(jLabelSelectMode)
|
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
|
||||||
.addComponent(jRadioButtonAutomated)
|
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
|
||||||
.addComponent(jRadioButtonReview))
|
|
||||||
.addComponent(jLabel1))
|
|
||||||
.addGap(1, 1, 1)
|
|
||||||
.addGroup(jPanelNodeTypeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
|
||||||
.addComponent(jLabelSelectInputFolder)
|
|
||||||
.addComponent(jLabelInvalidImageFolder))
|
|
||||||
.addGap(1, 1, 1)
|
|
||||||
.addGroup(jPanelNodeTypeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
|
||||||
.addComponent(inputPathTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
||||||
.addComponent(browseInputFolderButton))
|
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
|
||||||
.addGroup(jPanelNodeTypeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
|
||||||
.addComponent(jLabelSelectOutputFolder, javax.swing.GroupLayout.PREFERRED_SIZE, 21, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
||||||
.addComponent(jLabelInvalidResultsFolder))
|
|
||||||
.addGap(1, 1, 1)
|
|
||||||
.addGroup(jPanelNodeTypeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
|
||||||
.addComponent(browseOutputFolderButton)
|
|
||||||
.addComponent(outputPathTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
|
|
||||||
.addGap(0, 0, Short.MAX_VALUE))
|
|
||||||
);
|
|
||||||
|
|
||||||
jPanelSharedConfig.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEtchedBorder(), org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.jPanelSharedConfig.border.title"))); // NOI18N
|
|
||||||
|
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(sharedConfigCheckbox, org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.sharedConfigCheckbox.text")); // NOI18N
|
|
||||||
sharedConfigCheckbox.setMaximumSize(new java.awt.Dimension(191, 14));
|
|
||||||
sharedConfigCheckbox.setMinimumSize(new java.awt.Dimension(191, 14));
|
|
||||||
sharedConfigCheckbox.setPreferredSize(new java.awt.Dimension(191, 14));
|
|
||||||
sharedConfigCheckbox.addItemListener(new java.awt.event.ItemListener() {
|
|
||||||
public void itemStateChanged(java.awt.event.ItemEvent evt) {
|
|
||||||
sharedConfigCheckboxItemStateChanged(evt);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
sharedSettingsTextField.setText(org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.sharedSettingsTextField.text")); // NOI18N
|
|
||||||
sharedSettingsTextField.setEnabled(false);
|
|
||||||
|
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(browseSharedSettingsButton, org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.browseSharedSettingsButton.text")); // NOI18N
|
|
||||||
browseSharedSettingsButton.setEnabled(false);
|
|
||||||
browseSharedSettingsButton.addActionListener(new java.awt.event.ActionListener() {
|
|
||||||
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
|
||||||
browseSharedSettingsButtonActionPerformed(evt);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
sharedSettingsErrorTextField.setEditable(false);
|
|
||||||
sharedSettingsErrorTextField.setForeground(new java.awt.Color(255, 0, 0));
|
|
||||||
sharedSettingsErrorTextField.setText(org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.sharedSettingsErrorTextField.text")); // NOI18N
|
|
||||||
sharedSettingsErrorTextField.setBorder(null);
|
|
||||||
|
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(masterNodeCheckBox, org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.masterNodeCheckBox.text")); // NOI18N
|
|
||||||
masterNodeCheckBox.setEnabled(false);
|
|
||||||
masterNodeCheckBox.addItemListener(new java.awt.event.ItemListener() {
|
|
||||||
public void itemStateChanged(java.awt.event.ItemEvent evt) {
|
|
||||||
masterNodeCheckBoxItemStateChanged(evt);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(uploadButton, org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.uploadButton.text")); // NOI18N
|
|
||||||
uploadButton.addActionListener(new java.awt.event.ActionListener() {
|
|
||||||
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
|
||||||
uploadButtonActionPerformed(evt);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(downloadButton, org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.downloadButton.text")); // NOI18N
|
|
||||||
downloadButton.addActionListener(new java.awt.event.ActionListener() {
|
|
||||||
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
|
||||||
downloadButtonActionPerformed(evt);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(jLabelCurrentTask, org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.jLabelCurrentTask.text")); // NOI18N
|
|
||||||
|
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(jLabelTaskDescription, org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.jLabelTaskDescription.text")); // NOI18N
|
|
||||||
|
|
||||||
configButtonErrorTextField.setEditable(false);
|
|
||||||
configButtonErrorTextField.setForeground(new java.awt.Color(255, 0, 0));
|
|
||||||
configButtonErrorTextField.setText(org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.configButtonErrorTextField.text")); // NOI18N
|
|
||||||
configButtonErrorTextField.setBorder(null);
|
|
||||||
|
|
||||||
javax.swing.GroupLayout jPanelSharedConfigLayout = new javax.swing.GroupLayout(jPanelSharedConfig);
|
|
||||||
jPanelSharedConfig.setLayout(jPanelSharedConfigLayout);
|
|
||||||
jPanelSharedConfigLayout.setHorizontalGroup(
|
|
||||||
jPanelSharedConfigLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
||||||
.addGroup(jPanelSharedConfigLayout.createSequentialGroup()
|
|
||||||
.addGap(10, 10, 10)
|
|
||||||
.addComponent(jLabelCurrentTask)
|
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
|
||||||
.addComponent(jLabelTaskDescription, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
|
||||||
.addContainerGap())
|
|
||||||
.addGroup(jPanelSharedConfigLayout.createSequentialGroup()
|
|
||||||
.addContainerGap()
|
|
||||||
.addGroup(jPanelSharedConfigLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
||||||
.addGroup(jPanelSharedConfigLayout.createSequentialGroup()
|
|
||||||
.addComponent(sharedSettingsTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 400, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
|
||||||
.addComponent(browseSharedSettingsButton, javax.swing.GroupLayout.PREFERRED_SIZE, 143, javax.swing.GroupLayout.PREFERRED_SIZE))
|
|
||||||
.addComponent(uploadButton, javax.swing.GroupLayout.PREFERRED_SIZE, 143, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
||||||
.addGroup(jPanelSharedConfigLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
|
|
||||||
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanelSharedConfigLayout.createSequentialGroup()
|
|
||||||
.addComponent(downloadButton, javax.swing.GroupLayout.PREFERRED_SIZE, 143, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
|
||||||
.addComponent(configButtonErrorTextField))
|
|
||||||
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanelSharedConfigLayout.createSequentialGroup()
|
|
||||||
.addComponent(sharedConfigCheckbox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
|
||||||
.addComponent(sharedSettingsErrorTextField))
|
|
||||||
.addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 692, javax.swing.GroupLayout.PREFERRED_SIZE))
|
|
||||||
.addComponent(pbTaskInProgress, javax.swing.GroupLayout.PREFERRED_SIZE, 695, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
||||||
.addComponent(masterNodeCheckBox))
|
|
||||||
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
|
||||||
);
|
|
||||||
jPanelSharedConfigLayout.setVerticalGroup(
|
|
||||||
jPanelSharedConfigLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
||||||
.addGroup(jPanelSharedConfigLayout.createSequentialGroup()
|
|
||||||
.addContainerGap()
|
|
||||||
.addGroup(jPanelSharedConfigLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
|
||||||
.addComponent(sharedConfigCheckbox, javax.swing.GroupLayout.PREFERRED_SIZE, 21, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
||||||
.addComponent(sharedSettingsErrorTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 21, javax.swing.GroupLayout.PREFERRED_SIZE))
|
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
|
||||||
.addGroup(jPanelSharedConfigLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
|
||||||
.addComponent(sharedSettingsTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
||||||
.addComponent(browseSharedSettingsButton))
|
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
|
||||||
.addGroup(jPanelSharedConfigLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
|
||||||
.addComponent(downloadButton)
|
|
||||||
.addComponent(configButtonErrorTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 21, javax.swing.GroupLayout.PREFERRED_SIZE))
|
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
|
||||||
.addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
||||||
.addGap(1, 1, 1)
|
|
||||||
.addComponent(masterNodeCheckBox, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
|
||||||
.addComponent(uploadButton)
|
|
||||||
.addGap(8, 8, 8)
|
|
||||||
.addGroup(jPanelSharedConfigLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
|
||||||
.addComponent(jLabelCurrentTask)
|
|
||||||
.addComponent(jLabelTaskDescription))
|
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
|
||||||
.addComponent(pbTaskInProgress, javax.swing.GroupLayout.PREFERRED_SIZE, 22, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
||||||
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
|
||||||
);
|
|
||||||
|
|
||||||
jPanelIngestSettings.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEtchedBorder(), org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.jPanelIngestSettings.border.title"))); // NOI18N
|
|
||||||
|
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(bnEditIngestSettings, org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.bnEditIngestSettings.text")); // NOI18N
|
org.openide.awt.Mnemonics.setLocalizedText(bnEditIngestSettings, org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.bnEditIngestSettings.text")); // NOI18N
|
||||||
bnEditIngestSettings.setToolTipText(org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.bnEditIngestSettings.toolTipText")); // NOI18N
|
bnEditIngestSettings.setToolTipText(org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.bnEditIngestSettings.toolTipText")); // NOI18N
|
||||||
@ -949,46 +658,94 @@ public class AutoIngestSettingsPanel extends javax.swing.JPanel {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
javax.swing.GroupLayout jPanelIngestSettingsLayout = new javax.swing.GroupLayout(jPanelIngestSettings);
|
org.openide.awt.Mnemonics.setLocalizedText(browseOutputFolderButton, org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.browseOutputFolderButton.text")); // NOI18N
|
||||||
jPanelIngestSettings.setLayout(jPanelIngestSettingsLayout);
|
browseOutputFolderButton.addActionListener(new java.awt.event.ActionListener() {
|
||||||
jPanelIngestSettingsLayout.setHorizontalGroup(
|
|
||||||
jPanelIngestSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
||||||
.addGroup(jPanelIngestSettingsLayout.createSequentialGroup()
|
|
||||||
.addContainerGap()
|
|
||||||
.addComponent(bnEditIngestSettings, javax.swing.GroupLayout.PREFERRED_SIZE, 155, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
|
||||||
.addComponent(bnAdvancedSettings, javax.swing.GroupLayout.PREFERRED_SIZE, 155, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
|
||||||
.addComponent(bnFileExport, javax.swing.GroupLayout.PREFERRED_SIZE, 155, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
|
||||||
.addComponent(bnLogging, javax.swing.GroupLayout.PREFERRED_SIZE, 155, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
||||||
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
|
||||||
);
|
|
||||||
jPanelIngestSettingsLayout.setVerticalGroup(
|
|
||||||
jPanelIngestSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
||||||
.addGroup(jPanelIngestSettingsLayout.createSequentialGroup()
|
|
||||||
.addContainerGap()
|
|
||||||
.addGroup(jPanelIngestSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
|
||||||
.addComponent(bnEditIngestSettings)
|
|
||||||
.addComponent(bnFileExport)
|
|
||||||
.addComponent(bnAdvancedSettings)
|
|
||||||
.addComponent(bnLogging))
|
|
||||||
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
|
||||||
);
|
|
||||||
|
|
||||||
cbJoinAutoIngestCluster.setFont(cbJoinAutoIngestCluster.getFont().deriveFont(cbJoinAutoIngestCluster.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
|
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(cbJoinAutoIngestCluster, org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.cbJoinAutoIngestCluster.text")); // NOI18N
|
|
||||||
cbJoinAutoIngestCluster.addActionListener(new java.awt.event.ActionListener() {
|
|
||||||
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
cbJoinAutoIngestClusterActionPerformed(evt);
|
browseOutputFolderButtonActionPerformed(evt);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
tbOops.setEditable(false);
|
org.openide.awt.Mnemonics.setLocalizedText(browseInputFolderButton, org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.browseInputFolderButton.text")); // NOI18N
|
||||||
tbOops.setFont(tbOops.getFont().deriveFont(tbOops.getFont().getStyle() | java.awt.Font.BOLD, 12));
|
browseInputFolderButton.addActionListener(new java.awt.event.ActionListener() {
|
||||||
tbOops.setForeground(new java.awt.Color(255, 0, 0));
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
tbOops.setText(org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.tbOops.text")); // NOI18N
|
browseInputFolderButtonActionPerformed(evt);
|
||||||
tbOops.setBorder(null);
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
inputPathTextField.setText(org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.inputPathTextField.text")); // NOI18N
|
||||||
|
inputPathTextField.setToolTipText(org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.inputPathTextField.toolTipText")); // NOI18N
|
||||||
|
|
||||||
|
outputPathTextField.setText(org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.outputPathTextField.text")); // NOI18N
|
||||||
|
outputPathTextField.setToolTipText(org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.outputPathTextField.toolTipText")); // NOI18N
|
||||||
|
|
||||||
|
jLabelInvalidResultsFolder.setForeground(new java.awt.Color(255, 0, 0));
|
||||||
|
org.openide.awt.Mnemonics.setLocalizedText(jLabelInvalidResultsFolder, org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.jLabelInvalidResultsFolder.text")); // NOI18N
|
||||||
|
|
||||||
|
jLabelInvalidImageFolder.setForeground(new java.awt.Color(255, 0, 0));
|
||||||
|
org.openide.awt.Mnemonics.setLocalizedText(jLabelInvalidImageFolder, org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.jLabelInvalidImageFolder.text")); // NOI18N
|
||||||
|
|
||||||
|
org.openide.awt.Mnemonics.setLocalizedText(jLabelSelectInputFolder, org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.jLabelSelectInputFolder.text")); // NOI18N
|
||||||
|
jLabelSelectInputFolder.setVerticalAlignment(javax.swing.SwingConstants.BOTTOM);
|
||||||
|
|
||||||
|
org.openide.awt.Mnemonics.setLocalizedText(jLabelSelectOutputFolder, org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.jLabelSelectOutputFolder.text")); // NOI18N
|
||||||
|
jLabelSelectOutputFolder.setVerticalAlignment(javax.swing.SwingConstants.BOTTOM);
|
||||||
|
|
||||||
|
org.openide.awt.Mnemonics.setLocalizedText(sharedConfigCheckbox, org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.sharedConfigCheckbox.text")); // NOI18N
|
||||||
|
sharedConfigCheckbox.setMaximumSize(new java.awt.Dimension(191, 14));
|
||||||
|
sharedConfigCheckbox.setMinimumSize(new java.awt.Dimension(191, 14));
|
||||||
|
sharedConfigCheckbox.setPreferredSize(new java.awt.Dimension(191, 14));
|
||||||
|
sharedConfigCheckbox.addItemListener(new java.awt.event.ItemListener() {
|
||||||
|
public void itemStateChanged(java.awt.event.ItemEvent evt) {
|
||||||
|
sharedConfigCheckboxItemStateChanged(evt);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
sharedSettingsErrorTextField.setEditable(false);
|
||||||
|
sharedSettingsErrorTextField.setForeground(new java.awt.Color(255, 0, 0));
|
||||||
|
sharedSettingsErrorTextField.setText(org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.sharedSettingsErrorTextField.text")); // NOI18N
|
||||||
|
sharedSettingsErrorTextField.setBorder(null);
|
||||||
|
|
||||||
|
sharedSettingsTextField.setText(org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.sharedSettingsTextField.text")); // NOI18N
|
||||||
|
sharedSettingsTextField.setEnabled(false);
|
||||||
|
|
||||||
|
org.openide.awt.Mnemonics.setLocalizedText(browseSharedSettingsButton, org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.browseSharedSettingsButton.text")); // NOI18N
|
||||||
|
browseSharedSettingsButton.setEnabled(false);
|
||||||
|
browseSharedSettingsButton.addActionListener(new java.awt.event.ActionListener() {
|
||||||
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
|
browseSharedSettingsButtonActionPerformed(evt);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
org.openide.awt.Mnemonics.setLocalizedText(downloadButton, org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.downloadButton.text")); // NOI18N
|
||||||
|
downloadButton.addActionListener(new java.awt.event.ActionListener() {
|
||||||
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
|
downloadButtonActionPerformed(evt);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
configButtonErrorTextField.setEditable(false);
|
||||||
|
configButtonErrorTextField.setForeground(new java.awt.Color(255, 0, 0));
|
||||||
|
configButtonErrorTextField.setText(org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.configButtonErrorTextField.text")); // NOI18N
|
||||||
|
configButtonErrorTextField.setBorder(null);
|
||||||
|
|
||||||
|
org.openide.awt.Mnemonics.setLocalizedText(jLabelTaskDescription, org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.jLabelTaskDescription.text")); // NOI18N
|
||||||
|
|
||||||
|
org.openide.awt.Mnemonics.setLocalizedText(jLabelCurrentTask, org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.jLabelCurrentTask.text")); // NOI18N
|
||||||
|
|
||||||
|
org.openide.awt.Mnemonics.setLocalizedText(uploadButton, org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.uploadButton.text")); // NOI18N
|
||||||
|
uploadButton.addActionListener(new java.awt.event.ActionListener() {
|
||||||
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
|
uploadButtonActionPerformed(evt);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
org.openide.awt.Mnemonics.setLocalizedText(masterNodeCheckBox, org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.masterNodeCheckBox.text")); // NOI18N
|
||||||
|
masterNodeCheckBox.setEnabled(false);
|
||||||
|
masterNodeCheckBox.addItemListener(new java.awt.event.ItemListener() {
|
||||||
|
public void itemStateChanged(java.awt.event.ItemEvent evt) {
|
||||||
|
masterNodeCheckBoxItemStateChanged(evt);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
javax.swing.GroupLayout nodePanelLayout = new javax.swing.GroupLayout(nodePanel);
|
javax.swing.GroupLayout nodePanelLayout = new javax.swing.GroupLayout(nodePanel);
|
||||||
nodePanel.setLayout(nodePanelLayout);
|
nodePanel.setLayout(nodePanelLayout);
|
||||||
@ -998,14 +755,56 @@ public class AutoIngestSettingsPanel extends javax.swing.JPanel {
|
|||||||
.addContainerGap()
|
.addContainerGap()
|
||||||
.addGroup(nodePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
.addGroup(nodePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGroup(nodePanelLayout.createSequentialGroup()
|
.addGroup(nodePanelLayout.createSequentialGroup()
|
||||||
.addComponent(cbJoinAutoIngestCluster, javax.swing.GroupLayout.PREFERRED_SIZE, 171, javax.swing.GroupLayout.PREFERRED_SIZE)
|
.addComponent(jLabelCurrentTask)
|
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
||||||
|
.addComponent(jLabelTaskDescription, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
||||||
|
.addGroup(nodePanelLayout.createSequentialGroup()
|
||||||
|
.addGroup(nodePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
|
||||||
|
.addComponent(outputPathTextField, javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addComponent(inputPathTextField, javax.swing.GroupLayout.Alignment.LEADING))
|
||||||
|
.addGap(10, 10, 10)
|
||||||
|
.addGroup(nodePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addComponent(browseInputFolderButton, javax.swing.GroupLayout.Alignment.TRAILING)
|
||||||
|
.addComponent(browseOutputFolderButton, javax.swing.GroupLayout.Alignment.TRAILING)))
|
||||||
|
.addGroup(nodePanelLayout.createSequentialGroup()
|
||||||
|
.addComponent(jLabelSelectInputFolder)
|
||||||
.addGap(18, 18, 18)
|
.addGap(18, 18, 18)
|
||||||
.addComponent(tbOops, javax.swing.GroupLayout.PREFERRED_SIZE, 465, javax.swing.GroupLayout.PREFERRED_SIZE))
|
.addComponent(jLabelInvalidImageFolder, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
||||||
.addGroup(nodePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
|
.addGroup(nodePanelLayout.createSequentialGroup()
|
||||||
.addComponent(jPanelNodeType, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
.addGroup(nodePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addComponent(jPanelSharedConfig, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
.addComponent(uploadButton, javax.swing.GroupLayout.PREFERRED_SIZE, 143, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
.addComponent(jPanelIngestSettings, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
|
.addComponent(pbTaskInProgress, javax.swing.GroupLayout.PREFERRED_SIZE, 695, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
.addComponent(masterNodeCheckBox)
|
||||||
|
.addGroup(nodePanelLayout.createSequentialGroup()
|
||||||
|
.addComponent(cbJoinAutoIngestCluster, javax.swing.GroupLayout.PREFERRED_SIZE, 171, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
|
.addGap(18, 18, 18)
|
||||||
|
.addComponent(tbOops, javax.swing.GroupLayout.PREFERRED_SIZE, 465, javax.swing.GroupLayout.PREFERRED_SIZE))
|
||||||
|
.addGroup(nodePanelLayout.createSequentialGroup()
|
||||||
|
.addComponent(bnEditIngestSettings, javax.swing.GroupLayout.PREFERRED_SIZE, 155, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
|
.addComponent(bnAdvancedSettings, javax.swing.GroupLayout.PREFERRED_SIZE, 155, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
|
.addComponent(bnFileExport, javax.swing.GroupLayout.PREFERRED_SIZE, 155, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
|
.addComponent(bnLogging, javax.swing.GroupLayout.PREFERRED_SIZE, 155, javax.swing.GroupLayout.PREFERRED_SIZE))
|
||||||
|
.addGroup(nodePanelLayout.createSequentialGroup()
|
||||||
|
.addComponent(jLabelSelectOutputFolder)
|
||||||
|
.addGap(18, 18, 18)
|
||||||
|
.addComponent(jLabelInvalidResultsFolder, javax.swing.GroupLayout.PREFERRED_SIZE, 544, javax.swing.GroupLayout.PREFERRED_SIZE))
|
||||||
|
.addGroup(nodePanelLayout.createSequentialGroup()
|
||||||
|
.addComponent(sharedConfigCheckbox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
||||||
|
.addComponent(sharedSettingsErrorTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
|
||||||
|
.addGroup(nodePanelLayout.createSequentialGroup()
|
||||||
|
.addComponent(sharedSettingsTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 400, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
|
.addComponent(browseSharedSettingsButton, javax.swing.GroupLayout.PREFERRED_SIZE, 143, javax.swing.GroupLayout.PREFERRED_SIZE))
|
||||||
|
.addGroup(nodePanelLayout.createSequentialGroup()
|
||||||
|
.addComponent(downloadButton, javax.swing.GroupLayout.PREFERRED_SIZE, 143, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
||||||
|
.addComponent(configButtonErrorTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 396, javax.swing.GroupLayout.PREFERRED_SIZE)))
|
||||||
|
.addGap(0, 32, Short.MAX_VALUE)))
|
||||||
|
.addContainerGap())
|
||||||
);
|
);
|
||||||
nodePanelLayout.setVerticalGroup(
|
nodePanelLayout.setVerticalGroup(
|
||||||
nodePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
nodePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
@ -1014,12 +813,51 @@ public class AutoIngestSettingsPanel extends javax.swing.JPanel {
|
|||||||
.addGroup(nodePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
.addGroup(nodePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
||||||
.addComponent(cbJoinAutoIngestCluster)
|
.addComponent(cbJoinAutoIngestCluster)
|
||||||
.addComponent(tbOops, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
|
.addComponent(tbOops, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
|
||||||
.addGap(3, 3, 3)
|
.addGap(18, 18, 18)
|
||||||
.addComponent(jPanelNodeType, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
.addGroup(nodePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
||||||
|
.addComponent(jLabelSelectInputFolder)
|
||||||
|
.addComponent(jLabelInvalidImageFolder))
|
||||||
|
.addGap(1, 1, 1)
|
||||||
|
.addGroup(nodePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
||||||
|
.addComponent(inputPathTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
|
.addComponent(browseInputFolderButton))
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
.addComponent(jPanelIngestSettings, javax.swing.GroupLayout.PREFERRED_SIZE, 62, javax.swing.GroupLayout.PREFERRED_SIZE)
|
.addGroup(nodePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
||||||
|
.addComponent(jLabelSelectOutputFolder, javax.swing.GroupLayout.PREFERRED_SIZE, 21, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
|
.addComponent(jLabelInvalidResultsFolder))
|
||||||
|
.addGap(1, 1, 1)
|
||||||
|
.addGroup(nodePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
||||||
|
.addComponent(browseOutputFolderButton)
|
||||||
|
.addComponent(outputPathTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
|
||||||
|
.addGap(25, 25, 25)
|
||||||
|
.addGroup(nodePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
||||||
|
.addComponent(bnEditIngestSettings)
|
||||||
|
.addComponent(bnFileExport)
|
||||||
|
.addComponent(bnAdvancedSettings)
|
||||||
|
.addComponent(bnLogging))
|
||||||
|
.addGap(18, 18, 18)
|
||||||
|
.addGroup(nodePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
||||||
|
.addComponent(sharedConfigCheckbox, javax.swing.GroupLayout.PREFERRED_SIZE, 21, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
|
.addComponent(sharedSettingsErrorTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 21, javax.swing.GroupLayout.PREFERRED_SIZE))
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
.addComponent(jPanelSharedConfig, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
.addGroup(nodePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
||||||
|
.addComponent(sharedSettingsTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
|
.addComponent(browseSharedSettingsButton))
|
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
||||||
|
.addGroup(nodePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
||||||
|
.addComponent(downloadButton)
|
||||||
|
.addComponent(configButtonErrorTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 21, javax.swing.GroupLayout.PREFERRED_SIZE))
|
||||||
|
.addGap(18, 18, 18)
|
||||||
|
.addComponent(masterNodeCheckBox, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
|
.addComponent(uploadButton)
|
||||||
|
.addGap(8, 8, 8)
|
||||||
|
.addGroup(nodePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
||||||
|
.addComponent(jLabelCurrentTask)
|
||||||
|
.addComponent(jLabelTaskDescription))
|
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
|
.addComponent(pbTaskInProgress, javax.swing.GroupLayout.PREFERRED_SIZE, 22, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
|
.addContainerGap(161, Short.MAX_VALUE))
|
||||||
);
|
);
|
||||||
|
|
||||||
nodeScrollPane.setViewportView(nodePanel);
|
nodeScrollPane.setViewportView(nodePanel);
|
||||||
@ -1039,31 +877,35 @@ public class AutoIngestSettingsPanel extends javax.swing.JPanel {
|
|||||||
);
|
);
|
||||||
}// </editor-fold>//GEN-END:initComponents
|
}// </editor-fold>//GEN-END:initComponents
|
||||||
|
|
||||||
private void browseSharedSettingsButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_browseSharedSettingsButtonActionPerformed
|
|
||||||
|
|
||||||
String oldText = sharedSettingsTextField.getText().trim();
|
|
||||||
// set the current directory of the FileChooser if the oldText is valid
|
|
||||||
File currentDir = new File(oldText);
|
|
||||||
if (currentDir.exists()) {
|
|
||||||
fc.setCurrentDirectory(currentDir);
|
|
||||||
}
|
|
||||||
|
|
||||||
fc.setDialogTitle("Select shared configuration folder:");
|
|
||||||
fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
|
|
||||||
|
|
||||||
int retval = fc.showOpenDialog(this);
|
|
||||||
if (retval == JFileChooser.APPROVE_OPTION) {
|
|
||||||
String path = fc.getSelectedFile().getPath();
|
|
||||||
sharedSettingsTextField.setText(path);
|
|
||||||
validateSettings();
|
|
||||||
controller.changed();
|
|
||||||
}
|
|
||||||
}//GEN-LAST:event_browseSharedSettingsButtonActionPerformed
|
|
||||||
|
|
||||||
boolean permissionsAppropriate(String path) {
|
boolean permissionsAppropriate(String path) {
|
||||||
return FileUtil.hasReadWriteAccess(Paths.get(path));
|
return FileUtil.hasReadWriteAccess(Paths.get(path));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void setSharedConfigEnable() {
|
||||||
|
setEnabledStateForSharedConfiguration();
|
||||||
|
if (sharedConfigCheckbox.isEnabled() && sharedConfigCheckbox.isSelected()) {
|
||||||
|
sharedSettingsTextField.setEnabled(true);
|
||||||
|
browseSharedSettingsButton.setEnabled(true);
|
||||||
|
masterNodeCheckBox.setEnabled(true);
|
||||||
|
downloadButton.setEnabled(true);
|
||||||
|
validateSettings();
|
||||||
|
controller.changed();
|
||||||
|
} else {
|
||||||
|
sharedSettingsTextField.setEnabled(false);
|
||||||
|
browseSharedSettingsButton.setEnabled(false);
|
||||||
|
masterNodeCheckBox.setEnabled(false);
|
||||||
|
downloadButton.setEnabled(false);
|
||||||
|
sharedSettingsErrorTextField.setText("");
|
||||||
|
validateSettings();
|
||||||
|
controller.changed();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void cbJoinAutoIngestClusterActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cbJoinAutoIngestClusterActionPerformed
|
||||||
|
enableOptionsBasedOnMode(getModeFromRadioButtons());
|
||||||
|
controller.changed();
|
||||||
|
}//GEN-LAST:event_cbJoinAutoIngestClusterActionPerformed
|
||||||
|
|
||||||
private void downloadButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_downloadButtonActionPerformed
|
private void downloadButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_downloadButtonActionPerformed
|
||||||
// First save the shared config folder and solr settings to the properties
|
// First save the shared config folder and solr settings to the properties
|
||||||
String globalSettingsPath = getNormalizedFolderPath(sharedSettingsTextField.getText().trim());
|
String globalSettingsPath = getNormalizedFolderPath(sharedSettingsTextField.getText().trim());
|
||||||
@ -1100,31 +942,6 @@ public class AutoIngestSettingsPanel extends javax.swing.JPanel {
|
|||||||
}
|
}
|
||||||
}//GEN-LAST:event_uploadButtonActionPerformed
|
}//GEN-LAST:event_uploadButtonActionPerformed
|
||||||
|
|
||||||
private void sharedConfigCheckboxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_sharedConfigCheckboxItemStateChanged
|
|
||||||
// Enable the global settings text box and browse button iff the checkbox is checked and enabled
|
|
||||||
setSharedConfigEnable();
|
|
||||||
}//GEN-LAST:event_sharedConfigCheckboxItemStateChanged
|
|
||||||
|
|
||||||
private void setSharedConfigEnable() {
|
|
||||||
setEnabledStateForSharedConfiguration();
|
|
||||||
if (sharedConfigCheckbox.isEnabled() && sharedConfigCheckbox.isSelected() && jRadioButtonAutomated.isSelected()) {
|
|
||||||
sharedSettingsTextField.setEnabled(true);
|
|
||||||
browseSharedSettingsButton.setEnabled(true);
|
|
||||||
masterNodeCheckBox.setEnabled(true);
|
|
||||||
downloadButton.setEnabled(true);
|
|
||||||
validateSettings();
|
|
||||||
controller.changed();
|
|
||||||
} else {
|
|
||||||
sharedSettingsTextField.setEnabled(false);
|
|
||||||
browseSharedSettingsButton.setEnabled(false);
|
|
||||||
masterNodeCheckBox.setEnabled(false);
|
|
||||||
downloadButton.setEnabled(false);
|
|
||||||
sharedSettingsErrorTextField.setText("");
|
|
||||||
validateSettings();
|
|
||||||
controller.changed();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void masterNodeCheckBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_masterNodeCheckBoxItemStateChanged
|
private void masterNodeCheckBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_masterNodeCheckBoxItemStateChanged
|
||||||
// Enable the global settings text box and browse button iff the checkbox is checked and enabled
|
// Enable the global settings text box and browse button iff the checkbox is checked and enabled
|
||||||
setEnabledStateForSharedConfiguration();
|
setEnabledStateForSharedConfiguration();
|
||||||
@ -1137,10 +954,31 @@ public class AutoIngestSettingsPanel extends javax.swing.JPanel {
|
|||||||
}
|
}
|
||||||
}//GEN-LAST:event_masterNodeCheckBoxItemStateChanged
|
}//GEN-LAST:event_masterNodeCheckBoxItemStateChanged
|
||||||
|
|
||||||
private void cbJoinAutoIngestClusterActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cbJoinAutoIngestClusterActionPerformed
|
private void browseSharedSettingsButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_browseSharedSettingsButtonActionPerformed
|
||||||
enableOptionsBasedOnMode(getModeFromRadioButtons());
|
|
||||||
controller.changed();
|
String oldText = sharedSettingsTextField.getText().trim();
|
||||||
}//GEN-LAST:event_cbJoinAutoIngestClusterActionPerformed
|
// set the current directory of the FileChooser if the oldText is valid
|
||||||
|
File currentDir = new File(oldText);
|
||||||
|
if (currentDir.exists()) {
|
||||||
|
fc.setCurrentDirectory(currentDir);
|
||||||
|
}
|
||||||
|
|
||||||
|
fc.setDialogTitle("Select shared configuration folder:");
|
||||||
|
fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
|
||||||
|
|
||||||
|
int retval = fc.showOpenDialog(this);
|
||||||
|
if (retval == JFileChooser.APPROVE_OPTION) {
|
||||||
|
String path = fc.getSelectedFile().getPath();
|
||||||
|
sharedSettingsTextField.setText(path);
|
||||||
|
validateSettings();
|
||||||
|
controller.changed();
|
||||||
|
}
|
||||||
|
}//GEN-LAST:event_browseSharedSettingsButtonActionPerformed
|
||||||
|
|
||||||
|
private void sharedConfigCheckboxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_sharedConfigCheckboxItemStateChanged
|
||||||
|
// Enable the global settings text box and browse button iff the checkbox is checked and enabled
|
||||||
|
setSharedConfigEnable();
|
||||||
|
}//GEN-LAST:event_sharedConfigCheckboxItemStateChanged
|
||||||
|
|
||||||
private void browseOutputFolderButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_browseOutputFolderButtonActionPerformed
|
private void browseOutputFolderButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_browseOutputFolderButtonActionPerformed
|
||||||
String oldText = outputPathTextField.getText().trim();
|
String oldText = outputPathTextField.getText().trim();
|
||||||
@ -1182,24 +1020,6 @@ public class AutoIngestSettingsPanel extends javax.swing.JPanel {
|
|||||||
}
|
}
|
||||||
}//GEN-LAST:event_browseInputFolderButtonActionPerformed
|
}//GEN-LAST:event_browseInputFolderButtonActionPerformed
|
||||||
|
|
||||||
private void jRadioButtonReviewActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButtonReviewActionPerformed
|
|
||||||
if (cbJoinAutoIngestCluster.isSelected()) {
|
|
||||||
enableOptionsBasedOnMode(OptionsUiMode.REVIEW);
|
|
||||||
setSharedConfigEnable();
|
|
||||||
validateSettings();
|
|
||||||
controller.changed();
|
|
||||||
}
|
|
||||||
}//GEN-LAST:event_jRadioButtonReviewActionPerformed
|
|
||||||
|
|
||||||
private void jRadioButtonAutomatedActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButtonAutomatedActionPerformed
|
|
||||||
if (cbJoinAutoIngestCluster.isSelected()) {
|
|
||||||
enableOptionsBasedOnMode(OptionsUiMode.AIM);
|
|
||||||
setSharedConfigEnable();
|
|
||||||
validateSettings();
|
|
||||||
controller.changed();
|
|
||||||
}
|
|
||||||
}//GEN-LAST:event_jRadioButtonAutomatedActionPerformed
|
|
||||||
|
|
||||||
private void bnLoggingActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bnLoggingActionPerformed
|
private void bnLoggingActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bnLoggingActionPerformed
|
||||||
JDialog jDialog = new JDialog();
|
JDialog jDialog = new JDialog();
|
||||||
NodeStatusLogPanel loggingPanel = new NodeStatusLogPanel(jDialog);
|
NodeStatusLogPanel loggingPanel = new NodeStatusLogPanel(jDialog);
|
||||||
@ -1242,9 +1062,9 @@ public class AutoIngestSettingsPanel extends javax.swing.JPanel {
|
|||||||
private void bnAdvancedSettingsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bnAdvancedSettingsActionPerformed
|
private void bnAdvancedSettingsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bnAdvancedSettingsActionPerformed
|
||||||
AdvancedAutoIngestSettingsPanel advancedAutoIngestSettingsPanel = new AdvancedAutoIngestSettingsPanel(getModeFromRadioButtons());
|
AdvancedAutoIngestSettingsPanel advancedAutoIngestSettingsPanel = new AdvancedAutoIngestSettingsPanel(getModeFromRadioButtons());
|
||||||
if (JOptionPane.showConfirmDialog(null, advancedAutoIngestSettingsPanel,
|
if (JOptionPane.showConfirmDialog(null, advancedAutoIngestSettingsPanel,
|
||||||
NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.AdvancedAutoIngestSettingsPanel.Title"),
|
NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.AdvancedAutoIngestSettingsPanel.Title"),
|
||||||
JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE) == JOptionPane.OK_OPTION) {
|
JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE) == JOptionPane.OK_OPTION) {
|
||||||
advancedAutoIngestSettingsPanel.store();
|
advancedAutoIngestSettingsPanel.store();
|
||||||
}
|
}
|
||||||
}//GEN-LAST:event_bnAdvancedSettingsActionPerformed
|
}//GEN-LAST:event_bnAdvancedSettingsActionPerformed
|
||||||
|
|
||||||
@ -1349,7 +1169,7 @@ public class AutoIngestSettingsPanel extends javax.swing.JPanel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void setEnabledStateForSharedConfiguration() {
|
void setEnabledStateForSharedConfiguration() {
|
||||||
if (jRadioButtonAutomated.isSelected() && cbJoinAutoIngestCluster.isSelected()) {
|
if (cbJoinAutoIngestCluster.isSelected()) {
|
||||||
enableOptionsBasedOnMode(OptionsUiMode.AIM);
|
enableOptionsBasedOnMode(OptionsUiMode.AIM);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1361,19 +1181,13 @@ public class AutoIngestSettingsPanel extends javax.swing.JPanel {
|
|||||||
bnLogging.setEnabled(enabled);
|
bnLogging.setEnabled(enabled);
|
||||||
browseInputFolderButton.setEnabled(enabled);
|
browseInputFolderButton.setEnabled(enabled);
|
||||||
browseOutputFolderButton.setEnabled(enabled);
|
browseOutputFolderButton.setEnabled(enabled);
|
||||||
browseSharedSettingsButton.setEnabled(sharedConfigCheckbox.isSelected() && jRadioButtonAutomated.isSelected());
|
browseSharedSettingsButton.setEnabled(sharedConfigCheckbox.isSelected() && cbJoinAutoIngestCluster.isSelected());
|
||||||
configButtonErrorTextField.setEnabled(enabled);
|
configButtonErrorTextField.setEnabled(enabled);
|
||||||
inputPathTextField.setEnabled(enabled);
|
inputPathTextField.setEnabled(enabled);
|
||||||
jLabelInvalidImageFolder.setEnabled(enabled);
|
jLabelInvalidImageFolder.setEnabled(enabled);
|
||||||
jLabelInvalidResultsFolder.setEnabled(enabled);
|
jLabelInvalidResultsFolder.setEnabled(enabled);
|
||||||
jLabelSelectInputFolder.setEnabled(enabled);
|
jLabelSelectInputFolder.setEnabled(enabled);
|
||||||
jLabelSelectMode.setEnabled(enabled);
|
|
||||||
jLabelSelectOutputFolder.setEnabled(enabled);
|
jLabelSelectOutputFolder.setEnabled(enabled);
|
||||||
jPanelIngestSettings.setEnabled(enabled);
|
|
||||||
jPanelNodeType.setEnabled(enabled);
|
|
||||||
jPanelSharedConfig.setEnabled(enabled);
|
|
||||||
jRadioButtonAutomated.setEnabled(enabled);
|
|
||||||
jRadioButtonReview.setEnabled(enabled);
|
|
||||||
outputPathTextField.setEnabled(enabled);
|
outputPathTextField.setEnabled(enabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1389,22 +1203,13 @@ public class AutoIngestSettingsPanel extends javax.swing.JPanel {
|
|||||||
private javax.swing.JTextField configButtonErrorTextField;
|
private javax.swing.JTextField configButtonErrorTextField;
|
||||||
private javax.swing.JButton downloadButton;
|
private javax.swing.JButton downloadButton;
|
||||||
private javax.swing.JTextField inputPathTextField;
|
private javax.swing.JTextField inputPathTextField;
|
||||||
private javax.swing.JLabel jLabel1;
|
|
||||||
private javax.swing.JLabel jLabelCurrentTask;
|
private javax.swing.JLabel jLabelCurrentTask;
|
||||||
private javax.swing.JLabel jLabelInvalidImageFolder;
|
private javax.swing.JLabel jLabelInvalidImageFolder;
|
||||||
private javax.swing.JLabel jLabelInvalidResultsFolder;
|
private javax.swing.JLabel jLabelInvalidResultsFolder;
|
||||||
private javax.swing.JLabel jLabelSelectInputFolder;
|
private javax.swing.JLabel jLabelSelectInputFolder;
|
||||||
private javax.swing.JLabel jLabelSelectMode;
|
|
||||||
private javax.swing.JLabel jLabelSelectOutputFolder;
|
private javax.swing.JLabel jLabelSelectOutputFolder;
|
||||||
private javax.swing.JLabel jLabelTaskDescription;
|
private javax.swing.JLabel jLabelTaskDescription;
|
||||||
private javax.swing.JPanel jPanelIngestSettings;
|
|
||||||
private javax.swing.JPanel jPanelNodeType;
|
|
||||||
private javax.swing.JPanel jPanelSharedConfig;
|
|
||||||
private javax.swing.JRadioButton jRadioButtonAutomated;
|
|
||||||
private javax.swing.JRadioButton jRadioButtonReview;
|
|
||||||
private javax.swing.JSeparator jSeparator1;
|
|
||||||
private javax.swing.JCheckBox masterNodeCheckBox;
|
private javax.swing.JCheckBox masterNodeCheckBox;
|
||||||
private javax.swing.ButtonGroup modeRadioButtons;
|
|
||||||
private javax.swing.JPanel nodePanel;
|
private javax.swing.JPanel nodePanel;
|
||||||
private javax.swing.JScrollPane nodeScrollPane;
|
private javax.swing.JScrollPane nodeScrollPane;
|
||||||
private javax.swing.JTextField outputPathTextField;
|
private javax.swing.JTextField outputPathTextField;
|
||||||
|
@ -23,12 +23,9 @@ AIMIngestSettingsPanel.lbSecondsBetweenJobs.toolTipText=Increase this value if d
|
|||||||
AIMIngestSettingsPanel.spSecondsBetweenJobs.toolTipText=Increase this value if database locks cause problems. It gives a little more time for finalizing.
|
AIMIngestSettingsPanel.spSecondsBetweenJobs.toolTipText=Increase this value if database locks cause problems. It gives a little more time for finalizing.
|
||||||
AutoIngestSettingsPanel.AdvancedAutoIngestSettingsPanel.Title=Advanced Settings
|
AutoIngestSettingsPanel.AdvancedAutoIngestSettingsPanel.Title=Advanced Settings
|
||||||
AutoIngestSettingsPanel.browseGlobalSettingsButton.text=Browse
|
AutoIngestSettingsPanel.browseGlobalSettingsButton.text=Browse
|
||||||
AutoIngestSettingsPanel.browseSharedSettingsButton.text=Browse
|
|
||||||
AutoIngestSettingsPanel.CannotAccess=Cannot access
|
AutoIngestSettingsPanel.CannotAccess=Cannot access
|
||||||
AutoIngestSettingsPanel.cbJoinAutoIngestCluster.text=Join auto ingest cluster
|
AutoIngestSettingsPanel.cbJoinAutoIngestCluster.text=Join auto ingest cluster
|
||||||
AutoIngestSettingsPanel.CheckPermissions=Check permissions.
|
AutoIngestSettingsPanel.CheckPermissions=Check permissions.
|
||||||
AutoIngestSettingsPanel.configButtonErrorTextField.text=configButtonErrorTextField
|
|
||||||
AutoIngestSettingsPanel.downloadButton.text=Download Config
|
|
||||||
AutoIngestSettingsPanel.EmptySettingsDirectory=Enter path to settings directory
|
AutoIngestSettingsPanel.EmptySettingsDirectory=Enter path to settings directory
|
||||||
AutoIngestSettingsPanel.ErrorSettingDefaultFolder=Error creating default folder
|
AutoIngestSettingsPanel.ErrorSettingDefaultFolder=Error creating default folder
|
||||||
AutoIngestSettingsPanel.FileExportRules.text=File Export Rules
|
AutoIngestSettingsPanel.FileExportRules.text=File Export Rules
|
||||||
@ -36,12 +33,8 @@ AutoIngestSettingsPanel.globalSettingsErrorTextField.text=
|
|||||||
AutoIngestSettingsPanel.globalSettingsTextField.text=
|
AutoIngestSettingsPanel.globalSettingsTextField.text=
|
||||||
AutoIngestSettingsPanel.ImageDirectoryUnspecified=Shared images folder must be set
|
AutoIngestSettingsPanel.ImageDirectoryUnspecified=Shared images folder must be set
|
||||||
AutoIngestSettingsPanel.InvalidPortNumber=Invalid port number.
|
AutoIngestSettingsPanel.InvalidPortNumber=Invalid port number.
|
||||||
AutoIngestSettingsPanel.jLabelCurrentTask.text=Current task:
|
|
||||||
AutoIngestSettingsPanel.jLabelTaskDescription.text=jLabel1
|
|
||||||
AutoIngestSettingsPanel.jPanelSharedConfig.border.title=Shared Configuration
|
|
||||||
AutoIngestSettingsPanel.jRadioButtonCopyFiles.text=File Copy mode
|
AutoIngestSettingsPanel.jRadioButtonCopyFiles.text=File Copy mode
|
||||||
AutoIngestSettingsPanel.KeywordSearchNull=Cannot find Keyword Search service
|
AutoIngestSettingsPanel.KeywordSearchNull=Cannot find Keyword Search service
|
||||||
AutoIngestSettingsPanel.masterNodeCheckBox.text=Use this node as a master node that can upload settings
|
|
||||||
AutoIngestSettingsPanel.MustRestart=Autopsy must be restarted for new configuration to take effect
|
AutoIngestSettingsPanel.MustRestart=Autopsy must be restarted for new configuration to take effect
|
||||||
AutoIngestSettingsPanel.nodePanel.TabConstraints.tabTitle=Node Configuration
|
AutoIngestSettingsPanel.nodePanel.TabConstraints.tabTitle=Node Configuration
|
||||||
AutoIngestSettingsPanel.NodeStatusLogging.text=Node Status Logging Settings
|
AutoIngestSettingsPanel.NodeStatusLogging.text=Node Status Logging Settings
|
||||||
@ -49,11 +42,7 @@ AutoIngestSettingsPanel.PathInvalid=Path is not valid
|
|||||||
AutoIngestSettingsPanel.restartRequiredLabel.text=Application restart required to take effect.
|
AutoIngestSettingsPanel.restartRequiredLabel.text=Application restart required to take effect.
|
||||||
AutoIngestSettingsPanel.restartRequiredLabel.text=Application restart required
|
AutoIngestSettingsPanel.restartRequiredLabel.text=Application restart required
|
||||||
AutoIngestSettingsPanel.ResultsDirectoryUnspecified=Shared cases folder must be set
|
AutoIngestSettingsPanel.ResultsDirectoryUnspecified=Shared cases folder must be set
|
||||||
AutoIngestSettingsPanel.sharedConfigCheckbox.text=Use shared configuration in folder:
|
|
||||||
AutoIngestSettingsPanel.sharedSettingsErrorTextField.text=globalSettingsErrorTextField
|
|
||||||
AutoIngestSettingsPanel.sharedSettingsTextField.text=
|
|
||||||
AutoIngestSettingsPanel.tbOops.text=
|
AutoIngestSettingsPanel.tbOops.text=
|
||||||
AutoIngestSettingsPanel.uploadButton.text=Save & Upload Config
|
|
||||||
AutoIngestSettingsPanel.validationErrMsg.incomplete=Fill in all values
|
AutoIngestSettingsPanel.validationErrMsg.incomplete=Fill in all values
|
||||||
AutoIngestSettingsPanel.validationErrMsg.invalidDatabasePort=Invalid database port number
|
AutoIngestSettingsPanel.validationErrMsg.invalidDatabasePort=Invalid database port number
|
||||||
AutoIngestSettingsPanel.validationErrMsg.invalidIndexingServerPort=Invalid Solr server port number
|
AutoIngestSettingsPanel.validationErrMsg.invalidIndexingServerPort=Invalid Solr server port number
|
||||||
@ -119,8 +108,16 @@ AdvancedAutoIngestSettingsPanel.lbConcurrentJobsPerCase.toolTipText_1=A soft lim
|
|||||||
AdvancedAutoIngestSettingsPanel.lbNumberOfThreads.toolTipText_1=The number of threads running file level ingest modules.
|
AdvancedAutoIngestSettingsPanel.lbNumberOfThreads.toolTipText_1=The number of threads running file level ingest modules.
|
||||||
AdvancedAutoIngestSettingsPanel.numberOfFileIngestThreadsComboBox.toolTipText=The number of threads running file level ingest modules.
|
AdvancedAutoIngestSettingsPanel.numberOfFileIngestThreadsComboBox.toolTipText=The number of threads running file level ingest modules.
|
||||||
NodeStatusLogPanel.tbDbName.toolTipText_1=Database name
|
NodeStatusLogPanel.tbDbName.toolTipText_1=Database name
|
||||||
AutoIngestSettingsPanel.jPanelNodeType.border.title=Node Type Setup
|
AutoIngestSettingsPanel.sharedSettingsTextField.text=
|
||||||
AutoIngestSettingsPanel.jLabel1.text=
|
AutoIngestSettingsPanel.sharedConfigCheckbox.text=Use shared configuration in folder:
|
||||||
|
AutoIngestSettingsPanel.configButtonErrorTextField.text=configButtonErrorTextField
|
||||||
|
AutoIngestSettingsPanel.jLabelTaskDescription.text=jLabel1
|
||||||
|
AutoIngestSettingsPanel.jLabelCurrentTask.text=Current task:
|
||||||
|
AutoIngestSettingsPanel.downloadButton.text=Download Config
|
||||||
|
AutoIngestSettingsPanel.uploadButton.text=Save & Upload Config
|
||||||
|
AutoIngestSettingsPanel.masterNodeCheckBox.text=Use this node as a master node that can upload settings
|
||||||
|
AutoIngestSettingsPanel.sharedSettingsErrorTextField.text=globalSettingsErrorTextField
|
||||||
|
AutoIngestSettingsPanel.browseSharedSettingsButton.text=Browse
|
||||||
AutoIngestSettingsPanel.jLabelInvalidResultsFolder.text=jLabelInvalidResultsFolder
|
AutoIngestSettingsPanel.jLabelInvalidResultsFolder.text=jLabelInvalidResultsFolder
|
||||||
AutoIngestSettingsPanel.jLabelInvalidImageFolder.text=jLabelInvalidImageFolder
|
AutoIngestSettingsPanel.jLabelInvalidImageFolder.text=jLabelInvalidImageFolder
|
||||||
AutoIngestSettingsPanel.browseOutputFolderButton.text=Browse
|
AutoIngestSettingsPanel.browseOutputFolderButton.text=Browse
|
||||||
@ -131,12 +128,6 @@ AutoIngestSettingsPanel.browseInputFolderButton.text=Browse
|
|||||||
AutoIngestSettingsPanel.inputPathTextField.toolTipText=Input folder for automated processing, i.e., the location where input case folders will be created for ingest by automated processing mode
|
AutoIngestSettingsPanel.inputPathTextField.toolTipText=Input folder for automated processing, i.e., the location where input case folders will be created for ingest by automated processing mode
|
||||||
AutoIngestSettingsPanel.inputPathTextField.text=
|
AutoIngestSettingsPanel.inputPathTextField.text=
|
||||||
AutoIngestSettingsPanel.jLabelSelectInputFolder.text=Select shared images folder:
|
AutoIngestSettingsPanel.jLabelSelectInputFolder.text=Select shared images folder:
|
||||||
AutoIngestSettingsPanel.jRadioButtonReview.toolTipText=Review cases created in automated processing mode
|
|
||||||
AutoIngestSettingsPanel.jRadioButtonReview.text=Examiner node
|
|
||||||
AutoIngestSettingsPanel.jRadioButtonAutomated.toolTipText=Automatically detect new data sources and create cases.
|
|
||||||
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
|
AutoIngestSettingsPanel.bnLogging.text=Node Status Logging
|
||||||
AutoIngestSettingsPanel.bnFileExport.text=File Export Settings
|
AutoIngestSettingsPanel.bnFileExport.text=File Export Settings
|
||||||
AutoIngestSettingsPanel.bnAdvancedSettings.text=Advanced Settings
|
AutoIngestSettingsPanel.bnAdvancedSettings.text=Advanced Settings
|
||||||
|
Loading…
x
Reference in New Issue
Block a user